{"version":3,"sources":["Api.js","components/Reviews/containers/ReviewsDataStore.js","components/YourBooks/YourBooks.js","components/Shelves/ShelfType.js","components/Downloads/DownloadFilters.js","components/Downloads/DownloadsCollapse.js","components/Downloads/DownloadsMenu.js","components/Downloads/Downloads.js","components/Requests/RequestFilters.js","components/Requests/RequestsCollapse.js","components/Requests/RequestsMenu.js","components/Requests/Requests.js","components/Reviews/ReviewsCollapse.js","components/Reviews/ReviewsMenu.js","components/Reviews/Reviews.js","components/Shelves/ShelvesCollapse.js","components/Shelves/ShelvesMenu.js","components/Shelves/Shelves.js","components/Requests/RequestType.js","components/Downloads/containers/DownloadsDataStore.js","components/Conversations/ConversationStatus.js","components/ReviewCopy/ProfileEditor/Form/FormContext.js","components/ReviewCopy/ProfileEditor/Form/Rows/IsAccountSearchableForNewUsersRow.js","components/ReviewCopy/ProfileEditor/Form/Inputs/SelectInput.js","components/ReviewCopy/ProfileEditor/Form/Inputs/TextInput.js","components/ReviewCopy/ProfileEditor/Form/Inputs/UneditableInput.js","components/ReviewCopy/ProfileEditor/Form/Inputs/InputByType.js","components/ReviewCopy/ProfileEditor/Form/Rows/LabelAndInputRow.js","components/ReviewCopy/ProfileEditor/Form/Rows/PostalCodeAndPhoneInputRow.js","components/ReviewCopy/ProfileEditor/Form/Rows/SocialMediaLinkInputRow.js","components/ReviewCopy/ProfileEditor/Form/Rows/RowByType.js","components/ReviewCopy/ProfileEditor/Form/Form.js","components/Titles/Sort/TitleSortAttribute.js","components/ReviewCopy/ProfileEditor/Form/InputType.js","components/Community/util.js","components/Localization/LocalizedDate.js","components/Communities/containers/communitiesDataStore.js","components/Reviews/ReviewEditor/data/UserReviewEditorProvider.js","components/Reviews/ReviewEditor/data/useRatingsEditor.js","components/Reviews/ReviewEditor/data/useEditorController.js","components/SavedFilters/Administer/OptionSelectionTypes.js","components/UI/DrawerAnchor.js","util/handlePlural.js","components/UI/LoadingSpinnerInContainer/index.tsx","components/ReviewCopy/ProfileEditor/Form/RowType.js","components/Downloads/DownloadType.js","components/Shelves/containers/ShelvesDataStore.js","components/UserPreferences.js","components/Reviews/ReviewType.js","components/UI/CommunityButton.js","components/CollaborativeLists/containers/CollaborativeListsDataStore.js","components/Layout.js","components/Errors/Forbidden.js","components/Errors/ErrorBoundary.js","components/ScrollToTop.js","components/Navigation/NavigationAnchorRoot.js","components/hooks/useActiveRoute.js","components/Navigation/NavigationAnchor.js","components/Navigation/NavigationItemsEnum.tsx","components/Navigation/LandingFooter.tsx","components/EdelweissConnect/useEdelweissConnect.js","components/EdelweissConnect/EdelweissConnectInitializer.js","components/Anonymous/PasswordReset/PasswordReset.tsx","components/Anonymous/AccountOrMembershipRequiredModal/AccountOrMembershipRequiredModal.tsx","components/Preferences/LandingPagePreference.js","assets/images/logo.png","assets/images/edelweiss-booksun.svg","assets/images/booksun.svg","components/User/NavigationAnchor.js","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationModalAnchors.tsx","components/Anonymous/AnonymousHeader/AnonymousHeader.tsx","components/UI/IconBadge.js","components/User/UserOverview.js","components/Navigation/TopMenuItems.js","components/Navigation/UserAccountAnchor.js","components/AppHeader/AppHeader.tsx","components/Localization/keys.js","components/Localization/LocalizationContainer.tsx","util/localization.util.ts","components/AppLayoutFrame.js","AppInsights.js","App.js","registerServiceWorker.js","index.js","components/CollaborativeLists/TitlesAddedSummary.js","components/CollaborativeLists/Administer/ListNotificationModalContent.js","components/CollaborativeLists/containers/CollaborativeListDataStore.js","components/Preferences/PreferenceType.js","CacheKeysEnum.ts","components/Conversations/ConversationType.js","components/hooks/useWebReaderGalleyAccess.ts","components/YourBooks/YourBooksDrawerContext.js","components/ReviewCopy/ReviewCopyActionTooltip.js","components/Preferences/containers/PreferencesDataStore.js","util/delay.js","components/SavedFilters/DrcAvailabilityTypes.js","components/Reviews/ReviewEditor/data/useShareTargets.js","components/Reviews/ReviewEditor/Share/ShareTargetCheckbox.js","components/Preferences/PreferenceName.js","components/UI/MobileDrawerHeader.js","components/Localization/withLocalize.js","components/Home/TitleScroller.js","components/SavedFilters/containers/SavedFilterDataStore.js","components/Title/TitleDetailDrawer.js","components/SavedFilters/containers/SavedFiltersDataStore.js","components/Requests/RequestStatus.js","components/Title/TitleActivitySummary.js","components/Title/TitleActivityTile.js","components/Titles/Filter/TitleFilterAttribute.js","components/Titles/Filter/TitleFilter.js","components/Titles/Search/TitleSearch.js","components/Titles/TitleListActionOptions.ts","components/Titles/TiledTitleList.js","enums/ApplicationIdentifierEnum.ts","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/AlreadyRegisteredError/AlreadyRegisteredError.tsx","components/User/enums/UserPrivilegesEnum.ts","util/gainsight.js","components/User/containers/UserDataStore.js","components/UI/LoadingSpinnerInContainer/LoadingSpinnerInContainer.tsx","components/Collections/containers/CollectionsDataStore.js","components/Preferences/LocalStorageKeys.js","enums/WindowSizeThresholdsEnum.js","components/YourBooks/YourBooksSectionHeader.js","components/ReviewCopy/ProfileEditor/Form/FormId.js","components/Reviews/ReviewEditor/UI/ReviewStepHeader.js","components/UI/ViewInListLink.js","util/getReaderHref.ts","components/ReviewCopy/GhostButton.tsx","components/ReviewCopy/RoundButton.tsx","components/Localization/hooks/useLocalizeDate.ts","components/ReviewCopy/EdelweissReaderLink.tsx","components/UI/CustomShowMoreText/CustomShowMoreText.js","components/Title/TitlePubDateType.js","components/CollaborativeLists/InputType.js","components/UI/Scroller/Scroller.js","components/UI/LoadingApp/LoadingApp.tsx","components/Conversations/containers/conversationsDataStore.js","components/SavedFilters/SavedFilterTypes.js","components/Title/hooks/useTitle.ts","components/Collections/containers/CollectionTitlesDataStore.js","paths.js","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/TermsOfService/TermsOfService.tsx","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/RegistrationFormSubmitButton/RegistrationFormSubmitButton.tsx","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/RegistrationFormItems.tsx","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/ForgotPasswordSuccessMessage/ForgotPasswordSuccessMessage.tsx","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/SignUpForm/SignUpForm.tsx","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/LogInForm/LogInForm.tsx","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/ForgotPasswordForm/ForgotPasswordForm.tsx","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/ResetPasswordForm/ResetPasswordForm.tsx","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/ResetPasswordSuccessMessage/ResetPasswordSuccessMessage.tsx","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/RegistrationForm.tsx","components/UI/Actions/CancelRequest.js","components/Reviews/ReviewEditor/data/useNominationTargets.js","components/Reviews/ReviewEditor/data/useSaveEditor.js","components/Reviews/ReviewEditor/EditorControlButtons.js","components/Reviews/ReviewEditor/Ratings/RatingSelector.js","components/Reviews/ReviewEditor/Ratings/RatingsEditor.js","components/Reviews/ReviewEditor/Review/ReviewTextEditor.js","components/Reviews/ReviewEditor/Share/ShareEditor.js","components/Reviews/ReviewEditor/UserReviewEditor.js","components/Reviews/ReviewEditor/data/useSocialNetworkShareUris.js","components/Reviews/ReviewEditor/ReviewEditorAnchor.js","components/ReviewCopy/DrmMethods.js","components/ReviewCopy/KindleDownloadMethods.js","components/ReviewCopy/RequestFormats.js","components/ReviewCopy/ReviewCopyDownloadModalAnchor.js","components/ReviewCopy/routines/doOpenReviewCopyAction.js","components/Events/util.js","components/Events/contexts/EventsDataStoreContext.tsx","components/Community/containers/CommunityReviewsDataStore.js","apiFetcher/eventsApiFetcher.js","components/UI/Scroller/ScrollerType.js","components/Reviews/ReviewEditor/data/useReviewEditor.js","components/Community/CommunityImage.js","components/Community/containers/SavedCommunityFiltersDataStore.js","components/ParseContent.tsx","components/Title/TitleImage.js","components/User/Notices/containers/NoticesDataStore.js","components/Title/UI/TitleJacketImage.js","components/SavedFilters/containers/FilterOptionsDataStore.js","components/Conversations/containers/commentsDataStore.js","components/Conversations/Comments/CommentInputFrame.js","components/Conversations/Comments/CommunityOptions.js","components/Conversations/UI/CommentAttribution.js","components/Conversations/BadgeType.js","components/Conversations/Comments/Badges.js","components/Conversations/Comments/BadgesActions.js","components/Conversations/Comments/Comment.js","components/Conversations/Comments/ParentCommentFrame.js","components/Conversations/Comments/ActionOptionsDropDown/ActionOptionsDropdown.js","components/Conversations/Comments/HeaderActionOptions/HeaderActionOptions.js","components/Conversations/Comments/Comments.js","components/Conversations/ConversationDrawer.js","components/Title/TitleAutocompleteRow.js","components/Title/TitleAutocomplete.js","components/Titles/hooks/useWebReaderProducts.ts","components/Title/TitleActionsScroller.js","components/util/makeConnectTo.js","components/Anonymous/util.ts","components/Conversations/Comments/CommentInputWithMentioning/CommentInputWithMentioning.js","components/UI/Links/CommunityGuidelines/CommunityGuidelinesLink.tsx","components/Title/UI/TitleBaseMeta.js","components/UI/Scroller/ScrollerConfigContext.js","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationEnums.ts","components/Registration/containers/RegistrationDataStore.js","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationModalLinks/RegistrationModalLinks.tsx","components/UI/ViewType.js","util/validate.js","components/Communities/NotAMemberOfAnyCommunityMessage/NotAMemberOfAnyCommunityMessage.js","components/Conversations/UI/ThreadSummary.js","components/UI/ApprovedIcon.tsx","components/Title/DrcActionDownloadOption.tsx","components/Title/DrcActionRequestOption.tsx","components/UI/Actions/EnableRequest.js","components/Reviews/ReviewEditor/Share/NominationsEditor.js","components/UI/ResponsiveDrawerAnchor.js","components/Title/util.ts","components/Title/TitleReviewBursts.js","components/Reviews/ReviewsByRating.js","components/Title/UI/BiblioImageGalleryModal/BiblioImageGalleryModal.js","components/Title/TitleBiblioDescriptionsEnum.js","components/Title/DrcActionsCard.tsx","components/Title/TitleBiblio.js","components/Title/TitleYourLists.js","components/Reviews/ReviewEditor/MuchLove/MuchLoveAnchor.js","components/Title/TitleYourReview.js","components/Reviews/ReviewEditor/NominationsEditorAnchor.js","components/Title/TitleYourNominations.js","components/Title/TitleConversations.js","components/Title/TitleDetailJacketFrame.js","components/Title/TitleDetailJacket.tsx","components/Title/TitleDetail.js","components/ReviewCopy/ProfileEditor/ProfileEditorUserAvatar.js","components/ReviewCopy/ProfileEditor/Overview/EditRoleDescription.js","components/ReviewCopy/ProfileEditor/Overview/EditRoleSummary.js","components/ReviewCopy/ProfileEditor/Overview/PersonalInfoModal/PersonalInfoModal.js","components/ReviewCopy/ProfileEditor/Overview/GeneralInfo.js","components/ReviewCopy/ProfileEditor/Overview/Overview.js","components/ReviewCopy/ProfileEditor/Links/LinksInitializer.js","components/ReviewCopy/ProfileEditor/Links/Links.js","components/ReviewCopy/ProfileEditor/ProfileEditor.js","components/ReviewCopy/ReviewCopyRequestModalAnchor.js","components/CollaborativeLists/ManageFromTitleOrList/ListAssign/ListTitleIsOnBullet.js","components/CollaborativeLists/ManageFromTitleOrList/ListAssign/ListsTitleIsOnSection.js","components/CollaborativeLists/ManageFromTitleOrList/ListAssign/ListTitle.js","components/CollaborativeLists/ManageFromTitleOrList/ListAssign/ListsTitleCouldBeOnSection.js","components/CollaborativeLists/ManageFromTitleOrList/ListAssign/CommunitiesOfListsToAddTitleTo.js","components/CollaborativeLists/ManageFromTitleOrList/ListAssign/ListAssign.js","components/CollaborativeLists/ManageFromTitleOrList/ListAssignDrawer.js","components/Titles/containers/TitlesDataStore.js","components/Titles/Export/TitleExportExcel.js","components/Titles/Export/TitleExportPowerpoint.js","components/Titles/Export/TitleExport.js","components/Reviews/ReviewHeaderUserBlurb.js","components/Reviews/ReviewHeaderTitleBlurb.js","components/Reviews/TitleReview.js","components/Shelves/Selection/ShelfSelect.js","components/Shelves/Selection/ShelfSelectDrawer.js","components/Events/enums/MyEventsFilteringEnum.ts","components/SavedFilters/PubDateFromOptions.js","components/SavedFilters/PubDateToOptions.js","components/Titles/TitleListType.js","components/Reviews/ReviewEditor/data/ShareTargetType.js","components/Title/containers/TitleDataStore.js","components/ReviewCopy/ProfileEditor/Overview/PersonalInfoModal/PersonalInfoModalInitializer.js","components/Events/contexts/EventDataStoreContext/EventDataStoreContext.tsx","components/UI/TimeStamp.js","components/UI/LoadingWrapper/LoadingWrapper.tsx","components/CollaborativeLists/VoteType.js","components/hooks/useCommunityPageParams.ts","components/Communities/CommunitiesSearch.js","components/UI/NoMatchesFoundMessage.js","components/UI/LoadingSpinner/LoadingSpinner.tsx","components/ReviewCopies/hooks/useNewReviewCopies.ts","components/Titles/hooks/useTitleConversationStatuses.ts","components/User/Notices/SubscriptionFrequencyOption.js","components/CollaborativeLists/TitleListSort.js","components/CollaborativeLists/AllowAddTitleGroup.js","components/Community/UI/BrowseFilterDisplay.js","components/Conversations/Comments/util/titleTag/regex.js","components/Conversations/Comments/TitleMentionPopover/TitleMentionPopover.js","components/Conversations/Comments/TitleMentionTag/TitleMentionTag.js","components/Conversations/Comments/ParsedComment/ParsedComment.js","components/Conversations/AddEditTopic.js","components/Reviews/Review.js","components/Folders/Catalogs/containers/CatalogFoldersDataStore.js","components/Shelves/UI/StackScrollerHorizontal.js","components/Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext.js","components/Collections/containers/CatalogDataStore.js","components/UI/Actions/BackToHomeButton.tsx","components/util/combineConnectors.js","util/index.js","components/Reviews/ReviewEditor/data/RatingType.js","components/UI/LaneContainer.js","components/Anonymous/AnonymousHeader/RegistrationModal/RegistrationModal.tsx","components/hooks/useCategoryFilters.js","components/Community/UI/SaveAndCancelButtons/SaveAndCancelButtons.js","components/Community/Administer/ActiveFilters.js","components/SavedFilters/PubDateTypes.js","components/SavedFilters/Administer/AddEditPubDateFilter.js","components/SavedFilters/Administer/StandardFilters/AddEditStandardFilters.js","components/SavedFilters/Administer/BrowseLaneType.js","components/Community/Administer/AddEditCategoryFilters.js","components/SavedFilters/Administer/AddEditDrcAvailabilityFilter.js","components/Collections/AddEditCollection.js","components/Navigation/HeaderTitleSearchAutocomplete.js","components/CollaborativeLists/Administer/AlertCandidate.js","components/CollaborativeLists/Administer/AlertMethod.js","components/CollaborativeLists/Administer/AlertType.js","components/CollaborativeLists/Administer/ManageListNotifications.js","components/UI/Actions/ArchiveRequest.js","components/UI/Actions/ReviewTitle.js","components/UI/Actions/Titles/RemoveTitleFromList.js","components/Title/TitleActions.js","components/ReviewCopy/ProfileEditor/Overview/AccountInfoModal/AccountInfoModalInitializer.js","components/ReviewCopy/ProfileEditor/Overview/AccountInfoModal/AccountInfoModal.tsx","components/Requests/containers/RequestsDataStore.js"],"names":["urlPrefix","api","process","ApiFetcher","ReviewsContext","React","createContext","useReviews","useContext","connectToReviews","makeConnectTo","ReviewsDataStore","state","reviews","selectedMenuOption","ReviewType","All","key","isLoading","getStore","refresh","refreshReviews","setSelectedMenuOption","setState","fetchReviews","reviewsFetch","promise","request","cancelableGet","then","cacheApiResponse","apiResponse","Util","reviewsDataStore","this","Provider","value","props","children","isAnonymous","userDataStore","cancel","Component","connectToUser","YourBooks","viewType","className","ViewType","Drawer","majorHeader","id","description","ShelfType","AnticipatingMild","icon","text","longText","doRenderInList","AnticipatingHigh","CurrentlyReading","FinishedReading","DidntFinish","Favorites","Clear","getDownloadedReviewedSku","downloadSkus","reviewedSkus","filter","item","includes","getDownloadedNotReviewedSku","Panel","withIsMobile","isMobile","history","useHistory","yourBooksDrawer","useYourBooksDrawer","localStorageKey","LocalStorageKeys","expandedDownloadPanels","localStorageValue","localStorage","getItem","useState","JSON","parse","Object","keys","DownloadType","map","shelf","collapsedPanels","setCollapsedPanels","isMobileSize","useEffect","setItem","stringify","downloadsDataStore","useDownloads","downloads","sku","renderPanel","skus","downloadType","filteredDownloads","length","download","doShowIfZero","style","marginLeft","header","extra","TitleScroller","titles","communityId","onClick","handleClick","ViewInListLink","selectedKey","push","close","bordered","onChange","e","defaultActiveKey","activeKeys","expandIcon","isActive","type","rotate","DownloadedNotReviewed","DownloadedReviewed","DownloadsMenu","renderMenuItem","items","Item","getSkusToRender","selectedKeys","mode","TiledTitleList","renderDownloads","Downloads","initializeSource","match","showInGrid","marginTop","LaneContainer","YourBooksSectionHeader","headerText","Fragment","LoadingSpinner","connectToDownloads","getApprovedDownloadableSku","requests","rq","status","getDeclinedSku","getPendingSku","expandedRequestsPanels","RequestType","requestsDataStore","useRequests","conversations","requestType","filteredRequests","requestSkus","ReadyToDownload","Declined","Pending","RequestsMenu","renderRequests","Requests","connectToRequests","expandedReviewsPanels","review","reviewType","filteredReviews","rv","rating","lowRating","highRating","getReviewsByRating","showAsPanel","ReviewsMenu","dontFilter","count","listKey","renderReviews","Reviews","expandedShelfPanels","shelvesDataStore","useShelves","shelves","shelfType","filteredShelves","returnFullObject","sh","getShelves","ShelvesMenu","shelfSkus","renderShelves","Shelves","DownloadsContext","DownloadsDataStore","refreshDownloads","fetchDownloads","downloadsFetch","catch","console","error","getDownloads","products","digitalCopyInfo","downloadableSkus","requestableSkus","cancelledSkus","userCommunitySummaryReviews","availableReviewCopyFormats","dci","product","pr","isRequestable","rs","isDownloadable","dl","isCancelled","cs","digitalUpdatedDate","updatedDate","reviewCopyAvailability","csr","average","toFixed","uri","images","im","ConversationStatus","active","archived","read","censored","locked","deleted","FormContext","rowOptions","formValuesById","setFormValuesById","formId","accountInfoForm","IsAccountSearchableForNewUsers","formContext","inputId","checked","target","onCheckboxChange","placement","title","content","trigger","Option","SelectInput","rowTypeData","selectData","inputType","InputType","StatesSelect","optionsUS","optionsCA","Error","getStatesSelectData","Select","getSelectData","dropdownMatchSelectWidth","newFormValuesById","FormId","AccountInfo","states_US","states_CA","onSelectChange","selectOptions","o","TextInput","UneditableInput","InputByType","LabelAndInputRow","label","isRequired","PostalCodeAndPhoneInputRow","SocialMediaLinkInputRow","getIcon","iconCssClass","RowByType","rowType","RowType","LabelAndInput","PostalCodeAndPhone","getRowByType","doShowRow","contextData","getLabelAndInputRow","getLabelAndSelectInputRow","TitleSortAttribute","Supplier","attribute","Format","Category","Series","PublishingStatus","PubDate","secondaryAttribute","Author","Pages","OnSaleDate","DigitalUpdatedDate","CommunityReviews","CommunityRating","Sequence","NetVotes","setSavedFilters","filters","Array","isArray","code","literal","isExclusion","getFilterRefinementDefinitionToSave","browseRefinements","reduce","definition","browseRefinement","typeKey","browseLaneType","BrowseLaneType","DrcAvailability","Publisher","AgeRange","Imprint","Subrights","Dewey","Lexile","Edition","replace","getRelativeTimeframeAttributes","startingRange","split","substring","endingRange","replaceExclusion","activeCategories","cat","getBrowseFiltersByType","savedFilter","addSavedFiltersToState","viewId","category","newRefinement","getDoJoinCommunityFromQueryParams","locationSearch","queryString","join","LocalizedDate","dateString","dateFormat","Date","toLocaleDateString","getCultureIndicator","country","organization","address","defaultProps","CommunitiesContext","useCommunities","connectToCommunities","CommunitiesDataStore","joinCommunityMessageTimeInSeconds","circles","communities","genreCommunities","refreshCommunities","refreshWithLoadingState","refreshCommunitiesWithLoadingState","joinCommunity","affiliationId","onSuccess","onFail","joinValidatedCommunity","leaveCommunity","leaveValidatedCommunity","getCommunityById","getCommunitiesInvitedTo","getOpenCommunities","getEligibilityForJoiningCommunity","getCommunities","createCommunity","values","deleteCommunity","updateCommunity","getGenreCommunities","fetchCommunities","communitiesFetch","a","refreshListsAndUsersJoinedCommunities","collaborativeListsDataStore","fetchJoinedCommunities","communitiesIdentifier","cacheGenreCommunitiesApiResponse","finally","buildCommunities","sort","b","lastViewedDate","affiliationCircles","affiliations","lastViewedByAffiliationId","userAvatarsByAppUserId","usersById","organizationsById","groupValidationItems","affiliation","owners","ownerIds","ownerId","getOwnerInfo","orgID","toLowerCase","gvi","br","owner","appUserId","userAvatar","name","getCommunityTypeString","typeNumber","displayUnableToLoadCommunityMessage","community","member","displayAlreadyMemberOfCommunityMessage","typeString","joinCommunityUrl","fetch","method","headers","credentials","response","displaySuccessfullyJoinedCommunityMessage","displayUnableToJoinCommunityMessage","displayErrorJoiningCommunityMessage","fetchJoinedCommunitiesWithNoLoadingState","post","isFunction","onCatch","endpoint","refreshCollabLists","del","put","translate","warn","communityName","success","openCommunities","communitiesInvitedTo","isCommunity","comm","Number","some","isGenreCommunity","getGenreCommunitiesForAnonUser","getMyOpenCommunities","c","find","result","supportEmail","communitiesDataStore","connectors","connectToCollaborativeLists","combineConnectors","withLocalize","UserReviewEditorContext","reviewEditor","ratingsEditor","editorController","shareTargetsEditor","nominationTargetsEditor","useUserReviewEditor","UserReviewEditorProvider","onUpdate","shareTargetsOptions","useReviewEditor","setIsLoading","assessments","setAssessments","buildAssessments","fetchAssessments","revoke","getRating","ratingType","get","update","assessment","nextAssessments","exists","getAll","clear","useRatingsEditor","useShareTargets","useNominationTargets","ratingsDataEditor","user","useUser","didSaveEditor","setDidSaveEditor","getRatingValue","toString","RatingType","none","buildAssessmentValuesString","fallbackOverallRating","overallValue","overall","getValueForOverallRating","writingQuality","imageIllustrationQuality","characterDevelopment","couldntPutItDownness","intellectualDepth","originality","buildShareTargetsString","shareTargetsToSave","ShareTargetType","publisher","buildAssessmentDataToSave","assessmentIds","assessmentIdValues","encodeURI","getEditorValue","share","submitTo","getSelectedNominationAffiliationIds","saveAsDefault","buildColleaguesAndFriendsShareExceptionBody","shareTypesToExclude","friends","communityType","colleagues","CommunityShareTypes","SaveAsDefault","buildGeneralCommunitiesShareExceptionBody","AffiliationShareTypes","getCommunityIdsToNotShareWith","targetGroupId","isUnchecked","save","options","doSubmitSharingState","userId","genreCommunityIdsToJoin","getChosenGenreCommunityIdsToJoin","joinRequests","Promise","all","CommunityType","NominationAction","NOMINATIONS_SUBMITTED","removeReviewAssessment","url","remove","doesReviewExist","didSave","reset","useEditorController","providerValue","OptionSelectionTypes","select","alpha","DrawerAnchor","isDrawerVisible","showDrawer","closeDrawer","onCloseHook","ControlledDrawerAnchor","width","height","closable","overflowY","renderDrawerContent","parentStyle","drawerClassName","getInstance","isVisible","open","renderAnchorChild","classNames","bodyStyle","backgroundColor","border","onClose","visible","destroyOnClose","handlePlural","num","doExcludeNumber","n","base","toLocaleString","SocialLinkMediaInputRow","ShelvesContext","connectToShelves","ShelvesDataStore","refreshShelves","setShelves","fetchShelves","shelvesFetch","UserPreferencesContext","useUserPreferences","connectToUserPreferences","Consumer","userPreferences","UserPreferences","fonts","accentFontColor","reviewCopyDownloadPreferences","userAttributes","getDataStore","getFonts","getUserAttributes","getReviewCopyDownloadPreferences","saveKindlePreferences","email","kindleDownloadMethod","fetchReviewCopyDownloadPreferences","saveDrcDownloadFormatPreference","format","saveRoleSummary","roleSummaryKey","saveRoleDescription","roleDescription","saveLinks","linksValuesById","userRole","stringifiedData","json","res","didSucceed","linkValuesById","saveLinksData","fetchUserAttributes","prevprops","getUserPreferences","fetchUserPreferences","prefsResult","Rated0to2","Rated3to5","Rated6to8","Rated9to10","CommunityButton","iconClass","size","shape","CollaborativeListsContext","useCollaborativeLists","CollaborativeListsDataStore","collaborativeListsData","refreshCollaborativeLists","getListDetails","listId","changeFilingStatus","listFiling","fetchCollaborativeListsByCommunity","createList","updateList","bypassLoad","fetchCollaborativeLists","collaborativeListsFetch","getCollaborativeListsData","r","mostRecentDates","mostRecentAdds","concat","mostRecentVotes","mostRecentComments","createdDate","listItems","mergeImagesIntoProducts","coverListItems","productImageUrisBySku","lists","buildListsByMostRecent","mostRecent","list","getListSummaries","votes","li","image","quantities","comments","filings","mrd","qu","com","filing","fil","filingMessage","Layout","displayName","Forbidden","margin","showError","msg","errorMessage","ErrorTypes","ErrorBoundary","hasError","Fallback","FallbackComponent","hasForbiddenError","message","defaultFallback","info","paddingTop","paddingLeft","doLocalize","BackToHomeButton","withRouter","unlisten","listen","window","scrollTo","NavigationAnchorRoot","routes","alsoMatches","routesToCheck","pathname","useLocation","isAnyRouteActive","indexOf","isAnyMatchActive","i","test","route","useActiveRoute","baseName","isHelpIcon","FreshworksWidget","undefined","NavigationAnchor","linkTo","getNavigationAnchorIcon","to","LinkName","NavigationItemsEnum","HomeNav","SearchNav","YourBooksNav","FeedbackNav","LandingFooter","renderNavItem","navItem","cdnUrl","EdelweissConnectInitializer","eConnect","setConnect","initConnectOnLoad","initConnect","useScript","src","onload","loading","useEdelweissConnect","propTypes","PropTypes","func","oneOfType","arrayOf","node","PasswordReset","userToken","RegistrationTypes","ResetPassword","AccountOrMembershipRequiredModal","useAccountOrMembershipRequiredModalContext","setIsVisible","setType","handleCancel","delay","SignUp","location","returnHome","href","paths","home","onCancel","footer","maskStyle","zIndex","wrapClassName","getAccountRequiredModalTitle","RegistrationModalLinks","color","data","LandingPageCookieName","getLandingPageCookie","landingPage","hostname","hostnameComponents","domain","expirationDate","setHours","getHours","expires","sameSite","LandingPagePreference","Community","EdelweissPlus","withCookies","cookies","usePreferences","addUserPreferenceWithPromise","getPreference","useTranslate","PreferenceType","PreferenceName","preferred","setEPlusAsLandingPageAndRedirectToEPlus","landingPageCookie","cookie","set","ePlusIconMobile","booksun","alt","ePlusIconDesktop","edelweissBooksun","WindowSizeThresholdsEnum","Medium","Logo","logo","RegistrationModalAnchors","LogIn","AnonymousHeader","currentType","RegistrationModal","modalTitle","getRegistrationModalTitle","IconBadge","left","closePopover","fontSize","logoutUrl","getLogoutUrl","reload","userInitials","initials","avatarUri","avatarSizeClass","UserAvatar","large","fontWeight","city","stateProvince","classification","profileEditor","communicationSettings","TopMenuItems","NotificationsNav","notifications","badgeLeft","yourBooks","connectToNotices","noticesDataStore","isUserOverviewPopoverVisible","setIsUserOverviewPopoverVisible","renderItem","topMenuItem","renderTopMenuItem","badge","renderYourBookDrawerAnchor","textDecoration","drawer","YourBooksDrawerContext","notices","nt","marginRight","HeaderTitleSearchAutocomplete","onVisibleChange","AppHeader","hasLandingPageSetToEPlus","useCookies","setCookie","isHomePage","mainPage","handleRedirectBasedOnPreference","landingPagePreference","localizationKeys","coreKeys","LocalizationContainer","userCultureName","region","cultureName","userCultureNameOrDefault","en","localizationData","useLocalization","cultureCodes","getCultureCodesFromUrlSearchParams","cultureCodeQueryParamName","search","localizationApiUrl","LoadingApp","MainPage","lazy","Search","CommunityHomeWithEventDetails","CommunityHome","ConversationHome","ReviewCopies","BuzzTitleList","SavedFilter","Catalog","CollaborativeListRoute","CollaborativeListsHome","CommunicationSettings","ProfileEditor","CollaborativeListsIFrameHome","Notices","Help","Outreach","MainPageWithTitleDetails","RegistrationPage","AppLayoutFrame","showHelpDeskWidget","hideHelpDeskWidget","showOrHideHelpDeskWidget","renderLayoutFrame","isIFrame","PreferencesDataStore","SavedFiltersDataStore","CatalogFoldersDataStore","CollectionsDataStore","RequestsDataStore","NoticesDataStore","FilterOptionsDataStore","CommunityReviewsDataStore","maxTitles","AccountOrMembershipRequiredModalContext","renderIFrameAppLayoutFrame","renderAppLayoutFrame","path","collaborativeListsIFrameHome","component","communicationSettingsIFrameHome","renderAnonymousLayoutFrame","doShowLoginToEdelweissPlusPrompt","renderLoginToEdelweissPlusPrompt","renderAnonymousAppLayoutFrame","startsWith","exact","resetPassword","render","decodeURIComponent","params","communityHomeWithEventDetails","reviewCopies","buzzLists","catalog","collaborativeList","collaborativeLists","help","outreach","register","ReactGA","page","pageview","fallback","reactPlugin","ReactPlugin","instrumentationKey","isAppInsightsEnabled","REACT_APP_IS_APP_INSIGHTS_ENABLED","browserHistory","createBrowserHistory","basename","ApplicationInsights","config","extensions","disableFetchTracking","extensionConfig","identifier","loadAppInsights","initializeAppInsights","queryClient","QueryClient","defaultOptions","queries","staleTime","App","initialize","AppInsightsContext","client","UserDataStore","initialIsOpen","setQueryDefaults","CacheKeysEnum","SkusAvailableInWebReader","Boolean","baseUrl","document","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","navigator","serviceWorker","ready","registration","unregister","TitlesAddedSummary","alreadyAddedIsbns","successfullyAddedIsbns","invalidIsbns","summaryBullet","titlesByType","handlePluralIsbnTitle","listLength","isVerticalView","ManageListNotifications","CollaborativeListContext","useCollaborativeList","connectToCollaborativeList","CollaborativeListDataStore","collaborativeListData","alerts","areAlertsLoading","areConversationsLoading","refreshCollaborativeList","createNewQuantity","updateQuantity","deleteQuantity","createNewComment","updateComment","deleteComment","commentId","addTitle","removeTitle","archiveList","createNewAlert","alert","deleteAlert","alertId","updateAlert","alertAttribute","addTitlesToList","postTitlesToList","fetchConversationStatus","toggleVote","vote","voteType","handleNotificationPrompt","listsUserHasSeenNotificationModalFor","setItemsToLS","itemsToSave","hasSeenThisListModal","showListNotificationModal","okText","onOk","refreshAlerts","fetchCollaborativeList","collaborativeListFetch","getCollaborativeListData","getSkus","mergeData","x","y","xSequence","sequence","ySequence","TitleListSort","Votes","netVotes","logHistory","getLogHistory","forEach","VoteType","upVote","UpVote","DownVote","comment","Comment","quantity","Quantity","Add","fetchAlerts","alertsFetch","cacheAlertsApiResponse","checkIfTitleOnList","renderTitleAlreadyOnListAlert","renderTitleAlert","collabList","getTitlesSummary","isbns","currentTitleIsbns","ean","partition","isIsbn","validIsbns","isbn","isbnsToAdd","titlesToPost","titleIsbn","renderTitlesAddedSummaryModal","cancelablePost","cacheConversationApiResponse","conversationsFetch","collaborativeListDataStore","author","call","onSuccessOrFail","isRemovingExistingVote","err","log","communityApp","prerelease","reader","ConversationType","Topic","Title","doOfferCandidate","useWebReaderGalleyAccess","useQuery","fetchSkusAvailableInWebReader","skusAvailableInWebReader","hasWebReaderGalleyAccess","YourBooksDrawer","renderDate","dateName","areSameDay","date1","date2","moment","startOf","isSame","ReviewCopyActionTooltip","PreferencesContext","connectToPreferences","preferences","refreshPreferences","addUserPreference","toggleIsLoading","fetchPreferences","preferencesFetch","userPreferenceDtoFilters","preferencesDataStore","p","t","v","resolve","setTimeout","bind","cancelableDelay","makeCancelable","DrcAvailabilityTypes","notSet","Action","ADD_SHARE_TARGET","REMOVE_SHARE_TARGET","CLEAR_SHARE_TARGETS","doIncludeGenreCommunities","joinedCommunitiesData","setJoinedCommunitiesData","communityTargetIds","setCommunityTargetIds","genreCommunityOptions","setGenreCommunityOptions","isLoadingGenreCommunityOptions","setIsLoadingGenreCommunityOptions","doShareWithPublisher","setDoShareWithPublisher","doShareWithFriends","setDoShareWithFriends","doShareWithColleagues","setDoShareWithColleagues","getAsArray","memberOfCommunities","doesAssessmentExist","currentReview","fetchUsersJoinedCommunities","communitiesData","fetchReviewSharingState","usersCommunities","assessmentDoesExist","affiliationShareExceptions","ePlusGroupShareExceptions","externalSubmissionGroupInclusions","eplusGroupTypesToExcludeFromShare","groupExclusion","communityIdsToExclude","fetchGenreCommunities","communityIdsToExcludeFromSharing","getActiveGenreCommunityIds","genreCommunityOptionIds","ids","assessmentExists","activateAllShareTargetOptions","removeAllShareTargetOptions","addShareTarget","action","shareTarget","payload","generalCommunity","genreCommunity","removeShareTarget","isShareTypeAllActive","reduceState","isActiveShareTarget","communityIdsToNotShareWith","joinedCommunityIds","userIsMember","isGenreCommunityOption","getGenreCommunityOptionsState","ShareTargetCheckbox","isDisabled","marginBottom","evt","isChecked","addAction","removeAction","disabled","showUnreadNotifications","monthsToAutoArchiveNotifications","collaborativeListsToShow","communityReviewsToShow","showSmallJacket","conversationsToShow","conversationStatusView","collapsedLanes","laneStructure","MobileDrawerHeader","WrappedComponent","showMore","renderTitleWithDrawer","renderOneTitle","idx","conversation","con","conversationId","unread","totalTitles","boxShadow","minWidth","getConversationName","renderLaneHeader","subHeader","getLanePrimaryHeader","paddingRight","headerValue","paddingBottom","renderTitles","SavedFilterContext","useSavedFilter","SavedFilterDataStore","titleCount","newId","refreshSavedFilter","refreshTitleCount","updateFilters","saveFilters","resetNewId","fetchSavedFilter","savedFilterFetch","cacheFullApiResponse","getSavedFilter","fetchTitleCount","userBrowseView","savedFilters","savedFiltersDataStore","thisSavedFilter","sf","tsf","filtersByType","savedFilterDataStore","getCount","connectToSavedFilters","TitleDetailDrawer","renderTitleDetail","isDataFetching","LoadingSpinnerSize","SavedFiltersContext","useSavedFilters","refreshSavedFilters","deleteSavedFilter","saveNewFilter","doNotRefresh","fetchSavedFilters","savedFiltersFetch","getSavedFilters","localeCompare","body","messagesFetch","cancelableCall","RequestStatus","pending","approved","rejected","approvedArchived","cancelled","TitleActivitySummary","renderPopoverText","submittedDate","statusChangedDate","downloadDate","TitleActivityTile","selectTitle","isSelected","logSelectedTitles","selectedTitles","titleListType","TitleJacketImage","TitleReviewBursts","markupNotes","ParseContent","TitleBaseMeta","TitleActions","positionBottomRight","TitleFilterAttribute","PubDateRange","ReviewCopyAvailability","MarkupNoteIndicator","TitleFilter","renderTitleFilter","filterListKey","filteredTitleCount","filteredTitles","activeFilterSections","activeFilters","padding","renderFilterSection","addFilter","filterResults","removeFilter","af","titleFilterAttribute","afs","filteredList","checkedChildren","unCheckedChildren","defaultChecked","toggleFilterSection","renderFilterOptions","originalFilteredList","sorted","getInitialState","hits","relevantActiveFilters","j","sendData","applyFilters","newActiveFilterSections","TitleSearch","onSearchInputChange","searchResults","sendSearchData","TitleListActionOptions","AddToCollaborativeList","ListAssignDrawer","AddToShelf","ShelfSelectDrawer","ShareOrExport","TitleExport","ClearTitleSelections","setFilterListKey","isFiltered","setIsFiltered","filteredSkus","setFilteredSkus","isSearchOn","setIsSearchOn","searchedSkus","setSearchedSkus","titleSortAttribute","setTitleSortAttribute","isSortDirectionAsc","setIsSortDirectionAsc","selectedSkus","setSelectedSkus","renderedSkus","defaultSortAttribute","getSearchData","searchCharacters","getData","renderTitle","skuDownload","dn","skuReview","skuTitle","sk","renderActionHeader","renderActionTitleText","overlay","renderActionOptions","block","renderFilterHeader","unfilteredTitles","filterText","unfilteredProducts","renderActionOptionLabel","option","renderOneActionOption","actionSkus","clearTitleSelections","renderSortHeader","actionTitleText","renderSortOptions","changeSortDirection","sortOptions","TitleListType","unshift","CollaborativeList","getSortOptions","sortOption","renderSortOption","thisTitleSortAttribute","changeSortAttribute","sortNumber","sortString","sortDate","s","newSelectedSkus","filteredProducts","renderFilterLink","dataSource","renderedTitles","sortedTitles","sortTitles","pagination","simple","pageSize","position","hideOnSinglePage","ApplicationIdentifierEnum","AlreadyRegisteredError","display","REACT_APP_DO_SHOW_PASSWORD_EDITOR","UserPrivilegesEnum","_px_generateRandomId","getTime","howMany","random","_px_getRandomInt","_px_generateRandom","_px_isAnonymous","cookieParts","cname","ca","charAt","_px_getCookie","min","max","Math","ceil","floor","setGainsightCookieForAnonUser","aptrinsic","daysToLive","encodeURIComponent","PX_ANON_COOKIE","PX_ANON_COOKIE_DAYS_TO_LIVE","setGainsightIdentity","userAccountDetails","subscriberType","userID","firstName","lastName","signUpDate","role","countryName","buildUserIdentity","orgName","UserContext","joinedCommunities","sessionId","isAuthorizedToPostEventsToGenreCommunities","isUnsubscribedFromFriendEmail","createSessionId","formattedDate","postUsageTracking","siteArea","usageInfo","siteContext","prefillUserInHelpDesk","saveUser","userValuesById","saveOrganization","orgValuesById","signUpUser","formValues","handleError","logInUser","sendForgotPasswordEmail","handleSuccess","changeUserPassword","fetchUser","getUserId","isUserCommunityOwner","getUserCulture","setUnsubscribedFromFriendEmailPreference","isUnsubscribed","withLoadingState","cacheFetchJoinedCommunities","joinedCommunitiesFetch","getUnsubscribedFromFriendEmailPreferenceUrl","fetchUnsubscribedFromFriendEmailPreference","cacheUnsubscribedFromFriendEmailPreference","unsubscribedFromFriendEmailPreferenceFetch","setErrorState","callback","jsonRes","cacheFetchUserResponse","runAnonUserEvents","userLanguage","language","setUser","fetchRegion","getSubscriberType","getIsAuthorizedToPostEventsToGenreCommunities","privileges","IsOrgAuthorizedToPostEventsToGenreCommunities","IsUserAuthorizedToPostEventsToGenreCommunities","accountType","accountTypes","selectedAccountType","profiles","loadingDisplay","password","pword","URLSearchParams","sendForgotEmailRequest","applicationIdentifier","LoadingSpinnerInContainer","medium","CollectionsContext","connectToCollections","collections","areCollectionsLoading","refreshCollections","addTitlesToCollection","catalogId","createNewCollection","editExistingCollection","fieldName","fetchCollections","collectionsFetch","collection","collectionTitlesDataStore","collectionsDataStore","connectToCollectionTitles","collaborativeListViewPreference","Small","PersonalInfo","Links","viewBox","focusable","fill","d","getReaderHref","GhostButton","RoundButton","isActiveWebReaderProduct","useWebReaderProducts","ApprovedIcon","opacity","defaultFormat","year","month","day","buttonType","localizeDate","jsonDate","useLocalizeDate","webReaderProducts","getTooltipTitle","lastAccessedDate","digitalCreatedDate","percentRead","getPercentOfBookCompleted","renderButton","getLastAccessedDate","renderButtonWithTooltip","CustomShowMoreText","lines","iconChevronDown","iconChevronUp","expanded","keepNewLines","more","less","TitlePubDateType","class","monthsFrom","monthsTo","singularKey","pluralKey","ScrollerConfigConsumer","ScrollerConfigContext","CustomButtonGroup","mobile","next","previous","rest","carouselState","totalItems","currentSlide","itemWidth","visibility","Scroller","getScrollerType","scrollerConfig","scrollerType","desktop","renderSimplebarScroller","getSimplebarProps","forceVisible","autoHide","renderCarouselScroller","arrows","responsive","tablet","breakpoint","slidesToSlide","customTransition","draggable","renderButtonGroupOutside","customButtonGroup","swipeable","partialVisible","getChildren","Children","toArray","ScrollerType","carousel","titleKey","titleData","xlarge","ConversationsContext","useConversations","connectToConversations","ConversationsDataStore","noLoading","refreshConversations","createNewTopic","editExistingTopic","topicId","fetchConversations","getConversations","mostRecentComment","topics","threads","conversationType","topic","tp","parseInt","topicDTO","initialComment","conversationsDataStore","prevProps","SavedFilterTypes","group","useTitle","withFullDetails","setTitle","getJacketCoverImage","fetchTitle","urlForFullDetails","CollectionTitlesContext","CollectionTitlesDataStore","collectionTitles","areCollectionTitlesLoading","refreshCollectionTitles","fetchCollectionTitles","collectionTitlesFetch","allAffiliatedCollaborativeListsHome","reviewsCreatedDateMaxDaysBack","TermsOfService","rel","RegistrationFormSubmitButton","form","getFieldDecorator","getFieldsValue","getFieldsError","isSignUpModal","isForgotPasswordModal","ForgotPassword","isResetPasswordModal","formErrors","isButtonDisabled","entries","val","submitButtonClass","rules","required","sitekey","valuePropName","initialValue","htmlType","RegistrationFormItems","GetNameItem","nameType","fieldDecorator","whitespace","Email","Password","ConfirmPassword","dependencies","CurrentPassword","Country","fieldType","KeepMeUpdated","ForgotPasswordSuccessMessage","CheckCircleTwoTone","SignUpForm","getFormItem","registrationDataStore","useRegistration","countriesByCountryId","countries","NameTypes","FirstName","LastName","LogInForm","ForgotPasswordForm","ResetPasswordForm","ResetPasswordSuccessMessage","WrappedRegistrationForm","create","setError","showKeepMeUpdatedCheckbox","setShowKeepMeUpdatedCheckbox","successMessage","setSuccessMessage","getFieldValue","validateFields","resetFields","pathForRedirect","handleStopLoading","performRegistrationAction","fieldsValue","recaptchaResponse","recaptcha","doSendEmail","countryCode","country_code","doKeepMeUpdated","do_keep_me_updated","getSignUpValues","verifyPassword","confirm_pword","token","currentPassword","current_pword","getChangePasswordValues","getItemRules","validator","_","reject","getConfirmPasswordRules","passwordCharacterRequirement","RegExp","pattern","getPasswordRules","substituteLabel","itemVisibility","getFieldInput","handleSelectChange","countryCodeValue","isPasswordItem","isConfirmPasswordItem","isCurrentPasswordItem","isSelectFieldType","isCheckboxFieldType","element","small","onSubmit","preventDefault","hideRequiredMark","getFormFields","CancelRequestLabel","CancelRequest","cancelRequest","bottom","right","confirm","getTooltip","nominationOptions","setNominationOptions","alreadyNominatedIds","setAlreadyNominatedIds","nominationTargetIds","setNominationTargetIds","fetchNominatedCallback","useCallback","nominated","nominatedIds","submissionListId","fetchSubmittableNominationSubmissionLists","nomination","getOptions","idsToAdd","targetId","isNominationSubmitted","getAlreadySubmittedCount","useSaveEditor","handleSave","productName","isRemoving","setIsRemoving","handleRemove","renderCancelButton","getCannotSaveEditorMessage","canSaveEditor","editorCanBeSaved","justifyContent","cancelText","onConfirm","renderSaveButton","handleRenderSaveButton","RatingSelector","alignItems","placeholder","defaultValue","assignDefaultValue","optionAsValue","RatingsEditor","getAssessment","ReviewStepHeader","TextArea","ReviewTextEditor","rows","SET_EDITOR_VALUE","currentTarget","CommunityGuidelinesLink","didEdit","RESET_EDITOR_VALUE","ShareEditor","genreCommunitiesState","UserReviewEditorUnmount","isNominating","setIsNominating","isLoadingSave","socialNetwork","twitter","setTwitter","facebook","setFacebook","fetchSocialNetworkShareUri","setSocialNetwork","sn","fetchFacebookShareUri","fetchTwitterShareUri","useSocialNetworkShareUris","renderSocialNetworkShareButton","handleNominationSave","NominationsEditor","subTitle","ReviewEditorAnchor","ResponsiveDrawerAnchor","drmMethods","kindleDownloadMethods","requestFormats","ReviewCopyDownloadModalAnchor","steps","unknown","selectFormat","kindleInfo","kindleOverview","standardOverview","audioOverview","audioDownload","externalUrlOverview","isModalOpen","changeKindleEmailModalOpen","currentStep","selectedFormat","selectedKindleDownloadMethod","kindleEmail","kindleEmailLocked","hasInitialKindleEmail","doSaveAsDefaultFormat","sending","failure","tooltipPlacement","getModalTitle","getModalBodyStyle","getModalButtons","renderModalContents","infoModalVisible","renderInfoModalContents","accountOrMembershipRequiredModalContext","openModal","preferredFormat","availableFormats","getAvailableFormats","f","hasPdfFormat","getFormatName","getAudioZipFormatInfo","getAudioChaptersFormatInfo","getFormatInfo","getFormatResourceId","resourceId","getFormatDrmMethod","drmMethod","isOpenDrmMethod","getTitle","getSku","getTitleName","getTitleUri","hasMultipleFormatsAvailable","hasFormat","hasEPubFormat","hasKindleFormat","hasMobiFormat","hasExternalUrlFormat","hasAudioZipFormat","hasAudioChaptersFormat","hasMp3Format","hadDigitalFormat","hasAudioFormat","getFormatDescription","renderInfoSendingModalContents","renderInfoSuccessModalContents","renderInfoFailureModalContents","getBackButton","step","handleBackButton","getContinueButton","handleSubmitButton","getSubmitButton","getEdelweissReaderLink","EdelweissReaderLink","buttons","goToStep","submitSelectFormat","submitKindleInfo","submitKindleDownload","submitStandardDownload","goToAudioDownloadStep","openExternalDrcUrl","resourceUri","goToKindleInfoStep","goToStandardOverviewStep","goToAudioOverviewStep","goToSelectFormatStep","goToKindleOverviewStep","renderKindleDownloadMethod","renderSelectFormatOption","renderSelectFormatStep","Group","renderKindleEmail","renderKindleDownloadMethodOptions","renderKindleInfoStep","renderSelectedFormat","formatName","renderKindleOverviewStep","renderOpenDrmStandardOverviewStep","renderExpirationDate","drcExpirationDate","drcExpirationDays","renderAdobeDrmStandardOverviewStep","renderStandardOverviewStep","renderAudioOverview","renderAudioChapterDownloadOption","chapter","fileSize","renderAudioChaptersDownloadOptions","audioChapterUrlByChapter","audioChapterFileSizeByChapter","renderAudioZipDownloadOption","audioZipUrl","audioZipFileSize","renderAudioDownload","formats","zipFormatInfo","chaptersFormatInfo","renderExternalUrlStep","getKindleDownloadMethod","doAllowOpenOnMount","doOpenReviewCopyAction","deactivateAutoOpenReviewCopyAction","connectToAccountOrMembershipRequiredModalContext","URL","hash","searchParams","isDateInPast","date","convertTimeToUtc","time","timeZone","timeToFormat","dateToFormat","getFullYear","getMonth","getDate","hours","minutes","getMinutes","dateInTimezoneSpecified","tz","utc","transformFileToBase64","file","FileReader","readAsDataURL","onerror","getEventOrgImageUrl","event","orgImageUri","eventsOrganization","imageUri","initialStoreValue","upcomingEvents","pastEvents","refreshWithoutLoadingState","filterEventsByCommunityIds","buildEvent","eventInitialState","getMyEvents","sortEventsInAscendingOrderByStartTime","EventsContext","useEventsDataStore","eventsRequestInitialValue","EventsDataStoreProvider","isNonMember","showAnonOrNonmemberView","eventsWithJoinedCommunities","setEventsWithJoinedCommunities","eventsWithGenreCommunities","setEventsWithGenreCommunities","ownedEvents","setOwnedEvents","events","endTime","reverse","eventsWithJoinedCommunitiesRequest","ref","useRef","setEvents","eventsWithGenreCommunitiesRequest","ownedEventsRequest","requestsToMake","fetchEvents","current","eventsApi","allSettled","responses","index","handleEventsResponse","formatAndSortEvents","reason","venue","links","eventsToSave","formattedEvents","eventsToSort","startTime","communityIds","filterType","MyEventsFilteringEnum","Upcoming","Past","CommunityReviewsContext","useCommunityReviews","connectToCommunityReviews","refreshCommunityReviews","fetchCommunityReviews","communityReviewsFetch","communityIdentifier","communityReviewsDataStore","simpleBar","CLEAR_CURRENT_REVIEW","SET_HAS_EXISTING_REVIEW","hasExistingReview","setHasExistingReview","initialEmptyReviewState","abstract","assessmentId","overallAssessment","titleName","setReview","editor","setEditor","fetchReview","getSavedValue","default","hasExistingAssessment","CommunityImage","dimensions","logoUri","renderLogo","renderDimensions","noImageFontSize","objectFit","childGroupId","parentGroupId","SavedCommunityFiltersContext","SavedCommunityFiltersDataStore","isOnDrawer","savedCommunityFilters","setSavedCommunityFilters","setCommunity","doesHaveEdits","isMounted","fetchSavedCommunityFilters","saveSavedCommunityFilters","grouped","groupBy","fetchCommunityDetails","communityDetails","communityViewId","communityRequest","refreshFilters","processBrowseRefinements","groupBrowseViewDTO","groupId","savedCommunityFiltersData","useSavedCommunityFilters","DOMPurify","sanitize","TitleImage","NoticesContext","subscriptionFrequency","isSubscriptionFrequencyLoading","refreshNotices","changeStatus","noticeId","changeSubscriptionPreference","subscriptionFrequencyOption","fetchNotices","noticesFetch","getNotices","userNotices","notice","source","getSourceInfo","sourceAppUserId","fetchSubscriptionPreference","cacheSubscriptionApiResponse","subscriptionPreferencesFetch","frequency","SubscriptionFrequencyOption","never","doNotPadRight","getTitleJacketUri","top","maxWidth","FilterOptionsContext","useFilterOptions","filterOptions","fetchFilterOptions","filterOptionsFetch","optionSelectionType","sortByFirstLetter","ar","sortedFormats","isNaN","buildAndSortKeys","isNumber","toUpperCase","filterOptionsDataStore","CommentsContext","useComments","CommentsDataStore","scrollOnUpdate","refreshComments","toggleBadge","badgeType","commentDTO","isReply","changeConversationStatus","getScrollOnUpdate","changeCommentStatus","fetchComments","commentsFetch","getThreads","badges","thread","getComments","parentCommentId","threadComments","badgesWithNames","getBadgesWithNames","bad","userName","badgeDTO","titleDataStore","conversationDTO","commentsDataStore","connectToTitle","CommentInputFrame","parentComment","childCount","threadCount","isEditingExistingNote","toggleEditMode","isEditingNote","setIsEditingNote","setText","renderInput","placeholderText","isReadyToSave","inputClassName","CommentInputWithMentioning","onChangeEvent","saveComment","leaveEditMode","newComment","handleGoToEditMode","commentFooterClass","renderCommentFooter","CommunityOptions","threadsByCommunityId","goToCommunity","communityCount","renderCommunityOption","getCommunityName","ThreadSummary","doIncludeCommunities","communitiesWithoutThreads","NotAMemberOfAnyCommunityMessage","renderCommunitiesWithoutThreads","CommentAttribution","TimeStamp","timeStamp","BadgeType","ThumbsUp","Love","ThumbsDown","Laugh","Badges","getNames","theseBadges","renderBadge","BadgeActions","isOwner","isInEditMode","setIsInEditMode","toggleDeleteNote","commentStatus","renderDeletedMessage","ParsedComment","commentText","renderActiveMessage","ParentCommentFrame","refreshAfterViewing","markAsRead","useCommunityPageParams","useNewReviewCopies","refetchTitleConversationStatuses","useTitleConversationStatuses","NewReviewCopyConvoStatuses","refetch","renderAvatar","renderUserAvatar","renderDeletedAvatar","childComments","borderBottom","ActionOptionsDropdown","unarchiveButton","archiveButton","markUnreadButton","startConvoInOtherCommunitiesButton","menuItems","doShow","menuItem","menu","HeaderActionOptions","communitiesWithThreads","goToCommunityOptions","handleChangeStatus","readConversationActionButtons","renderStartConvoInOtherCommunities","conversationAmount","isDesktop","Comments","selectedCommunityId","setSelectedCommunityId","overrideDefault","setOverrideDefault","setStatus","maxThoughts","setMaxThoughts","messagesEnd","createRef","scrollToBottom","scrollIntoView","behavior","passedCommunityId","renderThread","addEditTopicIcon","AddEditTopic","renderTopicTitleAndActions","typeLabel","textToTruncate","threadCommunityId","communityThreads","th","renderCommentsHeader","float","results","TitleAutocompleteRow","overflow","lineHeight","supplier","pubDate","TitleAutocomplete","getURLForOptions","userInput","onSelectHook","autocompleteState","selectedId","onSelectOption","LoadingWrapper","xssmall","optionIdName","optionDisplayNameKey","canShowSuccess","hasSearchIcon","getOptionLabel","renderTitleOption","inputRequiredFeedback","isClearable","autoFocus","initialState","activeProducts","expiredProducts","lastReadPositionBySku","WebReaderDrcProducts","fetchWebReaderProducts","webReaderDrcProducts","hasLastReadPosition","getActive","getExpired","skuOrEan","isExpired","created","percentOfBookCompleted","drcProducts","eans","getEans","field","TitleActionsScroller","doAllowOpenReviewCopyActionOnMount","Context","nameOfDataStore","mapStoreToProps","dataStore","storeProps","fallbackProps","isMustHaveAccountModal","isOnModal","isTagging","setIsTagging","plainText","setPlainText","mentions","setMentions","textInput","setTextInput","setTextValue","insertTitleIntoComment","caretIndex","titleTag","commentWithTitle","insertionIndex","mention","indicesToAddForMarkup","getTitleTagInsertionIndex","slice","autocompleteClasses","destroyTooltipOnHide","overlayClassName","instance","selectionStart","selectedDisplayName","textToSave","focus","newValue","allMentions","inputRef","disableLink","series","formattedPrices","pages","measurements","ScrollerConfigProvider","RegistrationContext","RegistrationDataStore","refreshCountries","fetchCountries","countriesFetch","cacheFetchCountries","isLogInModal","getLinkLabel","Page","isbnToValidate","ISBN","isValid","replies","DrcActionDownloadOption","thisDownload","req","DrcActionRequestOption","thisRequest","EnableRequestLabel","EnableRequest","enableRequest","nominationOption","isSubmitted","jacketCover","ReviewsByRating","Review","getReviewExpandables","reviewsByRating","getReviewHeader","rev","totalReviews","percent","getHeader","averageRating","dataRetrieved","areReviewsLoading","fontStyle","interiors","startIndex","isFullScreen","setIsFullScreen","interior","defaultImgAlt","thumbnailAlt","caption","originalAlt","thumbnail","original","fullscreen","mask","onScreenChange","isFullScreenGallery","additionalClass","TitleBiblioDescriptionsEnum","summary","LocalizeId","authorBio","marketingPlans","keySellingPoints","quotes","DrcActionsCard","getDownloadOptionLabel","drcRequest","getRequestOptionLabel","titleBiblioDescriptionsKeys","TitleBiblio","galleryModal","renderShareTitleButton","renderShareTitleContent","overlayStyle","origin","clipboard","writeText","renderExportTitleInfoButton","showBiblioImageGalleyModal","hideBiblioImageGalleryModal","getPanels","titleBiblioDescriptionsKey","descriptions","isProductDataLoading","isCollaborativeListDataLoading","availableReviewCopyFormat","hasInteriors","accordion","getInteriorsPanel","TitleYourLists","isCollectionDataLoading","getShelfDisplay","selectedShelf","renderShelfDisplay","cl","hasFlaggedTitle","MuchLoveAnchor","clickedHeartStyle","unclickedHeartStyle","handleSubmit","muchLoveRatingHeart","noRatingHeart","ratingHeart","getRatingHeart","TitleYourReview","isReviewDataLoading","refreshReview","refreshReviewInfo","renderCommunityButton","renderMuchLoveAnchor","TitleReview","SubmitNominationsButton","isSaving","setIsSaving","NominationsEditorAnchor","renderNominationsEditor","textAlign","TitleYourNominations","nominationTargets","optionsCount","renderAnchor","submittedCount","submittedCountLabel","doRenderAnchor","renderIcon","TitleConversations","renderThreadSummary","ConversationDrawer","TitleDetailJacketFrame","titleJacketImageUri","setDoShowTitleJacket","doShowSmallJacket","setDoShowSmallJacket","prev","doShowTitleJacket","findIndex","pref","setShowSmallJacketPreference","TitleDataStore","ProfileEditorUserAvatar","EditRoleDescription","requestRole","setRoleDescription","EditRoleSummary","roleOptionKey","requestorType","roleOptions","requestorTypes","SelectOneOptionKey","roleOptionObjects","roleOptionsObjects","selectOneOption","ro","getRoleOptionObjects","selectedRoleOptionKey","selectedRoleOptionObject","roo","getSelectedRoleOptionKey","dropdownClassName","roleOptionObject","PersonalInfoModal","rowOptionsList","getRowOptionsList","initialFormValuesById","getInitialFormValuesById","warningMessage","GeneralInfo","isPersonalInfoModalVisible","setIsPersonalInfoModalVisible","isAccountInfoModalVisible","setIsAccountInfoModalVisible","getLabel","getValue","getEditIcon","onClickHandler","onPersonalInfoEditIconClick","onAccountInfoEditIconClick","fullName","canEditAccountAndPrivileges","AccountInfoModal","Overview","getSocialMediaLinkRowOptions","dataKeyByInputId","uriPersonal","uriFacebook","uriTwitter","uriLinkedIn","uriGoodreads","uriSkype","dataKey","Value","MenuKeys","defaultSelectedKey","setSelectedKey","defaultSelectedKeys","getMenuSelectionView","ReviewCopyRequestModalAnchor","requestTypes","drc","prc","evaluationPurposeTypeIds","acquisition","advocating","courseAdoption","reviewing","isEditingProfile","selectedRequestType","selectedTitleEvaluationPurposeTypeId","selectedAddressId","addressPopoverOpen","evaluationPurposePopoverOpen","department","course","enrollment","requestReason","componentDidMount","evaluationType","getDefaultAddressId","getWrapClassName","handleModalOnOk","getPopoverArrowClassName","isDrcSelected","submitDrcRequest","isPrcSelected","submitPrcRequest","getSelectedTitleEvaluationPurposeTypeId","requestProfile","getUserOverview","getRequestReason","getDepartment","getCourse","getEnrollment","getTitleSku","getPrcCourseAdoptionAttributes","attributes","isValidPrcRequest","phone","getPhoneNumber","selectedAddress","getSelectedAddress","lineItem","requestedQty","emailAddress","getUserEmailAddress","sourceUserId","requestMessage","phoneNumber","isCourseAdoptionSelected","ret","saveTitleEvaluationPurpose","handleTitleEvaluationPurposeClick","handleShipToAddressClick","renderReviewCopyProfileEditorTitle","renderReviewCopyRequestFormTitle","returnToRequest","renderUserProfileStrength","renderReviewCopyProfileEditor","renderReviewCopyRequestForm","renderUserProfile","renderTitleInfo","renderLibraryUpgradeInfo","getSelectedRequestType","isLibrary","isAccountUpgradable","getAddresses","addresses","getDefaultAddress","isDefault","addressId","getUserRole","getUserAvatarUri","getNumberOfJoinedCommunities","getAccentFontColor","getSocialMediaLinksAndClassNames","socialMediaIconClassByType","getUserProfileStrength","overview","socialMediaLinks","strength","getUserProfileStrengthLocalizationAndColor","localization","renderUserOverview","renderUserRole","renderUserProfileStrengthHelpPopover","numberOfJoinedCommunities","getCheckmarkClassName","renderJoinedCommunitiesCount","renderSocialMediaLink","renderSocialMediaLinks","renderUserName","showProfileEditor","renderDigitalFormatOption","htmlFor","renderPrintFormatOption","renderTitleFormats","isPrcRequestable","renderTitleJacketCover","renderTitleName","renderTitlePublisher","renderTitleEvaluationPurposePopoverRow","evaluationTypeId","renderTitleEvaluationPurposePopover","renderTitleEvaluationPurpose","renderTitleCourseAdoptionRequestReason","renderTitleRequestReason","renderMissingInfo","renderPhoneNumber","renderShipToAddressPopoverRow","streetAddress1","postalCode","renderShipToAddressPopover","renderShipToAddress","renderPrcFields","ListTitleIsOnBullet","ListsTitleIsOnSection","getCommunity","ListTitle","isOnList","addTitles","addTitleToList","getListTitleWithDescriptionPopover","ListTitleWrapper","ListsTitleCouldBeOnSection","availableListsContainerRef","spinnerHeight","clientHeight","CommunitiesOfListsToAddTitleTo","listCommunities","listsByCommunityId","filteredCommunities","setFilteredCommunities","CommunitiesSearch","communitiesCount","renderCommunities","NoMatchesFoundMessage","ListAssign","isUserLoading","areListsLoading","getListsByCommunityId","listsWithAllowableAdds","allowAddTitleGroup","AllowAddTitleGroup","getListCommunities","communityIdsOfLists","ignorePunctuation","isMemberOfAnyCommunities","numberOfTitles","renderCollaborativeLists","TitlesContext","connectToTitles","TitlesDataStore","refreshTitles","fetchTitles","titlesFetch","titlesDataStore","TitleExportExcel","isActivated","activate","deactivate","renderCsvDownloader","filename","formatDateValue","prices","formatAsCurrency","price","number","currency","TitleExportPowerpoint","createPPT2","aspect","pptx","pptxgen","maxJacketWidth","defineSlideMaster","background","objects","rect","w","h","slideNumber","align","asp","slide","addSlide","masterName","aspectRatio","ratio","jacketHeight","jacketWidth","titleUri","proxyurl","addText","bold","breakLine","renderFrontListBackList","addImage","sizing","writeFile","showModal","renderExportInterface","renderJacketSection","renderJacket","onLoad","onImgLoad","img","offsetWidth","offsetHeight","ReviewHeaderUserBlurb","renderOrganization","renderLocation","ReviewHeaderTitleBlurb","formatDescription","getReviewAndFooterText","renderReviewText","renderCreated","flexGrow","weekday","renderHeader","ShelfSelect","processStackClick","selectedStacks","thisStack","changeState","stackType","toggleShelf","addToCollection","removeFromCollection","thisShelf","theseSkus","refreshCollectionData","AddEditCollection","StackScrollerHorizontal","allowMultipleSelections","renderShelfSelect","PubDateFromOptions","PubDateToOptions","Shelf","Buzz","TitleContext","communityReviews","refreshTitle","refreshCollaborativeListData","getName","titleFetch","fetchCollaborativeListData","cacheCollaborativeListApiResponse","fetchCollectionData","collectionFetch","cacheCollectionApiResponse","cacheCommunityReviewsApiResponse","orgId","hasReviewText","cacheApiReviewResponse","reviewFetch","cacheConversationsApiResponse","doNotLoad","account","EventActionType","ofInterestToList","ownerAppUserId","sessionParentEventId","EventDataStoreContext","dispatch","getSkusAsList","getCommunitiesAsList","formatOfInterestToList","resetState","eventId","reducer","AddOrUpdateEvent","AddSkuToEvent","isSkuUnique","RemoveSkuFromEvent","ResetState","eventRequestInitialValue","EventDataStoreProvider","fetchEvent","interestKeys","interestKey","useEventDataStore","ConversationTime","dateNowEST","getDateAndMonth","localizedTimeStamp","dt","today","now","yesterday","diffYears","setDate","ltsDayStamp","toLocaleTimeString","hour","minute","formatDate","hourDifference","dt2","dt1","diff","abs","round","diff_hours","activityTime","localTime","convertToLocalTime","wrapperClassName","spinning","indicator","downVote","useRouteMatch","string","int","parseCommunityId","isCommunityHubPage","desktopWidth","mobileWidth","setValue","allowClear","initialReviewCopiesData","useReviewCopies","numberOfRows","NewReviewCopies","refetchOnMount","isFetching","fetchReviewCopies","reviewCopiesResponse","transformReviewCopiesData","cacheKey","daily","weekly","monthly","Admins","None","BrowseFilterDisplay","includeBullet","isEditable","changeExclusion","titleTagRegExGlobal","titleTagRegExGrouped","TitleMentionPopover","parsedIsbn","jacketCoverImage","jacketCoverImageUri","TitleMentionTag","popoverPlacement","parsedTitle","isValidIsbn","parseAndValidateTitleTag","titleTagAnchor","titleTagAnchorWithPopover","mentionPopoverPlacement","toTruncate","parsedCommentRef","displayShowMore","setDisplayShowMore","isExpanded","setIsExpanded","isTruncated","scrollHeight","titleTags","splitComment","showMoreButton","getComponentDecorator","subStr","componentDecorator","CollectionCreateForm","onCreate","layout","resetForm","formRef","handleCreate","saveFormRef","handleChange","handleStartNewClick","wrappedComponentRef","productImageUri","CatalogFoldersContext","useCatalogFolders","connectToCatalogFolders","catalogFoldersData","refreshCatalogFolders","saveCatalogFolders","commaSeparatedFolders","fetchCatalogFolders","catalogFoldersFetch","createTreeObject","tree","folderMap","catalogIdsByFolder","folder","primaryNode","catalogs","catalogID","childNode","folders","catalogFoldersDataStore","renderDivider","renderCollections","renderStack","renderShelfBookstop","selectedStack","getIsSelected","doHideStack","clickStack","st","removeStack","addStack","newSelectedStacks","toggleShelfForSingleSku","doHideDivider","setPathForRedirect","CatalogContext","connectToCatalog","CatalogDataStore","catalogData","getCatalog","refreshCatalog","deleteCollection","resequenceCollection","removeTitlesFromCollection","fetchCatalog","catalogFetch","catalogStore","connect","sourceArray","property","accumulator","nextItemInSourceArray","valueAtProperty","createTitleObject","requestablePrcSkus","sharedMarkupNotes","pubDatePeriod","getPubDatePeriod","markupNoteIndicator","pubDatePeriodDisplay","she","titlePubDate","listType","lowEnd","setMonth","highEnd","backgroundClass","extraFooter","useCategoryFilters","categoryFilters","setCategoryFilters","fetchCategoryFilters","SaveAndCancelButtons","onSave","ActiveFilters","PubDateTypes","frontlist","backlist","relativeTimeframe","absoluteTimeframe","RangePicker","selectedPubDateType","setSelectedPubDateType","setStartingRange","setEndingRange","startingDate","setStartingDate","endingDate","setEndingDate","getSavedPubDateType","onPubDateTypeChange","pubDateFilter","getCodeAttributeToSave","getFormattedDate","relativeTimeFrameAttributes","dateSplit","onStartingRangeChange","onEndingRangeChange","pubDateType","Button","getSelectionArea","AddEditStandardFilters","savedFilterType","filterKeyToDisplay","setFilterKeyToDisplay","setActiveCategories","filterSortButtons","savedCommunityFiltersDataStore","allSavedFilters","ff","sortFilters","dataset","ageRangeToAdd","ac","isNotUsed","newActiveCategories","sec","buttonText","filterToAdd","headerLocalizationId","addEditFiltersComponent","AddEditPubDateFilter","labelInValue","dropdownStyle","maxHeight","treeData","treeDataSimpleMode","selectedDrcAvailabilityType","setSelectedDrcAvailabilityType","getSavedDrcAvailabilityType","onDrcAvailabilityTypeChange","drcAvailabilityFilter","drcAvailabilityType","Pos","doHide","drawerVisible","openTitleDrawer","headStyle","AlertCandidate","labelId","JustThoseUserHasTouched","AlertMethod","Notification","Text","AlertType","AddOrRemoved","Voted","Commented","getActiveSwitch","alertType","toggleAlert","getNotificationTypeSelect","selectValue","alertMethod","companyName","getQualifierSelect","alertCandidate","getAlertTypeRow","al","getAlertByType","getVerticalViewAlertTypeRow","getHorizontalViewAlertTypeRow","newAlert","getAlertTypeRows","ArchiveRequest","archiveRequest","ReviewTitle","renderReviewTitleButton","RemoveTitleFromList","removeFromList","_this","doNotShowSelect","removeFromCollaborativeList","valueChanged","setValueChanged","isChangedSelected","setIsChangeSelected","displaySelected","changeTo","renderSelect","getStatesSelectRowOptions","getPostalCodeAndPhoneRowOptions","getIsAccountSearchableRowOptions","org","getLabelAndSelectInputRowOptions","getLabelAndInputRowOptions","accountName","address1","address2","streetAddress2","stateCA","stateId","stateUS","zip","primaryPhone","isAccountSearchable","isSearchable","orgType","warning","RequestsContext","refreshRequests","fetchRequests","requestsFetch"],"mappings":"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AqBC,GAC5CqF,EAAU9D,EAAO1Y,KAAM0Y,EAAOrxB,MAAOqxB,EAAOhR,eAG7C4U,EACC7D,IAAsBb,GAAsBE,cAG1CwE,GAA4BG,IAC/BlK,OAAO4D,SAASE,KAAhB,UAA0BlxB,gCAI5B,OACC,sBAAK4C,UAAU,aAAf,UACC,cAAC,GAAD,IACA,cAAC,GAAD,Q,sJC6jBY80B,GAnoBO,uBAClBC,MADkB,CAErB,gCACA,gCACA,4BACA,eACA,iBACA,eACA,UACA,SACA,uBACA,uBACA,qCACA,UACA,sCACA,iCACA,sCACA,kCACA,4BACA,0BACA,yCACA,MACA,WACA,yBACA,UACA,cACA,wBACA,oBACA,YACA,aACA,MACA,aACA,aACA,0BACA,qBACA,mCACA,UACA,UACA,8CACA,iDACA,gCACA,eACA,oBACA,SACA,yBACA,wBACA,eACA,UACA,OACA,WACA,OACA,gBACA,cACA,gCACA,0BACA,uBACA,OACA,sBACA,SACA,iBACA,WACA,uBACA,WACA,uBACA,kBACA,SACA,0BACA,gBACA,cACA,iBACA,eACA,sBACA,UACA,OACA,yBACA,gCACA,kCACA,kBACA,sBACA,2CACA,mCACA,gCACA,qBACA,sBACA,4BACA,cACA,UACA,WACA,yBACA,+BACA,yBACA,0CACA,cACA,qBACA,6BACA,iBACA,sCACA,8CACA,oCACA,uBACA,gBACA,2BACA,oBACA,kBACA,mBACA,oBACA,YACA,iDACA,wBACA,WACA,eACA,gBACA,UACA,SACA,qBACA,4BACA,eACA,oBACA,qBACA,uBACA,sBACA,SACA,wBACA,mCACA,qDACA,mBACA,oEACA,mDACA,qDACA,0BACA,qDACA,mBACA,OACA,eACA,SACA,2CACA,mBACA,eACA,aACA,eACA,0BACA,sBACA,cACA,oBACA,QACA,0CACA,UACA,uBACA,iCACA,OACA,oBACA,eACA,kBACA,kBACA,iBACA,mBACA,qBACA,WACA,WACA,YACA,QACA,6BACA,wBACA,oBACA,+BACA,mBACA,iBACA,0BACA,2BACA,yBACA,qBACA,qBACA,aACA,uBACA,oBACA,2BACA,2BACA,+BACA,uBACA,qBACA,qBACA,kCACA,wBACA,oBACA,cACA,0BACA,eACA,iBACA,cACA,qBACA,OACA,sBACA,UACA,qCACA,gBACA,8BACA,8BACA,yBACA,yBACA,uBACA,WACA,yBACA,gBACA,0CACA,wCACA,0CACA,mCACA,qBACA,oCACA,gCACA,4BACA,QACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,qBACA,cACA,eACA,aACA,0BACA,wBACA,0BACA,cACA,wBACA,0CACA,YACA,SACA,sBACA,iBACA,UACA,cACA,kBACA,WACA,kBACA,kBACA,SACA,mBACA,wCACA,aACA,6BACA,kBACA,qBACA,iBACA,SACA,YACA,YACA,4CACA,+BACA,yBACA,+CACA,oBACA,aACA,kBACA,OACA,wBACA,mCACA,uCACA,+BACA,iCACA,+BACA,kCACA,qCACA,sCACA,gCACA,OACA,qDACA,sDACA,+BACA,sCACA,kBACA,iBACA,sBACA,kBACA,UACA,YACA,oBACA,sBACA,uCACA,cACA,eACA,iCACA,UACA,oBACA,OACA,8BACA,6BACA,iDACA,iBACA,OACA,SACA,qBACA,kCACA,uBACA,0BACA,qCACA,oCACA,sCACA,oCACA,0BACA,qBACA,8BACA,+BACA,gBACA,kBACA,YACA,mBACA,aACA,OACA,qBACA,SACA,aACA,6BACA,oCACA,wBACA,8BACA,cACA,gBACA,uBACA,cACA,yBACA,wBACA,eACA,wBACA,yBACA,WACA,qCACA,SACA,0BACA,4BACA,uBACA,cACA,kBACA,gBACA,YACA,WACA,OACA,oCACA,wBACA,iBACA,iBACA,8DACA,uCACA,kBACA,oCACA,YACA,OACA,YACA,uBACA,eACA,oBACA,iCACA,wBACA,OACA,gCACA,cACA,cACA,uBACA,wCACA,qBACA,qBACA,kCACA,mBACA,cACA,oBACA,6CACA,qCACA,YACA,KACA,OACA,4BACA,gCACA,UACA,gBACA,eACA,gBACA,gBACA,gBACA,gBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,kBACA,wCACA,KACA,YACA,cACA,cACA,sBACA,sBACA,UACA,4CACA,oBACA,qBACA,yBACA,yBACA,oBACA,oBACA,4BACA,WACA,yBACA,aACA,OACA,6BACA,uBACA,eACA,QACA,MACA,MACA,SACA,+BACA,oCACA,2CACA,+BACA,8BACA,kCACA,qCACA,gCACA,4BACA,uCACA,sCACA,oCACA,0BACA,gBACA,mBACA,yCACA,iBACA,SACA,eACA,QACA,QACA,iBACA,kBACA,+BACA,mBACA,wBACA,kBACA,WACA,sBACA,kBACA,UACA,YACA,wBACA,YACA,MACA,MACA,YACA,aACA,WACA,SACA,mCACA,cACA,+BACA,cACA,SACA,cACA,mBACA,YACA,qBACA,gBACA,iBACA,yBACA,cACA,oBACA,+BACA,wCACA,wBACA,sCACA,2BACA,cACA,iBACA,yBACA,qBACA,eACA,eACA,aACA,aACA,wBACA,OACA,eACA,gBACA,sBACA,yBACA,oBACA,SACA,8BACA,+BACA,iCACA,aACA,UACA,UACA,WACA,kBACA,kBACA,2BACA,YACA,YACA,4BACA,mCACA,UACA,kDACA,UACA,YACA,oBACA,WACA,0CACA,yBACA,aACA,QACA,cACA,iBACA,SACA,yBACA,6BACA,yBACA,SACA,wBACA,YACA,UACA,gBACA,mBACA,2EACA,oDACA,2BACA,6BACA,+DACA,8CACA,uCACA,YACA,oCACA,oBACA,eACA,eACA,QACA,uBACA,mDACA,oBACA,SACA,YACA,mBACA,UACA,mBACA,oCACA,YACA,iDACA,gBACA,QACA,mEACA,8BACA,iCACA,sEACA,+EACA,KACA,iBACA,kBACA,WACA,WACA,yBACA,eACA,SACA,iBACA,iEACA,sDACA,4BACA,eACA,SACA,UACA,8CACA,gBACA,4BACA,gBACA,yBACA,aACA,yBACA,YACA,oBACA,UACA,uCACA,QACA,6CACA,kBACA,YACA,UACA,QACA,oCACA,mBACA,YACA,UACA,WACA,WA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","file":"static/js/main.eb2826e8.chunk.js","sourcesContent":["import { ApiFetcher } from 'api-fetcher-treeline/dist';\r\n\r\nconst setupApiFetcher = urlPrefix => {\r\n\tconst api = new ApiFetcher(urlPrefix);\r\n\r\n\treturn api;\r\n};\r\n\r\nconst api = setupApiFetcher(`${process.env.REACT_APP_API_URL}`);\r\n\r\nexport default api;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport * as Util from '../../../util';\r\nimport ReviewType from '../ReviewType';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\n\r\nconst ReviewsContext = React.createContext();\r\n\r\nconst name = 'reviewsDataStore';\r\n\r\nexport const useReviews = () => React.useContext(ReviewsContext);\r\n\r\nexport const connectToReviews = makeConnectTo(ReviewsContext, name);\r\nclass ReviewsDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\treviews: [],\r\n\t\tselectedMenuOption: ReviewType.All.key,\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst reviewsDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(reviewsDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { isAnonymous } = this.props.userDataStore;\r\n\t\tif (!isAnonymous()) {\r\n\t\t\tthis.fetchReviews();\r\n\t\t} else {\r\n\t\t\tthis.setState({ isLoading: false });\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.reviewsFetch && this.reviewsFetch.cancel) {\r\n\t\t\tthis.reviewsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshReviews(),\r\n\t\tsetSelectedMenuOption: selectedMenuOption =>\r\n\t\t\tthis.setSelectedMenuOption(selectedMenuOption),\r\n\t});\r\n\r\n\trefreshReviews = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchReviews();\r\n\t\treturn this.reviewsFetch.promise;\r\n\t};\r\n\r\n\tfetchReviews = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/me/reviews`);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.reviewsFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst reviews = apiResponse && Util.createTitleObject(apiResponse);\r\n\t\tthis.setState({ reviews, isLoading: false });\r\n\t};\r\n\r\n\tsetSelectedMenuOption = selectedMenuOption => {\r\n\t\tthis.setState({ selectedMenuOption });\r\n\t};\r\n}\r\n\r\nexport default connectToUser(ReviewsDataStore);\r\n","import React from 'react';\r\nimport Downloads from '../Downloads/Downloads';\r\nimport Requests from '../Requests/Requests';\r\nimport Reviews from '../Reviews/Reviews';\r\nimport Shelves from '../Shelves/Shelves';\r\nimport ViewType from '../UI/ViewType';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport './yourBooks.less';\r\nimport PropTypes from 'prop-types';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nYourBooks.propTypes = {\r\n\tviewType: PropTypes.string,\r\n};\r\n\r\nexport default function YourBooks({ viewType }) {\r\n\treturn (\r\n\t\t\r\n\t\t\t}\r\n\t\t\t\tdescription={}\r\n\t\t\t/>\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n","const ShelfType = {\r\n\tAnticipatingMild: {\r\n\t\tkey: 'AnticipatingMild',\r\n\t\ticon: 'icon-expected-icon',\r\n\t\ttext: 'Anticipating',\r\n\t\tlongText: 'Anticipating',\r\n\t\tdoRenderInList: true,\r\n\t},\r\n\tAnticipatingHigh: {\r\n\t\tkey: 'AnticipatingHigh',\r\n\t\ticon: 'icon-urgent-expected-icon',\r\n\t\ttext: 'Anticipating+',\r\n\t\tlongText: 'Highly Anticipating',\r\n\t\tdoRenderInList: true,\r\n\t},\r\n\tCurrentlyReading: {\r\n\t\tkey: 'CurrentlyReading',\r\n\t\ticon: 'icon-read-icon',\r\n\t\ttext: 'Reading',\r\n\t\tlongText: 'Currently Reading',\r\n\t\tdoRenderInList: true,\r\n\t},\r\n\tFinishedReading: {\r\n\t\tkey: 'FinishedReading',\r\n\t\ticon: 'icon-add-to-working-list-icon',\r\n\t\ttext: 'Finished',\r\n\t\tlongText: 'Finished',\r\n\t\tdoRenderInList: true,\r\n\t},\r\n\tDidntFinish: {\r\n\t\tkey: 'DidntFinish',\r\n\t\ticon: 'icon-close-icon',\r\n\t\ttext: 'DNF',\r\n\t\tlongText: 'Did Not Finish',\r\n\t\tdoRenderInList: true,\r\n\t},\r\n\tFavorites: {\r\n\t\tkey: 'Favorites',\r\n\t\ticon: 'icon-rating-inactive-icon',\r\n\t\ttext: 'Favorite',\r\n\t\tlongText: 'Favorite!',\r\n\t\tdoRenderInList: true,\r\n\t},\r\n\tClear: {\r\n\t\tkey: 'Clear',\r\n\t\ticon: 'icon-rating-inactive-icon',\r\n\t\ttext: 'Clear',\r\n\t},\r\n};\r\n\r\nexport default ShelfType;\r\n","export function getDownloadedReviewedSku(downloadSkus, reviewedSkus) {\r\n\treturn (\r\n\t\treviewedSkus &&\r\n\t\tdownloadSkus &&\r\n\t\tdownloadSkus.filter(item => reviewedSkus.includes(item))\r\n\t);\r\n}\r\n\r\nexport function getDownloadedNotReviewedSku(downloadSkus, reviewedSkus) {\r\n\tif (downloadSkus && !reviewedSkus) {\r\n\t\treturn downloadSkus;\r\n\t} else {\r\n\t\treturn (\r\n\t\t\treviewedSkus &&\r\n\t\t\tdownloadSkus &&\r\n\t\t\tdownloadSkus.filter(item => !reviewedSkus.includes(item))\r\n\t\t);\r\n\t}\r\n}\r\n","import { Collapse, Icon } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport TitleScroller from '../Home/TitleScroller';\r\nimport { useReviews } from '../Reviews/containers/ReviewsDataStore';\r\nimport ViewInListLink from '../UI/ViewInListLink';\r\nimport { useDownloads } from './containers/DownloadsDataStore';\r\nimport DownloadType from './DownloadType';\r\nimport { useHistory } from 'react-router-dom';\r\nimport {\r\n\tgetDownloadedNotReviewedSku,\r\n\tgetDownloadedReviewedSku,\r\n} from './DownloadFilters';\r\nimport LocalStorageKeys from '../Preferences/LocalStorageKeys';\r\nimport { useYourBooksDrawer } from '../YourBooks/YourBooksDrawerContext';\r\n\r\nconst Panel = Collapse.Panel;\r\n\r\nDownloadsCollapse.propTypes = {\r\n\tisMobile: PropTypes.func,\r\n};\r\n\r\nfunction DownloadsCollapse({ isMobile }) {\r\n\tconst history = useHistory();\r\n\tconst yourBooksDrawer = useYourBooksDrawer();\r\n\r\n\tconst localStorageKey = LocalStorageKeys.expandedDownloadPanels;\r\n\tconst localStorageValue = localStorage.getItem(localStorageKey);\r\n\r\n\tconst getDownloadKeys = () => {\r\n\t\treturn Object.keys(DownloadType).map(shelf => {\r\n\t\t\treturn DownloadType[shelf].key;\r\n\t\t});\r\n\t};\r\n\r\n\tconst [collapsedPanels, setCollapsedPanels] = React.useState(\r\n\t\tlocalStorageValue ? JSON.parse(localStorageValue) : getDownloadKeys(),\r\n\t);\r\n\tconst isMobileSize = isMobile();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(collapsedPanels));\r\n\t}, [collapsedPanels]);\r\n\r\n\tconst downloadsDataStore = useDownloads();\r\n\tconst { isLoading, downloads } = downloadsDataStore.state;\r\n\r\n\tconst reviewsDataStore = useReviews();\r\n\tconst { reviews } = reviewsDataStore.state;\r\n\r\n\tconst downloadSkus = downloads.map(item => item.sku);\r\n\r\n\tconst reviewedSkus = reviews && reviews.map(item => item.sku);\r\n\r\n\tconst renderPanel = (skus, downloadType) => {\r\n\t\tconst filteredDownloads =\r\n\t\t\tskus &&\r\n\t\t\tskus.length > 0 &&\r\n\t\t\tdownloads.filter(function(download) {\r\n\t\t\t\treturn skus.includes(download.sku);\r\n\t\t\t});\r\n\t\treturn (\r\n\t\t\t((skus && skus.length > 0) || downloadType.doShowIfZero) && (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
handleClick(downloadType.key)}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tconst handleClick = selectedKey => {\r\n\t\tdownloadsDataStore.setSelectedMenuOption(selectedKey);\r\n\t\thistory.push('/downloads');\r\n\t\tyourBooksDrawer && yourBooksDrawer.close();\r\n\t};\r\n\r\n\tconst logChange = e => {\r\n\t\tsetCollapsedPanels(e);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{downloads && downloads.length > 0 ? (\r\n\t\t\t\t (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}>\r\n\t\t\t\t\t{renderPanel(\r\n\t\t\t\t\t\tgetDownloadedNotReviewedSku(downloadSkus, reviewedSkus),\r\n\t\t\t\t\t\tDownloadType.DownloadedNotReviewed,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{renderPanel(\r\n\t\t\t\t\t\tgetDownloadedReviewedSku(downloadSkus, reviewedSkus),\r\n\t\t\t\t\t\tDownloadType.DownloadedReviewed,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\t\t\t) : (\r\n\t\t\t\t
\r\n\t\t\t\t\tTitles you download will show up here\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(DownloadsCollapse);\r\n","import { Icon, Menu } from 'antd';\r\nimport React from 'react';\r\nimport { useReviews } from '../Reviews/containers/ReviewsDataStore';\r\nimport TiledTitleList from '../Titles/TiledTitleList';\r\nimport { useDownloads } from './containers/DownloadsDataStore';\r\nimport DownloadType from './DownloadType';\r\nimport {\r\n\tgetDownloadedReviewedSku,\r\n\tgetDownloadedNotReviewedSku,\r\n} from './DownloadFilters';\r\n\r\nexport default function DownloadsMenu() {\r\n\tconst downloadsDataStore = useDownloads();\r\n\tconst { downloads, selectedMenuOption } = downloadsDataStore.state;\r\n\r\n\tconst handleClick = e => {\r\n\t\tdownloadsDataStore.setSelectedMenuOption(e.key);\r\n\t};\r\n\r\n\tconst downloadSkus = downloads.map(item => item.sku);\r\n\r\n\tconst reviewsDataStore = useReviews();\r\n\tconst { reviews } = reviewsDataStore.state;\r\n\tconst reviewedSkus = reviews && reviews.map(item => item.sku);\r\n\r\n\tconst renderDownloads = isLoading => {\r\n\t\tconst skus = getSkusToRender();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderMenuItem = (items, downloadType) => {\r\n\t\treturn (\r\n\t\t\t((items && items.length > 0) || downloadType.doShowIfZero) && (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{items.length} {downloadType.text}\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tconst getSkusToRender = () => {\r\n\t\tswitch (selectedMenuOption) {\r\n\t\t\tcase DownloadType.DownloadedNotReviewed.key:\r\n\t\t\t\treturn getDownloadedNotReviewedSku(downloadSkus, reviewedSkus);\r\n\t\t\tcase DownloadType.DownloadedReviewed.key:\r\n\t\t\t\treturn getDownloadedReviewedSku(downloadSkus, reviewedSkus);\r\n\t\t\tcase DownloadType.All.key:\r\n\t\t\t\treturn downloadSkus;\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{renderMenuItem(downloadSkus.length, DownloadType.All)}\r\n\t\t\t\t\t{renderMenuItem(\r\n\t\t\t\t\t\tgetDownloadedNotReviewedSku(downloadSkus, reviewedSkus),\r\n\t\t\t\t\t\tDownloadType.DownloadedNotReviewed,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{renderMenuItem(\r\n\t\t\t\t\t\tgetDownloadedReviewedSku(downloadSkus, reviewedSkus),\r\n\t\t\t\t\t\tDownloadType.DownloadedReviewed,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t{renderDownloads()}\r\n\t\t\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport LoadingSpinner from '../UI/LoadingSpinner';\r\nimport YourBooksSectionHeader from '../YourBooks/YourBooksSectionHeader';\r\nimport { connectToDownloads } from './containers/DownloadsDataStore';\r\nimport DownloadsCollapse from './DownloadsCollapse';\r\nimport DownloadsMenu from './DownloadsMenu';\r\n\r\nexport class Downloads extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tshowInGrid: false,\r\n\t\t};\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.initializeSource();\r\n\t}\r\n\r\n\tinitializeSource = () => {\r\n\t\tif (this.props.match) {\r\n\t\t\tthis.setState({ showInGrid: true });\r\n\t\t}\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { showInGrid } = this.state;\r\n\t\tconst { isLoading } = this.props.downloadsDataStore.state;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{!isLoading ? (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{showInGrid ? (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\nexport default connectToDownloads(Downloads);\r\n","export function getApprovedDownloadableSku(requests, downloadSkus) {\r\n\tvar approvedRequestSkus = requests\r\n\t\t.filter(rq => rq.status === 'approved')\r\n\t\t.map(item => item.sku);\r\n\r\n\treturn approvedRequestSkus.filter(function(item) {\r\n\t\treturn !downloadSkus.includes(item);\r\n\t});\r\n}\r\n\r\nexport function getDownloadedReviewedSku(downloadSkus, reviewedSkus) {\r\n\tvar downloadedReviewedSkus =\r\n\t\tdownloadSkus &&\r\n\t\tdownloadSkus.filter(function(item) {\r\n\t\t\treturn reviewedSkus && reviewedSkus.includes(item);\r\n\t\t});\r\n\r\n\treturn downloadedReviewedSkus || [];\r\n}\r\n\r\nexport function getDownloadedNotReviewedSku(downloadSkus, reviewedSkus) {\r\n\tvar downloadedNotReviewedSkus =\r\n\t\tdownloadSkus &&\r\n\t\tdownloadSkus.filter(function(item) {\r\n\t\t\treturn !reviewedSkus || !reviewedSkus.includes(item);\r\n\t\t});\r\n\r\n\treturn downloadedNotReviewedSkus || [];\r\n}\r\n\r\nexport function getDeclinedSku(requests) {\r\n\treturn requests\r\n\t\t.filter(rq => rq.status === 'rejected')\r\n\t\t.map(item => item.sku);\r\n}\r\n\r\nexport function getPendingSku(requests) {\r\n\treturn requests.filter(rq => !rq.status).map(item => item.sku);\r\n}\r\n","import { Collapse, Icon } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport { useDownloads } from '../Downloads/containers/DownloadsDataStore';\r\nimport TitleScroller from '../Home/TitleScroller';\r\nimport { useReviews } from '../Reviews/containers/ReviewsDataStore';\r\nimport ViewInListLink from '../UI/ViewInListLink';\r\nimport { useRequests } from './containers/RequestsDataStore';\r\nimport RequestType from './RequestType';\r\nimport { useHistory } from 'react-router-dom';\r\nimport {\r\n\tgetApprovedDownloadableSku,\r\n\tgetDownloadedReviewedSku,\r\n\tgetDownloadedNotReviewedSku,\r\n\tgetDeclinedSku,\r\n\tgetPendingSku,\r\n} from './RequestFilters';\r\nimport LocalStorageKeys from '../Preferences/LocalStorageKeys';\r\nimport { useYourBooksDrawer } from '../YourBooks/YourBooksDrawerContext';\r\n\r\nconst Panel = Collapse.Panel;\r\n\r\nRequestsCollapse.propTypes = {\r\n\tisMobile: PropTypes.func,\r\n};\r\n\r\nfunction RequestsCollapse({ isMobile }) {\r\n\tconst history = useHistory();\r\n\tconst yourBooksDrawer = useYourBooksDrawer();\r\n\r\n\tconst localStorageKey = LocalStorageKeys.expandedRequestsPanels;\r\n\tconst localStorageValue = localStorage.getItem(localStorageKey);\r\n\r\n\tconst getRequestKeys = () => {\r\n\t\treturn Object.keys(RequestType).map(request => {\r\n\t\t\treturn RequestType[request].key;\r\n\t\t});\r\n\t};\r\n\r\n\tconst [collapsedPanels, setCollapsedPanels] = React.useState(\r\n\t\tlocalStorageValue ? JSON.parse(localStorageValue) : getRequestKeys(),\r\n\t);\r\n\tconst isMobileSize = isMobile();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(collapsedPanels));\r\n\t}, [collapsedPanels]);\r\n\r\n\tconst requestsDataStore = useRequests();\r\n\tconst { isLoading, requests, conversations } = requestsDataStore.state;\r\n\r\n\tconst renderPanel = (skus = [], requestType) => {\r\n\t\tconst filteredRequests = requests.filter(request =>\r\n\t\t\tskus.includes(request.sku),\r\n\t\t);\r\n\t\treturn (\r\n\t\t\t((skus && skus.length > 0) || requestType.doShowIfZero) && (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
handleClick(requestType.key)}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tconst handleClick = selectedKey => {\r\n\t\trequestsDataStore.setSelectedMenuOption(selectedKey);\r\n\t\thistory.push('/requests');\r\n\t\tyourBooksDrawer && yourBooksDrawer.close();\r\n\t};\r\n\r\n\tconst reviewsDataStore = useReviews();\r\n\tconst { reviews } = reviewsDataStore.state;\r\n\r\n\tconst downloadsDataStore = useDownloads();\r\n\tconst { downloads } = downloadsDataStore.state;\r\n\r\n\tconst requestSkus = requests.map(item => item.sku);\r\n\r\n\tconst downloadSkus = downloads\r\n\t\t.map(item => item.sku)\r\n\t\t.filter(sku => requestSkus.includes(sku));\r\n\r\n\tconst reviewedSkus = reviews && reviews.map(item => item.sku);\r\n\r\n\tconst logChange = e => {\r\n\t\tsetCollapsedPanels(e);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{requests && requests.length > 0 ? (\r\n\t\t\t\t (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}>\r\n\t\t\t\t\t{renderPanel(\r\n\t\t\t\t\t\tgetApprovedDownloadableSku(requests, downloadSkus),\r\n\t\t\t\t\t\tRequestType.ReadyToDownload,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{renderPanel(\r\n\t\t\t\t\t\tgetDownloadedNotReviewedSku(downloadSkus, reviewedSkus),\r\n\t\t\t\t\t\tRequestType.DownloadedNotReviewed,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{renderPanel(\r\n\t\t\t\t\t\tgetDownloadedReviewedSku(downloadSkus, reviewedSkus),\r\n\t\t\t\t\t\tRequestType.DownloadedReviewed,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{renderPanel(\r\n\t\t\t\t\t\tgetDeclinedSku(requests),\r\n\t\t\t\t\t\tRequestType.Declined,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{renderPanel(getPendingSku(requests), RequestType.Pending)}\r\n\t\t\t\t\r\n\t\t\t) : (\r\n\t\t\t\t
\r\n\t\t\t\t\tReview copy requests you make will show up here\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(RequestsCollapse);\r\n","import { Icon, Menu } from 'antd';\r\nimport React from 'react';\r\nimport { useDownloads } from '../Downloads/containers/DownloadsDataStore';\r\nimport { useReviews } from '../Reviews/containers/ReviewsDataStore';\r\nimport TiledTitleList from '../Titles/TiledTitleList';\r\nimport { useRequests } from './containers/RequestsDataStore';\r\nimport {\r\n\tgetApprovedDownloadableSku,\r\n\tgetDeclinedSku,\r\n\tgetDownloadedNotReviewedSku,\r\n\tgetDownloadedReviewedSku,\r\n\tgetPendingSku,\r\n} from './RequestFilters';\r\nimport RequestType from './RequestType';\r\n\r\nexport default function RequestsMenu() {\r\n\tconst requestsDataStore = useRequests();\r\n\tconst { isLoading, requests, selectedMenuOption } = requestsDataStore.state;\r\n\r\n\tconst handleClick = e => {\r\n\t\trequestsDataStore.setSelectedMenuOption(e.key);\r\n\t};\r\n\r\n\tconst renderRequests = () => {\r\n\t\tconst skus = getSkusToRender();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderMenuItem = (items, requestType) => {\r\n\t\treturn (\r\n\t\t\t((items && items.length > 0) || requestType.doShowIfZero) && (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{items.length} {requestType.text}\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tconst reviewsDataStore = useReviews();\r\n\tconst { reviews } = reviewsDataStore.state;\r\n\r\n\tconst downloadsDataStore = useDownloads();\r\n\tconst { downloads } = downloadsDataStore.state;\r\n\r\n\tconst requestSkus = requests.map(item => item.sku);\r\n\r\n\tconst downloadSkus = downloads\r\n\t\t.map(item => item.sku)\r\n\t\t.filter(sku => requestSkus.includes(sku));\r\n\r\n\tconst reviewedSkus = reviews && reviews.map(item => item.sku);\r\n\r\n\tconst getSkusToRender = () => {\r\n\t\tswitch (selectedMenuOption) {\r\n\t\t\tcase RequestType.ReadyToDownload.key:\r\n\t\t\t\treturn getApprovedDownloadableSku(requests, downloadSkus);\r\n\t\t\tcase RequestType.DownloadedNotReviewed.key:\r\n\t\t\t\treturn getDownloadedNotReviewedSku(downloadSkus, reviewedSkus);\r\n\t\t\tcase RequestType.DownloadedReviewed.key:\r\n\t\t\t\treturn getDownloadedReviewedSku(downloadSkus, reviewedSkus);\r\n\t\t\tcase RequestType.Declined.key:\r\n\t\t\t\treturn getDeclinedSku(requests);\r\n\t\t\tcase RequestType.Pending.key:\r\n\t\t\t\treturn getPendingSku(requests);\r\n\t\t\tcase RequestType.All.key:\r\n\t\t\t\treturn requestSkus;\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{renderMenuItem(requests, RequestType.All)}\r\n\t\t\t\t\t{renderMenuItem(\r\n\t\t\t\t\t\tgetApprovedDownloadableSku(requests, downloadSkus),\r\n\t\t\t\t\t\tRequestType.ReadyToDownload,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{renderMenuItem(\r\n\t\t\t\t\t\tgetDownloadedNotReviewedSku(downloadSkus, reviewedSkus),\r\n\t\t\t\t\t\tRequestType.DownloadedNotReviewed,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{renderMenuItem(\r\n\t\t\t\t\t\tgetDownloadedReviewedSku(downloadSkus, reviewedSkus),\r\n\t\t\t\t\t\tRequestType.DownloadedReviewed,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{renderMenuItem(\r\n\t\t\t\t\t\tgetDeclinedSku(requests),\r\n\t\t\t\t\t\tRequestType.Declined,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{renderMenuItem(\r\n\t\t\t\t\t\tgetPendingSku(requests),\r\n\t\t\t\t\t\tRequestType.Pending,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t{renderRequests()}\r\n\t\t\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport LoadingSpinner from '../UI/LoadingSpinner';\r\nimport YourBooksSectionHeader from '../YourBooks/YourBooksSectionHeader';\r\nimport { connectToRequests } from './containers/RequestsDataStore';\r\nimport RequestsCollapse from './RequestsCollapse';\r\nimport RequestsMenu from './RequestsMenu';\r\n\r\nexport class Requests extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tshowInGrid: false,\r\n\t\t};\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.initializeSource();\r\n\t}\r\n\r\n\tinitializeSource = () => {\r\n\t\tif (this.props.match) {\r\n\t\t\tthis.setState({ showInGrid: true });\r\n\t\t}\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { showInGrid } = this.state;\r\n\t\tconst { isLoading } = this.props.requestsDataStore.state;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{!isLoading ? (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{showInGrid ? (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default connectToRequests(Requests);\r\n","import { Collapse, Icon } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport TitleScroller from '../Home/TitleScroller';\r\nimport ViewInListLink from '../UI/ViewInListLink';\r\nimport { useReviews } from './containers/ReviewsDataStore';\r\nimport ReviewType from './ReviewType';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport { useHistory } from 'react-router-dom';\r\nimport LocalStorageKeys from '../Preferences/LocalStorageKeys';\r\nimport { useYourBooksDrawer } from '../YourBooks/YourBooksDrawerContext';\r\n\r\nconst Panel = Collapse.Panel;\r\n\r\nReviewsCollapse.propTypes = {\r\n\tisMobile: PropTypes.func,\r\n};\r\n\r\nfunction ReviewsCollapse({ isMobile }) {\r\n\tconst history = useHistory();\r\n\tconst yourBooksDrawer = useYourBooksDrawer();\r\n\r\n\tconst localStorageKey = LocalStorageKeys.expandedReviewsPanels;\r\n\tconst localStorageValue = localStorage.getItem(localStorageKey);\r\n\r\n\tconst getReviewKeys = () => {\r\n\t\treturn Object.keys(ReviewType).map(review => {\r\n\t\t\treturn ReviewType[review].key;\r\n\t\t});\r\n\t};\r\n\r\n\tconst [collapsedPanels, setCollapsedPanels] = React.useState(\r\n\t\tlocalStorageValue ? JSON.parse(localStorageValue) : getReviewKeys(),\r\n\t);\r\n\tconst isMobileSize = isMobile();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(collapsedPanels));\r\n\t}, [collapsedPanels]);\r\n\r\n\tconst reviewsDataStore = useReviews();\r\n\tconst { isLoading, reviews } = reviewsDataStore.state;\r\n\r\n\tconst getReviewsByRating = reviewType => {\r\n\t\treturn (\r\n\t\t\treviews &&\r\n\t\t\treviews.filter(\r\n\t\t\t\trv =>\r\n\t\t\t\t\trv.rating >= reviewType.lowRating &&\r\n\t\t\t\t\trv.rating <= reviewType.highRating,\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderPanel = reviewType => {\r\n\t\tconst filteredReviews = getReviewsByRating(reviewType);\r\n\t\treturn (\r\n\t\t\treviewType.showAsPanel &&\r\n\t\t\t((filteredReviews && filteredReviews.length > 0) ||\r\n\t\t\t\treviewType.doShowIfZero) && (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
handleClick(reviewType.key)}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tconst handleClick = selectedKey => {\r\n\t\treviewsDataStore.setSelectedMenuOption(selectedKey);\r\n\t\thistory.push('/reviews');\r\n\t\tyourBooksDrawer && yourBooksDrawer.close();\r\n\t};\r\n\r\n\tconst logChange = e => {\r\n\t\tsetCollapsedPanels(e);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{reviews && reviews.length > 0 ? (\r\n\t\t\t\t (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}>\r\n\t\t\t\t\t{Object.keys(ReviewType).map(review => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\tReviewType[review].showAsPanel &&\r\n\t\t\t\t\t\t\trenderPanel(ReviewType[review])\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t\r\n\t\t\t) : (\r\n\t\t\t\t
\r\n\t\t\t\t\tReviews you write will show up here\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(ReviewsCollapse);\r\n","import { Icon, Menu } from 'antd';\r\nimport React from 'react';\r\nimport TiledTitleList from '../Titles/TiledTitleList';\r\nimport { useReviews } from './containers/ReviewsDataStore';\r\nimport ReviewType from './ReviewType';\r\n\r\nexport default function ReviewsMenu() {\r\n\tconst reviewsDataStore = useReviews();\r\n\tconst { isLoading, reviews, selectedMenuOption } = reviewsDataStore.state;\r\n\r\n\tconst renderReviews = () => {\r\n\t\tconst filteredReviews = getReviewsByRating(\r\n\t\t\tReviewType[selectedMenuOption],\r\n\t\t);\r\n\t\tvar skus = filteredReviews.map(item => item.sku);\r\n\t\treturn (\r\n\t\t\treviews && (\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderMenuItem = reviewType => {\r\n\t\tconst count = getReviewsByRating(reviewType).length;\r\n\t\treturn (\r\n\t\t\t(count > 0 || reviewType.doShowIfZero) && (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{count} {reviewType.text}\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tconst getReviewsByRating = reviewType => {\r\n\t\tvar filteredReviews = reviews;\r\n\t\tif (!reviewType.dontFilter) {\r\n\t\t\tfilteredReviews =\r\n\t\t\t\treviews &&\r\n\t\t\t\treviews.filter(\r\n\t\t\t\t\trv =>\r\n\t\t\t\t\t\trv.rating >= reviewType.lowRating &&\r\n\t\t\t\t\t\trv.rating <= reviewType.highRating,\r\n\t\t\t\t);\r\n\t\t}\r\n\t\treturn filteredReviews;\r\n\t};\r\n\r\n\tconst handleClick = e => {\r\n\t\treviewsDataStore.setSelectedMenuOption(e.key);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{Object.keys(ReviewType).map(reviewType =>\r\n\t\t\t\t\t\trenderMenuItem(ReviewType[reviewType]),\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t{renderReviews()}\r\n\t\t\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport LoadingSpinner from '../UI/LoadingSpinner';\r\nimport YourBooksSectionHeader from '../YourBooks/YourBooksSectionHeader';\r\nimport { connectToReviews } from './containers/ReviewsDataStore';\r\nimport ReviewsCollapse from './ReviewsCollapse';\r\nimport ReviewsMenu from './ReviewsMenu';\r\n\r\nexport class Reviews extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tshowInGrid: false,\r\n\t\t};\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.initializeSource();\r\n\t}\r\n\r\n\tinitializeSource = () => {\r\n\t\tif (this.props.match) {\r\n\t\t\tthis.setState({ showInGrid: true });\r\n\t\t}\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { showInGrid } = this.state;\r\n\t\tconst { isLoading } = this.props.reviewsDataStore.state;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{!isLoading ? (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{showInGrid ? (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default connectToReviews(Reviews);\r\n","import { Collapse, Icon } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport TitleScroller from '../Home/TitleScroller';\r\nimport ViewInListLink from '../UI/ViewInListLink';\r\nimport { useShelves } from './containers/ShelvesDataStore';\r\nimport ShelfType from './ShelfType';\r\nimport { useHistory } from 'react-router-dom';\r\nimport LocalStorageKeys from '../Preferences/LocalStorageKeys';\r\nimport { useYourBooksDrawer } from '../YourBooks/YourBooksDrawerContext';\r\n\r\nconst Panel = Collapse.Panel;\r\n\r\nShelvesCollapse.propTypes = {\r\n\tisMobile: PropTypes.func,\r\n};\r\n\r\nfunction ShelvesCollapse({ isMobile }) {\r\n\tconst history = useHistory();\r\n\tconst yourBooksDrawer = useYourBooksDrawer();\r\n\r\n\tconst localStorageKey = LocalStorageKeys.expandedShelfPanels;\r\n\tconst localStorageValue = localStorage.getItem(localStorageKey);\r\n\r\n\tconst getShelfKeys = () => {\r\n\t\treturn Object.keys(ShelfType).map(shelf => {\r\n\t\t\treturn ShelfType[shelf].key;\r\n\t\t});\r\n\t};\r\n\r\n\tconst [collapsedPanels, setCollapsedPanels] = React.useState(\r\n\t\tlocalStorageValue ? JSON.parse(localStorageValue) : getShelfKeys(),\r\n\t);\r\n\tconst isMobileSize = isMobile();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(collapsedPanels));\r\n\t}, [collapsedPanels]);\r\n\r\n\tconst shelvesDataStore = useShelves();\r\n\tconst { isLoading, shelves } = shelvesDataStore.state;\r\n\r\n\tconst getShelves = (shelves, shelfType, returnFullObject) => {\r\n\t\tshelves = shelves && shelves.filter(sh => sh.shelf === shelfType.key);\r\n\r\n\t\tif (!returnFullObject) {\r\n\t\t\tvar shelfSkus = shelves.map(function(item) {\r\n\t\t\t\treturn item.sku;\r\n\t\t\t});\r\n\r\n\t\t\treturn shelfSkus;\r\n\t\t} else {\r\n\t\t\treturn shelves;\r\n\t\t}\r\n\t};\r\n\r\n\tconst renderPanel = shelfType => {\r\n\t\tconst filteredShelves = getShelves(shelves, shelfType, true);\r\n\t\treturn (\r\n\t\t\tfilteredShelves &&\r\n\t\t\tfilteredShelves.length > 0 && (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
handleClick(shelfType.key)}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tconst handleClick = selectedKey => {\r\n\t\tshelvesDataStore.setSelectedMenuOption(selectedKey);\r\n\t\thistory.push('/shelves');\r\n\t\tyourBooksDrawer && yourBooksDrawer.close();\r\n\t};\r\n\r\n\tconst logChange = e => {\r\n\t\tsetCollapsedPanels(e);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{shelves && shelves.length > 0 ? (\r\n\t\t\t\t (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}>\r\n\t\t\t\t\t{Object.keys(ShelfType).map(shelf => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\tShelfType[shelf].doRenderInList &&\r\n\t\t\t\t\t\t\trenderPanel(ShelfType[shelf])\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t\r\n\t\t\t) : (\r\n\t\t\t\t
\r\n\t\t\t\t\tTitles you add to your shelves will show up here\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(ShelvesCollapse);\r\n","import { Icon, Menu } from 'antd';\r\nimport React from 'react';\r\nimport TiledTitleList from '../Titles/TiledTitleList';\r\nimport { useShelves } from './containers/ShelvesDataStore';\r\nimport ShelfType from './ShelfType';\r\n\r\nexport default function ShelvesMenu() {\r\n\tconst shelvesDataStore = useShelves();\r\n\tconst { isLoading, shelves, selectedMenuOption } = shelvesDataStore.state;\r\n\r\n\tconst renderShelves = () => {\r\n\t\tconst filteredShelves = shelves.filter(\r\n\t\t\tsh => sh.shelf === selectedMenuOption,\r\n\t\t);\r\n\t\tvar shelfSkus = shelves.map(item => item.sku);\r\n\t\treturn (\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderMenuItem = shelfType => {\r\n\t\tconst count = shelves.filter(sh => sh.shelf === shelfType.key).length;\r\n\t\treturn (\r\n\t\t\tcount > 0 && (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{count} {shelfType.text}\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tconst handleClick = e => {\r\n\t\tshelvesDataStore.setSelectedMenuOption(e.key);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{Object.keys(ShelfType).map(shelf => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\tShelfType[shelf].doRenderInList &&\r\n\t\t\t\t\t\t\trenderMenuItem(ShelfType[shelf])\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t{renderShelves()}\r\n\t\t\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport YourBooksSectionHeader from '../YourBooks/YourBooksSectionHeader';\r\nimport ShelvesCollapse from './ShelvesCollapse';\r\nimport ShelvesMenu from './ShelvesMenu';\r\n\r\nexport default class Shelves extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tshowInGrid: false,\r\n\t\t};\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.initializeSource();\r\n\t}\r\n\r\n\tinitializeSource = () => {\r\n\t\tif (this.props.match) {\r\n\t\t\tthis.setState({ showInGrid: true });\r\n\t\t}\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { showInGrid } = this.state;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{showInGrid ? : }\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n","const RequestType = {\r\n\tAll: {\r\n\t\tkey: 'All',\r\n\t\ttext: 'All',\r\n\t\tdoShowIfZero: true,\r\n\t},\r\n\tReadyToDownload: {\r\n\t\tkey: 'ReadyToDownload',\r\n\t\ttext: 'Ready to Download',\r\n\t},\r\n\tDownloadedNotReviewed: {\r\n\t\tkey: 'DownloadedNotReviewed',\r\n\t\ttext: 'Downloaded, Not Reviewed',\r\n\t},\r\n\tDownloadedReviewed: {\r\n\t\tkey: 'DownloadedReviewed',\r\n\t\ttext: 'Downloaded, Reviewed',\r\n\t},\r\n\tDeclined: {\r\n\t\tkey: 'Declined',\r\n\t\ttext: 'Declined',\r\n\t},\r\n\tPending: {\r\n\t\tkey: 'Pending',\r\n\t\ttext: 'Pending',\r\n\t},\r\n};\r\n\r\nexport default RequestType;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport DownloadType from '../DownloadType';\r\n\r\nconst DownloadsContext = React.createContext();\r\n\r\nconst name = 'downloadsDataStore';\r\n\r\nexport const useDownloads = () => React.useContext(DownloadsContext);\r\n\r\nexport const connectToDownloads = makeConnectTo(DownloadsContext, name);\r\n\r\nclass DownloadsDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tdownloads: [],\r\n\t\tselectedMenuOption: DownloadType.All.key,\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst downloadsDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(downloadsDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { isAnonymous } = this.props.userDataStore;\r\n\t\tif (!isAnonymous()) {\r\n\t\t\tthis.fetchDownloads();\r\n\t\t} else {\r\n\t\t\tthis.setState({ isLoading: false });\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.downloadsFetch && this.downloadsFetch.cancel) {\r\n\t\t\tthis.downloadsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshDownloads(),\r\n\t\tsetSelectedMenuOption: selectedMenuOption =>\r\n\t\t\tthis.setSelectedMenuOption(selectedMenuOption),\r\n\t});\r\n\r\n\trefreshDownloads = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchDownloads();\r\n\t\treturn this.downloadsFetch.promise;\r\n\t};\r\n\r\n\tfetchDownloads = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/me/galleys/downloads`);\r\n\t\trequest.promise\r\n\t\t\t.then(this.cacheApiResponse)\r\n\t\t\t.catch(e => console.error(e));\r\n\t\tthis.downloadsFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst downloads = apiResponse && this.getDownloads(apiResponse);\r\n\t\tthis.setState({ downloads, isLoading: false });\r\n\t};\r\n\r\n\tgetDownloads = apiResponse => {\r\n\t\tconst {\r\n\t\t\tdownloads,\r\n\t\t\tproducts,\r\n\t\t\tdigitalCopyInfo,\r\n\t\t\tdownloadableSkus,\r\n\t\t\trequestableSkus,\r\n\t\t\tcancelledSkus,\r\n\t\t\tuserCommunitySummaryReviews,\r\n\t\t} = apiResponse;\r\n\t\tif (!downloads) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\treturn downloads.map(download => {\r\n\t\t\tconst availableReviewCopyFormats = digitalCopyInfo.filter(\r\n\t\t\t\tdci => dci.sku === download.sku,\r\n\t\t\t);\r\n\t\t\tconst product =\r\n\t\t\t\tproducts && products.filter(pr => pr.sku === download.sku)[0];\r\n\t\t\tconst isRequestable =\r\n\t\t\t\trequestableSkus &&\r\n\t\t\t\trequestableSkus.filter(rs => rs === download.sku)[0];\r\n\t\t\tconst isDownloadable =\r\n\t\t\t\tdownloadableSkus &&\r\n\t\t\t\tdownloadableSkus.filter(dl => dl === download.sku)[0];\r\n\t\t\tconst isCancelled =\r\n\t\t\t\tcancelledSkus &&\r\n\t\t\t\tcancelledSkus.filter(cs => cs === download.sku)[0];\r\n\t\t\tproduct.digitalUpdatedDate =\r\n\t\t\t\tavailableReviewCopyFormats &&\r\n\t\t\t\tavailableReviewCopyFormats.length > 0 &&\r\n\t\t\t\tavailableReviewCopyFormats[0].updatedDate;\r\n\t\t\tproduct.reviewCopyAvailability = isDownloadable\r\n\t\t\t\t? 'Available for Download'\r\n\t\t\t\t: isRequestable\r\n\t\t\t\t? 'Available for Request'\r\n\t\t\t\t: 'Review Copy Not Available';\r\n\t\t\tconst csr =\r\n\t\t\t\tuserCommunitySummaryReviews &&\r\n\t\t\t\tuserCommunitySummaryReviews.filter(\r\n\t\t\t\t\tcsr => csr.sku === product.sku,\r\n\t\t\t\t);\r\n\t\t\tvar reviews = 0;\r\n\t\t\tvar average = 0;\r\n\t\t\tif (csr && csr.length > 0) {\r\n\t\t\t\treviews = csr[0].count;\r\n\t\t\t\taverage = csr[0].rating && csr[0].rating.toFixed(1);\r\n\t\t\t}\r\n\t\t\tproduct.reviews = reviews;\r\n\t\t\tproduct.average = average;\r\n\t\t\treturn {\r\n\t\t\t\t...download,\r\n\t\t\t\tproduct,\r\n\t\t\t\tisRequestable,\r\n\t\t\t\tisDownloadable,\r\n\t\t\t\tisCancelled,\r\n\t\t\t\tavailableReviewCopyFormats,\r\n\t\t\t\turi:\r\n\t\t\t\t\tproduct &&\r\n\t\t\t\t\tproduct.images &&\r\n\t\t\t\t\tproduct.images.filter(im => im.type === 'jacketCover')\r\n\t\t\t\t\t\t.length > 0 &&\r\n\t\t\t\t\tproduct.images.filter(im => im.type === 'jacketCover')[0]\r\n\t\t\t\t\t\t.uri + '?height=450',\r\n\t\t\t};\r\n\t\t});\r\n\t};\r\n\r\n\tsetSelectedMenuOption = selectedMenuOption => {\r\n\t\tthis.setState({ selectedMenuOption });\r\n\t};\r\n}\r\n\r\nexport default connectToUser(DownloadsDataStore);\r\n","const ConversationStatus = {\r\n\tactive: 'active',\r\n\tarchived: 'archived',\r\n\tread: 'read',\r\n\tcensored: 'censored',\r\n\tlocked: 'locked',\r\n\tdeleted: 'deleted',\r\n};\r\n\r\nexport default ConversationStatus;\r\n","import React from 'react';\r\n\r\nexport const FormContext = React.createContext({\r\n\trowOptions: null,\r\n\tformValuesById: null,\r\n\tsetFormValuesById: null,\r\n\tformId: null,\r\n\taccountInfoForm: null,\r\n});\r\n","import React from 'react';\r\nimport { Popover, Checkbox } from 'antd';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport { FormContext } from '../FormContext';\r\n\r\nexport default function IsAccountSearchableForNewUsers() {\r\n\tconst formContext = React.useContext(FormContext);\r\n\tconst { formValuesById, setFormValuesById } = formContext;\r\n\r\n\tconst inputId = 'isAccountSearchable';\r\n\r\n\tconst onCheckboxChange = (e, id) => {\r\n\t\tsetFormValuesById({\r\n\t\t\t...formValuesById,\r\n\t\t\t[id]: e.target.checked,\r\n\t\t});\r\n\t};\r\n\r\n\tconst getPopoverContent = () => {\r\n\t\tconst key = 'if_you_want_account_to_be_searchable_click_checkbox';\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t onCheckboxChange(e, inputId)}>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\tcontent={getPopoverContent()}\r\n\t\t\t\ttrigger=\"hover\">\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { Select } from 'antd';\r\nimport { InputType } from '../InputType';\r\nimport { FormContext } from '../FormContext';\r\nimport { FormId } from '../FormId';\r\n\r\nconst { Option } = Select;\r\n\r\nexport default function SelectInput() {\r\n\tconst formContext = React.useContext(FormContext);\r\n\tconst {\r\n\t\trowOptions,\r\n\t\tformValuesById,\r\n\t\tsetFormValuesById,\r\n\t\tformId,\r\n\t\taccountInfoForm,\r\n\t} = formContext;\r\n\tconst { rowTypeData } = rowOptions;\r\n\r\n\tconst onSelectChange = (value, id) => {\r\n\t\tvar newFormValuesById = {\r\n\t\t\t...formValuesById,\r\n\t\t\t[id]: value,\r\n\t\t};\r\n\r\n\t\tif (formId === FormId.AccountInfo && id === 'country') {\r\n\t\t\tnewFormValuesById['stateUS'] = accountInfoForm.states_US[0].id;\r\n\t\t\tnewFormValuesById['stateCA'] = accountInfoForm.states_CA[0].id;\r\n\t\t}\r\n\r\n\t\tsetFormValuesById(newFormValuesById);\r\n\t};\r\n\r\n\tconst getStatesSelectData = () => {\r\n\t\tswitch (formValuesById['country']) {\r\n\t\t\tcase 'US':\r\n\t\t\t\treturn rowTypeData.optionsUS;\r\n\t\t\tcase 'CA':\r\n\t\t\t\treturn rowTypeData.optionsCA;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Invalid country.');\r\n\t\t}\r\n\t};\r\n\r\n\tconst getSelectData = () => {\r\n\t\tswitch (rowTypeData.inputType) {\r\n\t\t\tcase InputType.StatesSelect:\r\n\t\t\t\treturn getStatesSelectData();\r\n\t\t\tcase InputType.Select:\r\n\t\t\t\treturn rowTypeData;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Invalid input type.');\r\n\t\t}\r\n\t};\r\n\r\n\tconst selectData = getSelectData();\r\n\r\n\treturn (\r\n\t\t onSelectChange(value, selectData.inputId)}>\r\n\t\t\t{selectData.selectOptions.map(o => (\r\n\t\t\t\t\r\n\t\t\t))}\r\n\t\t\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { Input } from 'antd';\r\nimport { FormContext } from '../FormContext';\r\n\r\nexport default function TextInput({ inputId = null }) {\r\n\tconst formContext = React.useContext(FormContext);\r\n\tconst { rowOptions, formValuesById, setFormValuesById } = formContext;\r\n\tconst { rowTypeData } = rowOptions;\r\n\r\n\tif (!inputId) {\r\n\t\tinputId = rowTypeData.inputId;\r\n\t}\r\n\r\n\tconst onInputChange = e => {\r\n\t\tconst { id, value } = e.target;\r\n\t\tsetFormValuesById({\r\n\t\t\t...formValuesById,\r\n\t\t\t[id]: value,\r\n\t\t});\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { FormContext } from '../FormContext';\r\n\r\nexport default function UneditableInput() {\r\n\tconst formContext = React.useContext(FormContext);\r\n\tconst { rowOptions, formValuesById } = formContext;\r\n\tconst { rowTypeData } = rowOptions;\r\n\r\n\treturn {formValuesById[rowTypeData.inputId]};\r\n}\r\n","import React from 'react';\r\nimport { FormContext } from '../FormContext';\r\nimport { InputType } from '../InputType';\r\nimport SelectInput from './SelectInput';\r\nimport TextInput from './TextInput';\r\nimport UneditableInput from './UneditableInput';\r\n\r\nexport default function InputByType() {\r\n\tconst formContext = React.useContext(FormContext);\r\n\tconst {\r\n\t\trowOptions: { rowTypeData },\r\n\t} = formContext;\r\n\r\n\tswitch (rowTypeData.inputType) {\r\n\t\tcase InputType.Select:\r\n\t\tcase InputType.StatesSelect:\r\n\t\t\treturn ;\r\n\t\tcase InputType.TextInput:\r\n\t\t\treturn ;\r\n\t\tcase InputType.UneditableInput:\r\n\t\t\treturn ;\r\n\t\tdefault:\r\n\t\t\tthrow new Error('Invalid input type.');\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport { FormContext } from '../FormContext';\r\nimport InputByType from '../Inputs/InputByType';\r\n\r\nexport default function LabelAndInputRow() {\r\n\tconst formContext = React.useContext(FormContext);\r\n\tconst {\r\n\t\trowOptions: { rowTypeData },\r\n\t} = formContext;\r\n\r\n\tconst getRequiredAsterisk = () => {\r\n\t\tif (rowTypeData.isRequired) {\r\n\t\t\treturn *;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{rowTypeData.label}\r\n\t\t\t\t{getRequiredAsterisk()}\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport TextInput from '../Inputs/TextInput';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nexport default function PostalCodeAndPhoneInputRow() {\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { FormContext } from '../FormContext';\r\nimport InputByType from '../Inputs/InputByType';\r\n\r\nexport default function SocialMediaLinkInputRow() {\r\n\tconst formContext = React.useContext(FormContext);\r\n\tconst {\r\n\t\trowOptions: { rowTypeData },\r\n\t} = formContext;\r\n\r\n\tconst getLabel = () => {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{getIcon()}\r\n\t\t\t\t
{rowTypeData.label}
\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst getIcon = () => (\r\n\t\t\r\n\t);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{getLabel()}\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { FormContext } from '../FormContext';\r\nimport { RowType } from '../RowType';\r\nimport IsAccountSearchableForNewUsers from './IsAccountSearchableForNewUsersRow';\r\nimport LabelAndInputRow from './LabelAndInputRow';\r\nimport PostalCodeAndPhoneInputRow from './PostalCodeAndPhoneInputRow';\r\nimport SocialMediaLinkInputRow from './SocialMediaLinkInputRow';\r\n\r\nexport default function RowByType() {\r\n\tconst formContext = React.useContext(FormContext);\r\n\tconst {\r\n\t\trowOptions: { rowType },\r\n\t} = formContext;\r\n\r\n\tswitch (rowType) {\r\n\t\tcase RowType.LabelAndInput:\r\n\t\t\treturn ;\r\n\t\tcase RowType.PostalCodeAndPhone:\r\n\t\t\treturn ;\r\n\t\tcase RowType.IsAccountSearchableForNewUsers:\r\n\t\t\treturn ;\r\n\t\tcase RowType.SocialMediaLinkInputRow:\r\n\t\t\treturn ;\r\n\t\tdefault:\r\n\t\t\tthrow new Error('Invalid row type');\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport { FormContext } from './FormContext';\r\nimport { InputType } from './InputType';\r\nimport RowByType from './Rows/RowByType';\r\nimport { RowType } from './RowType';\r\n\r\nexport const getRowByType = (\r\n\trowOptions,\r\n\tformValuesById,\r\n\tsetFormValuesById,\r\n\tformId,\r\n\taccountInfoForm = null,\r\n) => {\r\n\tconst { rowTypeData } = rowOptions;\r\n\tif (\r\n\t\ttypeof rowTypeData.doShowRow === 'function' &&\r\n\t\t!rowTypeData.doShowRow(formValuesById)\r\n\t) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconst contextData = {\r\n\t\trowOptions,\r\n\t\tformValuesById,\r\n\t\tsetFormValuesById,\r\n\t\tformId,\r\n\t\taccountInfoForm,\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport const getLabelAndInputRow = (\r\n\tlabel,\r\n\tinputId,\r\n\tisRequired = false,\r\n\tinputType = InputType.TextInput,\r\n) => {\r\n\treturn {\r\n\t\trowType: RowType.LabelAndInput,\r\n\t\trowTypeData: {\r\n\t\t\tlabel,\r\n\t\t\tinputId,\r\n\t\t\tinputType,\r\n\t\t\tisRequired,\r\n\t\t},\r\n\t};\r\n};\r\n\r\nexport const getLabelAndSelectInputRow = (\r\n\tlabel,\r\n\tinputId,\r\n\tselectOptions,\r\n\tisRequired = false,\r\n) => {\r\n\treturn {\r\n\t\trowType: RowType.LabelAndInput,\r\n\t\trowTypeData: {\r\n\t\t\tlabel,\r\n\t\t\tinputId,\r\n\t\t\tinputType: InputType.Select,\r\n\t\t\tselectOptions,\r\n\t\t\tisRequired,\r\n\t\t},\r\n\t};\r\n};\r\n","const TitleSortAttribute = {\r\n\tSupplier: {\r\n\t\tattribute: 'supplier',\r\n\t\tlabel: 'Imprint / Publisher',\r\n\t\ttype: 'string',\r\n\t},\r\n\tFormat: {\r\n\t\tattribute: 'format',\r\n\t\tlabel: 'Format',\r\n\t\ttype: 'string',\r\n\t},\r\n\tCategory: {\r\n\t\tattribute: 'category',\r\n\t\tlabel: 'Category',\r\n\t\ttype: 'string',\r\n\t},\r\n\tSeries: {\r\n\t\tattribute: 'series',\r\n\t\tlabel: 'Series',\r\n\t\ttype: 'string',\r\n\t},\r\n\tPublishingStatus: {\r\n\t\tattribute: 'publishingStatus',\r\n\t\tlabel: 'Publishing Status',\r\n\t\ttype: 'string',\r\n\t},\r\n\tPubDate: {\r\n\t\tattribute: 'pubDate',\r\n\t\tlabel: 'Published Date',\r\n\t\ttype: 'date',\r\n\t\tsecondaryAttribute: 'onSaleDate',\r\n\t},\r\n\tAuthor: {\r\n\t\tattribute: 'author',\r\n\t\tlabel: 'Author',\r\n\t\ttype: 'string',\r\n\t},\r\n\tPages: {\r\n\t\tattribute: 'pages',\r\n\t\tlabel: 'Pages',\r\n\t\ttype: 'number',\r\n\t},\r\n\tOnSaleDate: {\r\n\t\tattribute: 'onSaleDate',\r\n\t\tlabel: 'On Sale Date',\r\n\t\ttype: 'date',\r\n\t\tsecondaryAttribute: 'pubDate',\r\n\t},\r\n\tDigitalUpdatedDate: {\r\n\t\tattribute: 'digitalUpdatedDate',\r\n\t\tlabel: 'DRC Added Date',\r\n\t\ttype: 'date',\r\n\t},\r\n\tCommunityReviews: {\r\n\t\tattribute: 'reviews',\r\n\t\tlabel: 'Community Reviews',\r\n\t\ttype: 'number',\r\n\t},\r\n\tCommunityRating: {\r\n\t\tattribute: 'average',\r\n\t\tlabel: 'Community Ratings',\r\n\t\ttype: 'number',\r\n\t},\r\n\tSequence: {\r\n\t\tattribute: 'sequence',\r\n\t\tlabel: 'Sequence',\r\n\t\ttype: 'number',\r\n\t},\r\n\tNetVotes: {\r\n\t\tattribute: 'netVotes',\r\n\t\tlabel: 'Net Votes',\r\n\t\ttype: 'number',\r\n\t},\r\n};\r\n\r\nexport default TitleSortAttribute;\r\n","export const InputType = {\r\n\tTextInput: 'textInput',\r\n\tSelect: 'select',\r\n\tStatesSelect: 'statesSelect',\r\n\tUneditableInput: 'uneditableInput',\r\n};\r\n","import * as Util from '../../util';\r\nimport BrowseLaneType from '../SavedFilters/Administer/BrowseLaneType';\r\nimport queryString from 'query-string';\r\n\r\nexport const setSavedFilters = filters => {\r\n\tconst savedFilters =\r\n\t\tArray.isArray(filters) &&\r\n\t\tfilters.map(filter => ({\r\n\t\t\tvalue: filter.code,\r\n\t\t\tlabel: filter.literal || filter.description,\r\n\t\t\tisExclusion: filter.isExclusion,\r\n\t\t}));\r\n\treturn savedFilters || [];\r\n};\r\n\r\nexport const getFilterDefinitionToSave = activeCategories => {\r\n\tconst definition = activeCategories.reduce((definition, cat) => {\r\n\t\tconst key = `refine_${cat.value.replace('~', '_')}`;\r\n\t\tdefinition[key] = cat.value;\r\n\t\treturn definition;\r\n\t}, {});\r\n\treturn definition;\r\n};\r\n\r\nexport const getFilterRefinementDefinitionToSave = browseRefinements => {\r\n\tconst definition = browseRefinements.reduce(\r\n\t\t(definition, browseRefinement) => {\r\n\t\t\tvar typeKey = 0;\r\n\t\t\tvar key = '';\r\n\t\t\tvar code = browseRefinement.isExclusion ? '!' : '';\r\n\t\t\tswitch (browseRefinement.browseLaneType) {\r\n\t\t\t\tcase BrowseLaneType.DrcAvailability.key:\r\n\t\t\t\tcase BrowseLaneType.PubDate.key:\r\n\t\t\t\t\tkey = browseRefinement.browseLaneType;\r\n\t\t\t\t\tcode += browseRefinement.code;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase BrowseLaneType.Publisher.key:\r\n\t\t\t\t\ttypeKey = BrowseLaneType.Publisher.typeKey;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase BrowseLaneType.Format.key:\r\n\t\t\t\t\ttypeKey = BrowseLaneType.Format.typeKey;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase BrowseLaneType.AgeRange.key:\r\n\t\t\t\t\ttypeKey = BrowseLaneType.AgeRange.typeKey;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase BrowseLaneType.Imprint.key:\r\n\t\t\t\t\ttypeKey = BrowseLaneType.Imprint.typeKey;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase BrowseLaneType.Subrights.key:\r\n\t\t\t\t\ttypeKey = BrowseLaneType.Subrights.typeKey;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase BrowseLaneType.Dewey.key:\r\n\t\t\t\t\ttypeKey = BrowseLaneType.Dewey.typeKey;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase BrowseLaneType.Lexile.key:\r\n\t\t\t\t\ttypeKey = BrowseLaneType.Lexile.typeKey;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase BrowseLaneType.Edition.key:\r\n\t\t\t\t\ttypeKey = BrowseLaneType.Edition.typeKey;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase BrowseLaneType.Category.key:\r\n\t\t\t\t\tkey = `refine_${browseRefinement.code.replace('~', '_')}`;\r\n\t\t\t\t\tcode += browseRefinement.code;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (typeKey > 0) {\r\n\t\t\t\tkey = `refine_${typeKey}_${browseRefinement.code}`;\r\n\t\t\t\tcode += `${typeKey}~${browseRefinement.code}`;\r\n\t\t\t}\r\n\t\t\tdefinition[key] = code;\r\n\t\t\treturn definition;\r\n\t\t},\r\n\t\t{},\r\n\t);\r\n\treturn definition;\r\n};\r\n\r\nexport const getRelativeTimeframeAttributes = code => {\r\n\tconst relativeTimeFrameAttribute = {\r\n\t\tstartingRange: code.split(' TO ')[0].substring(1),\r\n\t\tendingRange: code.split('|')[1],\r\n\t};\r\n\treturn relativeTimeFrameAttribute;\r\n};\r\n\r\nexport const replaceExclusion = (activeCategories, value) => {\r\n\treturn activeCategories.map(cat => {\r\n\t\treturn {\r\n\t\t\tvalue: cat.value,\r\n\t\t\tlabel: cat.label,\r\n\t\t\tisExclusion:\r\n\t\t\t\tcat.value === value\r\n\t\t\t\t\t? cat.isExclusion\r\n\t\t\t\t\t\t? false\r\n\t\t\t\t\t\t: true\r\n\t\t\t\t\t: cat.isExclusion,\r\n\t\t};\r\n\t});\r\n};\r\n\r\nexport const getBrowseFiltersByType = savedFilter => {\r\n\treturn savedFilter.browseRefinements\r\n\t\t? Object.keys(\r\n\t\t\t\tUtil.groupBy(savedFilter.browseRefinements, 'browseLaneType'),\r\n\t\t )\r\n\t\t: [];\r\n};\r\n\r\nexport const addSavedFiltersToState = (\r\n\tbrowseRefinements,\r\n\tactiveCategories,\r\n\tbrowseLaneType,\r\n\tviewId,\r\n) => {\r\n\tactiveCategories.map(category => {\r\n\t\tvar newRefinement = {\r\n\t\t\tviewId: viewId,\r\n\t\t\tbrowseLaneType: browseLaneType.key,\r\n\t\t\tcode: category.value,\r\n\t\t\tliteral: category.label,\r\n\t\t\tisExclusion: category.isExclusion,\r\n\t\t};\r\n\t\tbrowseRefinements.push(newRefinement);\r\n\t});\r\n};\r\n\r\nexport const getDoJoinCommunityFromQueryParams = locationSearch => {\r\n\tconst searchValues = queryString.parse(locationSearch);\r\n\tconst { join } = searchValues;\r\n\treturn join === 'true';\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connectToUser } from '../User/containers/UserDataStore';\r\n\r\nexport class LocalizedDate extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tdateString: PropTypes.string,\r\n\t\tdateFormat: PropTypes.string,\r\n\t\tuserStore: PropTypes.object,\r\n\t};\r\n\r\n\tstatic defaultProps = {\r\n\t\tdateFormat: 'MMDDYYFormat',\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { dateString, dateFormat, userDataStore } = this.props;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{dateString && dateString !== '0001-01-01T00:00:00'\r\n\t\t\t\t\t? new Date(dateString).toLocaleDateString(\r\n\t\t\t\t\t\t\tthis.getCultureIndicator(userDataStore),\r\n\t\t\t\t\t\t\tdateFormat,\r\n\t\t\t\t\t )\r\n\t\t\t\t\t: '-'}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tgetCultureIndicator(userDataStore) {\r\n\t\tconst country =\r\n\t\t\tuserDataStore.state.organization &&\r\n\t\t\tuserDataStore.state.organization.address\r\n\t\t\t\t? userDataStore.state.organization.address.country\r\n\t\t\t\t: 'US';\r\n\t\tif (country === 'UK' || country === 'GB') {\r\n\t\t\treturn 'en-GB';\r\n\t\t} else {\r\n\t\t\treturn 'en-US';\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default connectToUser(LocalizedDate);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport { connectToCollaborativeLists } from '../../CollaborativeLists/containers/CollaborativeListsDataStore';\r\nimport { message } from 'antd';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\nimport combineConnectors from '../../util/combineConnectors';\r\nimport { isFunction } from 'lodash';\r\nimport { withLocalize } from '../../Localization/withLocalize';\r\n\r\nconst CommunitiesContext = React.createContext();\r\n\r\nconst name = 'communitiesDataStore';\r\n\r\nexport const useCommunities = () => React.useContext(CommunitiesContext);\r\n\r\nexport const connectToCommunities = makeConnectTo(CommunitiesContext, name);\r\n\r\nexport class CommunitiesDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tjoinCommunityMessageTimeInSeconds = 5;\r\n\r\n\tstate = {\r\n\t\tcircles: [],\r\n\t\tcommunities: [],\r\n\t\tgenreCommunities: [],\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst communitiesDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(communitiesDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchCommunities();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.communitiesFetch && this.communitiesFetch.cancel) {\r\n\t\t\tthis.communitiesFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\tisLoading: state.isLoading,\r\n\t\trefresh: () => this.refreshCommunities(),\r\n\t\trefreshWithLoadingState: () =>\r\n\t\t\tthis.refreshCommunitiesWithLoadingState(),\r\n\t\tjoinCommunity: (affiliationId, onSuccess, onFail) =>\r\n\t\t\tthis.joinCommunity(affiliationId, onSuccess, onFail),\r\n\t\tjoinValidatedCommunity: (affiliationId, code, onSuccess) =>\r\n\t\t\tthis.joinValidatedCommunity(affiliationId, code, onSuccess),\r\n\t\tleaveCommunity: (affiliationId, type) =>\r\n\t\t\tthis.leaveCommunity(affiliationId, type),\r\n\t\tleaveValidatedCommunity: (affiliationId, code) =>\r\n\t\t\tthis.leaveValidatedCommunity(affiliationId, code),\r\n\t\tgetCommunityById: communityId => this.getCommunityById(communityId),\r\n\t\tgetCommunitiesInvitedTo: () => this.getCommunitiesInvitedTo(),\r\n\t\tgetOpenCommunities: () => this.getOpenCommunities(),\r\n\t\tgetEligibilityForJoiningCommunity: communityId =>\r\n\t\t\tthis.getEligibilityForJoiningCommunity(communityId),\r\n\t\tgetCommunities: () => this.getCommunities(),\r\n\t\tcreateCommunity: (values, onSuccess) =>\r\n\t\t\tthis.createCommunity(values, onSuccess),\r\n\t\tdeleteCommunity: (communityId, onSuccess) =>\r\n\t\t\tthis.deleteCommunity(communityId, onSuccess),\r\n\t\tupdateCommunity: (communityId, values, onSuccess) =>\r\n\t\t\tthis.updateCommunity(communityId, values, onSuccess),\r\n\t\tgetGenreCommunities: () => this.getGenreCommunities(),\r\n\t});\r\n\r\n\trefreshCommunities = () => {\r\n\t\tthis.fetchCommunities();\r\n\t\treturn this.communitiesFetch.promise;\r\n\t};\r\n\r\n\trefreshCommunitiesWithLoadingState = async () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tawait this.refreshCommunities();\r\n\t};\r\n\r\n\trefreshListsAndUsersJoinedCommunities = () => {\r\n\t\tthis.props.collaborativeListsDataStore.refresh();\r\n\t\tthis.props.userDataStore.fetchJoinedCommunities();\r\n\t};\r\n\r\n\tfetchCommunities = () => {\r\n\t\tconst isAnonymous = this.props.userDataStore.isAnonymous();\r\n\t\tconst communitiesIdentifier = isAnonymous ? 'genres' : 'me';\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/affiliations/${communitiesIdentifier}`,\r\n\t\t);\r\n\t\trequest.promise\r\n\t\t\t.then(\r\n\t\t\t\tisAnonymous\r\n\t\t\t\t\t? this.cacheGenreCommunitiesApiResponse\r\n\t\t\t\t\t: this.cacheApiResponse,\r\n\t\t\t)\r\n\t\t\t.finally(() => this.setState({ isLoading: false }));\r\n\t\tthis.communitiesFetch = request;\r\n\t};\r\n\r\n\tcacheGenreCommunitiesApiResponse = apiResponse => {\r\n\t\tconst genreCommunities =\r\n\t\t\tapiResponse && this.buildCommunities(apiResponse);\r\n\t\tthis.setState({\r\n\t\t\tgenreCommunities: genreCommunities || [],\r\n\t\t});\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst communities = apiResponse && this.buildCommunities(apiResponse);\r\n\t\tthis.setState({\r\n\t\t\tcommunities:\r\n\t\t\t\tcommunities &&\r\n\t\t\t\tcommunities.sort(\r\n\t\t\t\t\t(a, b) =>\r\n\t\t\t\t\t\tnew Date(b.lastViewedDate) - new Date(a.lastViewedDate),\r\n\t\t\t\t),\r\n\t\t\tcircles: (apiResponse && apiResponse.affiliationCircles) || [],\r\n\t\t});\r\n\t};\r\n\r\n\tbuildCommunities = apiResponse => {\r\n\t\tconst {\r\n\t\t\taffiliations,\r\n\t\t\tlastViewedByAffiliationId,\r\n\t\t\tbrowseRefinements,\r\n\t\t\tuserAvatarsByAppUserId,\r\n\t\t\tusersById,\r\n\t\t\torganizationsById,\r\n\t\t\tgroupValidationItems,\r\n\t\t} = apiResponse;\r\n\t\treturn affiliations.map(affiliation => {\r\n\t\t\tconst { ownerIds } = affiliation;\r\n\t\t\tconst owners = ownerIds.map(ownerId =>\r\n\t\t\t\tthis.getOwnerInfo(\r\n\t\t\t\t\townerId,\r\n\t\t\t\t\tuserAvatarsByAppUserId[ownerId],\r\n\t\t\t\t\tusersById[ownerId] &&\r\n\t\t\t\t\t\tusersById[ownerId].orgID &&\r\n\t\t\t\t\t\torganizationsById[\r\n\t\t\t\t\t\t\tusersById[ownerId].orgID.toLowerCase()\r\n\t\t\t\t\t\t],\r\n\t\t\t\t),\r\n\t\t\t);\r\n\r\n\t\t\tconst lastViewedDate =\r\n\t\t\t\tlastViewedByAffiliationId &&\r\n\t\t\t\taffiliation.id in lastViewedByAffiliationId\r\n\t\t\t\t\t? lastViewedByAffiliationId[affiliation.id]\r\n\t\t\t\t\t: null;\r\n\t\t\treturn {\r\n\t\t\t\t...affiliation,\r\n\t\t\t\tgroupValidationItems:\r\n\t\t\t\t\tgroupValidationItems &&\r\n\t\t\t\t\tgroupValidationItems.filter(\r\n\t\t\t\t\t\tgvi => gvi.affiliationId === affiliation.id,\r\n\t\t\t\t\t),\r\n\t\t\t\tlastViewedDate,\r\n\t\t\t\tbrowseRefinements:\r\n\t\t\t\t\tbrowseRefinements &&\r\n\t\t\t\t\tbrowseRefinements.filter(\r\n\t\t\t\t\t\tbr => br.viewId === affiliation.viewId,\r\n\t\t\t\t\t),\r\n\t\t\t\towners,\r\n\t\t\t\towner: owners && owners[0],\r\n\t\t\t};\r\n\t\t});\r\n\t};\r\n\r\n\tgetCommunities = () => {\r\n\t\tconst { isAnonymous } = this.props.userDataStore;\r\n\t\tconst { communities, genreCommunities } = this.state;\r\n\t\treturn isAnonymous() ? genreCommunities : communities;\r\n\t};\r\n\r\n\tgetOwnerInfo = (appUserId, userAvatar, organization) => {\r\n\t\tvar owner = {};\r\n\t\towner.userAvatar = userAvatar && userAvatar;\r\n\t\towner.organization =\r\n\t\t\torganization && organization.name ? organization.name : '';\r\n\t\towner.appUserId = appUserId;\r\n\t\treturn owner;\r\n\t};\r\n\r\n\tgetCommunityTypeString = typeNumber => {\r\n\t\tif (typeNumber === 1) {\r\n\t\t\treturn 'organization';\r\n\t\t} else {\r\n\t\t\treturn 'user';\r\n\t\t}\r\n\t};\r\n\r\n\tjoinCommunity = (affiliationId, onSuccess, onFail) => {\r\n\t\tif (!affiliationId) {\r\n\t\t\treturn this.displayUnableToLoadCommunityMessage();\r\n\t\t}\r\n\r\n\t\tconst community = this.getCommunityById(affiliationId);\r\n\r\n\t\tif (!community) {\r\n\t\t\treturn this.displayUnableToLoadCommunityMessage();\r\n\t\t}\r\n\r\n\t\tif (community.member) {\r\n\t\t\treturn this.displayAlreadyMemberOfCommunityMessage(community.name);\r\n\t\t}\r\n\r\n\t\tconst typeString = this.getCommunityTypeString(community.type);\r\n\r\n\t\tconst joinCommunityUrl =\r\n\t\t\tprocess.env.REACT_APP_API_URL +\r\n\t\t\t`/api/v1/affiliations/me/${affiliationId}/${typeString}`;\r\n\r\n\t\tfetch(joinCommunityUrl, {\r\n\t\t\tmethod: 'PUT',\r\n\t\t\theaders: { 'Access-Control-Allow-Origin': '*' },\r\n\t\t\tcredentials: 'include',\r\n\t\t\tmode: 'cors',\r\n\t\t})\r\n\t\t\t.then(response => {\r\n\t\t\t\tif (response.status === 200) {\r\n\t\t\t\t\tthis.refreshCommunities();\r\n\t\t\t\t\tthis.refreshListsAndUsersJoinedCommunities();\r\n\t\t\t\t\ttypeof onSuccess === 'function' && onSuccess();\r\n\t\t\t\t\treturn this.displaySuccessfullyJoinedCommunityMessage(\r\n\t\t\t\t\t\tcommunity.name,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\ttypeof onFail === 'function' && onFail();\r\n\t\t\t\tthis.displayUnableToJoinCommunityMessage();\r\n\t\t\t})\r\n\t\t\t.catch(() => {\r\n\t\t\t\tthis.displayErrorJoiningCommunityMessage();\r\n\t\t\t});\r\n\t};\r\n\r\n\tcreateCommunity = async (values, onSuccess) => {\r\n\t\tconst endpoint = `/api/v1/affiliations`;\r\n\t\tconst {\r\n\t\t\tuserDataStore: { fetchJoinedCommunitiesWithNoLoadingState },\r\n\t\t} = this.props;\r\n\t\ttry {\r\n\t\t\tlet response = await api.post(endpoint, values);\r\n\t\t\tawait this.refreshCommunitiesWithLoadingState();\r\n\t\t\tfetchJoinedCommunitiesWithNoLoadingState();\r\n\t\t\tisFunction(onSuccess) && onSuccess(response.id);\r\n\t\t} catch (e) {\r\n\t\t\tthis.onCatch(e);\r\n\t\t}\r\n\t};\r\n\r\n\tdeleteCommunity = async (communityId, onSuccess) => {\r\n\t\tconst endpoint = `/api/v1/affiliations/${communityId}`;\r\n\t\tconst {\r\n\t\t\tcollaborativeListsDataStore: { refresh: refreshCollabLists },\r\n\t\t\tuserDataStore: { fetchJoinedCommunitiesWithNoLoadingState },\r\n\t\t} = this.props;\r\n\t\ttry {\r\n\t\t\tawait api.del(endpoint);\r\n\t\t\tisFunction(onSuccess) && onSuccess();\r\n\t\t\tthis.refreshCommunitiesWithLoadingState();\r\n\t\t\tfetchJoinedCommunitiesWithNoLoadingState();\r\n\t\t\trefreshCollabLists();\r\n\t\t} catch (e) {\r\n\t\t\tthis.onCatch(e);\r\n\t\t}\r\n\t};\r\n\r\n\tupdateCommunity = async (communityId, values, onSuccess) => {\r\n\t\tconst {\r\n\t\t\tuserDataStore: { fetchJoinedCommunitiesWithNoLoadingState },\r\n\t\t} = this.props;\r\n\t\tconst endpoint = `/api/v1/affiliations/${communityId}/doNotUpdateValidation`;\r\n\t\ttry {\r\n\t\t\tawait api.put(endpoint, values);\r\n\t\t\tawait this.refreshCommunities();\r\n\t\t\tfetchJoinedCommunitiesWithNoLoadingState();\r\n\t\t\tisFunction(onSuccess) && onSuccess();\r\n\t\t} catch (e) {\r\n\t\t\tthis.onCatch(e);\r\n\t\t}\r\n\t};\r\n\r\n\tonCatch = e => {\r\n\t\tconst { translate } = this.props;\r\n\t\tconsole.error(e);\r\n\t\tmessage.error(translate('there_was_an_error_with_your_request'));\r\n\t};\r\n\r\n\tdisplayUnableToLoadCommunityMessage = () => {\r\n\t\tmessage.warn(\r\n\t\t\tUnable to load the community you are trying to join.,\r\n\t\t\tthis.joinCommunityMessageTimeInSeconds,\r\n\t\t);\r\n\t};\r\n\r\n\tdisplayAlreadyMemberOfCommunityMessage = communityName => {\r\n\t\tmessage.warn(\r\n\t\t\t\r\n\t\t\t\tYou are already a member of the {communityName}{' '}\r\n\t\t\t\tcommunity.\r\n\t\t\t,\r\n\t\t\tthis.joinCommunityMessageTimeInSeconds,\r\n\t\t);\r\n\t};\r\n\r\n\tdisplaySuccessfullyJoinedCommunityMessage = communityName => {\r\n\t\tmessage.success(\r\n\t\t\t\r\n\t\t\t\tYou've successfully joined the {communityName} community.\r\n\t\t\t,\r\n\t\t\tthis.joinCommunityMessageTimeInSeconds,\r\n\t\t);\r\n\t};\r\n\r\n\tdisplayErrorJoiningCommunityMessage = () => {\r\n\t\tmessage.error(\r\n\t\t\tAn error occurred while trying to join the community.,\r\n\t\t\tthis.joinCommunityMessageTimeInSeconds,\r\n\t\t);\r\n\t};\r\n\r\n\tdisplayUnableToJoinCommunityMessage = () => {\r\n\t\tmessage.warn(\r\n\t\t\tYou are unable to join this community.,\r\n\t\t\tthis.joinCommunityMessageTimeInSeconds,\r\n\t\t);\r\n\t};\r\n\r\n\tgetEligibilityForJoiningCommunity = communityId => {\r\n\t\tconst openCommunities = this.getOpenCommunities();\r\n\t\tconst communitiesInvitedTo = this.getCommunitiesInvitedTo();\r\n\t\tconst isCommunity = comm => comm.id === Number(communityId);\r\n\t\treturn (\r\n\t\t\topenCommunities.some(isCommunity) ||\r\n\t\t\tcommunitiesInvitedTo.some(isCommunity)\r\n\t\t);\r\n\t};\r\n\r\n\tgetGenreCommunities = () => {\r\n\t\tconst { communities } = this.state;\r\n\t\treturn communities.filter(comm => comm.isGenreCommunity);\r\n\t};\r\n\r\n\tgetGenreCommunitiesForAnonUser = () => {\r\n\t\tconst { genreCommunities } = this.state;\r\n\t\treturn genreCommunities.length ? genreCommunities : [];\r\n\t};\r\n\r\n\tgetMyOpenCommunities = () => {\r\n\t\tconst { communities } = this.state;\r\n\t\treturn communities.length\r\n\t\t\t? communities.filter(\r\n\t\t\t\t\tc =>\r\n\t\t\t\t\t\t!c.member &&\r\n\t\t\t\t\t\t!c.groupValidationItems.find(\r\n\t\t\t\t\t\t\tgvi => gvi.type !== 'group',\r\n\t\t\t\t\t\t),\r\n\t\t\t )\r\n\t\t\t: [];\r\n\t};\r\n\r\n\tgetOpenCommunities = () => {\r\n\t\tconst {\r\n\t\t\tuserDataStore: { isAnonymous },\r\n\t\t} = this.props;\r\n\t\treturn isAnonymous()\r\n\t\t\t? this.getGenreCommunitiesForAnonUser()\r\n\t\t\t: this.getMyOpenCommunities();\r\n\t};\r\n\r\n\tgetCommunitiesInvitedTo = () => {\r\n\t\tconst communities = this.state.communities;\r\n\t\treturn communities.length\r\n\t\t\t? communities.filter(\r\n\t\t\t\t\tc =>\r\n\t\t\t\t\t\t!c.member &&\r\n\t\t\t\t\t\tc.groupValidationItems.find(\r\n\t\t\t\t\t\t\tgvi => gvi.type !== 'group',\r\n\t\t\t\t\t\t),\r\n\t\t\t )\r\n\t\t\t: [];\r\n\t};\r\n\r\n\tgetCommunityById = communityId => {\r\n\t\tconst communities = this.getCommunities();\r\n\t\treturn communities.find(\r\n\t\t\tcommunity => Number(community.id) === Number(communityId),\r\n\t\t);\r\n\t};\r\n\r\n\tleaveCommunity = (affiliationId, type) => {\r\n\t\tconst typeString = this.getCommunityTypeString(type);\r\n\r\n\t\tapi.del(`/api/v1/affiliations/me/${affiliationId}/${typeString}`)\r\n\t\t\t.then(() => {\r\n\t\t\t\tmessage.success('You have left the community');\r\n\t\t\t\tthis.refreshCommunities();\r\n\t\t\t\tthis.refreshListsAndUsersJoinedCommunities();\r\n\t\t\t})\r\n\t\t\t.catch(this.onCatch);\r\n\t};\r\n\r\n\tjoinValidatedCommunity = (affiliationId, code, onSuccess) => {\r\n\t\tconst { translate } = this.props;\r\n\t\tif (code !== '') {\r\n\t\t\tapi.put(`/api/v1/affiliations/${affiliationId}/validate/${code}`)\r\n\t\t\t\t.then(result => {\r\n\t\t\t\t\tif (result === 0) {\r\n\t\t\t\t\t\tmessage.error(\r\n\t\t\t\t\t\t\ttranslate('unable_to_validate_community_code', {\r\n\t\t\t\t\t\t\t\tsupportEmail: 'support@abovethetreeline.com',\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tmessage.success(\r\n\t\t\t\t\t\t\ttranslate(\r\n\t\t\t\t\t\t\t\t'join_community_with_validation_success_message',\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\ttypeof onSuccess === 'function' && onSuccess();\r\n\t\t\t\t\t\tthis.refreshCommunities();\r\n\t\t\t\t\t\tthis.refreshListsAndUsersJoinedCommunities();\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch(this.onCatch);\r\n\t\t}\r\n\t};\r\n\r\n\tleaveValidatedCommunity = affiliationId => {\r\n\t\tapi.del(`/api/v1/affiliations/${affiliationId}/validate`)\r\n\t\t\t.then(() => {\r\n\t\t\t\tmessage.success(You have left the community);\r\n\t\t\t\tthis.refreshCommunities();\r\n\t\t\t\tthis.refreshListsAndUsersJoinedCommunities();\r\n\t\t\t})\r\n\t\t\t.catch(this.onCatch);\r\n\t};\r\n}\r\n\r\nconst connectors = [connectToCollaborativeLists, connectToUser];\r\n\r\nexport default combineConnectors(connectors)(\r\n\twithLocalize(CommunitiesDataStore),\r\n);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport useReviewEditor from './useReviewEditor';\r\nimport useRatingsEditor from './useRatingsEditor';\r\nimport useShareTargets from './useShareTargets';\r\nimport useEditorController from './useEditorController';\r\nimport useNominationTargets from './useNominationTargets';\r\n\r\nconst UserReviewEditorContext = React.createContext({\r\n\tisLoading: true,\r\n\treviewEditor: {},\r\n\tratingsEditor: {},\r\n\teditorController: {},\r\n\tshareTargetsEditor: {},\r\n\tnominationTargetsEditor: {},\r\n});\r\n\r\nexport const useUserReviewEditor = () => {\r\n\treturn React.useContext(UserReviewEditorContext);\r\n};\r\n\r\nUserReviewEditorProvider.propTypes = {\r\n\tsku: PropTypes.string,\r\n\tonUpdate: PropTypes.func,\r\n\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\tshareTargetsOptions: PropTypes.shape({\r\n\t\tdoIncludeGenreCommunities: PropTypes.bool,\r\n\t}),\r\n};\r\n\r\nexport default function UserReviewEditorProvider({\r\n\tsku,\r\n\tchildren,\r\n\tonUpdate,\r\n\tshareTargetsOptions,\r\n}) {\r\n\tconst reviewEditor = useReviewEditor(sku);\r\n\tconst ratingsEditor = useRatingsEditor(sku);\r\n\r\n\tconst shareTargetsEditor = useShareTargets(sku, shareTargetsOptions);\r\n\tconst nominationTargetsEditor = useNominationTargets(sku);\r\n\r\n\tconst editorController = useEditorController(\r\n\t\tsku,\r\n\t\tonUpdate,\r\n\t\treviewEditor,\r\n\t\tratingsEditor,\r\n\t\tshareTargetsEditor,\r\n\t\tnominationTargetsEditor,\r\n\t);\r\n\r\n\tconst isLoading = () => {\r\n\t\treturn (\r\n\t\t\treviewEditor.isLoading() ||\r\n\t\t\tratingsEditor.isLoading() ||\r\n\t\t\tshareTargetsEditor.isLoading() ||\r\n\t\t\tnominationTargetsEditor.isLoading()\r\n\t\t);\r\n\t};\r\n\r\n\tconst providerValue = {\r\n\t\tisLoading,\r\n\t\treviewEditor,\r\n\t\tratingsEditor,\r\n\t\teditorController,\r\n\t\tshareTargetsEditor,\r\n\t\tnominationTargetsEditor,\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{typeof children === 'function'\r\n\t\t\t\t? children(providerValue)\r\n\t\t\t\t: children}\r\n\t\t\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport api from '../../../../Api';\r\n\r\nexport default function useRatingsEditor(sku) {\r\n\tconst [isLoading, setIsLoading] = React.useState(true);\r\n\tconst [assessments, setAssessments] = React.useState([]);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlet request;\r\n\r\n\t\tif (!isLoading) return;\r\n\r\n\t\tconst buildAssessments = assessments => {\r\n\t\t\treturn assessments.map(a => ({\r\n\t\t\t\tid: a.id,\r\n\t\t\t\tname: a.name,\r\n\t\t\t\tvalue: a.value,\r\n\t\t\t}));\r\n\t\t};\r\n\r\n\t\tconst fetchAssessments = async () => {\r\n\t\t\tconst endpoint = `/api/me/assessments/products/${sku}`;\r\n\t\t\trequest = api.cancelableGet(endpoint);\r\n\r\n\t\t\tconst assessments = await request.promise;\r\n\r\n\t\t\tif (Array.isArray(assessments)) {\r\n\t\t\t\tsetAssessments(buildAssessments(assessments));\r\n\t\t\t\tsetIsLoading(false);\r\n\t\t\t} else {\r\n\t\t\t\tsetAssessments(() => {\r\n\t\t\t\t\tthrow new Error('Failed to fetch assessments');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfetchAssessments();\r\n\r\n\t\treturn () => {\r\n\t\t\tapi.revoke(request);\r\n\t\t};\r\n\t}, [sku]);\r\n\r\n\tconst getRating = ratingType => {\r\n\t\tconst rating = assessments.find(a => a.id === ratingType);\r\n\t\tif (rating) return rating;\r\n\t\treturn {};\r\n\t};\r\n\r\n\tconst ratingExists = ratingType => {\r\n\t\tconst rating = getRating(ratingType);\r\n\t\treturn Number(rating.value) > -1;\r\n\t};\r\n\r\n\tconst updateRating = assessment => {\r\n\t\tconst nextAssessments = assessments.map(a => {\r\n\t\t\tif (a.id === assessment.id) {\r\n\t\t\t\treturn assessment;\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t});\r\n\t\tsetAssessments(nextAssessments);\r\n\t};\r\n\r\n\tconst clear = () => {\r\n\t\tsetAssessments([]);\r\n\t};\r\n\r\n\treturn {\r\n\t\tget: getRating,\r\n\t\tupdate: updateRating,\r\n\t\texists: ratingExists,\r\n\t\tisLoading: () => isLoading,\r\n\t\tgetAll: () => assessments,\r\n\t\tclear,\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport { RatingType } from './RatingType';\r\nimport { ShareTargetType } from './ShareTargetType';\r\nimport { NominationAction } from './useNominationTargets';\r\nimport api from '../../../../Api';\r\nimport { useUser } from '../../../User/containers/UserDataStore';\r\n\r\nexport default function useEditorController(\r\n\tsku,\r\n\tonUpdate,\r\n\treviewEditor,\r\n\tratingsDataEditor,\r\n\tshareTargetsEditor,\r\n\tnominationTargetsEditor,\r\n) {\r\n\tconst {\r\n\t\tstate: {\r\n\t\t\tuser: { user },\r\n\t\t},\r\n\t} = useUser();\r\n\r\n\tconst [didSaveEditor, setDidSaveEditor] = React.useState(false);\r\n\r\n\tconst buildAssessmentIdsString = () => {\r\n\t\tconst orderedTypes = [\r\n\t\t\tRatingType.overall.toString(),\r\n\t\t\tRatingType.writingQuality.toString(),\r\n\t\t\tRatingType.imageIllustrationQuality.toString(),\r\n\t\t\tRatingType.characterDevelopment.toString(),\r\n\t\t\tRatingType.couldntPutItDownness.toString(),\r\n\t\t\tRatingType.intellectualDepth.toString(),\r\n\t\t\tRatingType.originality.toString(),\r\n\t\t];\r\n\t\treturn orderedTypes.join();\r\n\t};\r\n\r\n\tconst getRatingValue = ratingType => {\r\n\t\tconst rating = ratingsDataEditor.get(ratingType);\r\n\r\n\t\tif (typeof rating.value === 'number') {\r\n\t\t\treturn rating.value.toString();\r\n\t\t}\r\n\t\treturn RatingType.none.toString();\r\n\t};\r\n\r\n\tconst buildAssessmentValuesString = fallbackOverallRating => {\r\n\t\tconst getValueForOverallRating = () => {\r\n\t\t\tconst overallValue = ratingsDataEditor.get(RatingType.overall)\r\n\t\t\t\t.value;\r\n\r\n\t\t\tif (!fallbackOverallRating || overallValue !== RatingType.none) {\r\n\t\t\t\treturn getRatingValue(RatingType.overall);\r\n\t\t\t}\r\n\r\n\t\t\treturn typeof fallbackOverallRating === 'number'\r\n\t\t\t\t? fallbackOverallRating.toString()\r\n\t\t\t\t: getRatingValue(RatingType.overall);\r\n\t\t};\r\n\r\n\t\tconst orderedValues = [\r\n\t\t\tgetValueForOverallRating(),\r\n\t\t\tgetRatingValue(RatingType.writingQuality),\r\n\t\t\tgetRatingValue(RatingType.imageIllustrationQuality),\r\n\t\t\tgetRatingValue(RatingType.characterDevelopment),\r\n\t\t\tgetRatingValue(RatingType.couldntPutItDownness),\r\n\t\t\tgetRatingValue(RatingType.intellectualDepth),\r\n\t\t\tgetRatingValue(RatingType.originality),\r\n\t\t];\r\n\t\treturn orderedValues.join();\r\n\t};\r\n\r\n\tconst buildShareTargetsString = () => {\r\n\t\tconst shareTargetsToSave = [];\r\n\r\n\t\tconst publisherShareTargetIdentifier = '0';\r\n\r\n\t\tif (shareTargetsEditor.isActive({ type: ShareTargetType.publisher })) {\r\n\t\t\tshareTargetsToSave.push(publisherShareTargetIdentifier);\r\n\t\t}\r\n\r\n\t\treturn shareTargetsToSave.join();\r\n\t};\r\n\r\n\tconst buildSubmitToNominations = () => {\r\n\t\tconst ids = nominationTargetsEditor.getSelectedNominationAffiliationIds();\r\n\t\treturn ids.map(id => id.toString()).join();\r\n\t};\r\n\r\n\tconst buildAssessmentDataToSave = fallbackOverallRating => ({\r\n\t\tsku,\r\n\t\tassessmentIds: buildAssessmentIdsString(),\r\n\t\tassessmentIdValues: buildAssessmentValuesString(fallbackOverallRating),\r\n\t\treview: encodeURI(reviewEditor.getEditorValue()),\r\n\t\tshare: buildShareTargetsString(), // ReviewSubmissionType, but Publisher is the only one actually used!\r\n\t\tsubmitTo: buildSubmitToNominations(), // Nominate section. These are referred to as \"Submission Lists\"\r\n\t\tsaveAsDefault: false,\r\n\t});\r\n\r\n\t// { communityType: 2 }, // Colleagues\r\n\t// { communityType: 3 }, // Friends\r\n\tconst buildColleaguesAndFriendsShareExceptionBody = () => {\r\n\t\tconst shareTypesToExclude = [];\r\n\r\n\t\tconst friendsCommunityType = 3;\r\n\t\tconst colleaguesCommunityType = 2;\r\n\r\n\t\tif (!shareTargetsEditor.isActive({ type: ShareTargetType.friends })) {\r\n\t\t\tshareTypesToExclude.push({ communityType: friendsCommunityType });\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t!shareTargetsEditor.isActive({ type: ShareTargetType.colleagues })\r\n\t\t) {\r\n\t\t\tshareTypesToExclude.push({\r\n\t\t\t\tcommunityType: colleaguesCommunityType,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tCommunityShareTypes: shareTypesToExclude,\r\n\t\t\tSaveAsDefault: false,\r\n\t\t};\r\n\t};\r\n\r\n\tconst buildGeneralCommunitiesShareExceptionBody = () => {\r\n\t\tconst { getCommunityIdsToNotShareWith } = shareTargetsEditor;\r\n\t\tconst communityIdsToNotShareWith = getCommunityIdsToNotShareWith();\r\n\t\treturn {\r\n\t\t\tsaveAsDefault: false,\r\n\t\t\tAffiliationShareTypes: communityIdsToNotShareWith.map(id => ({\r\n\t\t\t\ttargetGroupId: id,\r\n\t\t\t\tisUnchecked: true,\r\n\t\t\t})),\r\n\t\t};\r\n\t};\r\n\r\n\tconst save = async (\r\n\t\toptions = { fallbackOverallRating: null, doSubmitSharingState: true },\r\n\t) => {\r\n\t\tconst userId = user.id;\r\n\t\t// 'join' any genre communities that the user is NOT already a member of AND that is a \"selected\" share target\r\n\t\t// PUT: api/affiliations/me/{affiliationId}/user\r\n\t\tconst genreCommunityIdsToJoin = shareTargetsEditor.getChosenGenreCommunityIdsToJoin();\r\n\r\n\t\tconst joinRequests = genreCommunityIdsToJoin.map(id =>\r\n\t\t\tapi.put(`/api/affiliations/me/${id}/user`),\r\n\t\t);\r\n\r\n\t\tif (joinRequests.length) {\r\n\t\t\tawait Promise.all(joinRequests);\r\n\t\t}\r\n\r\n\t\tawait api.put(\r\n\t\t\t`/api/me/reviews/products/${sku}`,\r\n\t\t\tbuildAssessmentDataToSave(options.fallbackOverallRating),\r\n\t\t);\r\n\r\n\t\tif (options.doSubmitSharingState) {\r\n\t\t\t// PUT if Colleagues and Friends are 'excluded' from the share\r\n\t\t\tawait api.put(\r\n\t\t\t\t`/api/products/${sku}/users/${userId}/communities/shares-exceptions`,\r\n\t\t\t\tbuildColleaguesAndFriendsShareExceptionBody(),\r\n\t\t\t);\r\n\r\n\t\t\t// POST the Communities (affiliations that the assessment should NOT be shared with. This includes genre communities)\r\n\t\t\tawait api.post(\r\n\t\t\t\t`/api/products/${sku}/users/${userId}/communities/shares-exceptions/affiliations`,\r\n\t\t\t\tbuildGeneralCommunitiesShareExceptionBody(),\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// There will never be a general \"Community\"/\"Affiliation\" share type in the new UI, so we can always delete it in case the old review modal is still used\r\n\t\tawait api.del(\r\n\t\t\t`/api/products/${sku}/users/${userId}/communities/shares-exceptions`,\r\n\t\t\t[{ CommunityType: 4 }],\r\n\t\t);\r\n\r\n\t\tsetDidSaveEditor(true);\r\n\r\n\t\tnominationTargetsEditor.update({\r\n\t\t\ttype: NominationAction.NOMINATIONS_SUBMITTED,\r\n\t\t});\r\n\r\n\t\tif (typeof onUpdate === 'function') {\r\n\t\t\tawait onUpdate();\r\n\t\t}\r\n\t};\r\n\r\n\tconst removeReviewAssessment = async () => {\r\n\t\tconst url = `${process.env.REACT_APP_EPLUS_REQUEST_URL}/getJSONData.aspx?builder=ClearBuyerAssessment&sku=${sku}`;\r\n\r\n\t\tawait fetch(url, {\r\n\t\t\tmethod: 'GET',\r\n\t\t\tcredentials: 'include',\r\n\t\t});\r\n\r\n\t\tif (typeof onUpdate === 'function') {\r\n\t\t\tawait onUpdate();\r\n\t\t}\r\n\t};\r\n\r\n\treturn {\r\n\t\tsave,\r\n\t\tremove: removeReviewAssessment,\r\n\t\tdoesReviewExist: () => reviewEditor.doesReviewExist(),\r\n\t\tdidSave: () => didSaveEditor,\r\n\t\treset: () => setDidSaveEditor(false),\r\n\t};\r\n}\r\n","const OptionSelectionTypes = {\r\n\tselect: 'select',\r\n\talpha: 'alpha',\r\n};\r\n\r\nexport default OptionSelectionTypes;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Drawer } from 'antd';\r\nimport classNames from 'classnames';\r\n\r\nexport default class DrawerAnchor extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.any,\r\n\t\trenderDrawerContent: PropTypes.func,\r\n\t\tonCloseHook: PropTypes.func,\r\n\t\tplacement: PropTypes.string,\r\n\t\twidth: PropTypes.string,\r\n\t\ttitle: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),\r\n\t\theight: PropTypes.string,\r\n\t\tclosable: PropTypes.bool,\r\n\t\tparentStyle: PropTypes.string,\r\n\t\tdrawerClassName: PropTypes.string,\r\n\t};\r\n\r\n\tstate = {\r\n\t\tisDrawerVisible: false,\r\n\t};\r\n\r\n\tstatic defaultProps = {\r\n\t\tplacement: 'left',\r\n\t\twidth: '700px',\r\n\t\theight: '100%',\r\n\t\tclosable: false,\r\n\t\tparentStyle: 'clickable',\r\n\t};\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tshowDrawer = () => {\r\n\t\tthis.setState({ isDrawerVisible: true });\r\n\t};\r\n\r\n\tcloseDrawer = () => {\r\n\t\tthis.setState({ isDrawerVisible: false });\r\n\r\n\t\tif (typeof this.props.onCloseHook === 'function') {\r\n\t\t\tthis.props.onCloseHook();\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport class ControlledDrawerAnchor extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.any,\r\n\t\tisDrawerVisible: PropTypes.bool,\r\n\t\tshowDrawer: PropTypes.func,\r\n\t\tcloseDrawer: PropTypes.func,\r\n\t\trenderDrawerContent: PropTypes.func,\r\n\t\tplacement: PropTypes.string,\r\n\t\twidth: PropTypes.string,\r\n\t\theight: PropTypes.string,\r\n\t\tclosable: PropTypes.bool,\r\n\t\tparentStyle: PropTypes.string,\r\n\t\tdrawerClassName: PropTypes.string,\r\n\t};\r\n\r\n\tstatic defaultProps = {\r\n\t\tshowDrawer: () => {},\r\n\t};\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{this.props.children && this.renderAnchorChild()}\r\n\t\t\t\t\r\n\t\t\t\t\t{this.props.renderDrawerContent(this.getInstance())}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\trenderAnchorChild() {\r\n\t\tconst { children, parentStyle } = this.props;\r\n\r\n\t\tif (typeof children === 'function') {\r\n\t\t\treturn children(this.getInstance());\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t
this.showDrawer()}>\r\n\t\t\t\t{children}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n\r\n\tgetInstance = (isDrawerVisible = this.props.isDrawerVisible) => ({\r\n\t\tisVisible: isDrawerVisible,\r\n\t\topen: () => this.showDrawer(),\r\n\t\tclose: () => this.closeDrawer(),\r\n\t\tcloseDrawer: () => this.closeDrawer(),\r\n\t});\r\n\r\n\tshowDrawer = () => {\r\n\t\tthis.props.showDrawer();\r\n\t};\r\n\r\n\tcloseDrawer = () => {\r\n\t\tthis.props.closeDrawer();\r\n\t};\r\n}\r\n","/**\r\n *\r\n * @param {String} label\r\n * @param {Number} num\r\n * Converts given label into plural if applicable\r\n */\r\nconst handlePlural = (label, num, doExcludeNumber = false) => {\r\n\tconst n = typeof num === 'number' ? num : Number(num);\r\n\tconst base = `${!doExcludeNumber ? n.toLocaleString() + ' ' : ''}${label}`;\r\n\treturn n === 1 ? base : `${base}s`;\r\n};\r\n\r\nexport default handlePlural;\r\n","export { default } from './LoadingSpinnerInContainer';\r\n","export const RowType = {\r\n\tLabelAndInput: 'labelAndInput',\r\n\tPostalCodeAndPhone: 'postalCodeAndPhone',\r\n\tIsAccountSearchableForNewUsers: 'isAccountSearchableForNewUsers',\r\n\tSocialLinkMediaInputRow: 'socialLinkMediaInputRow',\r\n};\r\n","const DownloadType = {\r\n\tAll: {\r\n\t\tkey: 'All',\r\n\t\ttext: 'All',\r\n\t\tdoShowIfZero: true,\r\n\t},\r\n\tDownloadedNotReviewed: {\r\n\t\tkey: 'DownloadedNotReviewed',\r\n\t\ttext: 'Downloaded, Not Reviewed',\r\n\t},\r\n\tDownloadedReviewed: {\r\n\t\tkey: 'DownloadedReviewed',\r\n\t\ttext: 'Downloaded, Reviewed',\r\n\t},\r\n};\r\n\r\nexport default DownloadType;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport * as Util from '../../../util';\r\nimport ShelfType from '../ShelfType';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\n\r\nconst ShelvesContext = React.createContext();\r\n\r\nconst name = 'shelvesDataStore';\r\n\r\nexport const useShelves = () => React.useContext(ShelvesContext);\r\n\r\nexport const connectToShelves = makeConnectTo(ShelvesContext, name);\r\n\r\nclass ShelvesDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t\tuserDataStore: PropTypes.object,\r\n\t};\r\n\r\n\tstate = {\r\n\t\tshelves: [],\r\n\t\tselectedMenuOption: ShelfType.AnticipatingMild.key,\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst shelvesDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(shelvesDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { isAnonymous } = this.props.userDataStore;\r\n\t\tif (!isAnonymous()) {\r\n\t\t\tthis.fetchShelves();\r\n\t\t} else {\r\n\t\t\tthis.setState({ isLoading: false });\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.shelvesFetch && this.shelvesFetch.cancel) {\r\n\t\t\tthis.shelvesFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshShelves(),\r\n\t\tsetShelves: (skus, shelf) => this.setShelves(skus, shelf),\r\n\t\tsetSelectedMenuOption: selectedMenuOption =>\r\n\t\t\tthis.setSelectedMenuOption(selectedMenuOption),\r\n\t});\r\n\r\n\trefreshShelves = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchShelves();\r\n\t\treturn this.shelvesFetch.promise;\r\n\t};\r\n\r\n\tfetchShelves = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/me/shelves`);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.shelvesFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst shelves = apiResponse && Util.createTitleObject(apiResponse);\r\n\t\tthis.setState({ shelves: shelves || [], isLoading: false });\r\n\t};\r\n\r\n\tgetShelves = apiResponse => {\r\n\t\tconst {\r\n\t\t\tshelves,\r\n\t\t\tproducts,\r\n\t\t\tdownloadableSkus,\r\n\t\t\trequestableSkus,\r\n\t\t} = apiResponse;\r\n\t\tif (shelves && shelves[0].shelf !== 'Clear') {\r\n\t\t\treturn shelves.map(shelf => {\r\n\t\t\t\tconst product =\r\n\t\t\t\t\tproducts && products.filter(pr => pr.sku === shelf.sku)[0];\r\n\t\t\t\tconst isRequestable =\r\n\t\t\t\t\trequestableSkus &&\r\n\t\t\t\t\trequestableSkus.filter(rs => rs === shelf.sku)[0];\r\n\t\t\t\tconst isDownloadable =\r\n\t\t\t\t\tdownloadableSkus &&\r\n\t\t\t\t\tdownloadableSkus.filter(dl => dl === shelf.sku)[0];\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...shelf,\r\n\t\t\t\t\tproduct,\r\n\t\t\t\t\tisRequestable,\r\n\t\t\t\t\tisDownloadable,\r\n\t\t\t\t\turi:\r\n\t\t\t\t\t\tproduct &&\r\n\t\t\t\t\t\tproduct.images &&\r\n\t\t\t\t\t\tproduct.images.filter(im => im.type === 'jacketCover')\r\n\t\t\t\t\t\t\t.length > 0 &&\r\n\t\t\t\t\t\tproduct.images.filter(\r\n\t\t\t\t\t\t\tim => im.type === 'jacketCover',\r\n\t\t\t\t\t\t)[0].uri + '?height=450',\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tsetShelves = (skus, shelf) => {\r\n\t\tapi.post(`/api/v1/me/shelves/${shelf}`, skus).then(() => {\r\n\t\t\tthis.refreshShelves();\r\n\t\t});\r\n\t};\r\n\r\n\tsetSelectedMenuOption = selectedMenuOption => {\r\n\t\tthis.setState({ selectedMenuOption });\r\n\t};\r\n}\r\n\r\nexport default connectToUser(ShelvesDataStore);\r\n","import React from 'react';\r\nimport api from '../Api';\r\nimport queryString from 'query-string';\r\nimport { connectToUser } from './User/containers/UserDataStore';\r\n\r\nconst UserPreferencesContext = React.createContext();\r\n\r\nexport const useUserPreferences = () =>\r\n\tReact.useContext(UserPreferencesContext);\r\n\r\nexport const connectToUserPreferences = Component => {\r\n\treturn props => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{userPreferences => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n};\r\n\r\nclass UserPreferences extends React.Component {\r\n\tstate = {\r\n\t\tfonts: {\r\n\t\t\taccentFontColor: '#5e4770',\r\n\t\t},\r\n\t\treviewCopyDownloadPreferences: {},\r\n\t\tuserAttributes: {},\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidUpdate(prevprops) {\r\n\t\tif (\r\n\t\t\tprevprops.userDataStore.isLoading() !==\r\n\t\t\tthis.props.userDataStore.isLoading()\r\n\t\t) {\r\n\t\t\tthis.getUserPreferences();\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.getUserPreferences();\r\n\t}\r\n\r\n\tgetUserPreferences() {\r\n\t\tconst { isAnonymous, isLoading } = this.props.userDataStore;\r\n\t\tif (isLoading()) return;\r\n\t\tif (!isAnonymous()) {\r\n\t\t\tthis.fetchUserAttributes();\r\n\t\t\tthis.fetchReviewCopyDownloadPreferences();\r\n\t\t\tthis.fetchUserPreferences();\r\n\t\t}\r\n\t}\r\n\r\n\tgetDataStore = (state = this.state) => {\r\n\t\treturn {\r\n\t\t\tstate,\r\n\t\t\tgetFonts: () => this.state.fonts,\r\n\t\t\tgetUserAttributes: () => this.state.userAttributes,\r\n\t\t\tgetReviewCopyDownloadPreferences: () =>\r\n\t\t\t\tthis.state.reviewCopyDownloadPreferences,\r\n\t\t\tsaveKindlePreferences: (email, kindleDownloadMethod) => {\r\n\t\t\t\treturn api\r\n\t\t\t\t\t.put(\r\n\t\t\t\t\t\t`/api/v1/me/preferences/reviewCopyDownload/kindle/${kindleDownloadMethod}`,\r\n\t\t\t\t\t\temail,\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(() => this.fetchReviewCopyDownloadPreferences());\r\n\t\t\t},\r\n\t\t\tsaveDrcDownloadFormatPreference: format => {\r\n\t\t\t\treturn api\r\n\t\t\t\t\t.put(\r\n\t\t\t\t\t\t`/api/v1/me/preferences/reviewCopyDownload/preferredFormat/${format}`,\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(() => this.fetchReviewCopyDownloadPreferences());\r\n\t\t\t},\r\n\t\t\tsaveRoleSummary: async roleSummaryKey =>\r\n\t\t\t\tawait this.saveRoleSummary(roleSummaryKey),\r\n\t\t\tsaveRoleDescription: async roleDescription =>\r\n\t\t\t\tawait this.saveRoleDescription(roleDescription),\r\n\t\t\tsaveLinks: async (linksValuesById, appUserId) =>\r\n\t\t\t\tawait this.saveLinks(linksValuesById, appUserId),\r\n\t\t};\r\n\t};\r\n\r\n\tfetchUserAttributes() {\r\n\t\tapi.get('/api/v1/me/attributes').then(userAttributes =>\r\n\t\t\tthis.setState({ userAttributes }),\r\n\t\t);\r\n\t}\r\n\r\n\tfetchReviewCopyDownloadPreferences() {\r\n\t\tapi.get('/api/v1/me/preferences/reviewCopyDownload')\r\n\t\t\t.then(reviewCopyDownloadPreferences =>\r\n\t\t\t\tthis.setState({ reviewCopyDownloadPreferences }),\r\n\t\t\t)\r\n\t\t\t.catch(e => console.error(e))\r\n\t\t\t.finally(\r\n\t\t\t\tthis.setState({\r\n\t\t\t\t\tisLoading: false,\r\n\t\t\t\t}),\r\n\t\t\t);\r\n\t}\r\n\r\n\tfetchUserPreferences() {\r\n\t\tvar userPreferenceDtosFilter = [\r\n\t\t\t{ type: 'fonts', name: 'accFontOption' },\r\n\t\t];\r\n\t\tapi.post(\r\n\t\t\t'/api/v1/me/preferences?format=object',\r\n\t\t\tuserPreferenceDtosFilter,\r\n\t\t).then(prefsResult => {\r\n\t\t\tif (typeof prefsResult !== 'undefined' && prefsResult !== null) {\r\n\t\t\t\tthis.setState(prefsResult);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsaveRoleSummary = async roleSummaryKey => {\r\n\t\tconst urlBase = process.env.REACT_APP_EPLUS_REQUEST_URL;\r\n\t\tvar values = {\r\n\t\t\tuserRole: roleSummaryKey,\r\n\t\t};\r\n\t\tconst stringifiedData = queryString.stringify(values);\r\n\t\tconst url = `${urlBase}/GetJSONData.aspx?m=User&\r\n\t\t\tbuilder=saveUserRole&${stringifiedData}`;\r\n\r\n\t\tconst response = await fetch(url, {\r\n\t\t\tmethod: 'GET',\r\n\t\t\tcredentials: 'include',\r\n\t\t});\r\n\t\tconst res = await response.json();\r\n\r\n\t\tlet didSucceed = false;\r\n\t\tif (res.code === 'SUCCESS') {\r\n\t\t\tthis.fetchReviewCopyDownloadPreferences();\r\n\t\t\tdidSucceed = true;\r\n\t\t}\r\n\t\treturn didSucceed;\r\n\t};\r\n\r\n\tsaveRoleDescription = async roleDescription => {\r\n\t\tthis.setState({ isLoading: true });\r\n\t\tconst url = '/api/v1/me/galleys/requests/role';\r\n\t\tlet didSucceed;\r\n\t\ttry {\r\n\t\t\tawait api.post(url, roleDescription);\r\n\t\t\tthis.fetchReviewCopyDownloadPreferences();\r\n\t\t\tdidSucceed = true;\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error(e);\r\n\t\t\tdidSucceed = false;\r\n\t\t\tthis.setState({ isLoading: false });\r\n\t\t} finally {\r\n\t\t\treturn didSucceed;\r\n\t\t}\r\n\t};\r\n\r\n\tsaveLinks = async (linkValuesById, appUserId) => {\r\n\t\tconst urlBase = process.env.REACT_APP_EPLUS_REQUEST_URL;\r\n\t\tconst saveLinksData = {\r\n\t\t\t...linkValuesById,\r\n\t\t\tappUserId,\r\n\t\t};\r\n\t\tconst stringifiedData = queryString.stringify(saveLinksData);\r\n\t\tconst url = `${urlBase}/GetJSONData.aspx?m=User&\r\n\t\t\tbuilder=SaveUserProfileLinks&${stringifiedData}`;\r\n\r\n\t\tconst response = await fetch(url, {\r\n\t\t\tmethod: 'GET',\r\n\t\t\tcredentials: 'include',\r\n\t\t});\r\n\t\tconst res = await response.json();\r\n\r\n\t\tlet didSucceed = false;\r\n\t\tif (res.code === 'SUCCESS') {\r\n\t\t\tthis.fetchUserAttributes();\r\n\t\t\tdidSucceed = true;\r\n\t\t}\r\n\t\treturn didSucceed;\r\n\t};\r\n}\r\n\r\nexport default connectToUser(UserPreferences);\r\n","const ReviewType = {\r\n\tAll: {\r\n\t\tkey: 'All',\r\n\t\ttext: 'All',\r\n\t\tdoShowIfZero: true,\r\n\t\tdontFilter: true,\r\n\t},\r\n\tRated0to2: {\r\n\t\tkey: 'Rated0to2',\r\n\t\ttext: 'Rated 0-2',\r\n\t\tlowRating: 0,\r\n\t\thighRating: 2,\r\n\t\tshowAsPanel: true,\r\n\t},\r\n\tRated3to5: {\r\n\t\tkey: 'Rated3to5',\r\n\t\ttext: 'Rated 3-5',\r\n\t\tlowRating: 3,\r\n\t\thighRating: 5,\r\n\t\tshowAsPanel: true,\r\n\t},\r\n\tRated6to8: {\r\n\t\tkey: 'Rated6to8',\r\n\t\ttext: 'Rated 6-8',\r\n\t\tlowRating: 6,\r\n\t\thighRating: 8,\r\n\t\tshowAsPanel: true,\r\n\t},\r\n\tRated9to10: {\r\n\t\tkey: 'Rated9to10',\r\n\t\ttext: 'Rated 9-10',\r\n\t\tlowRating: 9,\r\n\t\thighRating: 10,\r\n\t\tshowAsPanel: true,\r\n\t},\r\n};\r\n\r\nexport default ReviewType;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button } from 'antd';\r\nimport './communityButton.css';\r\n\r\nexport default class CommunityButton extends React.Component {\r\n\tstatic propTypes = {\r\n\t\ttext: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\r\n\t\ticon: PropTypes.string,\r\n\t\ticonClass: PropTypes.string,\r\n\t\tchildren: PropTypes.element,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { text, icon, iconClass } = this.props;\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{text &&
{text}
}\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport { message } from 'antd';\r\n\r\nconst CollaborativeListsContext = React.createContext();\r\n\r\nconst name = 'collaborativeListsDataStore';\r\n\r\nexport const useCollaborativeLists = () =>\r\n\tReact.useContext(CollaborativeListsContext);\r\n\r\nexport const connectToCollaborativeLists = makeConnectTo(\r\n\tCollaborativeListsContext,\r\n\tname,\r\n);\r\n\r\nexport default class CollaborativeListsDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tcollaborativeListsData: {},\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst collaborativeListsDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(collaborativeListsDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchCollaborativeLists();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (\r\n\t\t\tthis.collaborativeListsFetch &&\r\n\t\t\tthis.collaborativeListsFetch.cancel\r\n\t\t) {\r\n\t\t\tthis.collaborativeListsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshCollaborativeLists(),\r\n\t\tgetListDetails: listId => this.getListDetails(listId),\r\n\t\tchangeFilingStatus: listFiling => this.changeFilingStatus(listFiling),\r\n\t\tfetchCollaborativeListsByCommunity: communityId =>\r\n\t\t\tthis.fetchCollaborativeListsByCommunity(communityId),\r\n\t\tcreateList: (values, onSuccess) => this.createList(values, onSuccess),\r\n\t\tupdateList: (values, onSuccess) => this.updateList(values, onSuccess),\r\n\t});\r\n\r\n\tcreateList = (values, onSuccess) => {\r\n\t\tconst endpoint = `/api/v1/collaborativeTitleList`;\r\n\r\n\t\tapi.post(endpoint, values).then(\r\n\t\t\t() => this.refreshCollaborativeLists(),\r\n\t\t\tonSuccess(),\r\n\t\t);\r\n\t};\r\n\r\n\tupdateList = (values, onSuccess) => {\r\n\t\tconst endpoint = `/api/v1/collaborativeTitleList`;\r\n\r\n\t\tapi.put(endpoint, values).then(\r\n\t\t\t() => this.refreshCollaborativeLists(),\r\n\t\t\tonSuccess(),\r\n\t\t);\r\n\t};\r\n\r\n\trefreshCollaborativeLists = (bypassLoad = false) => {\r\n\t\tif (!bypassLoad) {\r\n\t\t\tthis.setState({ isLoading: true });\r\n\t\t}\r\n\t\tthis.fetchCollaborativeLists();\r\n\t\treturn this.collaborativeListsFetch.promise;\r\n\t};\r\n\r\n\tfetchCollaborativeLists = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/collaborativeTitleLists/0`);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.collaborativeListsFetch = request;\r\n\t};\r\n\r\n\tfetchCollaborativeListsByCommunity = communityId => {\r\n\t\tthis.setState({ isLoading: true });\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/collaborativeTitleLists/${communityId}`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.collaborativeListsFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst collaborativeListsData =\r\n\t\t\tapiResponse && this.getCollaborativeListsData(apiResponse);\r\n\t\tthis.setState({ collaborativeListsData, isLoading: false });\r\n\t};\r\n\r\n\tgetCollaborativeListsData = apiResponse => {\r\n\t\tconst r = apiResponse;\r\n\t\tconst mostRecentDates = r.mostRecentAdds\r\n\t\t\t.concat(r.mostRecentVotes)\r\n\t\t\t.concat(r.mostRecentComments)\r\n\t\t\t.sort((a, b) => new Date(b.createdDate) - new Date(a.createdDate));\r\n\t\treturn {\r\n\t\t\tlistItems: this.mergeImagesIntoProducts(\r\n\t\t\t\tr.coverListItems,\r\n\t\t\t\tr.productImageUrisBySku,\r\n\t\t\t),\r\n\t\t\tlists: this.buildListsByMostRecent(mostRecentDates, r).sort(\r\n\t\t\t\t(a, b) => new Date(b.mostRecent) - new Date(a.mostRecent),\r\n\t\t\t),\r\n\t\t};\r\n\t};\r\n\r\n\tgetListDetails = listId => {\r\n\t\treturn this.state.collaborativeListsData.lists.filter(\r\n\t\t\tlist => Number(list.id) === Number(listId),\r\n\t\t)[0];\r\n\t};\r\n\r\n\tgetListSummaries = r => {\r\n\t\treturn r.votes;\r\n\t};\r\n\r\n\tmergeImagesIntoProducts(listItems, productImageUrisBySku) {\r\n\t\treturn listItems.map(li => ({\r\n\t\t\t...li,\r\n\t\t\timage:\r\n\t\t\t\tli.sku in productImageUrisBySku &&\r\n\t\t\t\tproductImageUrisBySku[li.sku],\r\n\t\t}));\r\n\t}\r\n\r\n\tbuildListsByMostRecent(mostRecentDates, r) {\r\n\t\tconst {\r\n\t\t\tlists,\r\n\t\t\tlistItems,\r\n\t\t\tquantities,\r\n\t\t\tcomments,\r\n\t\t\tvotes,\r\n\t\t\tfilings,\r\n\t\t\tuserAvatarsByAppUserId,\r\n\t\t\tusersById,\r\n\t\t} = r;\r\n\t\treturn lists.map(li => ({\r\n\t\t\t...li,\r\n\t\t\tlistItems: listItems.filter(list => list.listId === li.id),\r\n\t\t\tmostRecent:\r\n\t\t\t\tmostRecentDates.filter(mrd => mrd.listId === li.id).length >\r\n\t\t\t\t\t0 &&\r\n\t\t\t\tmostRecentDates.filter(mrd => mrd.listId === li.id)[0]\r\n\t\t\t\t\t.createdDate,\r\n\t\t\tquantities: quantities.filter(qu => qu.listId === li.id),\r\n\t\t\tcomments: comments.filter(com => com.listId === li.id),\r\n\t\t\tvotes: votes.filter(com => com.listId === li.id),\r\n\t\t\tfiling:\r\n\t\t\t\tfilings.filter(fil => fil.listId === li.id).length > 0 &&\r\n\t\t\t\tfilings.filter(fil => fil.listId === li.id)[0],\r\n\t\t\tuserAvatar:\r\n\t\t\t\tuserAvatarsByAppUserId[li.appUserId] &&\r\n\t\t\t\tuserAvatarsByAppUserId[li.appUserId],\r\n\t\t\tuser: usersById[li.appUserId] && usersById[li.appUserId],\r\n\t\t}));\r\n\t}\r\n\r\n\tchangeFilingStatus(listFiling) {\r\n\t\tapi.post('/api/v1/collaborativeTitleList/filing', listFiling).then(\r\n\t\t\t() => {\r\n\t\t\t\tthis.refreshCollaborativeLists(true);\r\n\t\t\t\tmessage.success(listFiling.filingMessage);\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class Layout extends Component {\r\n displayName = Layout.name\r\n\r\n render() {\r\n return (\r\n
\r\n {this.props.children}\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport default class Forbidden extends React.Component {\r\n\tstatic propTypes = {\r\n\t\terrorMessage: PropTypes.string,\r\n\t};\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t

Access Denied

\r\n\t\t\t\t

\r\n\t\t\t\t\tUh oh... looks like you are not authorized to view this\r\n\t\t\t\t\tpage.\r\n\t\t\t\t

\r\n\t\t\t\t

{this.showError()}

\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n\r\n\tshowError() {\r\n\t\tconst { errorMessage: msg } = this.props;\r\n\t\treturn msg && typeof msg === 'string' ? msg : null;\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Forbidden from './Forbidden';\r\nimport BackToHomeButton from '../UI/Actions/BackToHomeButton';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nexport const ErrorTypes = {\r\n\tforbidden: 'forbidden',\r\n\tunauthorized: 'unauthorized',\r\n};\r\n\r\nexport default class ErrorBoundary extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([\r\n\t\t\tPropTypes.element,\r\n\t\t\tPropTypes.arrayOf(PropTypes.element),\r\n\t\t]).isRequired,\r\n\t\tFallbackComponent: PropTypes.element, // not required\r\n\t\tdoLocalize: PropTypes.bool,\r\n\t};\r\n\r\n\tstate = { hasError: false, error: null };\r\n\r\n\trender() {\r\n\t\tconst { FallbackComponent: Fallback } = this.props;\r\n\r\n\t\tif (this.hasForbiddenError()) {\r\n\t\t\tconst msg = this.state.error ? this.state.error.message : '';\r\n\t\t\treturn ;\r\n\t\t}\r\n\r\n\t\tif (this.state.hasError) {\r\n\t\t\t// Render any custom fallback UI\r\n\t\t\treturn Fallback ? : this.defaultFallback();\r\n\t\t}\r\n\r\n\t\treturn this.props.children;\r\n\t}\r\n\r\n\t// Update state so the next render will show the fallback UI.\r\n\tstatic getDerivedStateFromError(error) {\r\n\t\treturn { hasError: true, error };\r\n\t}\r\n\r\n\t// Log the error to an error reporting service\r\n\tcomponentDidCatch(error, info) {\r\n\t\tconsole.error(error, info);\r\n\t}\r\n\r\n\thasForbiddenError() {\r\n\t\treturn (\r\n\t\t\tthis.state.error && this.state.error.type === ErrorTypes.forbidden\r\n\t\t);\r\n\t}\r\n\r\n\tdefaultFallback() {\r\n\t\tconst rootStyle = {\r\n\t\t\tpaddingTop: '5rem',\r\n\t\t\tpaddingLeft: '2rem',\r\n\t\t\theight: '100vh',\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t

\r\n\t\t\t\t\t{this.props.doLocalize ? (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t'Sorry, something went wrong.'\r\n\t\t\t\t\t)}\r\n\t\t\t\t

\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nErrorBoundary.defaultProps = {\r\n\tdoLocalize: true,\r\n};\r\n","import { useEffect } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\n\r\nfunction ScrollToTop({ history }) {\r\n useEffect(() => {\r\n const unlisten = history.listen(() => {\r\n window.scrollTo(0, 0);\r\n });\r\n return () => {\r\n unlisten();\r\n }\r\n }, []);\r\n\r\n return (null);\r\n}\r\n\r\nexport default withRouter(ScrollToTop);","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport useActiveRoute from '../hooks/useActiveRoute';\r\n\r\nNavigationAnchorRoot.propTypes = {\r\n\tonClick: PropTypes.func,\r\n\troutes: PropTypes.arrayOf(PropTypes.string),\r\n\talsoMatches: PropTypes.arrayOf(PropTypes.object), // array of RegExp\r\n\tchildren: PropTypes.oneOfType([\r\n\t\tPropTypes.element,\r\n\t\tPropTypes.arrayOf(PropTypes.element),\r\n\t]),\r\n};\r\n\r\nNavigationAnchorRoot.defaultProps = {\r\n\talsoMatches: [],\r\n};\r\n\r\nexport default function NavigationAnchorRoot({\r\n\troutes,\r\n\tchildren,\r\n\talsoMatches,\r\n\ticon,\r\n}) {\r\n\tconst { isAnyRouteActive, isAnyMatchActive } = useActiveRoute(\r\n\t\troutes,\r\n\t\talsoMatches,\r\n\t);\r\n\r\n\tconst activeName = 'nav-anchor-active';\r\n\r\n\tconst isNavAnchorActive = () => {\r\n\t\treturn isAnyRouteActive() || isAnyMatchActive();\r\n\t};\r\n\r\n\tconst baseName = 'footer-navigation-anchor column';\r\n\tconst isActive = isNavAnchorActive();\r\n\r\n\tconst className = isActive ? `${baseName} ${activeName}` : baseName;\r\n\r\n\tconst isHelpIcon = icon === 'help-icon';\r\n\r\n\tconst renderHelpDesk = () => {\r\n\t\twindow.FreshworksWidget('open');\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{children}\r\n\t\t
\r\n\t);\r\n}\r\n","import { useLocation } from 'react-router-dom';\r\n\r\nexport default function useActiveRoute(routesToCheck = [], alsoMatches = []) {\r\n\tconst { pathname } = useLocation();\r\n\r\n\tconst isAnyMatchActive = () => {\r\n\t\tfor (let i = 0; i < alsoMatches.length; i++) {\r\n\t\t\tif (alsoMatches[i].test(pathname)) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\tconst isAnyRouteActive = () => {\r\n\t\tconst predicate = r => pathname.indexOf(r) > -1;\r\n\t\tconst activeRoutes = routesToCheck.filter(predicate);\r\n\t\treturn activeRoutes.length > 0;\r\n\t};\r\n\r\n\treturn {\r\n\t\tisAnyRouteActive,\r\n\t\tisAnyMatchActive,\r\n\t\tisActive: route => pathname === route,\r\n\t};\r\n}","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\nimport NavigationAnchorRoot from './NavigationAnchorRoot';\r\n\r\nNavigationAnchor.propTypes = {\r\n\ticon: PropTypes.string,\r\n\tlabel: PropTypes.oneOfType([\r\n\t\tPropTypes.element,\r\n\t\tPropTypes.string,\r\n\t\tPropTypes.any,\r\n\t]),\r\n\tlinkTo: PropTypes.string,\r\n\talsoMatches: PropTypes.arrayOf(PropTypes.object), // array of RegExp\r\n};\r\n\r\nNavigationAnchor.defaultProps = {\r\n\talsoMatches: [],\r\n};\r\n\r\nexport default function NavigationAnchor({ icon, label, linkTo, alsoMatches }) {\r\n\tconst getNavigationAnchorIcon = () => (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t
{label}
\r\n\t\t\r\n\t);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{linkTo ? (\r\n\t\t\t\t{getNavigationAnchorIcon()}\r\n\t\t\t) : (\r\n\t\t\t\tgetNavigationAnchorIcon()\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n}\r\n","import { Translate } from '@above-the-treeline/localization';\r\n\r\nconst LinkName = {\r\n\tSearch: '/search',\r\n\tHome: '/home',\r\n\tYourBooks: '/yourbooks',\r\n\tHelp: '/help',\r\n};\r\n\r\nexport interface INavigationItem {\r\n\ticon: string;\r\n\tlabel: string | React.ReactNode;\r\n\tlinkTo?: string;\r\n}\r\n\r\nconst NavigationItemsEnum = {\r\n\tHomeNav: {\r\n\t\ticon: 'home',\r\n\t\tlabel: ,\r\n\t\tlinkTo: LinkName.Home,\r\n\t},\r\n\tSearchNav: {\r\n\t\ticon: 'search-icon',\r\n\t\tlabel: ,\r\n\t\tlinkTo: LinkName.Search,\r\n\t},\r\n\tYourBooksNav: {\r\n\t\ticon: 'books',\r\n\t\tlabel: ,\r\n\t\tlinkTo: LinkName.YourBooks,\r\n\t},\r\n\tFeedbackNav: {\r\n\t\ticon: 'help-icon',\r\n\t\tlabel: ,\r\n\t},\r\n};\r\n\r\nexport default NavigationItemsEnum;\r\n","import React, { Fragment } from 'react';\r\nimport './landingFooter.less';\r\nimport NavigationAnchor from './NavigationAnchor';\r\nimport NavigationItemsEnum, { INavigationItem } from './NavigationItemsEnum';\r\n\r\nfunction LandingFooter(): JSX.Element {\r\n\tconst renderNavItem = (navItem: INavigationItem): JSX.Element => {\r\n\t\treturn ;\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
 
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{Object.keys(NavigationItemsEnum).map((navItem, i) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{renderNavItem(NavigationItemsEnum[navItem])}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default LandingFooter;\r\n","import { useState } from 'react';\r\nimport useScript from 'react-script-hook';\r\n\r\nconst pathToJS = 'js/edelweissConnect.js';\r\n\r\nconst cdnUrl = process.env.REACT_APP_EDELWEISS_CONNECT_CDN_URL;\r\n\r\nconst bookfestUrl = process.env.REACT_APP_BOOKFEST_URL;\r\n\r\nconst showConnect = () =>\r\n\tprocess.env.REACT_APP_SHOW_EDELWEISS_CONNECT === 'true' &&\r\n\ttypeof window.edelweissConnect === 'function';\r\n\r\nconst initConnect = () => {\r\n\tif (!showConnect()) return;\r\n\treturn window.edelweissConnect({\r\n\t\tcdnUrl,\r\n\t\tapp: `${bookfestUrl}/sessions`,\r\n\t\ttexts: {\r\n\t\t\topen: 'Connect',\r\n\t\t\topening: 'Loading...',\r\n\t\t\tclose: 'Close',\r\n\t\t},\r\n\t});\r\n};\r\n\r\nconst deinitConnect = eConnect => {\r\n\tif (!showConnect()) return;\r\n\teConnect.deinit();\r\n\tconst buttons = document.getElementsByClassName('visibility-toggle-anchor');\r\n\tbuttons.forEach(btn => btn.remove && btn.remove());\r\n};\r\n\r\nexport default function useEdelweissConnect(isMobile) {\r\n\tconst [eConnect, setConnect] = useState(null);\r\n\r\n\tconst initConnectOnLoad = () => {\r\n\t\tconst eConnect = initConnect();\r\n\t\tsetConnect(eConnect);\r\n\t};\r\n\r\n\tconst [loading, error] = useScript({\r\n\t\tsrc: `${cdnUrl}/${pathToJS}`,\r\n\t\tonload: () => {\r\n\t\t\tif (!isMobile()) {\r\n\t\t\t\tinitConnectOnLoad();\r\n\t\t\t}\r\n\t\t},\r\n\t});\r\n\r\n\treturn {\r\n\t\terror,\r\n\t\tloading,\r\n\t\tinit: initConnectOnLoad,\r\n\t\tisActive: eConnect !== null,\r\n\t\tdeinit: () => {\r\n\t\t\tdeinitConnect(eConnect);\r\n\t\t\tsetConnect(null);\r\n\t\t},\r\n\t};\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport useEdelweissConnect from './useEdelweissConnect';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\n\r\nEdelweissConnectInitializer.propTypes = {\r\n\tisMobile: PropTypes.func,\r\n\tchildren: PropTypes.oneOfType([\r\n\t\tPropTypes.arrayOf(PropTypes.node),\r\n\t\tPropTypes.node,\r\n\t]),\r\n};\r\n\r\nfunction EdelweissConnectInitializer({ children, isMobile }) {\r\n\tuseEdelweissConnect(isMobile);\r\n\treturn children;\r\n}\r\n\r\nexport default withIsMobile(EdelweissConnectInitializer);\r\n","import React from 'react';\r\nimport { Card } from 'antd';\r\nimport { RegistrationTypes } from '../AnonymousHeader/RegistrationModal/RegistrationEnums';\r\nimport WrappedRegistrationForm from '../AnonymousHeader/RegistrationModal/RegistrationForm/RegistrationForm';\r\nimport './passwordReset.less';\r\n\r\ntype PasswordResetProps = {\r\n\tuserToken: string;\r\n};\r\n\r\nexport default function PasswordReset({ userToken }: PasswordResetProps) {\r\n\tconst [isLoading, setIsLoading] = React.useState(false);\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { Button, Icon, Modal } from 'antd';\r\nimport { useAccountOrMembershipRequiredModalContext } from './contexts/AccountOrMembershipRequiredModalContext';\r\nimport RegistrationModalLinks from '../AnonymousHeader/RegistrationModal/RegistrationModalLinks/RegistrationModalLinks';\r\nimport WrappedRegistrationForm from '../AnonymousHeader/RegistrationModal/RegistrationForm/RegistrationForm';\r\nimport { RegistrationTypes } from '../AnonymousHeader/RegistrationModal/RegistrationEnums';\r\nimport delay from '../../../util/delay';\r\nimport { useCommunities } from '../../Communities/containers/communitiesDataStore';\r\nimport { useUser } from '../../User/containers/UserDataStore';\r\nimport paths from '../../../paths';\r\nimport './accountOrMembershipRequiredModal.less';\r\nimport { getAccountRequiredModalTitle } from '../util';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nexport default function AccountOrMembershipRequiredModal() {\r\n\tconst {\r\n\t\tisVisible,\r\n\t\tsetIsVisible,\r\n\t\ttype,\r\n\t\tsetType,\r\n\t\tcommunity,\r\n\t} = useAccountOrMembershipRequiredModalContext();\r\n\tconst isAnonymous = useUser().isAnonymous();\r\n\tconst { joinCommunity } = useCommunities();\r\n\r\n\tconst [isLoading, setIsLoading] = React.useState(false);\r\n\r\n\tconst handleCancel = async () => {\r\n\t\tsetIsVisible(false);\r\n\t\tif (isAnonymous) {\r\n\t\t\tawait delay(500);\r\n\t\t\tsetType(RegistrationTypes.SignUp);\r\n\t\t\twindow.location.pathname.includes('/list/') && returnHome();\r\n\t\t}\r\n\t};\r\n\r\n\tconst returnHome = () => (window.location.href = paths.home());\r\n\r\n\tconst getMembershipRequiredModalContents = () => {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t joinCommunity(community.id)}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst getAccountRequiredModalContents = () => {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t{!isLoading && (\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{isAnonymous\r\n\t\t\t\t? getAccountRequiredModalContents()\r\n\t\t\t\t: getMembershipRequiredModalContents()}\r\n\t\t\r\n\t);\r\n}\r\n","const LandingPagePreference = {\r\n\tCommunity: 'Community',\r\n\tEdelweissPlus: 'EdelweissPlus',\r\n};\r\n\r\nconst LandingPageCookieName = 'treeline.landingpage';\r\n\r\nconst getLandingPageCookie = function(landingPage) {\r\n\tconst hostname = window.location.hostname;\r\n\tconst hostnameComponents = hostname.split('.');\r\n\r\n\tlet domain = hostname;\r\n\tif (hostnameComponents.length > 2) {\r\n\t\tconst length = hostnameComponents.length;\r\n\t\tdomain =\r\n\t\t\t'.' +\r\n\t\t\thostnameComponents[length - 2] +\r\n\t\t\t'.' +\r\n\t\t\thostnameComponents[length - 1];\r\n\t}\r\n\r\n\tconst expirationDate = new Date();\r\n\texpirationDate.setHours(expirationDate.getHours() + 1);\r\n\treturn {\r\n\t\tname: LandingPageCookieName,\r\n\t\tvalue: landingPage,\r\n\t\toptions: {\r\n\t\t\tdomain: domain,\r\n\t\t\texpires: expirationDate,\r\n\t\t\tsameSite: 'Strict',\r\n\t\t},\r\n\t};\r\n};\r\n\r\nexport default LandingPagePreference;\r\nexport { getLandingPageCookie, LandingPageCookieName };\r\n","export default __webpack_public_path__ + \"static/media/logo.6c7421db.png\";","export default __webpack_public_path__ + \"static/media/edelweiss-booksun.9ca11fbb.svg\";","export default __webpack_public_path__ + \"static/media/booksun.0de261e2.svg\";","import { Tooltip } from 'antd';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport WindowSizeThresholdsEnum from '../../enums/WindowSizeThresholdsEnum';\r\nimport paths from '../../paths';\r\nimport { usePreferences } from '../Preferences/containers/PreferencesDataStore';\r\nimport PreferenceType from '../Preferences/PreferenceType';\r\nimport PreferenceName from '../Preferences/PreferenceName';\r\nimport LandingPagePreference, {\r\n\tgetLandingPageCookie,\r\n\tLandingPageCookieName,\r\n} from '../Preferences/LandingPagePreference';\r\nimport { withCookies } from 'react-cookie';\r\nimport { useUser } from './containers/UserDataStore';\r\nimport logo from '../../assets/images/logo.png';\r\nimport edelweissBooksun from '../../assets/images/edelweiss-booksun.svg';\r\nimport booksun from '../../assets/images/booksun.svg';\r\nimport { useTranslate } from '@above-the-treeline/localization';\r\nimport './navigationAnchor.less';\r\n\r\nNavigationAnchor.propTypes = {\r\n\tcookies: PropTypes.object,\r\n\tisMobile: PropTypes.func,\r\n};\r\n\r\nfunction NavigationAnchor({ cookies, isMobile }) {\r\n\tconst isMobileSize = isMobile();\r\n\tconst { isAnonymous } = useUser();\r\n\tconst { addUserPreferenceWithPromise, getPreference } = usePreferences();\r\n\tconst { translate } = useTranslate();\r\n\r\n\tconst landingPage = getPreference(\r\n\t\tPreferenceType.landingPage,\r\n\t\tPreferenceName.preferred,\r\n\t);\r\n\r\n\tconst setEPlusAsLandingPageAndRedirectToEPlus = () => {\r\n\t\tconst landingPageCookie = cookies.get(LandingPageCookieName);\r\n\r\n\t\tif (landingPage || (landingPageCookie && landingPageCookie !== '')) {\r\n\t\t\taddUserPreferenceWithPromise(\r\n\t\t\t\tPreferenceType.landingPage,\r\n\t\t\t\tPreferenceName.preferred,\r\n\t\t\t\tLandingPagePreference.EdelweissPlus,\r\n\t\t\t).then(() => {\r\n\t\t\t\tconst cookie = getLandingPageCookie(\r\n\t\t\t\t\tLandingPagePreference.EdelweissPlus,\r\n\t\t\t\t);\r\n\t\t\t\tcookies.set(cookie.name, cookie.value, cookie.options);\r\n\t\t\t\twindow.location = process.env.REACT_APP_EPLUS_LINK_URL;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\twindow.location = process.env.REACT_APP_EPLUS_LINK_URL;\r\n\t\t}\r\n\t};\r\n\r\n\tconst ePlusIconMobile = (\r\n\t\t\r\n\t);\r\n\r\n\tconst ePlusIconDesktop = (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t{!isAnonymous() &&\r\n\t\t\t\t(isMobileSize ? ePlusIconMobile : ePlusIconDesktop)}\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default withCookies(\r\n\twithIsMobile(NavigationAnchor, WindowSizeThresholdsEnum.Medium),\r\n);\r\n\r\nconst Logo = () => {\r\n\treturn (\r\n\t\t\r\n\t\t\t\"community\r\n\t\t\r\n\t);\r\n};\r\n","import React from 'react';\r\nimport { Button } from 'antd';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport { RegistrationTypes } from './RegistrationEnums';\r\nimport './registrationModal.less';\r\n\r\ntype RegistrationModalAnchorsProps = {\r\n\thandleClick: (currentType: string) => void;\r\n};\r\n\r\nexport default function RegistrationModalAnchors({\r\n\thandleClick,\r\n}: RegistrationModalAnchorsProps): JSX.Element {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t handleClick(RegistrationTypes.SignUp)}>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t handleClick(RegistrationTypes.LogIn)}>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport NavigationAnchor from '../../User/NavigationAnchor';\r\nimport RegistrationModalAnchors from './RegistrationModal/RegistrationModalAnchors';\r\nimport './anonymousHeader.less';\r\nimport './../../AppHeader/appHeader.less';\r\nimport RegistrationModal from './RegistrationModal/RegistrationModal';\r\nimport { getRegistrationModalTitle } from '../util';\r\n\r\nexport default function AnonymousHeader(): JSX.Element {\r\n\tconst [isVisible, setIsVisible] = React.useState(false);\r\n\tconst [type, setType] = React.useState('');\r\n\r\n\tconst handleClick = (currentType: string) => {\r\n\t\tsetIsVisible(true);\r\n\t\tsetType(currentType);\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport './iconBadge.css';\r\n\r\nexport default class IconBadge extends React.Component {\r\n\trender() {\r\n\t\tconst { count, left } = this.props;\r\n\t\treturn
{count}
\r\n\t}\r\n}","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport UserAvatar from 'treeline-react-core-components/UserAvatar';\r\nimport { connectToUser } from './containers/UserDataStore';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport { Link } from 'react-router-dom';\r\nimport paths from '../../paths';\r\nimport './userOverview.less';\r\n\r\nUserOverview.propTypes = {\r\n\tuserDataStore: PropTypes.object,\r\n\tclosePopover: PropTypes.func,\r\n};\r\n\r\nfunction UserOverview({ userDataStore, closePopover }) {\r\n\tconst renderCommunicationSettingsLink = () => (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n\r\n\tconst renderProfileEditorLink = () => (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n\r\n\tconst signOut = () => {\r\n\t\tconst logoutUrl = userDataStore.getLogoutUrl();\r\n\r\n\t\tfetch(logoutUrl, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tcredentials: 'include',\r\n\t\t}).then(() => {\r\n\t\t\twindow.location.reload();\r\n\t\t});\r\n\t};\r\n\r\n\tconst { isLoading, user } = userDataStore.state;\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{!isLoading && (\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSign Out\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{user.userAvatar && (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{user.userAvatar.displayName}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{user.userAvatar.displayName !==\r\n\t\t\t\t\t\t\tuser.organization.name ? (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{user.organization.name}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{user.organization &&\r\n\t\t\t\t\t\t\tuser.organization.address &&\r\n\t\t\t\t\t\t\tuser.organization.address.city &&\r\n\t\t\t\t\t\t\tuser.organization.address.stateProvince ? (\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t{user.organization.address.city}{' '}\r\n\t\t\t\t\t\t\t\t\t{user.organization.address.stateProvince}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{user.user.classification}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{renderProfileEditorLink()}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{renderCommunicationSettingsLink()}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default connectToUser(UserOverview);\r\n","import paths from '../../paths';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nconst TopMenuItems = {\r\n\tHomeNav: {\r\n\t\ticon: 'home',\r\n\t\ticonClass: 'home-nav-icon',\r\n\t\tlinkTo: paths.home(),\r\n\t\tlabel: ,\r\n\t},\r\n\tNotificationsNav: {\r\n\t\ticon: 'bell-o',\r\n\t\ticonClass: 'notification-nav-icon',\r\n\t\tlinkTo: paths.notifications(),\r\n\t\tlabel: ,\r\n\t\tbadgeLeft: 43,\r\n\t},\r\n\tYourBooksNav: {\r\n\t\ticon: 'books',\r\n\t\ticonClass: 'yourbooks-nav-icon',\r\n\t\tlinkTo: paths.yourBooks(),\r\n\t\tlabel: ,\r\n\t},\r\n};\r\n\r\nexport default TopMenuItems;\r\n","import { Popover } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useState } from 'react';\r\nimport { Link, withRouter } from 'react-router-dom';\r\nimport UserAvatar from 'treeline-react-core-components/UserAvatar';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport WindowSizeThresholdsEnum from '../../enums/WindowSizeThresholdsEnum';\r\nimport DrawerAnchor from '../UI/DrawerAnchor';\r\nimport IconBadge from '../UI/IconBadge';\r\nimport ViewType from '../UI/ViewType';\r\nimport { connectToUser } from '../User/containers/UserDataStore';\r\nimport { connectToNotices } from '../User/Notices/containers/NoticesDataStore';\r\nimport UserOverview from '../User/UserOverview';\r\nimport combineConnectors from '../util/combineConnectors';\r\nimport YourBooks from '../YourBooks/YourBooks';\r\nimport YourBooksDrawerContext from '../YourBooks/YourBooksDrawerContext';\r\nimport HeaderTitleSearchAutocomplete from './HeaderTitleSearchAutocomplete';\r\nimport TopMenuItems from './TopMenuItems';\r\nimport './userAccountAnchor.less';\r\n\r\nUserAccountAnchor.propTypes = {\r\n\tlocation: PropTypes.object,\r\n\tisMobile: PropTypes.func,\r\n\tuserDataStore: PropTypes.object,\r\n\tnoticesDataStore: PropTypes.object,\r\n};\r\n\r\nfunction UserAccountAnchor({\r\n\tlocation,\r\n\tisMobile,\r\n\tuserDataStore,\r\n\tnoticesDataStore,\r\n}) {\r\n\tconst [\r\n\t\tisUserOverviewPopoverVisible,\r\n\t\tsetIsUserOverviewPopoverVisible,\r\n\t] = useState(false);\r\n\r\n\tconst handleUserOverviewPopoverVisiblityChange = isVisible => {\r\n\t\tsetIsUserOverviewPopoverVisible(isVisible);\r\n\t};\r\n\r\n\tconst closeUserOverviewPopover = () => {\r\n\t\tsetIsUserOverviewPopoverVisible(false);\r\n\t};\r\n\r\n\tconst renderItem = topMenuItem => {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t
{topMenuItem.label}
\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderTopMenuItem = (topMenuItem, badge) => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{topMenuItem === TopMenuItems.YourBooksNav ? (\r\n\t\t\t\t\t\trenderYourBookDrawerAnchor(topMenuItem)\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{renderItem(topMenuItem)}\r\n\t\t\t\t\t\t\t{badge && badge.length > 0 && (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderYourBookDrawerAnchor = topMenuItem => {\r\n\t\treturn (\r\n\t\t\t (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t;\r\n\t\t\t\t\t\r\n\t\t\t\t)}>\r\n\t\t\t\t{renderItem(topMenuItem)}\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst { HomeNav, NotificationsNav, YourBooksNav } = TopMenuItems;\r\n\tconst isMobileSize = isMobile();\r\n\tconst { userAvatar } = userDataStore.state;\r\n\tvar { notices } = noticesDataStore.state;\r\n\tnotices = notices && notices.filter(nt => !nt.status);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{!isMobileSize ? (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t{renderTopMenuItem(HomeNav)}\r\n\t\t\t\t\t{renderTopMenuItem(NotificationsNav, notices)}\r\n\t\t\t\t\t{renderTopMenuItem(YourBooksNav)}\r\n\t\t\t\t\r\n\t\t\t) : (\r\n\t\t\t\t\r\n\t\t\t\t\t{renderTopMenuItem(NotificationsNav, notices)}\r\n\t\t\t\t\r\n\t\t\t)}\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n}\r\n\r\nconst connectors = [connectToUser, connectToNotices, withRouter];\r\n\r\nexport default combineConnectors(connectors)(\r\n\twithIsMobile(UserAccountAnchor, WindowSizeThresholdsEnum.Medium),\r\n);\r\n","import * as React from 'react';\r\nimport { usePreferences } from '../Preferences/containers/PreferencesDataStore';\r\nimport { useCookies } from 'react-cookie';\r\nimport PreferenceType from '../Preferences/PreferenceType';\r\nimport PreferenceName from '../Preferences/PreferenceName';\r\nimport LandingPagePreference, {\r\n\tgetLandingPageCookie,\r\n} from '../Preferences/LandingPagePreference';\r\nimport { useLocation } from 'react-router-dom';\r\nimport paths from '../../paths';\r\nimport NavigationAnchor from '../User/NavigationAnchor';\r\nimport UserAccountAnchor from '../Navigation/UserAccountAnchor';\r\nimport './appHeader.less';\r\n\r\ntype Cookie = {\r\n\tname: string;\r\n\tvalue: string;\r\n\toptions: {\r\n\t\tdomain: string;\r\n\t\texpires: Date;\r\n\t\tsameSite: any;\r\n\t};\r\n};\r\n\r\nconst AppHeader = (): JSX.Element => {\r\n\tconst { getPreference } = usePreferences();\r\n\tconst [cookies, setCookie] = useCookies();\r\n\tconst location = useLocation();\r\n\r\n\tconst landingPageCookie = cookies['treeline.landingpage'];\r\n\tlet hasLandingPageSetToEPlus: boolean | undefined;\r\n\tconst isHomePage =\r\n\t\tlocation.pathname === paths.mainPage() ||\r\n\t\tlocation.pathname === paths.home();\r\n\r\n\tReact.useEffect(() => {\r\n\t\thandleRedirectBasedOnPreference();\r\n\t}, []);\r\n\r\n\tconst handleRedirectBasedOnPreference = () => {\r\n\t\tif (\r\n\t\t\ttypeof landingPageCookie === 'undefined' ||\r\n\t\t\tlandingPageCookie === ''\r\n\t\t) {\r\n\t\t\tconst landingPagePreference = getPreference(\r\n\t\t\t\tPreferenceType.landingPage,\r\n\t\t\t\tPreferenceName.preferred,\r\n\t\t\t);\r\n\r\n\t\t\tif (landingPagePreference) {\r\n\t\t\t\tconst landingPage =\r\n\t\t\t\t\tlandingPagePreference.value ===\r\n\t\t\t\t\tLandingPagePreference.EdelweissPlus\r\n\t\t\t\t\t\t? LandingPagePreference.EdelweissPlus\r\n\t\t\t\t\t\t: LandingPagePreference.Community;\r\n\r\n\t\t\t\tconst cookie: Cookie = getLandingPageCookie(landingPage);\r\n\t\t\t\tsetCookie(cookie.name, cookie.value, cookie.options);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\thasLandingPageSetToEPlus =\r\n\t\t\t\tlandingPageCookie === LandingPagePreference.EdelweissPlus;\r\n\t\t}\r\n\r\n\t\tif (hasLandingPageSetToEPlus && isHomePage) {\r\n\t\t\twindow.location.href = `${process.env.REACT_APP_EPLUS_LINK_URL}`;\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default AppHeader;\r\n","import coreKeys from 'treeline-react-core-components/localizationKeys'; // These keys are referenced by components in the lib\r\n\r\nconst localizationKeys = [\r\n\t...coreKeys,\r\n\t'a_link_to_reset_your_password',\r\n\t'access_currently_unauthorized',\r\n\t'account_information_saved',\r\n\t'account_name',\r\n\t'account_search',\r\n\t'account_type',\r\n\t'account',\r\n\t'active',\r\n\t'add_another_quantity',\r\n\t'add_another_quantity',\r\n\t'add_event_to_communities_subheader',\r\n\t'add_new',\r\n\t'add_this_title_to_an_available_list',\r\n\t'add_title_to_list_instructions',\r\n\t'add_titles_to_event_popover_content',\r\n\t'add_titles_to_list_instructions',\r\n\t'add_to_collaborative_list',\r\n\t'add_to_shelf_collection',\r\n\t'add_your_event_to_relevant_communities',\r\n\t'add',\r\n\t'added_by',\r\n\t'additional_information',\r\n\t'address',\r\n\t'affiliation',\r\n\t'age_range_filter_help',\r\n\t'age_range_filters',\r\n\t'age_range',\r\n\t'alert_type',\r\n\t'all',\r\n\t'all_genres',\r\n\t'all_titles',\r\n\t'allow_add_by_group_help',\r\n\t'allow_add_by_group',\r\n\t'already_have_an_edelweiss_acount',\r\n\t'archive',\r\n\t'archive',\r\n\t'are_you_sure_you_want_to_delete_this_circle',\r\n\t'are_you_sure_you_want_to_delete_this_community',\r\n\t'are_you_sure_you_want_to_save',\r\n\t'are_you_sure',\r\n\t'associated_titles',\r\n\t'author',\r\n\t'available_for_download',\r\n\t'available_for_request',\r\n\t'back_to_home',\r\n\t'back_to',\r\n\t'back',\r\n\t'backlist',\r\n\t'beta',\r\n\t'blog_personal',\r\n\t'booksellers',\r\n\t'browse_review_copies_by_genre',\r\n\t'buzz_across_communities',\r\n\t'buzz_for_x_community',\r\n\t'buzz',\r\n\t'by_clicking_sign_up',\r\n\t'cancel',\r\n\t'catalog_search',\r\n\t'catalogs',\r\n\t'category_filter_help',\r\n\t'category',\r\n\t'change_email_address',\r\n\t'change_password',\r\n\t'change',\r\n\t'changes_have_been_saved',\r\n\t'changes_saved',\r\n\t'circle_of_x',\r\n\t'circle_removed',\r\n\t'circle_saved',\r\n\t'circles_description',\r\n\t'circles',\r\n\t'city',\r\n\t'clear_title_selections',\r\n\t'click_either_image_to_edit_it',\r\n\t'click_here_to_search_for_titles',\r\n\t'click_to_attend',\r\n\t'click_to_edit_image',\r\n\t'click_to_learn_more_about_banner_content',\r\n\t'click_to_upload_main_event_image',\r\n\t'collaborative_list_management',\r\n\t'collaborative_list',\r\n\t'collaborative_lists',\r\n\t'collaborative_title_lists',\r\n\t'coming_soon',\r\n\t'comment',\r\n\t'comments',\r\n\t'common_across_requests',\r\n\t'communication_settings_saved',\r\n\t'communication_settings',\r\n\t'communities_your_event_will_be_added_to',\r\n\t'communities',\r\n\t'community_activity',\r\n\t'community_buzz_description',\r\n\t'community_buzz',\r\n\t'community_conversations_description',\r\n\t'community_does_not_exist_or_must_be_invited',\r\n\t'community_events_lane_description',\r\n\t'community_guidelines',\r\n\t'community_hub',\r\n\t'community_organized_by_x',\r\n\t'community_removed',\r\n\t'community_saved',\r\n\t'community_search',\r\n\t'community_updated',\r\n\t'community',\r\n\t'compressed_zip_file_with_all_chapter_mp3_files',\r\n\t'confirm_delete_filter',\r\n\t'continue',\r\n\t'contributors',\r\n\t'conversations',\r\n\t'country',\r\n\t'course',\r\n\t'create_affiliation',\r\n\t'create_collaborative_list',\r\n\t'create_event',\r\n\t'create_new_circle',\r\n\t'create_new_comment',\r\n\t'create_new_community',\r\n\t'create_saved_filter',\r\n\t'create',\r\n\t'cropped_image_preview',\r\n\t'cropper_is_set_to_max_dimensions',\r\n\t'current_email_subscriptions_uncheck_to_unsubscribe',\r\n\t'current_password',\r\n\t'currently_no_scheduled_events_for_communities_you_are_a_member_of',\r\n\t'currently_no_scheduled_events_for_this_community',\r\n\t'currently_no_scheduled_events_for_your_communities',\r\n\t'currently_reading_short',\r\n\t'currently_unavailable_via_the_edelweiss_web_reader',\r\n\t'date_is_required',\r\n\t'date',\r\n\t'default_sort',\r\n\t'delete',\r\n\t'delete_event_in_community_confirm_prompt',\r\n\t'delete_community',\r\n\t'delete_photo',\r\n\t'department',\r\n\t'desc_summary',\r\n\t'description_is_required',\r\n\t'description_of_role',\r\n\t'description',\r\n\t'dewey_filter_help',\r\n\t'dewey',\r\n\t'did_not_meet_image_requirements_message',\r\n\t'digital',\r\n\t'disable_ability_to_x',\r\n\t'dont_have_an_edelweiss_account',\r\n\t'down',\r\n\t'download_and_read',\r\n\t'download_drc',\r\n\t'download_method',\r\n\t'download_option',\r\n\t'download_ready',\r\n\t'download_the_drc',\r\n\t'download_title_csv',\r\n\t'download',\r\n\t'downvote',\r\n\t'downvotes',\r\n\t'draft',\r\n\t'drc_adobe_digital_editions',\r\n\t'drc_audio_description',\r\n\t'drc_audio_message',\r\n\t'drc_availability_filter_help',\r\n\t'drc_availability',\r\n\t'drc_downloaded',\r\n\t'drc_downloading_message',\r\n\t'drc_external_url_message',\r\n\t'drc_kindle_description',\r\n\t'drc_kindle_message',\r\n\t'drc_kindle_profile',\r\n\t'drc_method',\r\n\t'drc_open_drm_message',\r\n\t'drc_select_format',\r\n\t'drc_set_preferred_format',\r\n\t'drc_standard_description',\r\n\t'drc_standard_message_parttwo',\r\n\t'drc_standard_message',\r\n\t'drc_will_expire_in',\r\n\t'drc_will_expire_on',\r\n\t'edelweiss_community_newsletters',\r\n\t'edelweiss_plus_emails',\r\n\t'edit_account_info',\r\n\t'edit_circle',\r\n\t'edit_collaborative_list',\r\n\t'edit_comment',\r\n\t'edit_community',\r\n\t'edit_filter',\r\n\t'edit_personal_info',\r\n\t'edit',\r\n\t'edition_filter_help',\r\n\t'edition',\r\n\t'eligible_community_nonmember_alert',\r\n\t'email_address',\r\n\t'enable_quantity_inputs_help',\r\n\t'enable_quantity_inputs_help',\r\n\t'enable_quantity_inputs',\r\n\t'enable_quantity_inputs',\r\n\t'end_time_is_required',\r\n\t'end_time',\r\n\t'enter_current_password',\r\n\t'enter_your_id',\r\n\t'error_boundary_default_fallback_message',\r\n\t'error_occurred_please_try_again_later',\r\n\t'error_retrieving_communication_settings',\r\n\t'error_saving_account_information',\r\n\t'error_saving_links',\r\n\t'error_saving_personal_information',\r\n\t'error_saving_role_description',\r\n\t'error_saving_role_summary',\r\n\t'error',\r\n\t'evalDesc_1',\r\n\t'evalDesc_2',\r\n\t'evalDesc_3',\r\n\t'evalDesc_4',\r\n\t'evalType_0',\r\n\t'evalType_1',\r\n\t'evalType_2',\r\n\t'evalType_3',\r\n\t'evalType_4',\r\n\t'evaluation_purpose',\r\n\t'event_image',\r\n\t'event_images',\r\n\t'event_link',\r\n\t'event_organization_name',\r\n\t'event_organizer_image',\r\n\t'event_title_is_required',\r\n\t'event_title',\r\n\t'event_url_is_required',\r\n\t'event_url_to_learn_more_and_or_register',\r\n\t'event_url',\r\n\t'events',\r\n\t'exclude_from_filter',\r\n\t'exp_enrollment',\r\n\t'expired',\r\n\t'export_list',\r\n\t'featured_titles',\r\n\t'feedback',\r\n\t'filter_excluded',\r\n\t'filter_included',\r\n\t'filter',\r\n\t'find_a_community',\r\n\t'first_name_and_last_name_are_required',\r\n\t'first_name',\r\n\t'forgot_password_email_sent',\r\n\t'forgot_password',\r\n\t'format_filter_help',\r\n\t'format_filters',\r\n\t'format',\r\n\t'frontlist',\r\n\t'full_name',\r\n\t'gain_more_recognition_by_publishers_react',\r\n\t'general_readers_or_reviewers',\r\n\t'genre_category_filters',\r\n\t'genre_communities_authorization_instructions',\r\n\t'genre_communities',\r\n\t'go_back_to',\r\n\t'go_to_edelweiss',\r\n\t'here',\r\n\t'home_buzz_description',\r\n\t'home_catalog_folders_description',\r\n\t'home_collaborative_lists_description',\r\n\t'home_communities_description',\r\n\t'home_conversations_description',\r\n\t'home_events_lane_description',\r\n\t'home_my_reader_drcs_description',\r\n\t'home_new_review_copies_description',\r\n\t'home_your_review_copies_description',\r\n\t'home_your_shelves_description',\r\n\t'home',\r\n\t'if_you_close_the_drawer_you_will_lose_unsaved_work',\r\n\t'if_you_want_account_to_be_searchable_click_checkbox',\r\n\t'image_dimension_requirements',\r\n\t'images_with_quantity_in_parenthesis',\r\n\t'immediate_email',\r\n\t'immediate_text',\r\n\t'imprint_filter_help',\r\n\t'imprint_filters',\r\n\t'imprint',\r\n\t'in_person',\r\n\t'include_in_filter',\r\n\t'individual_chapters',\r\n\t'ineligible_community_nonmember_alert',\r\n\t'interactive',\r\n\t'invalid_date',\r\n\t'invalid_login_please_try_again',\r\n\t'invited',\r\n\t'is_of_interest_to',\r\n\t'isbn',\r\n\t'issue_loading_title_details',\r\n\t'issue_with_request_message',\r\n\t'join_community_with_validation_success_message',\r\n\t'join_community',\r\n\t'join',\r\n\t'joined',\r\n\t'key_selling_points',\r\n\t'kindle_additional_info_required',\r\n\t'kindle_email_address',\r\n\t'kindle_email_disclaimer',\r\n\t'kindle_in_order_to_send_point_four',\r\n\t'kindle_in_order_to_send_point_one',\r\n\t'kindle_in_order_to_send_point_three',\r\n\t'kindle_in_order_to_send_point_two',\r\n\t'kindle_in_order_to_send',\r\n\t'kindle_information',\r\n\t'kindle_method_send_to_email',\r\n\t'kindle_method_send_to_kindle',\r\n\t'last_activity',\r\n\t'last_activity_x',\r\n\t'last_name',\r\n\t'last_viewed_on_x',\r\n\t'learn_more',\r\n\t'less',\r\n\t'lexile_filter_help',\r\n\t'lexile',\r\n\t'librarians',\r\n\t'link_social_media_accounts',\r\n\t'link_to_virtual_event_is_required',\r\n\t'link_to_virtual_event',\r\n\t'link_your_goodreads_account',\r\n\t'links_saved',\r\n\t'list_archived',\r\n\t'list_moved_to_active',\r\n\t'list_pinned',\r\n\t'lists_this_title_is_on',\r\n\t'live_from_your_device',\r\n\t'loading_buzz',\r\n\t'loading_review_copies',\r\n\t'loading_x_saved_filter',\r\n\t'location',\r\n\t'log_in_with_your_edelweiss_account',\r\n\t'log_in',\r\n\t'make_account_searchable',\r\n\t'manage_list_notifications',\r\n\t'manage_notifications',\r\n\t'mark_unread',\r\n\t'marketing_plans',\r\n\t'max_8000_list',\r\n\t'mechanism',\r\n\t'messages',\r\n\t'more',\r\n\t'most_active_reviewers_description',\r\n\t'most_active_reviewers',\r\n\t'move_to_active',\r\n\t'move_to_active',\r\n\t'must_be_authorized_to_post_to_genre_communities_form_prompt',\r\n\t'must_be_invited_to_community_message',\r\n\t'must_select_one',\r\n\t'my_edelweiss_reader_review_copies',\r\n\t'my_events',\r\n\t'name',\r\n\t'net_votes',\r\n\t'new_password_confirm',\r\n\t'new_password',\r\n\t'new_review_copies',\r\n\t'new_saved_filter_help_examples',\r\n\t'new_saved_filter_help',\r\n\t'next',\r\n\t'no_active_collaborative_lists',\r\n\t'no_activity',\r\n\t'no_activity',\r\n\t'no_communities_found',\r\n\t'no_filters_selected_choose_from_below',\r\n\t'no_image_available',\r\n\t'no_image_available',\r\n\t'no_matches_found_no_punctuation',\r\n\t'no_matches_found',\r\n\t'no_overview',\r\n\t'no_role_specified',\r\n\t'no_titles_have_been_added_to_this_list_yet',\r\n\t'no_titles_match_those_search_terms',\r\n\t'no_titles',\r\n\t'no',\r\n\t'none',\r\n\t'not_included_on_any_lists',\r\n\t'not_member_of_any_communities',\r\n\t'not_set',\r\n\t'not_specified',\r\n\t'noticeType_1',\r\n\t'noticeType_10',\r\n\t'noticeType_11',\r\n\t'noticeType_12',\r\n\t'noticeType_13',\r\n\t'noticeType_2',\r\n\t'noticeType_3',\r\n\t'noticeType_4',\r\n\t'noticeType_5',\r\n\t'noticeType_6',\r\n\t'noticeType_7',\r\n\t'noticeType_8',\r\n\t'noticeType_9',\r\n\t'number_of_links',\r\n\t'official_genre_community_managed_by_x',\r\n\t'ok',\r\n\t'one_reply',\r\n\t'one_thought',\r\n\t'only_admins',\r\n\t'optional_comment_30',\r\n\t'optional_comment_30',\r\n\t'options',\r\n\t'organization_event_image_override_warning',\r\n\t'organization_logo',\r\n\t'other_user_created',\r\n\t'others_can_add_to_help',\r\n\t'others_can_add_to_help',\r\n\t'others_can_add_to',\r\n\t'others_can_add_to',\r\n\t'password_must_be_at_least',\r\n\t'password',\r\n\t'passwords_do_not_match',\r\n\t'past_event',\r\n\t'past',\r\n\t'personal_information_saved',\r\n\t'personal_information',\r\n\t'phone_number',\r\n\t'phone',\r\n\t'pin',\r\n\t'pin',\r\n\t'pinned',\r\n\t'please_confirm_your_password',\r\n\t'please_enter_a_name_for_this_list',\r\n\t'please_enter_your_email_and_click_submit',\r\n\t'please_enter_your_first_name',\r\n\t'please_enter_your_last_name',\r\n\t'please_enter_your_validation_id',\r\n\t'please_input_your_current_password',\r\n\t'please_log_in_to_your_account',\r\n\t'please_provide_a_password',\r\n\t'please_provide_a_valid_email_address',\r\n\t'please_provide_shipping_for_request',\r\n\t'please_provide_your_email_address',\r\n\t'please_select_a_country',\r\n\t'please_select',\r\n\t'please_try_again',\r\n\t'please_verify_that_you_are_not_a_robot',\r\n\t'pos_categories',\r\n\t'postal',\r\n\t'presented_by',\r\n\t'price',\r\n\t'print',\r\n\t'profile_editor',\r\n\t'profile_picture',\r\n\t'profile_strength_description',\r\n\t'profile_strength',\r\n\t'profile_summary_saved',\r\n\t'profile_summary',\r\n\t'pub_date',\r\n\t'pubdate_filter_help',\r\n\t'pubdate_filters',\r\n\t'pubdate',\r\n\t'published',\r\n\t'publisher_filter_help',\r\n\t'publisher',\r\n\t'qty',\r\n\t'qty',\r\n\t'qualifier',\r\n\t'quantities',\r\n\t'quantity',\r\n\t'quotes',\r\n\t'read_in_the_edelweiss_web_reader',\r\n\t'read_online',\r\n\t'registration_keep_me_updated',\r\n\t'remember_me',\r\n\t'remove',\r\n\t'request_for',\r\n\t'request_sent_for',\r\n\t'requested',\r\n\t'requiring_valid_id',\r\n\t'reset_cropper',\r\n\t'reset_password',\r\n\t'retrieve_prepared_file',\r\n\t'return_home',\r\n\t'return_to_request',\r\n\t'review_copies_for_all_genres',\r\n\t'review_copies_relevant_to_x_community',\r\n\t'review_copy_available',\r\n\t'review_copy_relevant_to_x_community',\r\n\t'review_copy_request_form',\r\n\t'review_of_x',\r\n\t'role_desc_note',\r\n\t'role_description_saved',\r\n\t'role_summary_saved',\r\n\t'role_summary',\r\n\t'save_changes',\r\n\t'save_event',\r\n\t'save_links',\r\n\t'save_role_description',\r\n\t'save',\r\n\t'saved_filter',\r\n\t'saved_filters',\r\n\t'search_all_catalogs',\r\n\t'search_for_communities',\r\n\t'search_for_titles',\r\n\t'search',\r\n\t'see_more_event_details_here',\r\n\t'see_the_event_recording_here',\r\n\t'select_best_option_for_request',\r\n\t'select_one',\r\n\t'send_to',\r\n\t'sending',\r\n\t'sequence',\r\n\t'share_or_export',\r\n\t'ship_to_address',\r\n\t'show_larger_jacket_cover',\r\n\t'show_less',\r\n\t'show_more',\r\n\t'show_smaller_jacket_cover',\r\n\t'sign_up_for_an_edelweiss_account',\r\n\t'sign_up',\r\n\t'social_media_links_below_will_appear_in_profile',\r\n\t'sort_by',\r\n\t'sorted_by',\r\n\t'list_sort_by_help',\r\n\t'standard',\r\n\t'start_conversation_in_another_community',\r\n\t'start_time_is_required',\r\n\t'start_time',\r\n\t'state',\r\n\t'status_help',\r\n\t'status_loading',\r\n\t'status',\r\n\t'step_one_event_details',\r\n\t'step_three_add_communities',\r\n\t'step_two_upload_images',\r\n\t'submit',\r\n\t'subrights_filter_help',\r\n\t'subrights',\r\n\t'success',\r\n\t'tb_author_bio',\r\n\t'terms_of_service',\r\n\t'the_email_address_you_have_provided_is_already_registered_with_edelweiss',\r\n\t'the_name_of_the_organization_presenting_the_event',\r\n\t'the_title_has_been_added',\r\n\t'the_titles_have_been_added',\r\n\t'there_are_no_past_events_for_communities_you_are_a_member_of',\r\n\t'there_are_no_past_events_for_this_community',\r\n\t'there_was_an_error_with_your_request',\r\n\t'time_zone',\r\n\t'time_zone_community_event_tooltip',\r\n\t'title_information',\r\n\t'title_review',\r\n\t'title_search',\r\n\t'title',\r\n\t'titles_added_removed',\r\n\t'titles_already_on_a_list_will_not_be_added_again',\r\n\t'titles_you_edited',\r\n\t'titles',\r\n\t'too_short',\r\n\t'tooltip_reviewed',\r\n\t'topic_x',\r\n\t'type_of_activity',\r\n\t'unable_to_validate_community_code',\r\n\t'unarchive',\r\n\t'unauthorized_retrieving_communication_settings',\r\n\t'unknown_title',\r\n\t'unpin',\r\n\t'unsubscribe_from_all_emails_disclaimer_in_communication_settings',\r\n\t'unsubscribe_from_all_emails',\r\n\t'unsubscribe_from_friend_emails',\r\n\t'unsubscribe_from_friend_emails_disclaimer_in_communication_settings',\r\n\t'until_your_event_has_been_added_to_a_community_it_will_not_be_seen_by_others',\r\n\t'up',\r\n\t'upcoming_event',\r\n\t'upcoming_events',\r\n\t'upcoming',\r\n\t'upcoming',\r\n\t'update_community_photo',\r\n\t'update_photo',\r\n\t'update',\r\n\t'updated_x_date',\r\n\t'upload_an_event_organization_image_for_your_whole_organization',\r\n\t'upload_an_organization_image_specific_to_this_event',\r\n\t'upload_organization_image',\r\n\t'upload_photo',\r\n\t'upvote',\r\n\t'upvotes',\r\n\t'use_organizations_event_image_switch_prompt',\r\n\t'validation_id',\r\n\t'venue_address_is_required',\r\n\t'venue_address',\r\n\t'venue_name_is_required',\r\n\t'venue_name',\r\n\t'view_edit_your_profile',\r\n\t'view_mode',\r\n\t'virtual_uppercase',\r\n\t'virtual',\r\n\t'visit_event_page_in_new_tab_question',\r\n\t'votes',\r\n\t'want_to_have_your_event_listed_here_prompt',\r\n\t'watch_recording',\r\n\t'where_x_y',\r\n\t'where_x',\r\n\t'where',\r\n\t'why_are_you_requesting_this_title',\r\n\t'word_for_example',\r\n\t'word_more',\r\n\t'word_or',\r\n\t'word_you',\r\n\t'word_you',\r\n\t'would_you_like_to_update_the_event_organization_image',\r\n\t'x_community_conversation_title',\r\n\t'x_community_hub',\r\n\t'x_community',\r\n\t'x_is_required',\r\n\t'x_member_of_the_y_account',\r\n\t'x_member',\r\n\t'x_members_of_the_y_account',\r\n\t'x_members',\r\n\t'x_notification',\r\n\t'x_other_conversation',\r\n\t'x_other_conversations',\r\n\t'x_profile',\r\n\t'x_replies',\r\n\t'x_thoughts',\r\n\t'yes',\r\n\t'you_do_not_currently_manage_any_communities',\r\n\t'you_have_no_events_for_this_filter_in_this_community',\r\n\t'you_have_no_events_for_this_filter',\r\n\t'you_have_no_scheduled_or_past_events_for_this_community',\r\n\t'you_have_no_scheduled_or_past_events',\r\n\t'you_have_not_added_your_event_to_communities',\r\n\t'you_must_be_a_member_of_the_x_community',\r\n\t'you_must_be_logged_in_to_edelweiss_plus_to_view_this_page',\r\n\t'you_must_have_an_edelweiss_account',\r\n\t'you',\r\n\t'your_books_help',\r\n\t'your_books',\r\n\t'your_communities',\r\n\t'your_event_has_been_deleted',\r\n\t'your_event_has_been_saved',\r\n\t'your_image_has_been_deleted',\r\n\t'your_image_has_been_saved',\r\n\t'your_password_has_been_changed',\r\n\t'your_review_copies',\r\n\t'your_saved_profile',\r\n\t'your_shared_reviews_description',\r\n\t'your_shared_reviews',\r\n\t'your_shelves_and_collections',\r\n\t'your_vote_has_been_recorded',\r\n\t'your_vote_has_been_removed',\r\n]; // Add any other localization keys you need for your app here.\r\n\r\nexport default localizationKeys;\r\n","import * as React from 'react';\r\nimport keys from './keys';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { getLocalizationApiUrl } from '../../util/localization.util';\r\nimport {\r\n\tcultureCodeQueryParamName,\r\n\tgetCultureCodesFromUrlSearchParams,\r\n\tUseLocalizationType,\r\n\tLocalizationContext,\r\n\tuseLocalization,\r\n\ten,\r\n} from '@above-the-treeline/localization';\r\nimport LoadingApp from '../UI/LoadingApp';\r\nimport { useUser } from '../User/containers/UserDataStore';\r\n\r\ntype LocalizationContainerProps = {\r\n\tchildren: React.ReactNode;\r\n};\r\n\r\nconst LocalizationContainer = ({\r\n\tchildren,\r\n}: LocalizationContainerProps): JSX.Element => {\r\n\tconst location = useLocation();\r\n\tconst { state: user } = useUser();\r\n\tconst userCultureName = user?.region?.cultureName;\r\n\tconst userCultureNameOrDefault = userCultureName ? [userCultureName] : [en];\r\n\r\n\tconst localizationData: UseLocalizationType = useLocalization({\r\n\t\tcultureCodes:\r\n\t\t\tgetCultureCodesFromUrlSearchParams(\r\n\t\t\t\tcultureCodeQueryParamName,\r\n\t\t\t\tlocation.search,\r\n\t\t\t) || userCultureNameOrDefault,\r\n\t\tlocalizationApiUrl: getLocalizationApiUrl(),\r\n\t\tlocalizationKeys: keys,\r\n\t});\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{localizationData.isLoading ? : children}\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default LocalizationContainer;\r\n","export const getLocalizationApiUrl = (): string => {\r\n\tconst { REACT_APP_LOCALIZATION_API_URL: url } = process.env;\r\n\treturn `${url}/api/v1/translations`;\r\n};\r\n","import React, { lazy, Suspense } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Redirect, Route, Switch, withRouter } from 'react-router';\r\nimport { Layout } from './Layout';\r\nimport ErrorBoundary from './Errors/ErrorBoundary';\r\nimport ScrollToTop from './ScrollToTop';\r\nimport LandingFooter from './Navigation/LandingFooter';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport paths from '../paths';\r\nimport WindowSizeThresholdsEnum from '../enums/WindowSizeThresholdsEnum';\r\nimport EdelweissConnectInitializer from './EdelweissConnect/EdelweissConnectInitializer';\r\nimport PasswordReset from './Anonymous/PasswordReset/PasswordReset';\r\nimport ReactGA from 'react-ga';\r\nimport AccountOrMembershipRequiredModalContext from './Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\nimport AccountOrMembershipRequiredModal from './Anonymous/AccountOrMembershipRequiredModal/AccountOrMembershipRequiredModal';\r\nimport AnonymousHeader from './Anonymous/AnonymousHeader/AnonymousHeader';\r\nimport AppHeader from './AppHeader';\r\nimport LoadingApp from './UI/LoadingApp';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\n// data stores\r\nimport { connectToUser } from './User/containers/UserDataStore';\r\nimport CommunitiesDataStore from './Communities/containers/communitiesDataStore';\r\nimport DownloadsDataStore from './Downloads/containers/DownloadsDataStore';\r\nimport RequestsDataStore from './Requests/containers/RequestsDataStore';\r\nimport ShelvesDataStore from './Shelves/containers/ShelvesDataStore';\r\nimport NoticesDataStore from './User/Notices/containers/NoticesDataStore';\r\nimport ReviewsDataStore from './Reviews/containers/ReviewsDataStore';\r\nimport CollaborativeListsDataStore from './CollaborativeLists/containers/CollaborativeListsDataStore';\r\nimport CommunityReviewsDataStore from './Community/containers/CommunityReviewsDataStore';\r\nimport PreferencesDataStore from './Preferences/containers/PreferencesDataStore';\r\nimport SavedFiltersDataStore from './SavedFilters/containers/SavedFiltersDataStore';\r\nimport CollectionsDataStore from './Collections/containers/CollectionsDataStore';\r\nimport CatalogFoldersDataStore from './Folders/Catalogs/containers/CatalogFoldersDataStore';\r\nimport FilterOptionsDataStore from './SavedFilters/containers/FilterOptionsDataStore';\r\nimport { EventsDataStoreProvider } from './Events/contexts/EventsDataStoreContext';\r\nimport LocalizationContainer from './Localization/LocalizationContainer';\r\n\r\n// css\r\nimport '../crm.css';\r\nimport '../general.css';\r\nimport '../index.css';\r\nimport '../NewLook.css';\r\n\r\n// routes to lazy load:\r\nconst MainPage = lazy(() => import('./Home/MainPage'));\r\nconst Search = lazy(() => import('./Search/Search'));\r\nconst YourBooks = lazy(() => import('./YourBooks/YourBooks'));\r\nconst CommunityHomeWithEventDetails = lazy(() =>\r\n\timport('./Community/CommunityHomeWithEventDetails'),\r\n);\r\nconst CommunityHome = lazy(() => import('./Home/CommunityHome'));\r\nconst ConversationHome = lazy(() =>\r\n\timport('./Conversations/Home/ConversationHome'),\r\n);\r\nconst ReviewCopies = lazy(() => import('./ReviewCopies/ReviewCopies'));\r\nconst BuzzTitleList = lazy(() => import('./Buzz/BuzzTitleList'));\r\nconst SavedFilter = lazy(() => import('./SavedFilters/SavedFilter'));\r\nconst Catalog = lazy(() => import('./Collections/Catalog'));\r\nconst CollaborativeListRoute = lazy(() =>\r\n\timport('./CollaborativeLists/CollaborativeListRoute'),\r\n);\r\nconst CollaborativeListsHome = lazy(() =>\r\n\timport('./CollaborativeLists/Home/CollaborativeListsHome'),\r\n);\r\nconst CommunicationSettings = lazy(() =>\r\n\timport('./CommunicationSettings/CommunicationSettings'),\r\n);\r\nconst ProfileEditor = lazy(() => import('./ProfileEditor/ProfileEditor'));\r\nconst CollaborativeListsIFrameHome = lazy(() =>\r\n\timport('./CollaborativeLists/Home/CollaborativeListsIFrameHome'),\r\n);\r\nconst Shelves = lazy(() => import('./Shelves/Shelves'));\r\nconst Requests = lazy(() => import('./Requests/Requests'));\r\nconst Downloads = lazy(() => import('./Downloads/Downloads'));\r\nconst Notices = lazy(() => import('./User/Notices/Notices'));\r\nconst Reviews = lazy(() => import('./Reviews/Reviews'));\r\nconst Help = lazy(() => import('./Home/Help'));\r\nconst Outreach = lazy(() => import('./Publisher/Outreach'));\r\nconst MainPageWithTitleDetails = lazy(() =>\r\n\timport('./Home/MainPageWithTitleDetails'),\r\n);\r\nconst RegistrationPage = lazy(() => import('./Anonymous/RegistrationPage'));\r\n\r\nclass AppLayoutFrame extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tisMobile: PropTypes.func,\r\n\t\tlocation: PropTypes.object,\r\n\t\thistory: PropTypes.object,\r\n\t\tuserDataStore: PropTypes.object,\r\n\t};\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.props.history.listen(location => {\r\n\t\t\tReactGA.set({ page: location.pathname });\r\n\t\t\tReactGA.pageview(location.pathname);\r\n\t\t});\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst {\r\n\t\t\tlocation,\r\n\t\t\tuserDataStore: { isAnonymous },\r\n\t\t} = this.props;\r\n\t\tconst { pathname } = location;\r\n\t\tconst isIFrame = pathname.startsWith('/iframe');\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t{isAnonymous()\r\n\t\t\t\t\t\t\t\t? this.renderAnonymousLayoutFrame(isIFrame)\r\n\t\t\t\t\t\t\t\t: this.renderLayoutFrame(isIFrame)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tshowHelpDeskWidget = () => window.FreshworksWidget('show', 'launcher');\r\n\r\n\thideHelpDeskWidget = () => window.FreshworksWidget('hide', 'launcher');\r\n\r\n\tshowOrHideHelpDeskWidget = isMobile =>\r\n\t\tisMobile ? this.hideHelpDeskWidget() : this.showHelpDeskWidget();\r\n\r\n\trenderLayoutFrame = isIFrame => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isIFrame\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? this.renderIFrameAppLayoutFrame()\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: this.renderAppLayoutFrame()}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\trenderIFrameAppLayoutFrame = () => {\r\n\t\tthis.hideHelpDeskWidget();\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\trenderAnonymousLayoutFrame = isIFrame => {\r\n\t\tif (this.doShowLoginToEdelweissPlusPrompt(isIFrame)) {\r\n\t\t\treturn this.renderLoginToEdelweissPlusPrompt();\r\n\t\t}\r\n\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\tthis.showOrHideHelpDeskWidget(isMobile);\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.renderAnonymousAppLayoutFrame()}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tdoShowLoginToEdelweissPlusPrompt = isIFrame => {\r\n\t\tconst { location } = this.props;\r\n\t\tconst { pathname } = location;\r\n\r\n\t\treturn (\r\n\t\t\tisIFrame &&\r\n\t\t\tpathname.startsWith(paths.communicationSettingsIFrameHome())\r\n\t\t);\r\n\t};\r\n\r\n\trenderLoginToEdelweissPlusPrompt = () => {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\trenderAppLayoutFrame = () => {\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\tthis.showOrHideHelpDeskWidget(isMobile);\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{isMobile && }\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\trenderAnonymousAppLayoutFrame = () => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n}\r\n\r\nexport default connectToUser(\r\n\twithRouter(withIsMobile(AppLayoutFrame, WindowSizeThresholdsEnum.Medium)),\r\n);\r\n","import { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js';\r\nimport { createBrowserHistory } from 'history';\r\n\r\nconst reactPlugin = new ReactPlugin();\r\n\r\nconst initializeAppInsights = () => {\r\n\tconst instrumentationKey =\r\n\t\tprocess.env.REACT_APP_APP_INSIGHTS_INSTRUMENTATION_KEY;\r\n\tconst isAppInsightsEnabled = process.env.REACT_APP_IS_APP_INSIGHTS_ENABLED;\r\n\tconst browserHistory = createBrowserHistory({ basename: '' });\r\n\r\n\tif (isAppInsightsEnabled === 'false') return;\r\n\r\n\tif (!instrumentationKey)\r\n\t\treturn console.error(\r\n\t\t\t'Application Insights Instrumentation key is not provided',\r\n\t\t);\r\n\r\n\tconst appInsights = new ApplicationInsights({\r\n\t\tconfig: {\r\n\t\t\tinstrumentationKey,\r\n\t\t\textensions: [reactPlugin],\r\n\t\t\tdisableFetchTracking: false,\r\n\t\t\textensionConfig: {\r\n\t\t\t\t[reactPlugin.identifier]: { history: browserHistory },\r\n\t\t\t},\r\n\t\t},\r\n\t});\r\n\r\n\tappInsights.loadAppInsights();\r\n};\r\n\r\ninitializeAppInsights();\r\n\r\nexport { reactPlugin };\r\n","import './communities.css';\r\nimport AppLayoutFrame from './components/AppLayoutFrame';\r\nimport LoadingApp from './components/UI/LoadingApp';\r\nimport UserPreferences from './components/UserPreferences';\r\nimport './crm.css';\r\nimport './general.css';\r\nimport './index.css';\r\nimport './NewLook.css';\r\nimport './app.less';\r\nimport { ScrollerConfigProvider } from './components/UI/Scroller/ScrollerConfigContext';\r\nimport UserDataStore from './components/User/containers/UserDataStore';\r\nimport { AppInsightsContext } from '@microsoft/applicationinsights-react-js';\r\nimport { reactPlugin } from './AppInsights';\r\nimport ReactGA from 'react-ga';\r\nimport { QueryClientProvider, QueryClient } from 'react-query';\r\nimport { ReactQueryDevtools } from 'react-query/devtools';\r\nimport CacheKeysEnum from './CacheKeysEnum';\r\n\r\nconst queryClient = new QueryClient({\r\n\tdefaultOptions: {\r\n\t\tqueries: {\r\n\t\t\tstaleTime: 1000 * 60, // globally default to 1 minute\r\n\t\t},\r\n\t},\r\n});\r\n\r\nqueryClient.setQueryDefaults(CacheKeysEnum.SkusAvailableInWebReader, {\r\n\tstaleTime: 1000 * 1800,\r\n});\r\n\r\nexport default function App() {\r\n\tReactGA.initialize(process.env.REACT_APP_GA_TRACKING_CODE);\r\n\twindow.FreshworksWidget('hide', 'launcher');\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{userDataStore => (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{userDataStore.isLoading() ? (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'react-app-polyfill/ie9';\r\nimport 'react-app-polyfill/stable';\r\nimport 'bootstrap/dist/css/bootstrap.css';\r\nimport 'bootstrap/dist/css/bootstrap-theme.css';\r\nimport './assets/fontastic.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport { unregister } from './registerServiceWorker';\r\nimport WindowSizeProvider from 'treeline-react-core-components/WindowSizeProvider';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t,\r\n\trootElement,\r\n);\r\n\r\nunregister();\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport handlePlural from '../../util/handlePlural';\r\n\r\nTitlesAddedSummary.propTypes = {\r\n\talreadyAddedIsbns: PropTypes.array,\r\n\tsuccessfullyAddedIsbns: PropTypes.array,\r\n\tinvalidIsbns: PropTypes.array,\r\n};\r\n\r\nfunction TitlesAddedSummary({\r\n\talreadyAddedIsbns,\r\n\tsuccessfullyAddedIsbns,\r\n\tinvalidIsbns,\r\n}) {\r\n\tconst summaryBullet = (titlesByType, description) => (\r\n\t\t<>\r\n\t\t\t{description}\r\n\t\t\t{titlesByType.join(', ')}\r\n\t\t\r\n\t);\r\n\r\n\tconst handlePluralIsbnTitle = listLength =>\r\n\t\thandlePlural('ISBN', listLength, true);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{successfullyAddedIsbns.length\r\n\t\t\t\t? summaryBullet(\r\n\t\t\t\t\t\tsuccessfullyAddedIsbns,\r\n\t\t\t\t\t\t`Successfully added ${handlePluralIsbnTitle(\r\n\t\t\t\t\t\t\tsuccessfullyAddedIsbns.length,\r\n\t\t\t\t\t\t)}:`,\r\n\t\t\t\t )\r\n\t\t\t\t: null}\r\n\t\t\t{alreadyAddedIsbns.length\r\n\t\t\t\t? summaryBullet(\r\n\t\t\t\t\t\talreadyAddedIsbns,\r\n\t\t\t\t\t\t`${handlePluralIsbnTitle(\r\n\t\t\t\t\t\t\talreadyAddedIsbns.length,\r\n\t\t\t\t\t\t)} already on the list:`,\r\n\t\t\t\t )\r\n\t\t\t\t: null}\r\n\t\t\t{invalidIsbns.length\r\n\t\t\t\t? summaryBullet(\r\n\t\t\t\t\t\tinvalidIsbns,\r\n\t\t\t\t\t\t`Invalid ${handlePluralIsbnTitle(\r\n\t\t\t\t\t\t\tinvalidIsbns.length,\r\n\t\t\t\t\t\t)}:`,\r\n\t\t\t\t )\r\n\t\t\t\t: null}\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default TitlesAddedSummary;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport CollaborativeListDataStore from '../containers/CollaborativeListDataStore';\r\nimport ManageListNotifications from './ManageListNotifications';\r\nimport { withLocalize } from '../../Localization/withLocalize';\r\n\r\nListNotificationModalContent.propTypes = {\r\n\tlistId: PropTypes.string,\r\n\tcommunityId: PropTypes.number,\r\n\tisVerticalView: PropTypes.bool,\r\n\ttranslate: PropTypes.func,\r\n};\r\n\r\nfunction ListNotificationModalContent({\r\n\tlistId,\r\n\tcommunityId,\r\n\tisVerticalView,\r\n\ttranslate,\r\n}) {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default withLocalize(ListNotificationModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport VoteType from '../VoteType';\r\nimport { connectToCollaborativeLists } from './CollaborativeListsDataStore';\r\nimport { message, Modal } from 'antd';\r\nimport InputType from '../InputType';\r\nimport TitlesAddedSummary from '../TitlesAddedSummary';\r\nimport { isIsbn } from '../../../util/validate';\r\nimport { isFunction, partition } from 'lodash-es';\r\nimport ListNotificationModalContent from '../Administer/ListNotificationModalContent';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\nimport combineConnectors from '../../util/combineConnectors';\r\nimport { TitleListSort } from '../TitleListSort';\r\nimport { withLocalize } from '../../Localization/withLocalize';\r\n\r\nconst CollaborativeListContext = React.createContext();\r\n\r\nexport const useCollaborativeList = () =>\r\n\tReact.useContext(CollaborativeListContext);\r\n\r\nconst name = 'collaborativeListDataStore';\r\n\r\nexport const connectToCollaborativeList = makeConnectTo(\r\n\tCollaborativeListContext,\r\n\tname,\r\n);\r\n\r\nexport class CollaborativeListDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t\ttranslate: PropTypes.func,\r\n\t};\r\n\r\n\tstate = {\r\n\t\tcollaborativeListData: {},\r\n\t\talerts: [],\r\n\t\tisLoading: true,\r\n\t\tareAlertsLoading: true,\r\n\t\tskus: {},\r\n\t\tconversations: {},\r\n\t\tareConversationsLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst collaborativeListDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(collaborativeListDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchCollaborativeList();\r\n\t\tthis.fetchAlerts();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.collaborativeListFetch && this.collaborativeListFetch.cancel) {\r\n\t\t\tthis.collaborativeListFetch.cancel();\r\n\t\t}\r\n\t\tif (this.alertsFetch && this.alertsFetch.cancel) {\r\n\t\t\tthis.alertsFetch.cancel();\r\n\t\t}\r\n\t\tif (this.conversationsFetch && this.conversationsFetch.cancel) {\r\n\t\t\tthis.conversationsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshCollaborativeList(),\r\n\t\tcreateNewQuantity: values => this.createNewQuantity(values),\r\n\t\tupdateQuantity: values => this.updateQuantity(values),\r\n\t\tdeleteQuantity: values => this.deleteQuantity(values),\r\n\t\tcreateNewComment: values => this.createNewComment(values),\r\n\t\tupdateComment: values => this.updateComment(values),\r\n\t\tdeleteComment: commentId => this.deleteComment(commentId),\r\n\t\taddTitle: sku => this.addTitle(sku),\r\n\t\tremoveTitle: sku => this.removeTitle(sku),\r\n\t\tarchiveList: () => this.archiveList(),\r\n\t\tcreateNewAlert: alert => this.createNewAlert(alert),\r\n\t\tdeleteAlert: alertId => this.deleteAlert(alertId),\r\n\t\tupdateAlert: (alert, alertAttribute) =>\r\n\t\t\tthis.updateAlert(alert, alertAttribute),\r\n\t\taddTitlesToList: skus => this.addTitlesToList(skus),\r\n\t\tpostTitlesToList: (listId, titles, onSuccess, onFail) =>\r\n\t\t\tthis.postTitlesToList(listId, titles, onSuccess, onFail),\r\n\t\trefreshCollabLists: () => this.refreshCollabLists(),\r\n\t\tfetchConversationStatus: () => this.fetchConversationStatus(),\r\n\t\ttoggleVote: (vote, voteType, onSuccess) =>\r\n\t\t\tthis.toggleVote(vote, voteType, onSuccess),\r\n\t});\r\n\r\n\thandleNotificationPrompt = () => {\r\n\t\tconst { listId } = this.props;\r\n\t\tconst listsUserHasSeenNotificationModalFor = JSON.parse(\r\n\t\t\tlocalStorage.getItem('listsUserHasSeenNotificationModalFor'),\r\n\t\t);\r\n\t\tconst setItemsToLS = itemsToSave =>\r\n\t\t\tlocalStorage.setItem(\r\n\t\t\t\t'listsUserHasSeenNotificationModalFor',\r\n\t\t\t\tJSON.stringify(itemsToSave),\r\n\t\t\t);\r\n\t\tconst hasSeenListModals = listsUserHasSeenNotificationModalFor || false;\r\n\t\tif (hasSeenListModals) {\r\n\t\t\tconst hasSeenThisListModal = listsUserHasSeenNotificationModalFor.includes(\r\n\t\t\t\tlistId,\r\n\t\t\t);\r\n\t\t\t!hasSeenThisListModal &&\r\n\t\t\t\tlistsUserHasSeenNotificationModalFor.push(listId);\r\n\t\t\t!hasSeenThisListModal && this.showListNotificationModal();\r\n\t\t\tsetItemsToLS(listsUserHasSeenNotificationModalFor);\r\n\t\t} else {\r\n\t\t\tsetItemsToLS([listId.toString()]);\r\n\t\t\tthis.showListNotificationModal();\r\n\t\t}\r\n\t};\r\n\r\n\tshowListNotificationModal = () => {\r\n\t\tconst { communityId, listId } = this.props;\r\n\t\tModal.info({\r\n\t\t\tclassName: 'notification-prompt-modal',\r\n\t\t\ttitle: this.props.translate('manage_list_notifications'),\r\n\t\t\tcontent: (\r\n\t\t\t\t\r\n\t\t\t),\r\n\t\t\tokText: this.props.translate('ok'),\r\n\t\t\tonOk: this.refreshAlerts,\r\n\t\t});\r\n\t};\r\n\r\n\trefreshCollabLists = () => {\r\n\t\tthis.props.collaborativeListsDataStore &&\r\n\t\t\tthis.props.collaborativeListsDataStore.refresh();\r\n\t};\r\n\r\n\trefreshCollaborativeList = () => {\r\n\t\tthis.fetchCollaborativeList();\r\n\t\treturn this.collaborativeListFetch.promise;\r\n\t};\r\n\r\n\tfetchCollaborativeList = () => {\r\n\t\tconst { communityId, listId, userDataStore } = this.props;\r\n\t\tconst options =\r\n\t\t\tuserDataStore && userDataStore.isAnonymous()\r\n\t\t\t\t? 'collaborativeTitleListItems,collaborativeTitleListVotes,collaborativeTitleListComments,collaborativeTitleListQuantities,productInfo,userInfo,userAvatars'\r\n\t\t\t\t: '';\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/collaborativeTitleLists/${communityId}/${listId}/items/${options}`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.collaborativeListFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst collaborativeListData = this.getCollaborativeListData(\r\n\t\t\tapiResponse,\r\n\t\t);\r\n\t\tthis.setState({\r\n\t\t\tcollaborativeListData,\r\n\t\t\tisLoading: false,\r\n\t\t\tskus: this.getSkus(collaborativeListData.listItems),\r\n\t\t});\r\n\t\tthis.fetchConversationStatus();\r\n\t};\r\n\r\n\tgetSkus = titles => {\r\n\t\treturn titles && titles.map(item => item.sku);\r\n\t};\r\n\r\n\tgetCollaborativeListData = apiResponse => {\r\n\t\tconst r = apiResponse;\r\n\t\tconst list = r.lists[0];\r\n\t\tconst { sort } = list;\r\n\t\treturn {\r\n\t\t\tlist,\r\n\t\t\tlistItems: this.mergeData(\r\n\t\t\t\tr.listItems,\r\n\t\t\t\tr.products,\r\n\t\t\t\tr.votes,\r\n\t\t\t\tr.comments,\r\n\t\t\t\tr.quantities,\r\n\t\t\t\tr.downloadableSkus,\r\n\t\t\t\tr.requestableSkus,\r\n\t\t\t\tr.digitalCopyInfo,\r\n\t\t\t).sort(function(x, y) {\r\n\t\t\t\tconst xSequence = x.sequence || 0;\r\n\t\t\t\tconst ySequence = y.sequence || 0;\r\n\r\n\t\t\t\tif (sort === TitleListSort.Votes) {\r\n\t\t\t\t\treturn y.netVotes - x.netVotes || xSequence - ySequence;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn xSequence - ySequence;\r\n\t\t\t}),\r\n\t\t\tlogHistory: this.getLogHistory(\r\n\t\t\t\tr.votes,\r\n\t\t\t\tr.comments,\r\n\t\t\t\tr.quantities,\r\n\t\t\t\tr.listItems,\r\n\t\t\t).sort((a, b) => new Date(b.createdDate) - new Date(a.createdDate)),\r\n\t\t\tuserAvatarsByAppUserId: r.userAvatarsByAppUserId,\r\n\t\t\tusersById: r.usersById,\r\n\t\t\tproducts: r.products,\r\n\t\t\tvotes: r.votes,\r\n\t\t\tcomments: r.comments,\r\n\t\t\tquantities: r.quantities,\r\n\t\t};\r\n\t};\r\n\r\n\tmergeData(\r\n\t\tlistItems,\r\n\t\tproducts,\r\n\t\tvotes,\r\n\t\tcomments,\r\n\t\tquantities,\r\n\t\tdownloadableSkus,\r\n\t\trequestableSkus,\r\n\t\tdigitalCopyInfo,\r\n\t) {\r\n\t\treturn listItems.map(li => ({\r\n\t\t\t...li,\r\n\t\t\ttitle: products.filter(pr => pr.sku === li.sku)[0].name,\r\n\t\t\tauthor: products.filter(pr => pr.sku === li.sku)[0].author,\r\n\t\t\tproduct: products.filter(pr => pr.sku === li.sku)[0],\r\n\t\t\turi:\r\n\t\t\t\tproducts.filter(pr => pr.sku === li.sku)[0].images &&\r\n\t\t\t\tproducts\r\n\t\t\t\t\t.filter(pr => pr.sku === li.sku)[0]\r\n\t\t\t\t\t.images.filter(im => im.type === 'jacketCover').length >\r\n\t\t\t\t\t0 &&\r\n\t\t\t\tproducts\r\n\t\t\t\t\t.filter(pr => pr.sku === li.sku)[0]\r\n\t\t\t\t\t.images.filter(im => im.type === 'jacketCover')[0].uri +\r\n\t\t\t\t\t'?height=600',\r\n\t\t\tvotes: votes.filter(pr => pr.sku === li.sku),\r\n\t\t\tcomments: comments.filter(pr => pr.sku === li.sku),\r\n\t\t\tquantities: quantities.filter(pr => pr.sku === li.sku),\r\n\t\t\tnetVotes:\r\n\t\t\t\tvotes.filter(pr => pr.sku === li.sku && pr.type === 'upVote')\r\n\t\t\t\t\t.length -\r\n\t\t\t\tvotes.filter(pr => pr.sku === li.sku && pr.type === 'downVote')\r\n\t\t\t\t\t.length,\r\n\t\t\tisRequestable:\r\n\t\t\t\trequestableSkus &&\r\n\t\t\t\trequestableSkus.filter(rs => rs === li.sku)[0],\r\n\t\t\tisDownloadable:\r\n\t\t\t\tdownloadableSkus &&\r\n\t\t\t\tdownloadableSkus.filter(dl => dl === li.sku)[0],\r\n\t\t\tavailableReviewCopyFormats:\r\n\t\t\t\tdigitalCopyInfo &&\r\n\t\t\t\tdigitalCopyInfo.filter(dci => dci.sku === li.sku),\r\n\t\t}));\r\n\t}\r\n\r\n\tgetLogHistory = (votes, comments, quantities, listItems) => {\r\n\t\tvar logHistory = [];\r\n\t\tvotes.forEach(vote => {\r\n\t\t\tlogHistory.push({\r\n\t\t\t\tsku: vote.sku,\r\n\t\t\t\tappUserId: vote.appUserId,\r\n\t\t\t\tinputType:\r\n\t\t\t\t\tvote.type === VoteType.upVote\r\n\t\t\t\t\t\t? InputType.UpVote\r\n\t\t\t\t\t\t: InputType.DownVote,\r\n\t\t\t\tcreatedDate: vote.createdDate,\r\n\t\t\t});\r\n\t\t});\r\n\t\tcomments.forEach(comment => {\r\n\t\t\tlogHistory.push({\r\n\t\t\t\tsku: comment.sku,\r\n\t\t\t\tappUserId: comment.appUserId,\r\n\t\t\t\tinputType: InputType.Comment,\r\n\t\t\t\tcreatedDate: comment.createdDate,\r\n\t\t\t});\r\n\t\t});\r\n\t\tquantities.forEach(quantity => {\r\n\t\t\tlogHistory.push({\r\n\t\t\t\tsku: quantity.sku,\r\n\t\t\t\tappUserId: quantity.appUserId,\r\n\t\t\t\tinputType: InputType.Quantity,\r\n\t\t\t\tcreatedDate: quantity.createdDate,\r\n\t\t\t});\r\n\t\t});\r\n\t\tlistItems.forEach(item => {\r\n\t\t\tlogHistory.push({\r\n\t\t\t\tsku: item.sku,\r\n\t\t\t\tappUserId: item.appUserId,\r\n\t\t\t\tinputType: InputType.Add,\r\n\t\t\t\tcreatedDate: item.createdDate,\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn logHistory;\r\n\t};\r\n\r\n\trefreshAlerts = () => {\r\n\t\tthis.fetchAlerts();\r\n\t\treturn this.alertsFetch.promise;\r\n\t};\r\n\r\n\tfetchAlerts = () => {\r\n\t\tconst { listId } = this.props;\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/collaborativeTitleLists/alerts/${listId}`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheAlertsApiResponse);\r\n\t\tthis.alertsFetch = request;\r\n\t};\r\n\r\n\tcacheAlertsApiResponse = apiResponse => {\r\n\t\tthis.setState({ alerts: apiResponse, areAlertsLoading: false });\r\n\t};\r\n\r\n\tcreateNewQuantity(values) {\r\n\t\tvalues.listId = this.props.listId;\r\n\t\tapi.post('/api/v1/collaborativeTitleList/quantities', values).then(\r\n\t\t\t() => {\r\n\t\t\t\tthis.refreshCollaborativeList();\r\n\t\t\t\tmessage.success(Quantity added!);\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n\r\n\tupdateQuantity(values) {\r\n\t\tapi.put('/api/v1/collaborativeTitleList/quantities', values).then(\r\n\t\t\t() => {\r\n\t\t\t\tthis.refreshCollaborativeList();\r\n\t\t\t\tmessage.success(Your Quantity has been updated);\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n\r\n\tdeleteQuantity(values) {\r\n\t\tapi.call(\r\n\t\t\t'DELETE',\r\n\t\t\t'/api/v1/collaborativeTitleList/quantities',\r\n\t\t\tvalues,\r\n\t\t).then(() => {\r\n\t\t\tthis.refreshCollaborativeList();\r\n\t\t\tmessage.success(Your Quantity input has been removed);\r\n\t\t});\r\n\t}\r\n\r\n\tcreateNewComment(values) {\r\n\t\tapi.post('/api/v1/collaborativeTitleList/comments', values)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.refreshCollaborativeList();\r\n\t\t\t\tmessage.success(Comment added!);\r\n\t\t\t\t!this.state.alerts.length && this.handleNotificationPrompt();\r\n\t\t\t})\r\n\t\t\t.catch(e => console.error(e));\r\n\t}\r\n\r\n\tupdateComment(values) {\r\n\t\tapi.put('/api/v1/collaborativeTitleList/comments', values).then(() => {\r\n\t\t\tthis.refreshCollaborativeList();\r\n\t\t\tmessage.success(Your Comment has been updated);\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteComment(commentId) {\r\n\t\tapi.del(`/api/v1/collaborativeTitleList/comments/${commentId}`).then(\r\n\t\t\t() => {\r\n\t\t\t\tthis.refreshCollaborativeList();\r\n\t\t\t\tmessage.success(Your Comment has been removed);\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n\r\n\ttoggleVote(vote, onSuccessOrFail) {\r\n\t\tconst isRemovingExistingVote = vote.type === 0;\r\n\t\tapi.post('/api/v1/votes', vote)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.refreshCollaborativeList();\r\n\t\t\t\tif (isRemovingExistingVote) {\r\n\t\t\t\t\tmessage.success(\r\n\t\t\t\t\t\tthis.props.translate('your_vote_has_been_removed'),\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmessage.success(\r\n\t\t\t\t\t\tthis.props.translate('your_vote_has_been_recorded'),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\t!this.state.alerts.length && this.handleNotificationPrompt();\r\n\t\t\t})\r\n\t\t\t.catch(e => {\r\n\t\t\t\tconsole.error(e);\r\n\t\t\t\tmessage.error(\r\n\t\t\t\t\tthis.props.translate('issue_with_request_message'),\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tif (isFunction(onSuccessOrFail)) onSuccessOrFail();\r\n\t\t\t});\r\n\t}\r\n\r\n\tcheckIfTitleOnList = sku => {\r\n\t\tconst { listItems } = this.state.collaborativeListData;\r\n\t\treturn listItems.filter(li => li.sku.indexOf(sku) > -1).length > 0;\r\n\t};\r\n\r\n\taddTitle = sku => {\r\n\t\tif (!this.checkIfTitleOnList(sku)) {\r\n\t\t\tconst { listId } = this.props;\r\n\t\t\tconst title = [\r\n\t\t\t\t{\r\n\t\t\t\t\tlistId: listId,\r\n\t\t\t\t\tsku: sku,\r\n\t\t\t\t},\r\n\t\t\t];\r\n\t\t\tconst onSuccess = () => this.renderTitleAlert(sku, listId);\r\n\t\t\tthis.postTitlesToList(listId, title, onSuccess);\r\n\t\t} else {\r\n\t\t\tmessage.success(this.renderTitleAlreadyOnListAlert());\r\n\t\t}\r\n\t};\r\n\r\n\trenderTitleAlreadyOnListAlert = () => (\r\n\t\t\r\n\t\t\tThis title is already on the list. You can upvote it to register\r\n\t\t\tyour opinion.\r\n\t\t\r\n\t);\r\n\r\n\trenderTitleAlert = async (sku, listId) => {\r\n\t\tlet collabList = this.props.collaborativeListsDataStore.getListDetails(\r\n\t\t\tlistId,\r\n\t\t);\r\n\t\tlet request = api.cancelableGet(`/api/products/${sku}`);\r\n\t\tconst product = await request.promise;\r\n\t\tmessage.success(\r\n\t\t\t\r\n\t\t\t\tYou successfully added {product.name} to{' '}\r\n\t\t\t\t{collabList.name}\r\n\t\t\t,\r\n\t\t);\r\n\t};\r\n\r\n\tremoveTitle(sku) {\r\n\t\tconst { listId } = this.props;\r\n\t\tapi.del(`/api/v1/collaborativeTitleLists/${listId}/items/${sku}`)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.refreshCollaborativeList();\r\n\t\t\t\tthis.refreshCollabLists();\r\n\t\t\t\tmessage.success(\r\n\t\t\t\t\tYou've removed this title from the list,\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t\t.catch(err => console.log(`error`, err));\r\n\t}\r\n\r\n\tarchiveList() {\r\n\t\tconst { listId } = this.props;\r\n\t\tapi.del(`/api/v1/collaborativeTitleLists/${listId}`).then(() => {\r\n\t\t\tthis.refreshCollaborativeList();\r\n\t\t\tlet collabList = this.props.collaborativeListsDataStore.getListDetails(\r\n\t\t\t\tlistId,\r\n\t\t\t);\r\n\t\t\tmessage.success(\r\n\t\t\t\t\r\n\t\t\t\t\t{collabList.name} has been archived and will not be viewable\r\n\t\t\t\t\tanymore\r\n\t\t\t\t,\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\tcreateNewAlert(alert) {\r\n\t\tthis.setState({ areAlertsLoading: true });\r\n\t\tapi.post('/api/v1/collaborativeTitleLists/alerts', alert).then(() => {\r\n\t\t\tthis.refreshAlerts();\r\n\t\t\tmessage.success(Alert added!);\r\n\t\t});\r\n\t}\r\n\r\n\tupdateAlert(alert, alertAttribute) {\r\n\t\tapi.put(\r\n\t\t\t`/api/v1/collaborativeTitleLists/alerts/${alertAttribute}`,\r\n\t\t\talert,\r\n\t\t).then(() => {\r\n\t\t\tthis.refreshAlerts();\r\n\t\t\tmessage.success(Alert updated!);\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteAlert(alertId) {\r\n\t\tthis.setState({ areAlertsLoading: true });\r\n\t\tapi.del(`/api/v1/collaborativeTitleLists/alerts/${alertId}`).then(\r\n\t\t\t() => {\r\n\t\t\t\tthis.refreshAlerts();\r\n\t\t\t\tmessage.success(Alert removed!);\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n\r\n\tgetTitlesSummary = isbns => {\r\n\t\tconst { listItems } = this.state.collaborativeListData;\r\n\t\tconst currentTitleIsbns = listItems.map(li => li.product.ean);\r\n\t\tconst [validIsbns, invalidIsbns] = partition(isbns, isIsbn);\r\n\t\tconst [isbnsToAdd, alreadyAddedIsbns] = partition(\r\n\t\t\tvalidIsbns,\r\n\t\t\tisbn => !currentTitleIsbns.includes(isbn),\r\n\t\t);\r\n\t\treturn { isbnsToAdd, alreadyAddedIsbns, invalidIsbns };\r\n\t};\r\n\r\n\tpostTitlesToList = (listId, titles, onSuccess, onFail) => {\r\n\t\tapi.post(`/api/v1/collaborativeTitleLists/${listId}/items/add`, titles)\r\n\t\t\t.then(() => {\r\n\t\t\t\tif (typeof onSuccess === 'function') onSuccess();\r\n\t\t\t\tthis.refreshCollaborativeList();\r\n\t\t\t\tthis.refreshCollabLists();\r\n\t\t\t\t!this.state.alerts.length && this.handleNotificationPrompt();\r\n\t\t\t})\r\n\t\t\t.catch(() => {\r\n\t\t\t\tmessage.error(\r\n\t\t\t\t\tthis.props.translate('issue_with_request_message'),\r\n\t\t\t\t);\r\n\t\t\t\tif (typeof onFail === 'function') onFail();\r\n\t\t\t});\r\n\t};\r\n\r\n\taddTitlesToList = isbns => {\r\n\t\tconst { listId } = this.props;\r\n\t\tconst {\r\n\t\t\tisbnsToAdd,\r\n\t\t\talreadyAddedIsbns,\r\n\t\t\tinvalidIsbns,\r\n\t\t} = this.getTitlesSummary(isbns);\r\n\r\n\t\tconst titlesToPost = isbnsToAdd.map(titleIsbn => ({\r\n\t\t\tlistId: listId,\r\n\t\t\tsku: titleIsbn,\r\n\t\t}));\r\n\r\n\t\tif (isbnsToAdd.length > 0) {\r\n\t\t\tthis.postTitlesToList(listId, titlesToPost);\r\n\t\t}\r\n\t\tthis.renderTitlesAddedSummaryModal(\r\n\t\t\talreadyAddedIsbns,\r\n\t\t\tisbnsToAdd,\r\n\t\t\tinvalidIsbns,\r\n\t\t);\r\n\t};\r\n\r\n\trenderTitlesAddedSummaryModal = (\r\n\t\talreadyAddedIsbns,\r\n\t\tsuccessfullyAddedIsbns,\r\n\t\tinvalidIsbns,\r\n\t) => {\r\n\t\tModal.info({\r\n\t\t\tcontent: (\r\n\t\t\t\t\r\n\t\t\t),\r\n\t\t});\r\n\t};\r\n\r\n\tfetchConversationStatus = () => {\r\n\t\tconst { communityId } = this.props;\r\n\t\tconst { skus } = this.state;\r\n\r\n\t\tconst request = api.cancelablePost(\r\n\t\t\t`/api/v1/conversations/${communityId}/titles`,\r\n\t\t\tskus,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheConversationApiResponse);\r\n\t\tthis.conversationsFetch = request;\r\n\t};\r\n\r\n\tcacheConversationApiResponse = apiResponse => {\r\n\t\tthis.setState({\r\n\t\t\tconversations: apiResponse,\r\n\t\t\tareConversationsLoading: false,\r\n\t\t});\r\n\t};\r\n}\r\n\r\nconst connectors = [connectToCollaborativeLists, connectToUser, withLocalize];\r\n\r\nexport default combineConnectors(connectors)(CollaborativeListDataStore);\r\n","const PreferenceType = {\r\n\tcommunityApp: 'communityApp',\r\n\tlandingPage: 'LandingPage',\r\n\tprerelease: 'PreRelease',\r\n\treader: 'reader',\r\n};\r\n\r\nexport default PreferenceType;\r\n","enum CacheKeysEnum {\r\n\tNewReviewCopies = 'newReviewCopies',\r\n\tNewReviewCopyConvoStatuses = 'newReviewCopyConvoStatuses',\r\n\tWebReaderDrcProducts = 'webReaderDrcProducts',\r\n\tSkusAvailableInWebReader = 'skusAvailableInWebReader',\r\n}\r\n\r\nexport default CacheKeysEnum;\r\n","const ConversationType = {\r\n\tTopic: {\r\n\t\tlabel: 'Topic',\r\n\t\tkey: 'topic',\r\n\t},\r\n\tTitle: {\r\n\t\tlabel: 'Title',\r\n\t\tkey: 'title',\r\n\t\tdoOfferCandidate: true,\r\n\t},\r\n};\r\n\r\nexport default ConversationType;\r\n","import { useQuery } from 'react-query';\r\nimport CacheKeysEnum from '../../CacheKeysEnum';\r\nimport api from '../../Api';\r\n\r\ntype UseWebReaderGalleyAccessType = {\r\n\tisLoading: boolean;\r\n\thasWebReaderGalleyAccess: (sku: string) => boolean;\r\n};\r\n\r\nexport const useWebReaderGalleyAccess = (): UseWebReaderGalleyAccessType => {\r\n\tconst { data: skusAvailableInWebReader, isLoading } = useQuery(\r\n\t\tCacheKeysEnum.SkusAvailableInWebReader,\r\n\t\tfetchSkusAvailableInWebReader,\r\n\t);\r\n\r\n\treturn {\r\n\t\tisLoading,\r\n\t\thasWebReaderGalleyAccess: (sku: string) => {\r\n\t\t\tif (isLoading || !skusAvailableInWebReader) return false;\r\n\t\t\treturn skusAvailableInWebReader.includes(sku);\r\n\t\t},\r\n\t};\r\n};\r\n\r\nasync function fetchSkusAvailableInWebReader(): Promise {\r\n\ttry {\r\n\t\tconst endpoint = '/api/galleys/available/webreader/skus';\r\n\t\treturn await api.get(endpoint);\r\n\t} catch (err) {\r\n\t\tconsole.error((err as Error).message);\r\n\t\treturn [];\r\n\t}\r\n}\r\n","import React from 'react';\r\n\r\nconst YourBooksDrawer = React.createContext();\r\n\r\nexport const useYourBooksDrawer = () => React.useContext(YourBooksDrawer);\r\n\r\nexport default function YourBooksDrawerContext(props) {\r\n\treturn (\r\n\t\t\r\n\t\t\t{typeof props.children === 'function'\r\n\t\t\t\t? props.children(props.drawer)\r\n\t\t\t\t: props.children}\r\n\t\t\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport LocalizedDate from '../Localization/LocalizedDate';\r\nimport moment from 'moment';\r\n\r\nReviewCopyActionTooltip.propTypes = {\r\n\theaderText: PropTypes.string,\r\n\tcreatedDate: PropTypes.string,\r\n\tupdatedDate: PropTypes.string,\r\n};\r\n\r\nfunction ReviewCopyActionTooltip({ headerText, createdDate, updatedDate }) {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
{headerText}
\r\n\t\t\t{createdDate && renderDate('Added', createdDate)}\r\n\t\t\t{updatedDate &&\r\n\t\t\t\t!areSameDay(createdDate, updatedDate) &&\r\n\t\t\t\trenderDate('Updated', updatedDate)}\r\n\t\t\r\n\t);\r\n}\r\n\r\nconst renderDate = (dateName, dateString) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t{dateName} \r\n\t\t
\r\n\t);\r\n};\r\n\r\nconst areSameDay = (date1, date2) => {\r\n\treturn moment(date1)\r\n\t\t.startOf('day')\r\n\t\t.isSame(moment(date2).startOf('date'));\r\n};\r\n\r\nexport default ReviewCopyActionTooltip;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport PreferenceType from '../PreferenceType';\r\n\r\nconst PreferencesContext = React.createContext();\r\n\r\nconst name = 'preferencesDataStore';\r\n\r\nexport const usePreferences = () => React.useContext(PreferencesContext);\r\n\r\nexport const connectToPreferences = makeConnectTo(PreferencesContext, name);\r\n\r\nclass PreferencesDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tpreferences: [],\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst preferencesDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(preferencesDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { isAnonymous } = this.props.userDataStore;\r\n\t\tif (!isAnonymous()) {\r\n\t\t\tthis.fetchPreferences();\r\n\t\t} else {\r\n\t\t\tthis.setState({ isLoading: false });\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.preferencesFetch && this.preferencesFetch.cancel) {\r\n\t\t\tthis.preferencesFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshPreferences(),\r\n\t\taddUserPreference: (type, name, value, toggleIsLoading) =>\r\n\t\t\tthis.addUserPreference(type, name, value, toggleIsLoading),\r\n\t\taddUserPreferenceWithPromise: (type, name, value) =>\r\n\t\t\tthis.addUserPreferenceWithPromise(type, name, value),\r\n\t\tgetPreference: (type, name) => this.getPreference(type, name),\r\n\t});\r\n\r\n\trefreshPreferences = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchPreferences();\r\n\t\treturn this.preferencesFetch.promise;\r\n\t};\r\n\r\n\tfetchPreferences = () => {\r\n\t\tvar userPreferenceDtoFilters = [\r\n\t\t\t{\r\n\t\t\t\ttype: PreferenceType.communityApp,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttype: PreferenceType.landingPage,\r\n\t\t\t},\r\n\t\t];\r\n\r\n\t\tconst request = api.cancelablePost(\r\n\t\t\t`/api/v1/me/preferences`,\r\n\t\t\tuserPreferenceDtoFilters,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.preferencesFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst preferences = apiResponse;\r\n\t\tthis.setState({ preferences, isLoading: false });\r\n\t};\r\n\r\n\taddUserPreference(type, name, value, toggleIsLoading) {\r\n\t\tconst { isAnonymous } = this.props.userDataStore;\r\n\t\t!isAnonymous() &&\r\n\t\t\tthis.addUserPreferenceWithPromise(type, name, value).then(() => {\r\n\t\t\t\tif (toggleIsLoading) {\r\n\t\t\t\t\tthis.refreshPreferences();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.fetchPreferences();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\taddUserPreferenceWithPromise(type, name, value) {\r\n\t\treturn api.put(`/api/v1/me/preferences/${type}/${name}`, value);\r\n\t}\r\n\r\n\tgetPreference(type, name) {\r\n\t\tconst { preferences } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\tpreferences &&\r\n\t\t\tpreferences.find(p => p.type === type && p.name === name)\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default connectToUser(PreferencesDataStore);\r\n","import { makeCancelable } from 'api-fetcher-treeline/dist';\r\n\r\n// Number, Any -> Promise\r\n// Timer function\r\nexport default function delay(t, v) {\r\n\treturn new Promise(function (resolve) {\r\n\t\tsetTimeout(resolve.bind(null, v), t);\r\n\t});\r\n}\r\n\r\nexport const cancelableDelay = (t, v) => makeCancelable(delay(t, v));\r\n","import React from 'react';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nconst DrcAvailabilityTypes = {\r\n\tnotSet: {\r\n\t\tkey: -1,\r\n\t\tlabel: ,\r\n\t},\r\n\t'999999': {\r\n\t\tkey: 999999,\r\n\t\tlabel: ,\r\n\t},\r\n\t'1': {\r\n\t\tkey: 1,\r\n\t\tlabel: ,\r\n\t},\r\n\t'2': {\r\n\t\tkey: 2,\r\n\t\tlabel: ,\r\n\t},\r\n};\r\n\r\nexport default DrcAvailabilityTypes;\r\n","import React from 'react';\r\nimport api from '../../../../Api';\r\nimport { ShareTargetType } from './ShareTargetType';\r\n\r\nexport const Action = {\r\n\tADD_SHARE_TARGET: 'ADD_SHARE_TARGET',\r\n\tREMOVE_SHARE_TARGET: 'REMOVE_SHARE_TARGET',\r\n\tCLEAR_SHARE_TARGETS: 'CLEAR_SHARE_TARGETS',\r\n};\r\n\r\nexport default function useShareTargets(\r\n\tsku,\r\n\toptions = { doIncludeGenreCommunities: true },\r\n) {\r\n\tconst [isLoading, setIsLoading] = React.useState(true);\r\n\r\n\tconst [joinedCommunitiesData, setJoinedCommunitiesData] = React.useState({\r\n\t\taffiliations: [],\r\n\t});\r\n\r\n\tconst [communityTargetIds, setCommunityTargetIds] = React.useState([]);\r\n\r\n\tconst [genreCommunityOptions, setGenreCommunityOptions] = React.useState(\r\n\t\t[],\r\n\t);\r\n\r\n\tconst [\r\n\t\tisLoadingGenreCommunityOptions,\r\n\t\tsetIsLoadingGenreCommunityOptions,\r\n\t] = React.useState(true);\r\n\r\n\tconst [doShareWithPublisher, setDoShareWithPublisher] = React.useState(\r\n\t\ttrue,\r\n\t);\r\n\r\n\tconst [doShareWithFriends, setDoShareWithFriends] = React.useState(true);\r\n\r\n\tconst [doShareWithColleagues, setDoShareWithColleagues] = React.useState(\r\n\t\ttrue,\r\n\t);\r\n\r\n\tconst getAsArray = x => {\r\n\t\treturn Array.isArray(x) ? x : [];\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlet request;\r\n\r\n\t\tconst doesAssessmentExist = async () => {\r\n\t\t\trequest = api.cancelableGet(`/api/me/reviews/${sku}/review`);\r\n\t\t\tconst currentReview = await request.promise;\r\n\t\t\treturn currentReview !== null;\r\n\t\t};\r\n\r\n\t\tconst fetchUsersJoinedCommunities = async () => {\r\n\t\t\tconst url = '/api/affiliations/me';\r\n\t\t\trequest = api.cancelableGet(url);\r\n\r\n\t\t\tconst communitiesData = await request.promise;\r\n\r\n\t\t\tif (communitiesData) {\r\n\t\t\t\tsetJoinedCommunitiesData(communitiesData);\r\n\t\t\t\treturn communitiesData;\r\n\t\t\t}\r\n\t\t\treturn {};\r\n\t\t};\r\n\r\n\t\tconst fetchReviewSharingState = async (\r\n\t\t\tusersCommunities = [],\r\n\t\t\tassessmentDoesExist,\r\n\t\t) => {\r\n\t\t\tconst url = `/api/me/reviews/products/${sku}/communities/sharing`;\r\n\t\t\trequest = api.cancelableGet(url);\r\n\r\n\t\t\tlet {\r\n\t\t\t\taffiliationShareExceptions,\r\n\t\t\t\tePlusGroupShareExceptions,\r\n\t\t\t\texternalSubmissionGroupInclusions,\r\n\t\t\t} = await request.promise;\r\n\r\n\t\t\taffiliationShareExceptions = getAsArray(affiliationShareExceptions);\r\n\t\t\tePlusGroupShareExceptions = getAsArray(ePlusGroupShareExceptions);\r\n\r\n\t\t\texternalSubmissionGroupInclusions = getAsArray(\r\n\t\t\t\texternalSubmissionGroupInclusions,\r\n\t\t\t);\r\n\r\n\t\t\tconst eplusGroupTypesToExcludeFromShare = ePlusGroupShareExceptions.map(\r\n\t\t\t\tgroupExclusion => groupExclusion.communityType,\r\n\t\t\t);\r\n\r\n\t\t\tconst communityIdsToExclude = affiliationShareExceptions.map(\r\n\t\t\t\ta => a.targetGroupId,\r\n\t\t\t);\r\n\r\n\t\t\tsetCommunityTargetIds(() => {\r\n\t\t\t\treturn usersCommunities\r\n\t\t\t\t\t.filter(c => !communityIdsToExclude.includes(c.id))\r\n\t\t\t\t\t.map(c => c.id);\r\n\t\t\t});\r\n\r\n\t\t\tif (\r\n\t\t\t\teplusGroupTypesToExcludeFromShare.includes(\r\n\t\t\t\t\tShareTargetType.friends,\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tsetDoShareWithFriends(false);\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\teplusGroupTypesToExcludeFromShare.includes(\r\n\t\t\t\t\tShareTargetType.colleagues,\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tsetDoShareWithColleagues(false);\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tassessmentDoesExist &&\r\n\t\t\t\t!externalSubmissionGroupInclusions.includes(\r\n\t\t\t\t\tShareTargetType.publisher,\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tsetDoShareWithPublisher(false);\r\n\t\t\t}\r\n\r\n\t\t\treturn communityIdsToExclude;\r\n\t\t};\r\n\r\n\t\tconst fetchGenreCommunities = async (\r\n\t\t\tcommunityIdsToExcludeFromSharing,\r\n\t\t\tdoesAssessmentExist,\r\n\t\t) => {\r\n\t\t\tconst url = `/api/affiliations/genre/products/${sku}`;\r\n\t\t\trequest = api.cancelableGet(url);\r\n\r\n\t\t\ttry {\r\n\t\t\t\tlet genreCommunities = await request.promise;\r\n\t\t\t\tgenreCommunities = getAsArray(genreCommunities);\r\n\r\n\t\t\t\tconst getActiveGenreCommunityIds = () => {\r\n\t\t\t\t\tconst genreCommunityOptionIds = genreCommunities.map(\r\n\t\t\t\t\t\tc => c.id,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (doesAssessmentExist) {\r\n\t\t\t\t\t\treturn genreCommunityOptionIds.filter(\r\n\t\t\t\t\t\t\tid =>\r\n\t\t\t\t\t\t\t\t!communityIdsToExcludeFromSharing.includes(id),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn genreCommunityOptionIds;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tsetCommunityTargetIds(ids => {\r\n\t\t\t\t\treturn [...ids, ...getActiveGenreCommunityIds()];\r\n\t\t\t\t});\r\n\r\n\t\t\t\tsetGenreCommunityOptions(genreCommunities);\r\n\t\t\t\tsetIsLoadingGenreCommunityOptions(false);\r\n\t\t\t} catch (err) {\r\n\t\t\t\tconsole.error(err.message);\r\n\t\t\t\tsetIsLoadingGenreCommunityOptions(false);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst initialize = async () => {\r\n\t\t\tconst assessmentExists = await doesAssessmentExist();\r\n\r\n\t\t\tconst { affiliations } = await fetchUsersJoinedCommunities();\r\n\r\n\t\t\tconst usersCommunities = getCommunities(affiliations);\r\n\r\n\t\t\tconst communityIdsToExcludeFromSharing = await fetchReviewSharingState(\r\n\t\t\t\tusersCommunities,\r\n\t\t\t\tassessmentExists,\r\n\t\t\t);\r\n\r\n\t\t\tif (options.doIncludeGenreCommunities) {\r\n\t\t\t\tfetchGenreCommunities(\r\n\t\t\t\t\tcommunityIdsToExcludeFromSharing,\r\n\t\t\t\t\tassessmentExists,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tsetIsLoading(false);\r\n\t\t};\r\n\r\n\t\tinitialize();\r\n\r\n\t\treturn () => {\r\n\t\t\tapi.revoke(request);\r\n\t\t};\r\n\t}, [sku]);\r\n\r\n\tfunction getCommunities(communities = joinedCommunitiesData.affiliations) {\r\n\t\tconst memberOfCommunities = communities.filter(\r\n\t\t\tc => typeof c.member === 'boolean' && c.member,\r\n\t\t);\r\n\r\n\t\treturn memberOfCommunities.filter(a => !a.isGenreCommunity);\r\n\t}\r\n\r\n\tconst activateAllShareTargetOptions = () => {\r\n\t\tsetCommunityTargetIds(() => {\r\n\t\t\treturn [\r\n\t\t\t\t...getCommunities().map(a => a.id),\r\n\t\t\t\t...genreCommunityOptions.map(c => c.id),\r\n\t\t\t];\r\n\t\t});\r\n\r\n\t\tif (!doShareWithFriends) {\r\n\t\t\tsetDoShareWithFriends(true);\r\n\t\t}\r\n\r\n\t\tif (!doShareWithPublisher) {\r\n\t\t\tsetDoShareWithPublisher(true);\r\n\t\t}\r\n\r\n\t\tif (!doShareWithColleagues) {\r\n\t\t\tsetDoShareWithColleagues(true);\r\n\t\t}\r\n\t};\r\n\r\n\tconst removeAllShareTargetOptions = () => {\r\n\t\tif (communityTargetIds.length > 0) {\r\n\t\t\tsetCommunityTargetIds([]);\r\n\t\t}\r\n\r\n\t\tif (doShareWithFriends) {\r\n\t\t\tsetDoShareWithFriends(false);\r\n\t\t}\r\n\r\n\t\tif (doShareWithPublisher) {\r\n\t\t\tsetDoShareWithPublisher(false);\r\n\t\t}\r\n\r\n\t\tif (doShareWithColleagues) {\r\n\t\t\tsetDoShareWithColleagues(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst addShareTarget = action => {\r\n\t\tconst { payload } = action;\r\n\t\tconst { shareTarget } = payload;\r\n\t\tswitch (shareTarget.type) {\r\n\t\t\tcase ShareTargetType.generalCommunity:\r\n\t\t\tcase ShareTargetType.genreCommunity:\r\n\t\t\t\tsetCommunityTargetIds(ids => [...ids, shareTarget.id]);\r\n\t\t\t\tbreak;\r\n\t\t\tcase ShareTargetType.all:\r\n\t\t\t\tactivateAllShareTargetOptions();\r\n\t\t\t\tbreak;\r\n\t\t\tcase ShareTargetType.friends:\r\n\t\t\t\tsetDoShareWithFriends(true);\r\n\t\t\t\tbreak;\r\n\t\t\tcase ShareTargetType.colleagues:\r\n\t\t\t\tsetDoShareWithColleagues(true);\r\n\t\t\t\tbreak;\r\n\t\t\tcase ShareTargetType.publisher:\r\n\t\t\t\tsetDoShareWithPublisher(true);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\tconst removeShareTarget = action => {\r\n\t\tconst { payload } = action;\r\n\t\tconst { shareTarget } = payload;\r\n\t\tswitch (shareTarget.type) {\r\n\t\t\tcase ShareTargetType.generalCommunity:\r\n\t\t\tcase ShareTargetType.genreCommunity:\r\n\t\t\t\tsetCommunityTargetIds(ids =>\r\n\t\t\t\t\tids.filter(id => id !== shareTarget.id),\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase ShareTargetType.all:\r\n\t\t\t\tremoveAllShareTargetOptions();\r\n\t\t\t\tbreak;\r\n\t\t\tcase ShareTargetType.friends:\r\n\t\t\t\tsetDoShareWithFriends(false);\r\n\t\t\t\tbreak;\r\n\t\t\tcase ShareTargetType.colleagues:\r\n\t\t\t\tsetDoShareWithColleagues(false);\r\n\t\t\t\tbreak;\r\n\t\t\tcase ShareTargetType.publisher:\r\n\t\t\t\tsetDoShareWithPublisher(false);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\tconst isShareTypeAllActive = () => {\r\n\t\tconst joinedCommunitiesCt = getCommunities().length;\r\n\t\tconst genreCommunitiesCt = genreCommunityOptions.length;\r\n\r\n\t\tconst communityTargetsCt = communityTargetIds.length;\r\n\r\n\t\tconst areAllDefaultShareTypesActive =\r\n\t\t\tjoinedCommunitiesCt + genreCommunitiesCt === communityTargetsCt &&\r\n\t\t\tdoShareWithFriends &&\r\n\t\t\tdoShareWithColleagues &&\r\n\t\t\tdoShareWithPublisher;\r\n\r\n\t\treturn areAllDefaultShareTypesActive;\r\n\t};\r\n\r\n\tconst reduceState = action => {\r\n\t\tswitch (action.type) {\r\n\t\t\tcase Action.ADD_SHARE_TARGET:\r\n\t\t\t\taddShareTarget(action);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Action.REMOVE_SHARE_TARGET:\r\n\t\t\t\tremoveShareTarget(action);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Action.CLEAR_SHARE_TARGETS:\r\n\t\t\t\tremoveAllShareTargetOptions();\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\tconst isActiveShareTarget = shareTarget => {\r\n\t\tswitch (shareTarget.type) {\r\n\t\t\tcase ShareTargetType.generalCommunity:\r\n\t\t\tcase ShareTargetType.genreCommunity:\r\n\t\t\t\treturn communityTargetIds.includes(shareTarget.id);\r\n\t\t\tcase ShareTargetType.all:\r\n\t\t\t\treturn isShareTypeAllActive();\r\n\t\t\tcase ShareTargetType.friends:\r\n\t\t\t\treturn doShareWithFriends;\r\n\t\t\tcase ShareTargetType.colleagues:\r\n\t\t\t\treturn doShareWithColleagues;\r\n\t\t\tcase ShareTargetType.publisher:\r\n\t\t\t\treturn doShareWithPublisher;\r\n\t\t\tdefault:\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\tconst getCommunityIdsToNotShareWith = () => {\r\n\t\tconst communityIdsToNotShareWith = [];\r\n\r\n\t\tconst allAvailableCommunityIds = [\r\n\t\t\t...getCommunities().map(a => a.id),\r\n\t\t\t...genreCommunityOptions.map(c => c.id),\r\n\t\t];\r\n\r\n\t\tallAvailableCommunityIds.forEach(id => {\r\n\t\t\tif (!communityTargetIds.includes(id)) {\r\n\t\t\t\tcommunityIdsToNotShareWith.push(id);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn communityIdsToNotShareWith;\r\n\t};\r\n\r\n\t// If the user selects to \"share\" the assessment with a genre community\r\n\t// that they also are not a part of, we need to add the user as a member of\r\n\t// that community\r\n\tconst getChosenGenreCommunityIdsToJoin = () => {\r\n\t\tconst { affiliations: communities } = joinedCommunitiesData;\r\n\r\n\t\tconst genreCommunityOptionIds = genreCommunityOptions.map(c => c.id);\r\n\r\n\t\tconst joinedCommunityIds = communities\r\n\t\t\t.filter(c => typeof c.member === 'boolean' && c.member)\r\n\t\t\t.map(c => c.id);\r\n\r\n\t\treturn communityTargetIds.filter(id => {\r\n\t\t\tconst userIsMember = joinedCommunityIds.includes(id);\r\n\t\t\tconst isGenreCommunityOption = genreCommunityOptionIds.includes(id);\r\n\t\t\treturn !userIsMember && isGenreCommunityOption;\r\n\t\t});\r\n\t};\r\n\r\n\treturn {\r\n\t\tgetCommunities,\r\n\t\tgetGenreCommunityOptionsState: () => ({\r\n\t\t\tisLoading: isLoadingGenreCommunityOptions,\r\n\t\t\toptions: genreCommunityOptions,\r\n\t\t}),\r\n\t\tisLoading: () => isLoading,\r\n\t\tupdate: action => reduceState(action),\r\n\t\tisActive: isActiveShareTarget,\r\n\t\tgetCommunityIdsToNotShareWith,\r\n\t\tgetChosenGenreCommunityIdsToJoin,\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Checkbox } from 'antd';\r\nimport { Action } from '../data/useShareTargets';\r\n\r\nShareTargetCheckbox.propTypes = {\r\n\tchildren: PropTypes.string,\r\n\tisDisabled: PropTypes.bool,\r\n\tshareTargetsEditor: PropTypes.object,\r\n\tshareTarget: PropTypes.shape({\r\n\t\tid: PropTypes.number,\r\n\t\ttype: PropTypes.string.isRequired,\r\n\t}),\r\n};\r\n\r\nShareTargetCheckbox.defaultProps = {\r\n\tisDisabled: false,\r\n};\r\n\r\nexport default function ShareTargetCheckbox({\r\n\tchildren,\r\n\tshareTarget,\r\n\tisDisabled,\r\n\tshareTargetsEditor,\r\n}) {\r\n\tconst onChange = evt => {\r\n\t\tconst isChecked = evt.target.checked;\r\n\r\n\t\tconst addAction = {\r\n\t\t\ttype: Action.ADD_SHARE_TARGET,\r\n\t\t\tpayload: { shareTarget },\r\n\t\t};\r\n\r\n\t\tconst removeAction = {\r\n\t\t\ttype: Action.REMOVE_SHARE_TARGET,\r\n\t\t\tpayload: { shareTarget },\r\n\t\t};\r\n\r\n\t\tshareTargetsEditor.update(isChecked ? addAction : removeAction);\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{children}\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n","const PreferenceName = {\r\n\tshowUnreadNotifications: 'showUnreadNotifications',\r\n\tmonthsToAutoArchiveNotifications: 'monthsToAutoArchiveNotifications',\r\n\tcollaborativeListsToShow: 'collaborativeListsToShow',\r\n\tcommunityReviewsToShow: 'communityReviewsToShow',\r\n\tshowSmallJacket: 'showSmallJacket',\r\n\tconversationsToShow: 'conversationsToShow',\r\n\tconversationStatusView: 'conversationStatusView',\r\n\tcollapsedLanes: 'collapsedLanes',\r\n\tlaneStructure: 'laneStructure',\r\n\tpreferred: 'preferred',\r\n};\r\n\r\nexport default PreferenceName;\r\n","import React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\n\r\nexport class MobileDrawerHeader extends React.Component {\r\n\trender() {\r\n\t\tconst { header, isMobile } = this.props;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{isMobile() && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
{header}
\r\n\t\t\t\t\t\t
 
\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withIsMobile(MobileDrawerHeader);\r\n","import { useTranslate } from '@above-the-treeline/localization';\r\n\r\nexport function withLocalize(WrappedComponent) {\r\n\treturn function LocalizeComponent(props) {\r\n\t\tconst { translate } = useTranslate();\r\n\t\treturn ;\r\n\t};\r\n}\r\n","import { Tooltip } from 'antd';\r\nimport React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport ConversationDrawer from '../Conversations/ConversationDrawer';\r\nimport ConversationType from '../Conversations/ConversationType';\r\nimport TitleActionsScroller from '../Title/TitleActionsScroller';\r\nimport TitleDetailDrawer from '../Title/TitleDetailDrawer';\r\nimport TitleImage from '../Title/TitleImage';\r\nimport TitleReviewBursts from '../Title/TitleReviewBursts';\r\nimport Scroller from '../UI/Scroller/Scroller';\r\nimport './titleScroller.css';\r\n\r\nexport class TitleScroller extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tmaxTitles: 40,\r\n\t\t};\r\n\t}\r\n\r\n\trenderTitles() {\r\n\t\tconst { titles } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{titles && titles.length > 0 && titles.map(this.renderOneTitle)}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tshowMore = () => {\r\n\t\tconst { maxTitles } = this.state;\r\n\t\tthis.setState({\r\n\t\t\tmaxTitles: maxTitles * 1 + 20,\r\n\t\t});\r\n\t};\r\n\r\n\trenderTitleWithDrawer = (communityId, title) => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\trenderOneTitle = (title, idx) => {\r\n\t\tconst { titles, communityId, conversations } = this.props;\r\n\t\tconst conversation =\r\n\t\t\tconversations &&\r\n\t\t\tconversations.length > 0 &&\r\n\t\t\tconversations.filter(con => con.conversationId === title.sku);\r\n\t\tconst unread =\r\n\t\t\tconversation && conversation.filter(con => !con.status).length > 0;\r\n\t\tconst totalTitles = titles.length;\r\n\t\tconst { maxTitles } = this.state;\r\n\r\n\t\tif (idx >= maxTitles) {\r\n\t\t\treturn (\r\n\t\t\t\tidx === maxTitles &&\r\n\t\t\t\ttotalTitles > idx && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{this.renderTitleWithDrawer(communityId, title)}\r\n\t\t\t\t\t{conversation && conversation.length > 0 && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{unread\r\n\t\t\t\t\t\t\t\t\t\t\t? 'Unread Community Conversation'\r\n\t\t\t\t\t\t\t\t\t\t\t: 'Read Community Conversation'}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tplacement=\"top\">\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tgetConversationName = title => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{title.name} by {title.author}\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\trenderLaneHeader = () => {\r\n\t\tconst { majorHeader, subHeader, icon } = this.props;\r\n\t\tconst isMobile = this.props.isMobile();\r\n\r\n\t\tif (majorHeader || subHeader) {\r\n\t\t\treturn (\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{majorHeader && (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{this.getLanePrimaryHeader(majorHeader, icon)}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{subHeader && (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{subHeader}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t\t{this.props.extra && (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{this.props.extra}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn ;\r\n\t};\r\n\r\n\tgetLanePrimaryHeader(headerValue, icon) {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{headerValue}\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{this.renderLaneHeader()}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.renderTitles()}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withIsMobile(TitleScroller);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport { message } from 'antd';\r\nimport {\r\n\taddSavedFiltersToState,\r\n\tgetFilterRefinementDefinitionToSave,\r\n\tgetBrowseFiltersByType,\r\n} from '../../Community/util';\r\nimport { connectToSavedFilters } from './SavedFiltersDataStore';\r\n\r\nconst SavedFilterContext = React.createContext();\r\n\r\nexport const useSavedFilter = () => React.useContext(SavedFilterContext);\r\n\r\nconst name = 'savedFilterDataStore';\r\n\r\nexport const connectToSavedFilter = makeConnectTo(SavedFilterContext, name);\r\n\r\nexport class SavedFilterDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tsavedFilter: [],\r\n\t\tviewId: 0,\r\n\t\ttitleCount: -1,\r\n\t\tnewId: 0,\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst savedFilterDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(savedFilterDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.props.getCount ? this.fetchTitleCount() : this.fetchSavedFilter();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.savedFilterFetch && this.savedFilterFetch.cancel) {\r\n\t\t\tthis.savedFilterFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshSavedFilter(),\r\n\t\trefreshTitleCount: () => this.refreshTitleCount(),\r\n\t\tupdateFilters: savedFilter => this.updateFilters(savedFilter),\r\n\t\tsaveFilters: (activeCategories, browseLaneType) =>\r\n\t\t\tthis.saveFilters(activeCategories, browseLaneType),\r\n\t\tresetNewId: () => this.resetNewId(),\r\n\t});\r\n\r\n\trefreshSavedFilter = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchSavedFilter();\r\n\t\treturn this.savedFilterFetch.promise;\r\n\t};\r\n\r\n\tfetchSavedFilter = () => {\r\n\t\tconst { viewId } = this.props;\r\n\t\tconst request = api.cancelableGet(`/api/v1/filters/${viewId}/titles`);\r\n\t\trequest.promise.then(this.cacheFullApiResponse);\r\n\t\tthis.savedFilterFetch = request;\r\n\t};\r\n\r\n\tcacheFullApiResponse = apiResponse => {\r\n\t\tconst { viewId } = this.props;\r\n\t\tconst savedFilter = this.getSavedFilter(apiResponse);\r\n\t\tthis.setState({ savedFilter, isLoading: false, viewId });\r\n\t};\r\n\r\n\tgetSavedFilter = apiResponse => {\r\n\t\tconst {\r\n\t\t\tproducts,\r\n\t\t\tdigitalCopyInfo,\r\n\t\t\trequestableSkus,\r\n\t\t\tdownloadableSkus,\r\n\t\t\tuserCommunitySummaryReviews,\r\n\t\t} = apiResponse;\r\n\t\tif (products) {\r\n\t\t\treturn products.map(product => {\r\n\t\t\t\tconst availableReviewCopyFormats = digitalCopyInfo.filter(\r\n\t\t\t\t\tdci => dci.sku === product.sku,\r\n\t\t\t\t);\r\n\t\t\t\tconst isRequestable =\r\n\t\t\t\t\trequestableSkus &&\r\n\t\t\t\t\trequestableSkus.filter(rs => rs === product.sku)[0];\r\n\t\t\t\tconst isDownloadable =\r\n\t\t\t\t\tdownloadableSkus &&\r\n\t\t\t\t\tdownloadableSkus.filter(dl => dl === product.sku)[0];\r\n\t\t\t\tproduct.digitalUpdatedDate =\r\n\t\t\t\t\tavailableReviewCopyFormats &&\r\n\t\t\t\t\tavailableReviewCopyFormats.length > 0 &&\r\n\t\t\t\t\tavailableReviewCopyFormats[0].updatedDate;\r\n\t\t\t\tproduct.reviewCopyAvailability = isDownloadable\r\n\t\t\t\t\t? 'Available for Download'\r\n\t\t\t\t\t: isRequestable\r\n\t\t\t\t\t? 'Available for Request'\r\n\t\t\t\t\t: 'Review Copy Not Available';\r\n\t\t\t\tconst csr = userCommunitySummaryReviews.filter(\r\n\t\t\t\t\tcsr => csr.sku === product.sku,\r\n\t\t\t\t);\r\n\t\t\t\tvar reviews = 0;\r\n\t\t\t\tvar average = 0;\r\n\t\t\t\tif (csr && csr.length > 0) {\r\n\t\t\t\t\treviews = csr[0].count;\r\n\t\t\t\t\taverage = csr[0].rating && csr[0].rating.toFixed(1);\r\n\t\t\t\t}\r\n\t\t\t\tproduct.reviews = reviews;\r\n\t\t\t\tproduct.average = average;\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...product,\r\n\t\t\t\t\tproduct,\r\n\t\t\t\t\tisRequestable,\r\n\t\t\t\t\tisDownloadable,\r\n\t\t\t\t\tavailableReviewCopyFormats,\r\n\t\t\t\t\turi:\r\n\t\t\t\t\t\tproduct &&\r\n\t\t\t\t\t\tproduct.images &&\r\n\t\t\t\t\t\tproduct.images.filter(im => im.type === 'jacketCover')\r\n\t\t\t\t\t\t\t.length > 0 &&\r\n\t\t\t\t\t\tproduct.images.filter(\r\n\t\t\t\t\t\t\tim => im.type === 'jacketCover',\r\n\t\t\t\t\t\t)[0].uri + '?height=450',\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\trefreshTitleCount = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchTitleCount();\r\n\t\treturn this.savedFilterFetch.promise;\r\n\t};\r\n\r\n\tfetchTitleCount = () => {\r\n\t\tconst { viewId } = this.props;\r\n\t\tconst { newId } = this.state;\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/filters/${newId > 0 ? newId : viewId}/titles/count`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.savedFilterFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst titleCount = apiResponse;\r\n\t\tthis.setState({ titleCount, isLoading: false });\r\n\t};\r\n\r\n\tupdateFilters = savedFilter => {\r\n\t\tconst { newId } = this.state;\r\n\t\tconst id = newId > 0 ? newId : savedFilter.id;\r\n\t\tconst definition = getFilterRefinementDefinitionToSave(\r\n\t\t\tsavedFilter.browseRefinements,\r\n\t\t);\r\n\t\tconst userBrowseView = {\r\n\t\t\tname: savedFilter.name,\r\n\t\t\tid: id,\r\n\t\t\tdefinition: JSON.stringify(definition),\r\n\t\t};\r\n\t\tif (id === -1) {\r\n\t\t\tapi.post('/api/v1/savedFilters', userBrowseView)\r\n\t\t\t\t.then(newId => {\r\n\t\t\t\t\tthis.setState({ newId });\r\n\t\t\t\t\tthis.refreshTitleCount();\r\n\t\t\t\t\tmessage.success('Your changes have been saved');\r\n\t\t\t\t})\r\n\t\t\t\t.catch(e => console.error(e));\r\n\t\t} else {\r\n\t\t\tapi.put('/api/v1/savedFilters', userBrowseView)\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tthis.refreshTitleCount();\r\n\t\t\t\t\tmessage.success('Your changes have been saved');\r\n\t\t\t\t})\r\n\t\t\t\t.catch(e => console.error(e));\r\n\t\t}\r\n\t};\r\n\r\n\tsaveFilters = (activeCategories, browseLaneType) => {\r\n\t\tvar { savedFilters } = this.props.savedFiltersDataStore.state;\r\n\t\tconst { viewId } = this.props;\r\n\t\tvar thisSavedFilter = savedFilters.filter(sf => sf.id === viewId)[0];\r\n\t\tthisSavedFilter.browseRefinements = thisSavedFilter.browseRefinements.filter(\r\n\t\t\ttsf => tsf.browseLaneType !== browseLaneType.key,\r\n\t\t);\r\n\t\taddSavedFiltersToState(\r\n\t\t\tthisSavedFilter.browseRefinements,\r\n\t\t\tactiveCategories,\r\n\t\t\tbrowseLaneType,\r\n\t\t\tviewId,\r\n\t\t);\r\n\t\tthisSavedFilter.filtersByType = getBrowseFiltersByType(thisSavedFilter);\r\n\t\tthis.updateFilters(thisSavedFilter);\r\n\t};\r\n\r\n\tresetNewId = () => {\r\n\t\tthis.setState({ newId: 0 });\r\n\t};\r\n}\r\n\r\nexport default connectToSavedFilters(SavedFilterDataStore);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport TitleDetail from './TitleDetail';\r\nimport DrawerAnchor from '../UI/DrawerAnchor';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport LoadingSpinnerInContainer from '../UI/LoadingSpinnerInContainer';\r\nimport './titleDetailDrawer.less';\r\nimport { LoadingSpinnerSize } from '../UI/LoadingSpinner';\r\n\r\nexport class TitleDetailDrawer extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tsku: PropTypes.string,\r\n\t\tchildren: PropTypes.oneOfType([\r\n\t\t\tPropTypes.func,\r\n\t\t\tPropTypes.element,\r\n\t\t\tPropTypes.string,\r\n\t\t]),\r\n\t\tparentStyle: PropTypes.string,\r\n\t\t// Mapped to props\r\n\t\tisMobile: PropTypes.func,\r\n\t\tisDataFetching: PropTypes.bool,\r\n\t};\r\n\r\n\tstatic defaultProps = {\r\n\t\tparentStyle: 'clickable dotDot',\r\n\t\tisDataFetching: false,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { children, parentStyle } = this.props;\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\trenderDrawerContent = drawer => {\r\n\t\treturn drawer.isVisible && this.renderTitleDetail();\r\n\t};\r\n\r\n\trenderTitleDetail = () => {\r\n\t\tconst { sku, communityId, isDataFetching } = this.props;\r\n\t\treturn isDataFetching ? (\r\n\t\t\t\r\n\t\t) : (\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n}\r\n\r\nexport default withIsMobile(TitleDetailDrawer);\r\n","import { message } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport * as Util from '../../../util';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\n\r\nconst SavedFiltersContext = React.createContext();\r\n\r\nexport const useSavedFilters = () => React.useContext(SavedFiltersContext);\r\n\r\nconst name = 'savedFiltersDataStore';\r\n\r\nexport const connectToSavedFilters = makeConnectTo(SavedFiltersContext, name);\r\n\r\nexport default class SavedFiltersDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tsavedFilters: [],\r\n\t\tfiltersByType: [],\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst savedFiltersDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(savedFiltersDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchSavedFilters();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.savedFiltersFetch && this.savedFiltersFetch.cancel) {\r\n\t\t\tthis.savedFiltersFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshSavedFilters(),\r\n\t\tdeleteSavedFilter: id => this.deleteSavedFilter(id),\r\n\t\tsaveNewFilter: name => this.saveNewFilter(name),\r\n\t});\r\n\r\n\trefreshSavedFilters = doNotRefresh => {\r\n\t\t!doNotRefresh &&\r\n\t\t\tthis.setState({\r\n\t\t\t\tisLoading: true,\r\n\t\t\t});\r\n\t\tthis.fetchSavedFilters();\r\n\t\treturn this.savedFiltersFetch.promise;\r\n\t};\r\n\r\n\tfetchSavedFilters = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/savedFilters`);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.savedFiltersFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst savedFilters = this.getSavedFilters(apiResponse).sort(function(\r\n\t\t\ta,\r\n\t\t\tb,\r\n\t\t) {\r\n\t\t\treturn a.name.localeCompare(b.name);\r\n\t\t});\r\n\t\tsavedFilters.push({\r\n\t\t\tid: -1,\r\n\t\t\tbrowseRefinements: [],\r\n\t\t\tname: `My Filter #` + (savedFilters.length + 1),\r\n\t\t\tfiltersByType: [],\r\n\t\t\tdefinition: '',\r\n\t\t});\r\n\t\tthis.setState({ savedFilters, isLoading: false });\r\n\t};\r\n\r\n\tgetSavedFilters = apiResponse => {\r\n\t\treturn apiResponse.map(savedFilter => {\r\n\t\t\treturn {\r\n\t\t\t\t...savedFilter,\r\n\t\t\t\tfiltersByType: savedFilter.browseRefinements\r\n\t\t\t\t\t? Object.keys(\r\n\t\t\t\t\t\t\tUtil.groupBy(\r\n\t\t\t\t\t\t\t\tsavedFilter.browseRefinements,\r\n\t\t\t\t\t\t\t\t'browseLaneType',\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t )\r\n\t\t\t\t\t: [],\r\n\t\t\t};\r\n\t\t});\r\n\t};\r\n\r\n\tdeleteSavedFilter = id => {\r\n\t\tconst body = {\r\n\t\t\tid: id,\r\n\t\t};\r\n\t\tconst endpoint = `/api/v1/savedFilters`;\r\n\t\tthis.messagesFetch = api.cancelableCall('DELETE', endpoint, body);\r\n\t\tmessage.success('This filter has been deleted');\r\n\t\treturn this.messagesFetch.promise.then(() =>\r\n\t\t\tthis.refreshSavedFilters(false),\r\n\t\t);\r\n\t};\r\n\r\n\tsaveNewFilter = name => {\r\n\t\tconst userBrowseView = {\r\n\t\t\tname: name,\r\n\t\t\tdefinition: '{}',\r\n\t\t};\r\n\t\tapi.post('/api/v1/savedFilters', userBrowseView).then(() => {\r\n\t\t\tthis.refreshSavedFilters(false);\r\n\t\t\tmessage.success('Your new filter has been saved');\r\n\t\t});\r\n\t\tconsole.log(userBrowseView);\r\n\t};\r\n}\r\n","const RequestStatus = {\r\n\tpending: 'pending',\r\n\tapproved: 'approved',\r\n\trejected: 'rejected',\r\n\tapprovedArchived: 'approvedArchived',\r\n\tcancelled: 'cancelled',\r\n};\r\n\r\nexport default RequestStatus;\r\n","import React from 'react';\r\nimport LocalizedDate from '../Localization/LocalizedDate';\r\nimport RequestStatus from '../Requests/RequestStatus';\r\nimport './titleActivityTile.css';\r\nimport { Popover } from 'antd';\r\n\r\nexport default class TitleActivitySummary extends React.Component {\r\n\trender() {\r\n\t\tconst { request, download, review } = this.props;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{request && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t{request.status === RequestStatus.rejected && (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t\t\t{download && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{review && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\trenderPopoverText = (text, dateString) => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{text}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport TitleBaseMeta from '../Title/UI/TitleBaseMeta';\r\nimport TitleJacketImage from '../Title/UI/TitleJacketImage';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport TitleActions from './TitleActions';\r\nimport TitleActivitySummary from './TitleActivitySummary';\r\nimport './titleActivityTile.css';\r\nimport TitleReviewBursts from './TitleReviewBursts';\r\nimport { Popover } from 'antd';\r\nimport ParseContent from '../ParseContent';\r\n\r\nexport class TitleActivityTile extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.selectTitle = this.selectTitle.bind(this);\r\n\t\tthis.state = {\r\n\t\t\tselectedTitles: [],\r\n\t\t};\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst {\r\n\t\t\trequest,\r\n\t\t\tdownload,\r\n\t\t\treview,\r\n\t\t\ttitle,\r\n\t\t\tisSelected,\r\n\t\t\ttitleListType,\r\n\t\t} = this.props;\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{title.product && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{title.product.markupNotes && (\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{!isMobile && (\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{titleListType &&\r\n\t\t\t\t\t\t\t\ttitleListType.key === 'catalog' && (\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{title.product.sequence + 1}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n\r\n\tselectTitle = (sku, isSelected) => {\r\n\t\tthis.props.logSelectedTitles(sku, isSelected);\r\n\t};\r\n}\r\n\r\nexport default withIsMobile(TitleActivityTile);\r\n","const TitleFilterAttribute = {\r\n\tSupplier: {\r\n\t\tattribute: 'supplier',\r\n\t\tlabel: 'Imprint / Publisher',\r\n\t},\r\n\tFormat: {\r\n\t\tattribute: 'format',\r\n\t\tlabel: 'Format',\r\n\t},\r\n\tCategory: {\r\n\t\tattribute: 'category',\r\n\t\tlabel: 'Category',\r\n\t},\r\n\tSeries: {\r\n\t\tattribute: 'series',\r\n\t\tlabel: 'Series',\r\n\t},\r\n\tPubDateRange: {\r\n\t\tattribute: 'pubDatePeriodDisplay',\r\n\t\tlabel: 'Published Date Range',\r\n\t},\r\n\tPublishingStatus: {\r\n\t\tattribute: 'publishingStatus',\r\n\t\tlabel: 'Publishing Status',\r\n\t},\r\n\tReviewCopyAvailability: {\r\n\t\tattribute: 'reviewCopyAvailability',\r\n\t\tlabel: 'Review Copy Availability',\r\n\t},\r\n\tMarkupNoteIndicator: {\r\n\t\tattribute: 'markupNoteIndicator',\r\n\t\tlabel: 'Markup Notes',\r\n\t},\r\n};\r\n\r\nexport default TitleFilterAttribute;\r\n","import React from 'react';\r\nimport * as Util from '../../../util';\r\nimport { Switch } from 'antd';\r\nimport DrawerAnchor from '../../UI/DrawerAnchor';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport TitleFilterAttribute from './TitleFilterAttribute';\r\nimport MobileDrawerHeader from '../../UI/MobileDrawerHeader';\r\n\r\nexport class TitleFilter extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tvisible: false,\r\n\t\t\tfilteredTitleCount: 0,\r\n\t\t\tactiveFilterSections: [],\r\n\t\t\tactiveFilters: [],\r\n\t\t\tfilterListKey: null,\r\n\t\t};\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\tconst { parentStyle } = this.props;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\trenderDrawerContent = drawer => {\r\n\t\treturn drawer.isVisible && this.renderTitleFilter();\r\n\t};\r\n\r\n\trenderTitleFilter = () => {\r\n\t\tconst { titles, listKey } = this.props;\r\n\t\tconst { filterListKey } = this.state;\r\n\t\tif (listKey !== filterListKey) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tfilteredTitleCount: 0,\r\n\t\t\t\tfilteredTitles: [],\r\n\t\t\t\tfilterListKey: this.props.listKey,\r\n\t\t\t\tactiveFilterSections: [],\r\n\t\t\t\tactiveFilters: [],\r\n\t\t\t});\r\n\t\t}\r\n\t\tconst { filteredTitleCount } = this.state;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{filteredTitleCount === titles.length ||\r\n\t\t\t\t\t\t\tfilteredTitleCount === 0 ? (\r\n\t\t\t\t\t\t\t\tNo Filters Active\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{filteredTitleCount} of {titles.length}{' '}\r\n\t\t\t\t\t\t\t\t\tTitles\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.renderFilterSection(\r\n\t\t\t\t\t\t\tTitleFilterAttribute.Supplier,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.renderFilterSection(TitleFilterAttribute.Format)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.renderFilterSection(\r\n\t\t\t\t\t\t\tTitleFilterAttribute.Category,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.renderFilterSection(TitleFilterAttribute.Series)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.renderFilterSection(\r\n\t\t\t\t\t\t\tTitleFilterAttribute.PubDateRange,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.renderFilterSection(\r\n\t\t\t\t\t\t\tTitleFilterAttribute.PublishingStatus,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.renderFilterSection(\r\n\t\t\t\t\t\t\tTitleFilterAttribute.ReviewCopyAvailability,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.renderFilterSection(\r\n\t\t\t\t\t\t\tTitleFilterAttribute.MarkupNoteIndicator,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tonChange(e, attribute, item) {\r\n\t\tif (e === true) {\r\n\t\t\tthis.addFilter(attribute, item);\r\n\t\t} else {\r\n\t\t\tthis.removeFilter(attribute, item);\r\n\t\t}\r\n\t}\r\n\r\n\taddFilter = (attribute, item) => {\r\n\t\tconst activeFilters = this.state.activeFilters;\r\n\t\tactiveFilters.push({\r\n\t\t\tattribute: attribute,\r\n\t\t\titem: item,\r\n\t\t});\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tactiveFilters: activeFilters,\r\n\t\t\t},\r\n\t\t\tthis.filterResults,\r\n\t\t);\r\n\t};\r\n\r\n\tremoveFilter = (attribute, item) => {\r\n\t\tconst activeFilters = this.state.activeFilters;\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tactiveFilters: activeFilters.filter(\r\n\t\t\t\t\taf =>\r\n\t\t\t\t\t\taf.attribute != attribute ||\r\n\t\t\t\t\t\t(af.attribute == attribute && af.item != item),\r\n\t\t\t\t),\r\n\t\t\t},\r\n\t\t\tthis.filterResults,\r\n\t\t);\r\n\t};\r\n\r\n\ttoggleFilterSection(e, titleFilterAttribute) {\r\n\t\tconst { activeFilterSections } = this.state;\r\n\t\tvar newActiveFilterSections = activeFilterSections;\r\n\t\tif (e === true) {\r\n\t\t\tnewActiveFilterSections.push(titleFilterAttribute.attribute);\r\n\t\t} else {\r\n\t\t\tnewActiveFilterSections = newActiveFilterSections.filter(\r\n\t\t\t\tafs => afs != titleFilterAttribute.attribute,\r\n\t\t\t);\r\n\t\t}\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tactiveFilterSections: newActiveFilterSections,\r\n\t\t\t},\r\n\t\t\tthis.filterResults,\r\n\t\t);\r\n\t}\r\n\r\n\trenderFilterSection = titleFilterAttribute => {\r\n\t\tconst { activeFilterSections } = this.state;\r\n\t\tconst isActive =\r\n\t\t\tactiveFilterSections.filter(\r\n\t\t\t\tafs => afs === titleFilterAttribute.attribute,\r\n\t\t\t).length > 0;\r\n\t\tconst { titles } = this.props;\r\n\t\tconst filteredList =\r\n\t\t\ttitles && Util.groupBy(titles, titleFilterAttribute.attribute);\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{Object.keys(filteredList).length > 1 && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tthis.toggleFilterSection(\r\n\t\t\t\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\t\t\t\ttitleFilterAttribute,\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{Object.keys(filteredList).length}{' '}\r\n\t\t\t\t\t\t\t\t{titleFilterAttribute.label} Filters\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t{isActive && (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{this.renderFilterOptions(titleFilterAttribute)}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\trenderFilterOptions = titleFilterAttribute => {\r\n\t\tconst { titles } = this.props;\r\n\t\tconst { filteredTitles } = this.state;\r\n\t\tconst originalFilteredList =\r\n\t\t\ttitles && Util.groupBy(titles, titleFilterAttribute.attribute);\r\n\t\tconst filteredList =\r\n\t\t\tfilteredTitles &&\r\n\t\t\tUtil.groupBy(filteredTitles, titleFilterAttribute.attribute);\r\n\t\tvar sorted = [];\r\n\t\tfor (var key in originalFilteredList) {\r\n\t\t\tsorted[sorted.length] = key;\r\n\t\t}\r\n\t\tsorted.sort();\r\n\t\treturn sorted.map((item, idx) => (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tthis.onChange(\r\n\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\ttitleFilterAttribute.attribute,\r\n\t\t\t\t\t\t\t\titem,\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t/>\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{item && item !== 'undefined' ? (\r\n\t\t\t\t\t\titem\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t[No {titleFilterAttribute.label}]\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{filteredList && filteredList[item] && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{filteredList[item].length} • \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}{' '}\r\n\t\t\t\t\t({originalFilteredList[item].length})\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t));\r\n\t};\r\n\r\n\tgetInitialState = (attribute, item) => {\r\n\t\tconst activeFilters = this.state.activeFilters;\r\n\t\treturn (\r\n\t\t\tactiveFilters.filter(\r\n\t\t\t\taf => af.attribute === attribute && af.item === item,\r\n\t\t\t).length > 0\r\n\t\t);\r\n\t};\r\n\r\n\tfilterResults = () => {\r\n\t\tvar { titles } = this.props;\r\n\t\tconst { activeFilters, activeFilterSections } = this.state;\r\n\t\ttitles = titles.filter(function(item) {\r\n\t\t\tvar hits = 0;\r\n\t\t\tfor (let i = 0; i < activeFilterSections.length; i++) {\r\n\t\t\t\tvar attribute = activeFilterSections[i];\r\n\t\t\t\tvar relevantActiveFilters =\r\n\t\t\t\t\tactiveFilters &&\r\n\t\t\t\t\tactiveFilters.filter(af => af.attribute === attribute);\r\n\t\t\t\tif (relevantActiveFilters) {\r\n\t\t\t\t\tfor (let j = 0; j < relevantActiveFilters.length; j++) {\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\titem[attribute] === relevantActiveFilters[j].item ||\r\n\t\t\t\t\t\t\t(!item[attribute] &&\r\n\t\t\t\t\t\t\t\trelevantActiveFilters[j].item === 'undefined')\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\thits += 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn hits === activeFilterSections.length;\r\n\t\t});\r\n\r\n\t\tthis.setState({\r\n\t\t\tfilteredTitleCount: titles.length,\r\n\t\t\tfilteredTitles: titles,\r\n\t\t\tfilterListKey: this.props.listKey,\r\n\t\t});\r\n\r\n\t\tthis.props.sendData(\r\n\t\t\ttitles\r\n\t\t\t\t? titles.map(function(item) {\r\n\t\t\t\t\t\treturn item.sku;\r\n\t\t\t\t })\r\n\t\t\t\t: [],\r\n\t\t\tthis.state.filterListKey,\r\n\t\t);\r\n\t};\r\n\r\n\tapplyFilters = () => {\r\n\t\tthis.props.sendData(\r\n\t\t\tthis.state.filteredTitles.map(function(item) {\r\n\t\t\t\treturn item.sku;\r\n\t\t\t}),\r\n\t\t);\r\n\t};\r\n}\r\n\r\nexport default withIsMobile(TitleFilter);\r\n","import { Input } from 'antd';\r\nimport React from 'react';\r\nimport '../tiledTitleList.less';\r\n\r\nexport default class TitleSearch extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tvisible: false,\r\n\t\t};\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\tSearch\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n\r\n\tonSearchInputChange = e => {\r\n\t\tconst { value } = e.target;\r\n\t\tthis.setState({ value });\r\n\r\n\t\tconst { titles } = this.props;\r\n\t\tvar searchResults = titles.filter(\r\n\t\t\tli =>\r\n\t\t\t\t(li.name &&\r\n\t\t\t\t\tli.name.toLowerCase().indexOf(value.toLowerCase()) > -1) ||\r\n\t\t\t\t(li.author &&\r\n\t\t\t\t\tli.author.toLowerCase().indexOf(value.toLowerCase()) > -1),\r\n\t\t);\r\n\r\n\t\tthis.props.sendSearchData(\r\n\t\t\ttitles ? searchResults.map(item => item.sku) : [],\r\n\t\t\tvalue.length,\r\n\t\t);\r\n\t};\r\n}\r\n","import ShelfSelectDrawer from '../Shelves/Selection/ShelfSelectDrawer';\r\nimport ListAssignDrawer from '../CollaborativeLists/ManageFromTitleOrList/ListAssignDrawer';\r\nimport TitleExport from './Export/TitleExport';\r\n\r\nexport const TitleListActionOptions = {\r\n\tAddToCollaborativeList: {\r\n\t\tlabel: 'add_to_collaborative_list',\r\n\t\tclassNames: 'icon-community add-to-collaborative-list-icon',\r\n\t\tdrawer: ListAssignDrawer,\r\n\t},\r\n\tAddToShelf: {\r\n\t\tlabel: 'add_to_shelf_collection',\r\n\t\tclassNames: 'icon-books shelf-icon',\r\n\t\tdrawer: ShelfSelectDrawer,\r\n\t},\r\n\tShareOrExport: {\r\n\t\tlabel: 'share_or_export',\r\n\t\tclassNames: 'icon-export share-icon',\r\n\t\tdrawer: TitleExport,\r\n\t},\r\n\tClearTitleSelections: {\r\n\t\tlabel: 'clear_title_selections',\r\n\t\tclassNames: 'icon-undo share-icon',\r\n\t},\r\n};\r\n","import { Button, List, Popover, Switch, Dropdown, Menu } from 'antd';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport handlePlural from '../../util/handlePlural';\r\nimport { connectToDownloads } from '../Downloads/containers/DownloadsDataStore';\r\nimport { connectToRequests } from '../Requests/containers/RequestsDataStore';\r\nimport { connectToReviews } from '../Reviews/containers/ReviewsDataStore';\r\nimport TitleActivityTile from '../Title/TitleActivityTile';\r\nimport combineConnectors from '../util/combineConnectors';\r\nimport TitleFilter from './Filter/TitleFilter';\r\nimport TitleSearch from './Search/TitleSearch';\r\nimport TitleSortAttribute from './Sort/TitleSortAttribute';\r\nimport TitleListType from './TitleListType';\r\nimport { TitleListActionOptions } from './TitleListActionOptions';\r\nimport PropTypes from 'prop-types';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport './tiledTitleList.less';\r\n\r\nexport const TiledTitleList = ({\r\n\tskus,\r\n\ttitles,\r\n\tisLoading,\r\n\tlistKey,\r\n\tisMobile,\r\n\ttitleListType,\r\n\trequestsDataStore,\r\n\tdownloadsDataStore,\r\n\treviewsDataStore,\r\n}) => {\r\n\tconst [filterListKey, setFilterListKey] = useState(null);\r\n\tconst [isFiltered, setIsFiltered] = useState(false);\r\n\tconst [filteredSkus, setFilteredSkus] = useState([]);\r\n\tconst [isSearchOn, setIsSearchOn] = useState(false);\r\n\tconst [searchedSkus, setSearchedSkus] = useState([]);\r\n\tconst [titleSortAttribute, setTitleSortAttribute] = useState(\r\n\t\tTitleSortAttribute.OnSaleDate,\r\n\t);\r\n\tconst [isSortDirectionAsc, setIsSortDirectionAsc] = useState(false);\r\n\tconst [selectedSkus, setSelectedSkus] = useState([]);\r\n\tconst isMobileSize = isMobile();\r\n\r\n\tconst renderedSkus = isSearchOn\r\n\t\t? searchedSkus\r\n\t\t: isFiltered && listKey === filterListKey\r\n\t\t? filteredSkus\r\n\t\t: skus;\r\n\r\n\tuseEffect(() => {\r\n\t\tif (titleListType) {\r\n\t\t\tsetTitleSortAttribute(titleListType.defaultSortAttribute);\r\n\t\t\tsetIsSortDirectionAsc(titleListType.isSortDirectionAsc);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst getSearchData = (searchedSkus, searchCharacters) => {\r\n\t\tif (\r\n\t\t\tsearchCharacters > 0 &&\r\n\t\t\tsearchedSkus &&\r\n\t\t\tsearchedSkus.length > 0 &&\r\n\t\t\tsearchedSkus.length !== skus.length\r\n\t\t) {\r\n\t\t\tsetIsSearchOn(true);\r\n\t\t\tsetSearchedSkus(searchedSkus);\r\n\t\t} else {\r\n\t\t\tsetIsSearchOn(false);\r\n\t\t\tsetSearchedSkus([]);\r\n\t\t}\r\n\t};\r\n\r\n\tconst getData = (searchedSkus, key) => {\r\n\t\tif (\r\n\t\t\tkey === listKey &&\r\n\t\t\tsearchedSkus &&\r\n\t\t\tsearchedSkus.length > 0 &&\r\n\t\t\tsearchedSkus.length !== skus.length\r\n\t\t) {\r\n\t\t\tsetIsFiltered(true);\r\n\t\t\tsetFilteredSkus(searchedSkus);\r\n\t\t\tsetFilterListKey(key);\r\n\t\t} else {\r\n\t\t\tsetIsFiltered(false);\r\n\t\t\tsetFilteredSkus([]);\r\n\t\t\tsetFilterListKey(listKey);\r\n\t\t}\r\n\t};\r\n\r\n\tconst renderTitle = (sku, titles) => {\r\n\t\tconst { requests } = requestsDataStore.state;\r\n\t\tconst { downloads } = downloadsDataStore.state;\r\n\t\tconst { reviews } = reviewsDataStore.state;\r\n\t\tconst request = requests && requests.filter(rq => rq.sku === sku)[0];\r\n\r\n\t\tconst skuDownload = downloads && downloads.filter(dn => dn.sku === sku);\r\n\t\tconst download =\r\n\t\t\tskuDownload && skuDownload.length > 0 && skuDownload[0];\r\n\r\n\t\tconst skuReview = reviews && reviews.filter(rv => rv.sku === sku);\r\n\t\tconst review = skuReview && skuReview.length > 0 && skuReview[0];\r\n\r\n\t\tconst skuTitle = titles.filter(dn => dn.sku === sku);\r\n\t\tconst title = skuTitle && skuTitle.length > 0 && skuTitle[0];\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t sk === title.sku).length > 0\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttitleListType={titleListType}\r\n\t\t\t\t/>\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderFilterLink = renderedSkus => {\r\n\t\tif (listKey !== filterListKey) {\r\n\t\t\tsetIsFiltered(false);\r\n\t\t\tsetFilteredSkus([]);\r\n\t\t\tsetFilterListKey(listKey);\r\n\t\t}\r\n\t\tconst unfilteredTitles = titles.filter(function(item) {\r\n\t\t\treturn skus.includes(item.sku);\r\n\t\t});\r\n\t\tconst filteredTitles = isFiltered\r\n\t\t\t? titles.filter(function(item) {\r\n\t\t\t\t\treturn filteredSkus.includes(item.sku);\r\n\t\t\t })\r\n\t\t\t: unfilteredTitles;\r\n\t\tconst filteredProducts = filteredTitles.map(function(item) {\r\n\t\t\treturn item.product;\r\n\t\t});\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{handlePlural('Title', skus.length, false)}\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{renderActionHeader(renderedSkus)}\r\n\t\t\t\t\t{renderFilterHeader(unfilteredTitles)}\r\n\t\t\t\t\t{renderSortHeader()}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderActionHeader = renderedSkus => {\r\n\t\tconst renderActionTitleText = () => (\r\n\t\t\t\r\n\t\t\t\tAction{' '}\r\n\t\t\t\t{selectedSkus.length === 0\r\n\t\t\t\t\t? 'All Titles'\r\n\t\t\t\t\t: handlePlural('Title', selectedSkus.length, false)}\r\n\t\t\t\r\n\t\t);\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{!isMobileSize && renderActionTitleText()}\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderFilterHeader = unfilteredTitles => {\r\n\t\tconst filterText = (\r\n\t\t\t\r\n\t\t\t\t{isFiltered\r\n\t\t\t\t\t? handlePlural('Filtered Title', filteredSkus.length, false)\r\n\t\t\t\t\t: 'Filter'}\r\n\t\t\t\r\n\t\t);\r\n\r\n\t\tconst unfilteredProducts = unfilteredTitles.map(item => item.product);\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t{!isMobileSize ? filterText : null}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderActionOptionLabel = option => {\r\n\t\tconst { classNames, label } = option;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderOneActionOption = (option, skus) => {\r\n\t\tconst { drawer: Drawer } = option;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{renderActionOptionLabel(option)}\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderActionOptions = renderedSkus => {\r\n\t\tconst actionSkus =\r\n\t\t\tselectedSkus.length === 0 ? renderedSkus : selectedSkus;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{renderOneActionOption(\r\n\t\t\t\t\tTitleListActionOptions.AddToCollaborativeList,\r\n\t\t\t\t\tactionSkus,\r\n\t\t\t\t)}\r\n\t\t\t\t{renderOneActionOption(\r\n\t\t\t\t\tTitleListActionOptions.AddToShelf,\r\n\t\t\t\t\tactionSkus,\r\n\t\t\t\t)}\r\n\t\t\t\t{renderOneActionOption(\r\n\t\t\t\t\tTitleListActionOptions.ShareOrExport,\r\n\t\t\t\t\tactionSkus,\r\n\t\t\t\t)}\r\n\t\t\t\t{selectedSkus.length > 0 && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{renderActionOptionLabel(\r\n\t\t\t\t\t\t\t\tTitleListActionOptions.ClearTitleSelections,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst clearTitleSelections = () => {\r\n\t\tsetSelectedSkus([]);\r\n\t};\r\n\r\n\tconst renderSortHeader = () => {\r\n\t\tconst actionTitleText = (\r\n\t\t\t\r\n\t\t\t\tSort\r\n\t\t\t\r\n\t\t);\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{!isMobileSize && actionTitleText}\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderSortOptions = () => {\r\n\t\tconst getSortOptions = () => {\r\n\t\t\tconst sortOptions = [\r\n\t\t\t\tTitleSortAttribute.OnSaleDate,\r\n\t\t\t\tTitleSortAttribute.PubDate,\r\n\t\t\t\tTitleSortAttribute.DigitalUpdatedDate,\r\n\t\t\t\tTitleSortAttribute.Supplier,\r\n\t\t\t\tTitleSortAttribute.Category,\r\n\t\t\t\tTitleSortAttribute.Author,\r\n\t\t\t\tTitleSortAttribute.Pages,\r\n\t\t\t\tTitleSortAttribute.CommunityReviews,\r\n\t\t\t\tTitleSortAttribute.CommunityRating,\r\n\t\t\t];\r\n\t\t\ttitleListType === TitleListType.Catalog &&\r\n\t\t\t\tsortOptions.unshift(TitleSortAttribute.Sequence);\r\n\t\t\ttitleListType === TitleListType.CollaborativeList &&\r\n\t\t\t\tsortOptions.unshift(TitleSortAttribute.NetVotes);\r\n\t\t\treturn sortOptions;\r\n\t\t};\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
Sort Direction
\r\n\t\t\t\t
\r\n\t\t\t\t\t changeSortDirection(e)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
Sorted By
\r\n\t\t\t\t{getSortOptions().map(sortOption =>\r\n\t\t\t\t\trenderSortOption(sortOption),\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderSortOption = thisTitleSortAttribute => {\r\n\t\treturn (\r\n\t\t\t changeSortAttribute(thisTitleSortAttribute)}>\r\n\t\t\t\t\r\n\t\t\t\t\t{thisTitleSortAttribute.label}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst changeSortDirection = e => {\r\n\t\tsetIsSortDirectionAsc(e);\r\n\t};\r\n\r\n\tconst changeSortAttribute = titleSortAttribute => {\r\n\t\tsetTitleSortAttribute(titleSortAttribute);\r\n\t};\r\n\r\n\tconst sortTitles = renderedSkus => {\r\n\t\tconst renderedTitles = titles.filter(function(item) {\r\n\t\t\treturn renderedSkus.includes(item.sku);\r\n\t\t});\r\n\t\tvar sortedTitles = {};\r\n\t\tif (titleSortAttribute.type === 'string') {\r\n\t\t\tsortedTitles = sortString(\r\n\t\t\t\trenderedTitles,\r\n\t\t\t\ttitleSortAttribute.attribute,\r\n\t\t\t\tisSortDirectionAsc,\r\n\t\t\t);\r\n\t\t} else if (titleSortAttribute.type === 'number') {\r\n\t\t\tsortedTitles = sortNumber(\r\n\t\t\t\trenderedTitles,\r\n\t\t\t\ttitleSortAttribute.attribute,\r\n\t\t\t\tisSortDirectionAsc,\r\n\t\t\t);\r\n\t\t} else if (titleSortAttribute.type === 'date') {\r\n\t\t\tsortedTitles = sortDate(\r\n\t\t\t\trenderedTitles,\r\n\t\t\t\ttitleSortAttribute.attribute,\r\n\t\t\t\ttitleSortAttribute.secondaryAttribute,\r\n\t\t\t\tisSortDirectionAsc,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn sortedTitles.map(function(item) {\r\n\t\t\treturn item.sku;\r\n\t\t});\r\n\t};\r\n\r\n\tconst sortNumber = (titles, attribute, isSortDirectionAsc) => {\r\n\t\treturn !isSortDirectionAsc === true\r\n\t\t\t? titles.sort((a, b) => b.product[attribute] - a.product[attribute])\r\n\t\t\t: titles.sort(\r\n\t\t\t\t\t(a, b) => a.product[attribute] - b.product[attribute],\r\n\t\t\t );\r\n\t};\r\n\r\n\tconst sortString = (titles, attribute, isSortDirectionAsc) => {\r\n\t\treturn !isSortDirectionAsc === true\r\n\t\t\t? titles.sort((a, b) =>\r\n\t\t\t\t\t('' + b.product[attribute]).localeCompare(\r\n\t\t\t\t\t\ta.product[attribute],\r\n\t\t\t\t\t),\r\n\t\t\t )\r\n\t\t\t: titles.sort((a, b) =>\r\n\t\t\t\t\t('' + a.product[attribute]).localeCompare(\r\n\t\t\t\t\t\tb.product[attribute],\r\n\t\t\t\t\t),\r\n\t\t\t );\r\n\t};\r\n\r\n\tconst sortDate = (\r\n\t\ttitles,\r\n\t\tattribute,\r\n\t\tsecondaryAttribute,\r\n\t\tisSortDirectionAsc,\r\n\t) => {\r\n\t\treturn !isSortDirectionAsc === true\r\n\t\t\t? titles.sort(\r\n\t\t\t\t\t(a, b) =>\r\n\t\t\t\t\t\tnew Date(\r\n\t\t\t\t\t\t\tb.product[attribute]\r\n\t\t\t\t\t\t\t\t? b.product[attribute]\r\n\t\t\t\t\t\t\t\t: b.product[secondaryAttribute]\r\n\t\t\t\t\t\t\t\t? b.product[secondaryAttribute]\r\n\t\t\t\t\t\t\t\t: '1/1/1910',\r\n\t\t\t\t\t\t) -\r\n\t\t\t\t\t\tnew Date(\r\n\t\t\t\t\t\t\ta.product[attribute]\r\n\t\t\t\t\t\t\t\t? a.product[attribute]\r\n\t\t\t\t\t\t\t\t: a.product[secondaryAttribute]\r\n\t\t\t\t\t\t\t\t? a.product[secondaryAttribute]\r\n\t\t\t\t\t\t\t\t: '1/1/1910',\r\n\t\t\t\t\t\t),\r\n\t\t\t )\r\n\t\t\t: titles.sort(\r\n\t\t\t\t\t(a, b) =>\r\n\t\t\t\t\t\tnew Date(\r\n\t\t\t\t\t\t\ta.product[attribute]\r\n\t\t\t\t\t\t\t\t? a.product[attribute]\r\n\t\t\t\t\t\t\t\t: a.product[secondaryAttribute]\r\n\t\t\t\t\t\t\t\t? a.product[secondaryAttribute]\r\n\t\t\t\t\t\t\t\t: '1/1/1910',\r\n\t\t\t\t\t\t) -\r\n\t\t\t\t\t\tnew Date(\r\n\t\t\t\t\t\t\tb.product[attribute]\r\n\t\t\t\t\t\t\t\t? b.product[attribute]\r\n\t\t\t\t\t\t\t\t: b.product[secondaryAttribute]\r\n\t\t\t\t\t\t\t\t? b.product[secondaryAttribute]\r\n\t\t\t\t\t\t\t\t: '1/1/1910',\r\n\t\t\t\t\t\t),\r\n\t\t\t );\r\n\t};\r\n\r\n\tconst logSelectedTitles = (sku, isSelected) => {\r\n\t\tif (isSelected) {\r\n\t\t\tsetSelectedSkus(s => [...s, sku]);\r\n\t\t} else {\r\n\t\t\tvar newSelectedSkus = selectedSkus.filter(sk => sk !== sku);\r\n\t\t\tsetSelectedSkus(newSelectedSkus);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{!isLoading &&\r\n\t\t\t\t(renderedSkus.length > 0 ? (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{renderFilterLink(renderedSkus)}\r\n\t\t\t\t\t\t (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{renderTitle(sku, titles)}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t) : (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t))}\r\n\t\t
\r\n\t);\r\n};\r\n\r\nconst connectors = [connectToRequests, connectToDownloads, connectToReviews];\r\n\r\nexport default combineConnectors(connectors)(withIsMobile(TiledTitleList));\r\n\r\nTiledTitleList.propTypes = {\r\n\tisMobile: PropTypes.func,\r\n\tisLoading: PropTypes.bool,\r\n\tskus: PropTypes.array,\r\n\ttitles: PropTypes.array,\r\n};\r\n","export enum ApplicationIdentifierEnum {\r\n\tCommunity = 103,\r\n}\r\n","import React from 'react';\r\nimport { Button } from 'antd';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nexport default function AlreadyRegisteredError(): JSX.Element {\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t
\r\n\t\t\t{Boolean(process.env.REACT_APP_DO_SHOW_PASSWORD_EDITOR) && (\r\n\t\t\t\t\r\n\t\t\t)}\r\n\t\t
\r\n\t);\r\n}\r\n","enum UserPrivilegesEnum {\r\n\tIsOrgAuthorizedToPostEventsToGenreCommunities = 'community.communities.genre.organization.post.event',\r\n\tIsUserAuthorizedToPostEventsToGenreCommunities = 'community.communities.genre.user.post.event',\r\n}\r\n\r\nexport default UserPrivilegesEnum;\r\n","function _px_generateRandomId() {\r\n\treturn `${new Date().getTime()}-${_px_generateRandom(8)}`;\r\n}\r\n\r\nfunction setCookie(name, value, daysToLive) {\r\n\t// Encode value in order to escape semicolons, commas, and whitespace\r\n\tvar cookie = name + '=' + encodeURIComponent(value);\r\n\tif (typeof daysToLive === 'number') {\r\n\t\tcookie += '; max-age=' + daysToLive * 24 * 60 * 60;\r\n\t\tdocument.cookie = cookie;\r\n\t}\r\n}\r\n\r\nfunction _px_isAnonymous() {\r\n\tconst PX_COOKIE = 'apt.uid';\r\n\tvar cookieParts = _px_getCookie(PX_COOKIE).split('.');\r\n\tvar anonymous = cookieParts.length != 4 || cookieParts[2] === '0';\r\n\treturn anonymous;\r\n}\r\n\r\nfunction _px_getRandomInt(min, max) {\r\n\tmin = Math.ceil(min);\r\n\tmax = Math.floor(max);\r\n\treturn Math.floor(Math.random() * (max - min)) + min;\r\n}\r\n\r\nfunction _px_generateRandom(howMany) {\r\n\tlet random = '';\r\n\tfor (let i = 0; i < howMany; i++) {\r\n\t\trandom += _px_getRandomInt(1, 10);\r\n\t}\r\n\treturn random;\r\n}\r\n\r\nfunction _px_getCookie(cname) {\r\n\tvar name = cname + '=';\r\n\tvar decodedCookie = decodeURIComponent(document.cookie);\r\n\tvar ca = decodedCookie.split(';');\r\n\tfor (var i = 0; i < ca.length; i++) {\r\n\t\tvar c = ca[i];\r\n\t\twhile (c.charAt(0) == ' ') {\r\n\t\t\tc = c.substring(1);\r\n\t\t}\r\n\t\tif (c.indexOf(name) == 0) {\r\n\t\t\treturn c.substring(name.length, c.length);\r\n\t\t}\r\n\t}\r\n\treturn '';\r\n}\r\n\r\nexport function setGainsightCookieForAnonUser() {\r\n\tif (_px_isAnonymous()) {\r\n\t\tconst id = _px_generateRandomId();\r\n\t\twindow.aptrinsic('identify', { id });\r\n\t\tsetCookie(PX_ANON_COOKIE, id, PX_ANON_COOKIE_DAYS_TO_LIVE);\r\n\t}\r\n}\r\n\r\nfunction buildUserIdentity(user, region, subscriberType) {\r\n\treturn {\r\n\t\tid: `${user.id}`,\r\n\t\tuserId: user.userID,\r\n\t\temail: user.email,\r\n\t\tfirstName: user.firstName,\r\n\t\tlastName: user.lastName,\r\n\t\tsignUpDate: new Date(user.createdDate).getTime(),\r\n\t\ttitle: user.title,\r\n\t\trole: user.classification,\r\n\t\tsubscriberType,\r\n\t\tcountryName: region?.name,\r\n\t\tcultureName: region?.cultureName,\r\n\t};\r\n}\r\n\r\nexport function setGainsightIdentity(\r\n\tuserAccountDetails,\r\n\tregion,\r\n\tsubscriberType,\r\n) {\r\n\tconst user = userAccountDetails?.user;\r\n\tif (user) {\r\n\t\twindow.aptrinsic(\r\n\t\t\t'identify',\r\n\t\t\tbuildUserIdentity(user, region, subscriberType),\r\n\t\t\t{\r\n\t\t\t\tid: user.orgID,\r\n\t\t\t\tname: user.orgName,\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport const PX_ANON_COOKIE = 'apt.anon';\r\nexport const PX_ANON_COOKIE_DAYS_TO_LIVE = 7;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport moment from 'moment';\r\nimport queryString from 'query-string';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport AlreadyRegisteredError from '../../Anonymous/AnonymousHeader/RegistrationModal/RegistrationForm/AlreadyRegisteredError/AlreadyRegisteredError';\r\nimport { ApplicationIdentifierEnum } from '../../../enums/ApplicationIdentifierEnum';\r\nimport { isFunction } from 'lodash-es';\r\nimport UserPrivilegesEnum from '../enums/UserPrivilegesEnum';\r\nimport {\r\n\tsetGainsightCookieForAnonUser,\r\n\tsetGainsightIdentity,\r\n} from '../../../util/gainsight';\r\n\r\nconst UserContext = React.createContext();\r\n\r\nconst name = 'userDataStore';\r\n\r\nexport const useUser = () => React.useContext(UserContext);\r\n\r\nexport const connectToUser = makeConnectTo(UserContext, name);\r\n\r\nconst anonymousUserId = 0;\r\n\r\nclass UserDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t\tisMobile: PropTypes.func,\r\n\t};\r\n\r\n\tstate = {\r\n\t\tuser: {},\r\n\t\torganization: {},\r\n\t\tuserAvatar: {},\r\n\t\tjoinedCommunities: [],\r\n\t\tisLoading: true,\r\n\t\tsessionId: '',\r\n\t\tisAnonymous: false,\r\n\t\tisAuthorizedToPostEventsToGenreCommunities: true,\r\n\t\tisUnsubscribedFromFriendEmail: false,\r\n\t\tregion: null,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst userDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(userDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchUser(() => {\r\n\t\t\tthis.fetchJoinedCommunities();\r\n\t\t\tthis.fetchUnsubscribedFromFriendEmailPreference();\r\n\t\t});\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.joinedCommunitiesFetch && this.joinedCommunitiesFetch.cancel) {\r\n\t\t\tthis.joinedCommunitiesFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tcreateSessionId = user => {\r\n\t\tconst formattedDate = moment().format('YYMMDDhhmm');\r\n\t\tconst sessionId = `${formattedDate}-${\r\n\t\t\tuser ? user.id : anonymousUserId\r\n\t\t}`;\r\n\t\treturn sessionId;\r\n\t};\r\n\r\n\tpostUsageTracking = siteArea => {\r\n\t\tconst endpoint = `/api/v1/usage`;\r\n\t\tconst communitySiteContext = 3;\r\n\t\tconst usageInfo = {\r\n\t\t\tsiteContext: communitySiteContext,\r\n\t\t\tsiteArea: siteArea,\r\n\t\t\tsessionId: this.state.sessionId,\r\n\t\t};\r\n\t\tapi.put(endpoint, usageInfo);\r\n\t};\r\n\r\n\tprefillUserInHelpDesk = user => {\r\n\t\twindow.FreshworksWidget('identify', 'ticketForm', {\r\n\t\t\tname: user && user.firstName,\r\n\t\t\temail: user && user.email,\r\n\t\t});\r\n\t};\r\n\r\n\tgetLogoutUrl = () => {\r\n\t\tconst logoutUrl = process.env.REACT_APP_LOGIN_URL;\r\n\r\n\t\treturn `${logoutUrl}/GetJSONData.aspx?builder=Logout`;\r\n\t};\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\tpostUsageTracking: siteArea => this.postUsageTracking(siteArea),\r\n\t\tsaveUser: async userValuesById => this.saveUser(userValuesById),\r\n\t\tsaveOrganization: async orgValuesById =>\r\n\t\t\tthis.saveOrganization(orgValuesById),\r\n\t\tfetchJoinedCommunities: () => this.fetchJoinedCommunities(),\r\n\t\tfetchJoinedCommunitiesWithNoLoadingState: () =>\r\n\t\t\tthis.fetchJoinedCommunities(false),\r\n\t\tgetLogoutUrl: () => this.getLogoutUrl(),\r\n\t\tisAnonymous: () => state.isAnonymous,\r\n\t\tisLoading: () => state.isLoading,\r\n\t\tsignUpUser: (formValues, handleError, onSuccess) =>\r\n\t\t\tthis.signUpUser(formValues, handleError, onSuccess),\r\n\t\tlogInUser: (formValues, handleError, onSuccess) =>\r\n\t\t\tthis.logInUser(formValues, handleError, onSuccess),\r\n\t\tsendForgotPasswordEmail: (formValues, handleError, handleSuccess) =>\r\n\t\t\tthis.sendForgotPasswordEmail(\r\n\t\t\t\tformValues,\r\n\t\t\t\thandleError,\r\n\t\t\t\thandleSuccess,\r\n\t\t\t),\r\n\t\tchangeUserPassword: (formValues, handleError, handleSuccess) =>\r\n\t\t\tthis.changeUserPassword(formValues, handleError, handleSuccess),\r\n\t\trefresh: () => this.fetchUser(),\r\n\t\tgetUserId: () => this.getUserId(),\r\n\t\tisUserCommunityOwner: communityId =>\r\n\t\t\tthis.isUserCommunityOwner(communityId),\r\n\t\tgetUserCulture: () => this.getUserCulture(),\r\n\t\tisUnsubscribedFromFriendEmail: () =>\r\n\t\t\tstate.isUnsubscribedFromFriendEmail,\r\n\t\tsetUnsubscribedFromFriendEmailPreference: isUnsubscribed =>\r\n\t\t\tthis.setUnsubscribedFromFriendEmailPreference(isUnsubscribed),\r\n\t});\r\n\r\n\tgetUserId = () => this.state.user?.user?.id ?? null;\r\n\r\n\tfetchJoinedCommunities = (withLoadingState = true) => {\r\n\t\twithLoadingState && this.setState({ isLoading: true });\r\n\t\tconst request = api.cancelableGet(`/api/v1/me/communities/joined`);\r\n\t\trequest.promise.then(this.cacheFetchJoinedCommunities).catch(e => {\r\n\t\t\tconsole.error(e);\r\n\t\t\twithLoadingState && this.setState({ isLoading: false });\r\n\t\t});\r\n\t\tthis.joinedCommunitiesFetch = request;\r\n\t};\r\n\r\n\tcacheFetchJoinedCommunities = joinedCommunities => {\r\n\t\tthis.setState({ joinedCommunities, isLoading: false });\r\n\t};\r\n\r\n\tgetUnsubscribedFromFriendEmailPreferenceUrl = () =>\r\n\t\t'/api/me/preferences/social/noUpdates';\r\n\r\n\tfetchUnsubscribedFromFriendEmailPreference = (withLoadingState = true) => {\r\n\t\twithLoadingState && this.setState({ isLoading: true });\r\n\r\n\t\tconst url = this.getUnsubscribedFromFriendEmailPreferenceUrl();\r\n\t\tconst request = api.cancelableGet(url);\r\n\r\n\t\trequest.promise\r\n\t\t\t.then(this.cacheUnsubscribedFromFriendEmailPreference)\r\n\t\t\t.catch(e => {\r\n\t\t\t\tconsole.error(e);\r\n\t\t\t\twithLoadingState && this.setState({ isLoading: false });\r\n\t\t\t});\r\n\r\n\t\tthis.unsubscribedFromFriendEmailPreferenceFetch = request;\r\n\t};\r\n\r\n\tcacheUnsubscribedFromFriendEmailPreference = isUnsubscribed => {\r\n\t\tthis.setState({ isUnsubscribedFromFriendEmail: isUnsubscribed });\r\n\t};\r\n\r\n\tsetUnsubscribedFromFriendEmailPreference = async isUnsubscribed => {\r\n\t\tconst url = this.getUnsubscribedFromFriendEmailPreferenceUrl();\r\n\t\tlet didSucceed = false;\r\n\r\n\t\ttry {\r\n\t\t\tawait api.post(url, isUnsubscribed);\r\n\t\t\tthis.fetchUnsubscribedFromFriendEmailPreference(false);\r\n\t\t\tdidSucceed = true;\r\n\t\t} catch (e) {\r\n\t\t\tthis.setErrorState(e);\r\n\t\t\tdidSucceed = false;\r\n\t\t} finally {\r\n\t\t\treturn didSucceed;\r\n\t\t}\r\n\t};\r\n\r\n\tfetchUser = callback => {\r\n\t\tfetch(`${process.env.REACT_APP_API_URL}/api/v1/me/user`, {\r\n\t\t\tmode: 'cors',\r\n\t\t\tcredentials: 'include',\r\n\t\t})\r\n\t\t\t.then(response => {\r\n\t\t\t\tif (response.status === 200) return response.json();\r\n\t\t\t})\r\n\t\t\t.then(jsonRes => {\r\n\t\t\t\tthis.cacheFetchUserResponse(jsonRes);\r\n\t\t\t\tif (isFunction(callback)) callback();\r\n\t\t\t})\r\n\t\t\t.catch(this.runAnonUserEvents)\r\n\t\t\t.finally(() => this.setState({ isLoading: false }));\r\n\t};\r\n\r\n\trunAnonUserEvents = err => {\r\n\t\tconsole.error(err);\r\n\t\tsetGainsightCookieForAnonUser();\r\n\t\treturn this.setState({\r\n\t\t\tisAnonymous: true,\r\n\t\t\tisLoading: false,\r\n\t\t\tuser: { user: { id: anonymousUserId } },\r\n\t\t\tregion: {\r\n\t\t\t\tcultureName:\r\n\t\t\t\t\twindow.navigator.userLanguage || window.navigator.language,\r\n\t\t\t},\r\n\t\t});\r\n\t};\r\n\r\n\tcacheFetchUserResponse = user => {\r\n\t\tthis.setUser(user);\r\n\t\tthis.prefillUserInHelpDesk(user.user);\r\n\t\tthis.fetchRegion().then(region => {\r\n\t\t\tsetGainsightIdentity(user, region, this.getSubscriberType(user));\r\n\t\t});\r\n\t};\r\n\r\n\tsetUser(user) {\r\n\t\tthis.setState({\r\n\t\t\tuser: user,\r\n\t\t\torganization: user.organization,\r\n\t\t\tuserAvatar: user.userAvatar,\r\n\t\t\tprofiles: user.profiles,\r\n\t\t\tisLoading: false,\r\n\t\t\tloadingDisplay: false,\r\n\t\t\tsessionId: this.createSessionId(user.user),\r\n\t\t\tisAuthorizedToPostEventsToGenreCommunities: this.getIsAuthorizedToPostEventsToGenreCommunities(\r\n\t\t\t\tuser,\r\n\t\t\t),\r\n\t\t});\r\n\t}\r\n\r\n\tfetchRegion() {\r\n\t\treturn api\r\n\t\t\t.get('/api/v1/me/preferences/region')\r\n\t\t\t.then(region => {\r\n\t\t\t\tthis.setState({ region });\r\n\t\t\t\treturn region;\r\n\t\t\t})\r\n\t\t\t.catch(e => console.error(e));\r\n\t}\r\n\r\n\tgetIsAuthorizedToPostEventsToGenreCommunities = user => {\r\n\t\tconst isAuthorizedPrivilege = p =>\r\n\t\t\tp.name ===\r\n\t\t\t\tUserPrivilegesEnum.IsOrgAuthorizedToPostEventsToGenreCommunities ||\r\n\t\t\tp.name ===\r\n\t\t\t\tUserPrivilegesEnum.IsUserAuthorizedToPostEventsToGenreCommunities;\r\n\t\tconst authorizedPrivileges =\r\n\t\t\tuser?.user?.privileges?.filter(isAuthorizedPrivilege) || [];\r\n\t\treturn authorizedPrivileges.length === 2;\r\n\t};\r\n\r\n\tisUserCommunityOwner = communityId => {\r\n\t\tconst userId = this.getUserId();\r\n\t\tconst community = this.state.joinedCommunities.find(\r\n\t\t\tcommunity => Number(community.id) === Number(communityId),\r\n\t\t);\r\n\t\treturn community?.ownerIds?.includes(userId) ?? false;\r\n\t};\r\n\r\n\tsaveUser = async userValuesById => {\r\n\t\tconst url = `/api/v1/users/${userValuesById.email}/`;\r\n\t\tlet didSucceed;\r\n\t\ttry {\r\n\t\t\tawait api.post(url, userValuesById);\r\n\t\t\tthis.fetchUser();\r\n\t\t\tdidSucceed = true;\r\n\t\t} catch (e) {\r\n\t\t\tthis.setErrorState(e);\r\n\t\t\tdidSucceed = false;\r\n\t\t} finally {\r\n\t\t\treturn didSucceed;\r\n\t\t}\r\n\t};\r\n\r\n\tsaveOrganization = async orgValuesById => {\r\n\t\tconst urlBase = process.env.REACT_APP_EPLUS_REQUEST_URL;\r\n\t\tconst stringifiedData = queryString.stringify(orgValuesById);\r\n\t\tconst url = `${urlBase}/GetJSONData.aspx?m=Organization&\r\n\t\t\tbuilder=saveAccountBits&${stringifiedData}`;\r\n\r\n\t\tconst response = await fetch(url, {\r\n\t\t\tmethod: 'GET',\r\n\t\t\tcredentials: 'include',\r\n\t\t});\r\n\t\tconst res = await response.json();\r\n\r\n\t\tlet didSucceed = false;\r\n\t\tif (res.code === 'SUCCESS') {\r\n\t\t\tthis.fetchUser();\r\n\t\t\tdidSucceed = true;\r\n\t\t}\r\n\t\treturn didSucceed;\r\n\t};\r\n\r\n\tgetSubscriberType = userAccountDetails => {\r\n\t\tconst accountInfoForm = userAccountDetails?.accountInfoForm ?? {};\r\n\t\tconst accountType = accountInfoForm.accountTypes?.find(\r\n\t\t\tt => t.id === accountInfoForm.selectedAccountType,\r\n\t\t);\r\n\t\treturn accountType?.value;\r\n\t};\r\n\r\n\tsignUpUser(formValues, handleError, onSuccess) {\r\n\t\tconst urlBase = process.env.REACT_APP_API_URL;\r\n\t\tconst url = `${urlBase}/api/v1/registration/user`;\r\n\t\treturn fetch(url, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: JSON.stringify(formValues),\r\n\t\t\theaders: { 'Content-Type': 'application/json' },\r\n\t\t})\r\n\t\t\t.then(res => {\r\n\t\t\t\tif (res.status === 409) {\r\n\t\t\t\t\thandleError();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst { email, password } = formValues.user;\r\n\t\t\t\t\tthis.logInUser(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\temail,\r\n\t\t\t\t\t\t\tpword: password,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\thandleError,\r\n\t\t\t\t\t\tonSuccess,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch(handleError);\r\n\t}\r\n\r\n\tlogInUser(formValues, handleError, onSuccess) {\r\n\t\tconst urlBase = process.env.REACT_APP_EPLUS_REQUEST_URL;\r\n\t\tconst url = `${urlBase}/GetJSONData.aspx?builder=Login`;\r\n\t\treturn fetch(url, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tmode: 'cors',\r\n\t\t\tcredentials: 'include',\r\n\t\t\tbody: new URLSearchParams(formValues).toString(),\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\r\n\t\t\t},\r\n\t\t})\r\n\t\t\t.then(res => res.json())\r\n\t\t\t.then(res => {\r\n\t\t\t\tif (res && res[0] && res[0].code === 'SUCCESS') {\r\n\t\t\t\t\tisFunction(onSuccess) && onSuccess();\r\n\t\t\t\t} else {\r\n\t\t\t\t\thandleError(\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch(handleError);\r\n\t}\r\n\r\n\tsendForgotPasswordEmail(formValues, handleError, handleSuccess) {\r\n\t\tconst urlBase = process.env.REACT_APP_EPLUS_REQUEST_URL;\r\n\t\tconst url = `${urlBase}/GetJSONData.aspx?m=User&builder=SendForgotEmail`;\r\n\t\tconst sendForgotEmailRequest = {\r\n\t\t\t...formValues,\r\n\t\t\tapplicationIdentifier: ApplicationIdentifierEnum.Community,\r\n\t\t};\r\n\t\treturn fetch(url, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tmode: 'cors',\r\n\t\t\tcredentials: 'include',\r\n\t\t\tbody: new URLSearchParams(sendForgotEmailRequest).toString(),\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\r\n\t\t\t},\r\n\t\t})\r\n\t\t\t.then(res => res.json())\r\n\t\t\t.then(res => {\r\n\t\t\t\tif (res && res.code === 'SUCCESS') {\r\n\t\t\t\t\thandleSuccess();\r\n\t\t\t\t} else {\r\n\t\t\t\t\thandleError(\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch(handleError);\r\n\t}\r\n\r\n\tchangeUserPassword(formValues, handleError, handleSuccess) {\r\n\t\tconst urlBase = process.env.REACT_APP_EPLUS_REQUEST_URL;\r\n\t\tconst url = `${urlBase}/GetJSONData.aspx?builder=ChangePasswordV2`;\r\n\t\treturn fetch(url, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tmode: 'cors',\r\n\t\t\tcredentials: 'include',\r\n\t\t\tbody: new URLSearchParams(formValues).toString(),\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\r\n\t\t\t},\r\n\t\t})\r\n\t\t\t.then(res => res.json())\r\n\t\t\t.then(res => {\r\n\t\t\t\tif (res && res.code === 'SUCCESS') {\r\n\t\t\t\t\thandleSuccess();\r\n\t\t\t\t} else {\r\n\t\t\t\t\thandleError(res.text);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch(handleError);\r\n\t}\r\n\r\n\tgetUserCulture = () => {\r\n\t\tconst { region } = this.state;\r\n\t\tconst userCulture = region?.cultureName;\r\n\t\treturn userCulture;\r\n\t};\r\n}\r\n\r\nexport default withIsMobile(UserDataStore);\r\n","import LoadingSpinner, { LoadingSpinnerSize } from '../LoadingSpinner';\r\nimport './loadingSpinnerInContainer.less';\r\n\r\ntype LoadingSpinnerInContainerProps = {\r\n\theight?: string | number;\r\n\tsize?: LoadingSpinnerSize;\r\n};\r\n\r\nexport default function LoadingSpinnerInContainer({\r\n\theight = 'auto',\r\n\tsize = LoadingSpinnerSize.medium,\r\n}: LoadingSpinnerInContainerProps) {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport { notification } from 'antd';\r\nimport { connectToCollectionTitles } from './CollectionTitlesDataStore';\r\n\r\nconst CollectionsContext = React.createContext();\r\n\r\nconst name = 'collectionsDataStore';\r\n\r\nexport const connectToCollections = makeConnectTo(CollectionsContext, name);\r\n\r\nexport class CollectionsDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tcollections: {},\r\n\t\tareCollectionsLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst collectionsDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(collectionsDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchCollections();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.collectionsFetch && this.collectionsFetch.cancel) {\r\n\t\t\tthis.collectionsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshCollections(),\r\n\t\taddTitlesToCollection: (skus, catalogId) => this.addTitlesToCollection(skus, catalogId),\r\n\t\tcreateNewCollection: (name, skus) => this.createNewCollection(name, skus),\r\n\t\teditExistingCollection: (catalogId, fieldName, name) => this.editExistingCollection(catalogId, fieldName, name),\r\n\t});\r\n\r\n\trefreshCollections = () => {\r\n\t\tthis.setState({\r\n\t\t\tareCollectionsLoading: true,\r\n\t\t});\r\n\t\tthis.fetchCollections();\r\n\t\treturn this.collectionsFetch.promise;\r\n\t};\r\n\r\n\tfetchCollections = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/me/collections`);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.collectionsFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst collections = apiResponse && apiResponse;\r\n\t\tthis.setState({ collections, areCollectionsLoading: false });\r\n\t};\r\n\r\n\taddTitlesToCollection = (skus, catalogId) => {\r\n\t\tapi.post(`/api/v1/me/collections/${catalogId}`, skus).then(() => {\r\n\t\t\tthis.refreshCollections();\r\n\t\t});\r\n\t};\r\n\r\n\tcreateNewCollection = (name, skus) => {\r\n\t\tvar products = [];\r\n\t\tskus.forEach(sku => {\r\n\t\t\tproducts.push({\r\n\t\t\t\tsku: sku\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tvar collection = {\r\n\t\t\ttype: 2,\r\n\t\t\tname: encodeURIComponent(name),\r\n\t\t\tproducts: products,\r\n\t\t};\r\n\r\n\t\treturn api.put(`/api/v1/me/collections`, collection).then(() => {\r\n\t\t\tthis.refreshCollections();\r\n\t\t\tthis.props.collectionTitlesDataStore && this.props.collectionTitlesDataStore.refresh();\r\n\t\t\tnotification.success({\r\n\t\t\t\tmessage: `Successfully created the '${name}' collection`,\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\r\n\teditExistingCollection = (catalogId, fieldName, name) => {\r\n\t\treturn api\r\n\t\t\t.put(\r\n\t\t\t\t`/api/v1/catalogs/${catalogId}/${fieldName}`,\r\n\t\t\t\tencodeURIComponent(name),\r\n\t\t\t)\r\n\t\t\t.then(() => {\r\n\t\t\t\treturn this.refreshCollections();\r\n\t\t\t});\r\n\t};\r\n}\r\n\r\nexport default connectToCollectionTitles(CollectionsDataStore);\r\n","const LocalStorageKeys = {\r\n\texpandedDownloadPanels: 'expandedDownloadPanels',\r\n\texpandedRequestsPanels: 'expandedRequestsPanels',\r\n\texpandedReviewsPanels: 'expandedReviewsPanels',\r\n\texpandedShelfPanels: 'expandedShelfPanels',\r\n\tcollaborativeListViewPreference: 'collaborativeListViewPreference',\r\n};\r\n\r\nexport default LocalStorageKeys;\r\n","const WindowSizeThresholdsEnum = {\r\n\t// 815 is default for WindowSizeProvider\r\n\tSmall: 815,\r\n\tMedium: 1030,\r\n};\r\n\r\nexport default WindowSizeThresholdsEnum;\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport default function YourBooksSectionHeader({ headerText, showInGrid }) {\r\n\treturn (\r\n\t\t\r\n\t\t\t{showInGrid ? (\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
:
\r\n\t\t\t\t\t
{headerText}
\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t) : (\r\n\t\t\t\t{headerText}\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n}\r\n","export const FormId = {\r\n\tAccountInfo: 'accountInfo',\r\n\tPersonalInfo: 'personalInfo',\r\n\tLinks: 'links',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Icon } from 'antd';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\n\r\nReviewStepHeader.propTypes = {\r\n\ticon: PropTypes.string,\r\n\tlabel: PropTypes.string,\r\n\tisMobile: PropTypes.func,\r\n};\r\n\r\nfunction ReviewStepHeader({ label, isMobile, icon }) {\r\n\tconst fontSize = isMobile() ? 24 : 32;\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t{' '}\r\n\t\t\t\t{label}\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(ReviewStepHeader);\r\n","import React from 'react';\r\n\r\nexport default function ViewInListLink() {\r\n\treturn (\r\n\t\t
\r\n\t\t\tView in List{' '}\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n","export const getReaderHref = (sku: string): string => {\r\n\tconst BASE_URL = process.env.REACT_APP_EDELWEISS_READER_URL;\r\n\treturn `${BASE_URL}/${sku}`;\r\n};\r\n","import { Button } from 'antd';\r\nimport { useWebReaderGalleyAccess } from '../hooks/useWebReaderGalleyAccess';\r\nimport { getReaderHref } from '../../util/getReaderHref';\r\nimport { TranslateType } from '@above-the-treeline/localization';\r\n\r\ntype IGhostButtonProps = {\r\n\tsku: string;\r\n\ttranslate: TranslateType;\r\n};\r\nexport const GhostButton = ({ sku, translate }: IGhostButtonProps) => {\r\n\tconst { isLoading, hasWebReaderGalleyAccess } = useWebReaderGalleyAccess();\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{translate('read_online')}\r\n\t\t\r\n\t);\r\n};\r\n","import { Button } from 'antd';\r\nimport { getReaderHref } from '../../util/getReaderHref';\r\nimport useWebReaderProducts from '../Titles/hooks/useWebReaderProducts';\r\nimport ApprovedIcon from '../UI/ApprovedIcon';\r\n\r\nexport const RoundButton = ({\r\n\tsku,\r\n\tisLoading,\r\n\thasWebReaderGalleyAccess,\r\n}: {\r\n\tsku: string;\r\n\tisLoading: boolean;\r\n\thasWebReaderGalleyAccess: boolean;\r\n}) => {\r\n\tconst webReaderProducts = useWebReaderProducts();\r\n\tconst isActiveWebReaderProduct = webReaderProducts.isActive(sku);\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t{isActiveWebReaderProduct && }\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n","import { useUser } from '../../User/containers/UserDataStore';\r\n\r\nconst defaultFormat: Intl.DateTimeFormatOptions = {\r\n\tyear: 'numeric',\r\n\tmonth: 'numeric',\r\n\tday: 'numeric',\r\n};\r\n\r\nexport default function useLocalizeDate(\r\n\tdateFormat: Intl.DateTimeFormatOptions = defaultFormat,\r\n): (jsonDate: string) => string | null {\r\n\tconst user = useUser();\r\n\r\n\treturn (jsonDate: string): string | null => {\r\n\t\tconst hasValidDate = jsonDate && jsonDate !== '0001-01-01T00:00:00';\r\n\t\tif (!hasValidDate) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn new Date(jsonDate).toLocaleDateString(\r\n\t\t\tgetCultureIndicator(user),\r\n\t\t\tdateFormat,\r\n\t\t);\r\n\t};\r\n}\r\n\r\nfunction getCultureIndicator(userDataStore: any) {\r\n\tconst country =\r\n\t\tuserDataStore.state.organization &&\r\n\t\tuserDataStore.state.organization.address\r\n\t\t\t? userDataStore.state.organization.address.country\r\n\t\t\t: 'US';\r\n\tif (country === 'UK' || country === 'GB') {\r\n\t\treturn 'en-GB';\r\n\t}\r\n\treturn 'en-US';\r\n}\r\n","import Title from '../../types/Title';\r\nimport { useWebReaderGalleyAccess } from '../hooks/useWebReaderGalleyAccess';\r\nimport { GhostButton } from './GhostButton';\r\nimport { Tooltip } from 'antd';\r\nimport ReviewCopyActionTooltip from './ReviewCopyActionTooltip';\r\nimport { RoundButton } from './RoundButton';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport useWebReaderProducts from '../Titles/hooks/useWebReaderProducts';\r\nimport useLocalizeDate from '../Localization/hooks/useLocalizeDate';\r\nimport { useTranslate } from '@above-the-treeline/localization';\r\n\r\ninterface IReaderLinkProps {\r\n\ttitle: Title;\r\n\tbuttonType: string;\r\n\tisMobile: () => boolean;\r\n}\r\n\r\nfunction EdelweissReaderLink({\r\n\ttitle,\r\n\tbuttonType,\r\n\tisMobile,\r\n}: IReaderLinkProps) {\r\n\tconst { sku } = title;\r\n\tconst { isLoading, hasWebReaderGalleyAccess } = useWebReaderGalleyAccess();\r\n\tconst { translate } = useTranslate();\r\n\r\n\tconst localizeDate = useLocalizeDate();\r\n\tconst webReaderProducts = useWebReaderProducts();\r\n\r\n\tconst getTooltipTitle = (lastAccessedDate: string): JSX.Element => {\r\n\t\tconst { digitalCreatedDate, digitalUpdatedDate } = title;\r\n\t\tlet header;\r\n\t\tif (!hasWebReaderGalleyAccess(sku)) {\r\n\t\t\theader = translate(\r\n\t\t\t\t'currently_unavailable_via_the_edelweiss_web_reader',\r\n\t\t\t);\r\n\t\t\treturn (\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t);\r\n\t\t} else if (lastAccessedDate) {\r\n\t\t\theader = translate('last_viewed_on_x', {\r\n\t\t\t\tx: localizeDate(lastAccessedDate) as string,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\theader = translate('read_in_the_edelweiss_web_reader');\r\n\t\t}\r\n\r\n\t\tconst percentRead: number = webReaderProducts.getPercentOfBookCompleted(\r\n\t\t\tsku,\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t{percentRead && percentRead > 0 ? (\r\n\t\t\t\t\t{`${percentRead}% Read`}
\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<>\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderButton = () => {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{buttonType === 'ghost' ? (\r\n\t\t\t\t\t\r\n\t\t\t\t) : (\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderButtonWithTooltip = () => {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t{renderButton()}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst render = () => {\r\n\t\tif (isMobile()) {\r\n\t\t\treturn renderButton();\r\n\t\t}\r\n\t\treturn renderButtonWithTooltip();\r\n\t};\r\n\r\n\treturn render();\r\n}\r\n\r\nexport default withIsMobile(EdelweissReaderLink);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ShowMoreText from 'react-show-more-text';\r\n\r\nCustomShowMoreText.propTypes = {\r\n\ttext: PropTypes.oneOfType([\r\n\t\tPropTypes.func,\r\n\t\tPropTypes.element,\r\n\t\tPropTypes.string,\r\n\t]),\r\n\tlines: PropTypes.number,\r\n\ticonChevronDown: PropTypes.oneOfType([\r\n\t\tPropTypes.func,\r\n\t\tPropTypes.element,\r\n\t\tPropTypes.string,\r\n\t]),\r\n\ticonChevronUp: PropTypes.oneOfType([\r\n\t\tPropTypes.func,\r\n\t\tPropTypes.element,\r\n\t\tPropTypes.string,\r\n\t]),\r\n\texpanded: PropTypes.bool,\r\n};\r\n\r\nCustomShowMoreText.defaultProps = {\r\n\ticonChevronDown: ,\r\n\ticonChevronUp: ,\r\n\tlines: 2,\r\n\texpanded: false,\r\n};\r\n\r\nexport default function CustomShowMoreText({\r\n\ttext,\r\n\tlines,\r\n\ticonChevronDown,\r\n\ticonChevronUp,\r\n\texpanded,\r\n}) {\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t{text}\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n","const TitlePubDateType = {\r\n\t1: {\r\n\t\tkey: 1,\r\n\t\tlabel: 'More Than 3 Months Out',\r\n\t\tclass: 'review-lane-left',\r\n\t\tmonthsFrom: 3,\r\n\t\tmonthsTo: 100,\r\n\t},\r\n\t2: {\r\n\t\tkey: 2,\r\n\t\tlabel: 'Coming Out Within 3 Months',\r\n\t\tclass: 'review-lane-right',\r\n\t\tmonthsFrom: 0,\r\n\t\tmonthsTo: 3,\r\n\t},\r\n\t3: {\r\n\t\tkey: 3,\r\n\t\tlabel: 'New in last 6 Months',\r\n\t\tclass: 'review-lane-left',\r\n\t\tmonthsFrom: -6,\r\n\t\tmonthsTo: 0,\r\n\t},\r\n\t4: {\r\n\t\tkey: 4,\r\n\t\tlabel: 'New over 6 Months Ago',\r\n\t\tclass: 'review-lane-right',\r\n\t\tmonthsFrom: -200,\r\n\t\tmonthsTo: -6,\r\n\t},\r\n};\r\n\r\nexport default TitlePubDateType;\r\n","const InputType = {\r\n\tDownVote: {\r\n\t\tkey: 'downVote',\r\n\t\tsingularKey: 'downvote',\r\n\t\tpluralKey: 'downvotes',\r\n\t},\r\n\tUpVote: {\r\n\t\tkey: 'upVote',\r\n\t\tsingularKey: 'upvote',\r\n\t\tpluralKey: 'upvotes',\r\n\t},\r\n\tComment: {\r\n\t\tkey: 'comment',\r\n\t\tsingularKey: 'comment',\r\n\t\tpluralKey: 'comments',\r\n\t},\r\n\tQuantity: {\r\n\t\tkey: 'quantity',\r\n\t\tsingularKey: 'quantity',\r\n\t\tpluralKey: 'quantities',\r\n\t},\r\n\tAdd: {\r\n\t\tkey: 'add',\r\n\t\tsingularKey: 'add',\r\n\t\tpluralKey: 'adds',\r\n\t},\r\n};\r\n\r\nexport default InputType;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport SimpleBar from 'simplebar-react';\r\nimport Carousel from 'react-multi-carousel';\r\nimport { ScrollerConfigContext } from './ScrollerConfigContext';\r\nimport ScrollerType from './ScrollerType.js';\r\nimport './scroller.css';\r\nimport 'react-multi-carousel/lib/styles.css';\r\nimport 'simplebar/dist/simplebar.min.css';\r\n\r\nconst ScrollerConfigConsumer = ScrollerConfigContext.Consumer;\r\n\r\nconst CustomButtonGroup = ({ mobile, next, previous, ...rest }) => {\r\n\tconst {\r\n\t\tcarouselState: { totalItems, currentSlide },\r\n\t} = rest;\r\n\trest.carouselState.itemWidth = 150;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t previous()}\r\n\t\t\t/>\r\n\t\t\t next()}\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tvisibility: currentSlide === totalItems - 2.5 && 'hidden',\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t
\r\n\t);\r\n};\r\n\r\nclass Scroller extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tisMobile: PropTypes.func,\r\n\t\tchildren: PropTypes.oneOfType([\r\n\t\t\tPropTypes.element,\r\n\t\t\tPropTypes.arrayOf(PropTypes.element),\r\n\t\t]).isRequired,\r\n\t};\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{scrollerConfig => {\r\n\t\t\t\t\tconst scrollerType = this.getScrollerType(scrollerConfig);\r\n\t\t\t\t\tif (scrollerType === ScrollerType.carousel) {\r\n\t\t\t\t\t\treturn this.renderCarouselScroller();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this.renderSimplebarScroller();\r\n\t\t\t\t}}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tgetScrollerType = scrollerConfig => {\r\n\t\tif (this.props.isMobile()) {\r\n\t\t\treturn scrollerConfig.mobile.scrollerType;\r\n\t\t}\r\n\t\treturn scrollerConfig.desktop.scrollerType;\r\n\t};\r\n\r\n\trenderSimplebarScroller = () => {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.props.children}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tgetSimplebarProps = () => {\r\n\t\tif (this.props.isMobile()) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\t\treturn { forceVisible: 'x', autoHide: false };\r\n\t};\r\n\r\n\trenderCarouselScroller = () => {\r\n\t\tconst responsive = {\r\n\t\t\ttablet: {\r\n\t\t\t\tbreakpoint: { max: 1024, min: 464 },\r\n\t\t\t\titems: 4,\r\n\t\t\t\tslidesToSlide: 3,\r\n\t\t\t},\r\n\t\t\tmobile: {\r\n\t\t\t\tbreakpoint: { max: 464, min: 0 },\r\n\t\t\t\titems: 2.5,\r\n\t\t\t\tslidesToSlide: 1,\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\tconst mobile = this.props.isMobile();\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\tswipeable\r\n\t\t\t\t\tpartialVisible>\r\n\t\t\t\t\t{this.getChildren()}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tgetChildren = () => {\r\n\t\tconst { children } = this.props;\r\n\t\tif (children.props && children.props.children) {\r\n\t\t\treturn React.Children.toArray(this.props.children.props.children);\r\n\t\t}\r\n\t\treturn [];\r\n\t};\r\n}\r\n\r\nexport default withIsMobile(Scroller);","import {\r\n\tLocalizationDataType,\r\n\tuseTranslate,\r\n} from '@above-the-treeline/localization';\r\nimport { LoadingSpinnerSize } from '../LoadingSpinner';\r\nimport './loadingApp.less';\r\n\r\ntype LoadingAppProps = {\r\n\ttitleKey?: string;\r\n\ttitleData?: LocalizationDataType;\r\n};\r\n\r\nexport default function LoadingApp({ titleKey, titleData }: LoadingAppProps) {\r\n\tconst { translate } = useTranslate();\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t{titleKey && (\r\n\t\t\t\t\r\n\t\t\t\t\t{translate(titleKey, titleData)}\r\n\t\t\t\t\r\n\t\t\t)}\r\n\t\t
\r\n\t);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport ConversationType from '../ConversationType';\r\n\r\nconst ConversationsContext = React.createContext();\r\n\r\nconst name = 'conversationsDataStore';\r\n\r\nexport const useConversations = () => React.useContext(ConversationsContext);\r\n\r\nexport const connectToConversations = makeConnectTo(ConversationsContext, name);\r\n\r\nexport default class ConversationsDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([\r\n\t\t\tPropTypes.element,\r\n\t\t\tPropTypes.func,\r\n\t\t\tPropTypes.array,\r\n\t\t]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tconversations: [],\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst conversationsDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(conversationsDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchConversations();\r\n\t}\r\n\r\n\tcomponentDidUpdate(prevProps) {\r\n\t\tif (prevProps.id !== this.props.id) {\r\n\t\t\tthis.refreshConversations();\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.conversationsFetch && this.conversationsFetch.cancel) {\r\n\t\t\tthis.conversationsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: noLoading => this.refreshConversations(noLoading),\r\n\t\tcreateNewTopic: values => this.createNewTopic(values),\r\n\t\teditExistingTopic: (topicId, values) =>\r\n\t\t\tthis.editExistingTopic(topicId, values),\r\n\t});\r\n\r\n\trefreshConversations = noLoading => {\r\n\t\tif (!noLoading) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tisLoading: true,\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.fetchConversations();\r\n\t\treturn this.conversationsFetch.promise;\r\n\t};\r\n\r\n\tfetchConversations = () => {\r\n\t\tconst { communityId } = this.props;\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/conversations/${communityId}`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.conversationsFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst conversations = apiResponse && this.getConversations(apiResponse);\r\n\t\tthis.setState({\r\n\t\t\tconversations: conversations.sort(\r\n\t\t\t\t(a, b) =>\r\n\t\t\t\t\tnew Date(b.mostRecentComment) -\r\n\t\t\t\t\tnew Date(a.mostRecentComment),\r\n\t\t\t),\r\n\t\t\tisLoading: false,\r\n\t\t});\r\n\t};\r\n\r\n\tgetConversations = apiResponse => {\r\n\t\tconst { topics, products, threads } = apiResponse;\r\n\t\treturn threads.map(conversation => {\r\n\t\t\treturn {\r\n\t\t\t\t...conversation,\r\n\t\t\t\tproduct:\r\n\t\t\t\t\tconversation.conversationType ===\r\n\t\t\t\t\t\tConversationType.Title.key &&\r\n\t\t\t\t\tproducts.filter(\r\n\t\t\t\t\t\tpr => pr.sku === conversation.conversationId,\r\n\t\t\t\t\t)[0],\r\n\t\t\t\ttopic:\r\n\t\t\t\t\t!conversation.conversationType &&\r\n\t\t\t\t\ttopics.filter(\r\n\t\t\t\t\t\ttp => tp.id === parseInt(conversation.conversationId),\r\n\t\t\t\t\t)[0],\r\n\t\t\t};\r\n\t\t});\r\n\t};\r\n\r\n\tcreateNewTopic = values => {\r\n\t\tconst { communityId } = this.props;\r\n\t\tvar topicDTO = {\r\n\t\t\tname: values.name,\r\n\t\t\tinitialComment: values.initialComment,\r\n\t\t};\r\n\r\n\t\tapi.post(`/api/v1/conversations/${communityId}/topics`, topicDTO).then(\r\n\t\t\t() => {\r\n\t\t\t\tthis.refreshConversations(true);\r\n\t\t\t},\r\n\t\t);\r\n\t};\r\n\r\n\teditExistingTopic = (topicId, values) => {\r\n\t\tvar topicDTO = {\r\n\t\t\tid: topicId,\r\n\t\t\ttype: 0,\r\n\t\t\tname: values.name,\r\n\t\t};\r\n\t\tapi.put(`/api/v1/conversations/topics`, topicDTO).then(() => {\r\n\t\t\tthis.refreshConversations(true);\r\n\t\t});\r\n\t};\r\n}\r\n","const SavedFilterTypes = {\r\n\tuser: 'user',\r\n\tgroup: 'group',\r\n};\r\n\r\nexport default SavedFilterTypes;\r\n","import React from 'react';\r\nimport api from '../../../Api';\r\nimport Title, { TitleImage } from '../../../types/Title';\r\nimport { CancelableRequestType } from '../../../types';\r\n\r\ntype UseTitleValue = {\r\n\ttitle: Title;\r\n\tisLoading: boolean;\r\n\tgetJacketCoverImage: () => TitleImage | undefined;\r\n};\r\n\r\nexport default function useTitle(\r\n\tsku: string,\r\n\twithFullDetails = false,\r\n): UseTitleValue {\r\n\tconst [isLoading, setIsLoading] = React.useState(true);\r\n\tconst [title, setTitle] = React.useState({} as Title);\r\n\r\n\tconst getJacketCoverImage = () =>\r\n\t\ttitle?.images?.find(im => im.type === 'jacketCover');\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlet request: CancelableRequestType | undefined;\r\n\r\n\t\tconst fetchTitle = async () => {\r\n\t\t\ttry {\r\n\t\t\t\tconst url = `/api/products/${sku}`;\r\n\t\t\t\tconst urlForFullDetails = `${url}/images,links,descriptions`;\r\n\t\t\t\trequest = api.cancelableGet(\r\n\t\t\t\t\twithFullDetails ? urlForFullDetails : url,\r\n\t\t\t\t);\r\n\r\n\t\t\t\tconst title = await request?.promise;\r\n\t\t\t\tif (title) {\r\n\t\t\t\t\tsetTitle(title);\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.error(error);\r\n\t\t\t}\r\n\t\t\tsetIsLoading(false);\r\n\t\t};\r\n\r\n\t\tfetchTitle();\r\n\r\n\t\treturn () => {\r\n\t\t\tapi.revoke(request);\r\n\t\t};\r\n\t}, [sku]);\r\n\r\n\treturn {\r\n\t\ttitle,\r\n\t\tisLoading,\r\n\t\tgetJacketCoverImage,\r\n\t};\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport * as Util from '../../../util';\r\n\r\nconst CollectionTitlesContext = React.createContext();\r\n\r\nconst name = 'collectionTitlesDataStore';\r\n\r\nexport const connectToCollectionTitles = makeConnectTo(\r\n\tCollectionTitlesContext,\r\n\tname,\r\n);\r\n\r\nexport default class CollectionTitlesDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tcollectionTitles: [],\r\n\t\tareCollectionTitlesLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst collectionTitlesDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<CollectionTitlesContext.Provider value={collectionTitlesDataStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(collectionTitlesDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</CollectionTitlesContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchCollectionTitles();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.collectionTitlesFetch && this.collectionTitlesFetch.cancel) {\r\n\t\t\tthis.collectionTitlesFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshCollectionTitles(),\r\n\t});\r\n\r\n\trefreshCollectionTitles = () => {\r\n\t\tthis.setState({\r\n\t\t\tareCollectionTitlesLoading: true,\r\n\t\t});\r\n\t\tthis.fetchCollectionTitles();\r\n\t\treturn this.collectionTitlesFetch.promise;\r\n\t};\r\n\r\n\tfetchCollectionTitles = () => {\r\n\t\tconst { catalogId } = this.props;\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/catalogs/${catalogId}/titles`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.collectionTitlesFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst collectionTitles = apiResponse && Util.createTitleObject(apiResponse);\r\n\t\tthis.setState({ collectionTitles, areCollectionTitlesLoading: false });\r\n\t};\r\n}\r\n","export default {\r\n\tallAffiliatedCollaborativeListsHome: () => '/collaborativelists/0',\r\n\tbuzzLists: (communityId = ':communityId') => `/buzz/${communityId}`,\r\n\tcatalog: () => '/catalog/:catalogId',\r\n\tcollaborativeList: (listId = ':listId') => `/list/${listId}`,\r\n\tcollaborativeLists: () => `/collaborativelists/:communityId`,\r\n\tcollaborativeListsIFrameHome: () => '/iframe/collaborativelists',\r\n\tcommunicationSettingsIFrameHome: () => '/iframe/communicationSettings',\r\n\tcommunicationSettings: () => '/communicationSettings',\r\n\tcommunity: (\r\n\t\tcommunityId = ':communityId',\r\n\t\treviewsCreatedDateMaxDaysBack = ':reviewsCreatedDateMaxDaysBack',\r\n\t) => `/community/${communityId}/home/${reviewsCreatedDateMaxDaysBack}`,\r\n\tcommunityHomeWithEventDetails: () =>\r\n\t\t'/community/:communityId/home/:reviewsCreatedDateMaxDaysBack/event/:eventId',\r\n\tconversations: () => '/conversations',\r\n\tdownloads: () => '/downloads',\r\n\thelp: () => '/help',\r\n\thome: () => '/home',\r\n\tmainPage: () => '/',\r\n\tnotifications: () => '/notifications',\r\n\toutreach: () => '/outreach',\r\n\tprofileEditor: () => '/profileEditor',\r\n\tregister: () => '/register',\r\n\trequests: () => '/requests',\r\n\tresetPassword: () => '/reset-password/:userToken',\r\n\treviewCopies: () => '/reviewCopies/:communityId',\r\n\treviews: () => '/reviews',\r\n\tsavedFilter: () => '/savedFilter/:viewId',\r\n\tsearch: () => '/search',\r\n\tshelfType: () => '/shelves',\r\n\ttitle: () => '/title/:sku',\r\n\tyourBooks: () => '/yourbooks',\r\n};\r\n","import React from 'react';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport './termsOfService.less';\r\n\r\nexport default function TermsOfService() {\r\n\treturn (\r\n\t\t<div className=\"terms-of-service-container\">\r\n\t\t\t<Translate id=\"by_clicking_sign_up\" />{' '}\r\n\t\t\t<a\r\n\t\t\t\ttarget=\"_blank\"\r\n\t\t\t\trel=\"noopener noreferrer\"\r\n\t\t\t\thref=\"https://www.edelweiss.plus/Terms.aspx\">\r\n\t\t\t\t<Translate id=\"terms_of_service\" />\r\n\t\t\t</a>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { Button, Checkbox, Form } from 'antd';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport ReCAPTCHA from 'react-google-recaptcha';\r\nimport { RegistrationTypes } from '../../RegistrationEnums';\r\nimport { FormComponentProps } from 'antd/lib/form/Form';\r\nimport classNames from 'classnames';\r\nimport TermsOfService from '../TermsOfService/TermsOfService';\r\nimport './registrationFormSubmitButton.less';\r\n\r\nconst { Item } = Form;\r\n\r\ninterface IRegistrationFormSubmitButtonProps extends FormComponentProps {\r\n\ttype: string;\r\n}\r\n\r\nexport default function RegistrationFormSubmitButton({\r\n\tform,\r\n\ttype,\r\n}: IRegistrationFormSubmitButtonProps): JSX.Element {\r\n\tconst { getFieldDecorator, getFieldsValue, getFieldsError } = form;\r\n\tconst isSignUpModal = type === RegistrationTypes.SignUp;\r\n\tconst isForgotPasswordModal = type === RegistrationTypes.ForgotPassword;\r\n\tconst isResetPasswordModal = type === RegistrationTypes.ResetPassword;\r\n\tconst formErrors = getFieldsError();\r\n\tconst isButtonDisabled =\r\n\t\tObject.entries(getFieldsValue()).some(\r\n\t\t\t([key, val]) => key !== 'do_keep_me_updated' && val === undefined,\r\n\t\t) || Object.values(formErrors).some(val => Array.isArray(val));\r\n\r\n\tconst submitButtonClass = classNames({\r\n\t\t'log-in-submit-button': type === RegistrationTypes.LogIn,\r\n\t\t'sign-up-submit-button': isSignUpModal,\r\n\t\t'reset-password-submit-button': isResetPasswordModal,\r\n\t\t'forgot-password-submit-button': isForgotPasswordModal,\r\n\t});\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName=\"registration-form-submit-button\"\r\n\t\t\tstyle={isSignUpModal ? { marginTop: 24 } : {}}>\r\n\t\t\t{!isForgotPasswordModal && !isResetPasswordModal && (\r\n\t\t\t\t<Item>\r\n\t\t\t\t\t{isSignUpModal\r\n\t\t\t\t\t\t? getFieldDecorator('recaptcha', {\r\n\t\t\t\t\t\t\t\trules: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\t\t\t\t\tmessage: (\r\n\t\t\t\t\t\t\t\t\t\t\t<Translate id=\"please_verify_that_you_are_not_a_robot\" />\r\n\t\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t })(\r\n\t\t\t\t\t\t\t\t<ReCAPTCHA\r\n\t\t\t\t\t\t\t\t\tsitekey={\r\n\t\t\t\t\t\t\t\t\t\tprocess.env.REACT_APP_RECAPTCHA_KEY\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t/>,\r\n\t\t\t\t\t\t )\r\n\t\t\t\t\t\t: getFieldDecorator('rememberMe', {\r\n\t\t\t\t\t\t\t\tvaluePropName: 'checked',\r\n\t\t\t\t\t\t\t\tinitialValue: true,\r\n\t\t\t\t\t\t })(\r\n\t\t\t\t\t\t\t\t<Checkbox>\r\n\t\t\t\t\t\t\t\t\t<Translate id=\"remember_me\" />\r\n\t\t\t\t\t\t\t\t</Checkbox>,\r\n\t\t\t\t\t\t )}\r\n\t\t\t\t</Item>\r\n\t\t\t)}\r\n\t\t\t{isSignUpModal && <TermsOfService />}\r\n\t\t\t<Item>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tclassName={submitButtonClass}\r\n\t\t\t\t\ttype=\"primary\"\r\n\t\t\t\t\tshape=\"round\"\r\n\t\t\t\t\thtmlType=\"submit\"\r\n\t\t\t\t\tdisabled={isButtonDisabled}>\r\n\t\t\t\t\t<Translate id={isForgotPasswordModal ? 'submit' : type} />\r\n\t\t\t\t</Button>\r\n\t\t\t</Item>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import { Translate } from '@above-the-treeline/localization';\r\n\r\nexport const RegistrationFormItems = {\r\n\tGetNameItem: (nameType: string) => {\r\n\t\treturn {\r\n\t\t\tlabel: <Translate id={`${nameType}_name`} />,\r\n\t\t\tfieldDecorator: `${nameType}Name`,\r\n\t\t\trules: [\r\n\t\t\t\t{\r\n\t\t\t\t\trequired: true,\r\n\t\t\t\t\tmessage: (\r\n\t\t\t\t\t\t<Translate id={`please_enter_your_${nameType}_name`} />\r\n\t\t\t\t\t),\r\n\t\t\t\t\twhitespace: true,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\t},\r\n\tEmail: {\r\n\t\tlabel: <Translate id=\"email_address\" />,\r\n\t\tfieldDecorator: 'email',\r\n\t\trules: [\r\n\t\t\t{\r\n\t\t\t\ttype: 'email',\r\n\t\t\t\tmessage: (\r\n\t\t\t\t\t<Translate id=\"please_provide_a_valid_email_address\" />\r\n\t\t\t\t),\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\trequired: true,\r\n\t\t\t\tmessage: <Translate id=\"please_provide_your_email_address\" />,\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n\tPassword: {\r\n\t\tlabel: <Translate id=\"password\" />,\r\n\t\tfieldDecorator: 'pword',\r\n\t\trules: [\r\n\t\t\t{\r\n\t\t\t\trequired: true,\r\n\t\t\t\tmessage: <Translate id=\"please_provide_a_password\" />,\r\n\t\t\t\twhitespace: true,\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n\tConfirmPassword: {\r\n\t\tlabel: <Translate id=\"confirm_password\" />,\r\n\t\tdependencies: ['pword'],\r\n\t\tfieldDecorator: 'confirm_pword',\r\n\t\trules: [\r\n\t\t\t{\r\n\t\t\t\trequired: true,\r\n\t\t\t\tmessage: <Translate id=\"please_confirm_your_password\" />,\r\n\t\t\t\twhitespace: true,\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n\tCurrentPassword: {\r\n\t\tlabel: <Translate id=\"current_password\" />,\r\n\t\tfieldDecorator: 'current_pword',\r\n\t\trules: [\r\n\t\t\t{\r\n\t\t\t\trequired: true,\r\n\t\t\t\tmessage: <Translate id=\"please_input_your_current_password\" />,\r\n\t\t\t\twhitespace: true,\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n\tCountry: {\r\n\t\tlabel: <Translate id=\"country\" />,\r\n\t\tfieldDecorator: 'country_code',\r\n\t\tfieldType: 'select',\r\n\t\trules: [{ required: false }],\r\n\t},\r\n\tKeepMeUpdated: {\r\n\t\tlabel: <Translate id=\"registration_keep_me_updated\" />,\r\n\t\tfieldDecorator: 'do_keep_me_updated',\r\n\t\tfieldType: 'checkbox',\r\n\t\trules: [{ required: false }],\r\n\t},\r\n};\r\n","import React from 'react';\r\nimport { CheckCircleTwoTone } from '@ant-design/icons';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport './forgotPasswordSuccessMessage.less';\r\n\r\nexport default function ForgotPasswordSuccessMessage() {\r\n\treturn (\r\n\t\t<div className=\"forgot-password-success-message\">\r\n\t\t\t<CheckCircleTwoTone /> <Translate id=\"forgot_password_email_sent\" />\r\n\t\t</div>\r\n\t);\r\n}\r\n","import { IFormItem } from '../RegistrationFormTypes';\r\nimport { NameTypes } from '../../RegistrationEnums';\r\nimport { RegistrationFormItems } from '../RegistrationFormItems';\r\nimport { useRegistration } from '../../../../../Registration/containers/RegistrationDataStore';\r\n\r\ntype SignUpFormProps = {\r\n\tgetFormItem: (\r\n\t\titem: IFormItem,\r\n\t\tsubstituteLabel?: JSX.Element,\r\n\t\tdata?: any,\r\n\t) => void;\r\n};\r\n\r\nexport default function SignUpForm({ getFormItem }: SignUpFormProps) {\r\n\tconst registrationDataStore = useRegistration();\r\n\tconst countriesByCountryId: object[] = [];\r\n\tfor (let key in registrationDataStore.state.countries) {\r\n\t\tif (key?.length === 0 ?? false) {\r\n\t\t\tregistrationDataStore.state.countries[' '] =\r\n\t\t\t\tregistrationDataStore.state.countries[key];\r\n\t\t\tkey = ' ';\r\n\t\t}\r\n\r\n\t\tcountriesByCountryId.push({\r\n\t\t\tid: key,\r\n\t\t\tdescription: registrationDataStore.state.countries[key],\r\n\t\t});\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{getFormItem(\r\n\t\t\t\tRegistrationFormItems.GetNameItem(NameTypes.FirstName),\r\n\t\t\t)}\r\n\t\t\t{getFormItem(RegistrationFormItems.GetNameItem(NameTypes.LastName))}\r\n\t\t\t{getFormItem(RegistrationFormItems.Email)}\r\n\t\t\t{getFormItem(RegistrationFormItems.Password)}\r\n\t\t\t{getFormItem(\r\n\t\t\t\tRegistrationFormItems.Country,\r\n\t\t\t\tundefined,\r\n\t\t\t\tcountriesByCountryId,\r\n\t\t\t)}\r\n\t\t\t{getFormItem(RegistrationFormItems.KeepMeUpdated)}\r\n\t\t</>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { IFormItem } from '../RegistrationFormTypes';\r\nimport { RegistrationFormItems } from '../RegistrationFormItems';\r\n\r\ntype LogInFormProps = {\r\n\tgetFormItem: (item: IFormItem, substituteLabel?: JSX.Element) => void;\r\n};\r\n\r\nexport default function LogInForm({ getFormItem }: LogInFormProps) {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{getFormItem(RegistrationFormItems.Email)}\r\n\t\t\t{getFormItem(RegistrationFormItems.Password)}\r\n\t\t</>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { IFormItem } from '../RegistrationFormTypes';\r\nimport { RegistrationFormItems } from '../RegistrationFormItems';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\ntype ForgotPasswordFormProps = {\r\n\tgetFormItem: (item: IFormItem, substituteLabel?: JSX.Element) => void;\r\n};\r\n\r\nexport default function ForgotPasswordForm({\r\n\tgetFormItem,\r\n}: ForgotPasswordFormProps) {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<div className=\"password-reset-label\">\r\n\t\t\t\t<Translate id=\"please_enter_your_email_and_click_submit\" />\r\n\t\t\t</div>\r\n\t\t\t{getFormItem(RegistrationFormItems.Email)}\r\n\t\t</>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { IFormItem } from '../RegistrationFormTypes';\r\nimport { RegistrationFormItems } from '../RegistrationFormItems';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\ntype ResetPasswordFormProps = {\r\n\tgetFormItem: (item: IFormItem, substituteLabel?: JSX.Element) => void;\r\n};\r\n\r\nexport default function ResetPasswordForm({\r\n\tgetFormItem,\r\n}: ResetPasswordFormProps) {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{getFormItem(\r\n\t\t\t\tRegistrationFormItems.Password,\r\n\t\t\t\t<Translate id=\"new_password\" />,\r\n\t\t\t)}\r\n\t\t\t{getFormItem(\r\n\t\t\t\tRegistrationFormItems.ConfirmPassword,\r\n\t\t\t\t<Translate id=\"new_password_confirm\" />,\r\n\t\t\t)}\r\n\t\t\t{getFormItem(\r\n\t\t\t\tRegistrationFormItems.CurrentPassword,\r\n\t\t\t\t<Translate id=\"enter_current_password\" />,\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { Button } from 'antd';\r\nimport { CheckCircleTwoTone } from '@ant-design/icons';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport WrappedRegistrationForm from '../RegistrationForm';\r\nimport { RegistrationTypes } from '../../RegistrationEnums';\r\nimport { useUser } from '../../../../../User/containers/UserDataStore';\r\nimport paths from '../../../../../../paths';\r\nimport './resetPasswordSuccessMessage.less';\r\n\r\nexport default function ResetPasswordSuccessMessage() {\r\n\tconst [isLoading, setIsLoading] = React.useState(false);\r\n\tconst isAnonymous = useUser().isAnonymous();\r\n\r\n\tconst renderReturnHomeButton = () => {\r\n\t\treturn (\r\n\t\t\t<Button type=\"primary\" shape=\"round\" className=\"orange-ant-btn\">\r\n\t\t\t\t<a href={paths.home()}>\r\n\t\t\t\t\t<Translate id=\"return_home\" />\r\n\t\t\t\t</a>\r\n\t\t\t</Button>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"reset-password-success-message\">\r\n\t\t\t{!isLoading && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<div className=\"success-text\">\r\n\t\t\t\t\t\t<CheckCircleTwoTone />\r\n\t\t\t\t\t\t<Translate id=\"your_password_has_been_changed\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t{isAnonymous && (\r\n\t\t\t\t\t\t<div className=\"success-text\">\r\n\t\t\t\t\t\t\t<Translate id=\"please_log_in_to_your_account\" />\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t\t{isAnonymous ? (\r\n\t\t\t\t<WrappedRegistrationForm\r\n\t\t\t\t\ttype={RegistrationTypes.LogIn}\r\n\t\t\t\t\tisLoading={isLoading}\r\n\t\t\t\t\tsetIsLoading={setIsLoading}\r\n\t\t\t\t/>\r\n\t\t\t) : (\r\n\t\t\t\trenderReturnHomeButton()\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { Form, Input } from 'antd';\r\nimport { Translate, useTranslate } from '@above-the-treeline/localization';\r\nimport { RegistrationTypes } from '../RegistrationEnums';\r\nimport delay from '../../../../../util/delay';\r\nimport { useUser } from '../../../../User/containers/UserDataStore';\r\nimport RegistrationFormSubmitButton from './RegistrationFormSubmitButton/RegistrationFormSubmitButton';\r\nimport { FormComponentProps } from 'antd/lib/form/Form';\r\nimport { RegistrationFormItems } from './RegistrationFormItems';\r\nimport ForgotPasswordSuccessMessage from './ForgotPasswordSuccessMessage/ForgotPasswordSuccessMessage';\r\nimport { IFormItem } from './RegistrationFormTypes';\r\nimport SignUpForm from './SignUpForm/SignUpForm';\r\nimport LogInForm from './LogInForm/LogInForm';\r\nimport ForgotPasswordForm from './ForgotPasswordForm/ForgotPasswordForm';\r\nimport ResetPasswordForm from './ResetPasswordForm/ResetPasswordForm';\r\nimport ResetPasswordSuccessMessage from './ResetPasswordSuccessMessage/ResetPasswordSuccessMessage';\r\nimport './registrationForm.less';\r\nimport { useAccountOrMembershipRequiredModalContext } from '../../../AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\nimport LoadingSpinner, {\r\n\tLoadingSpinnerSize,\r\n} from '../../../../UI/LoadingSpinner';\r\nimport { Select, Checkbox } from 'antd';\r\nconst { Option } = Select;\r\n\r\nconst { Item } = Form;\r\n\r\ninterface IRegistrationFormProps extends FormComponentProps {\r\n\ttype: string;\r\n\tisLoading: boolean;\r\n\tsetIsLoading: (isLoading: boolean) => void;\r\n\tuserToken?: string;\r\n}\r\n\r\ntype FieldsValue = {\r\n\temail?: string;\r\n\tfirstName?: string;\r\n\tlastName?: string;\r\n\tpword?: string;\r\n\trecaptcha?: string;\r\n\tconfirm_pword?: string;\r\n\tcurrent_pword?: string;\r\n\tcountry_code?: string;\r\n\tdo_keep_me_updated?: boolean;\r\n};\r\n\r\nfunction RegistrationForm({\r\n\tform,\r\n\ttype,\r\n\tisLoading,\r\n\tsetIsLoading,\r\n\tuserToken,\r\n}: IRegistrationFormProps): JSX.Element {\r\n\tconst { translate } = useTranslate();\r\n\tconst [error, setError] = React.useState<JSX.Element | null>(null);\r\n\tconst [\r\n\t\tshowKeepMeUpdatedCheckbox,\r\n\t\tsetShowKeepMeUpdatedCheckbox,\r\n\t] = React.useState<boolean>(false);\r\n\tconst [\r\n\t\tsuccessMessage,\r\n\t\tsetSuccessMessage,\r\n\t] = React.useState<JSX.Element | null>(null);\r\n\tconst {\r\n\t\tgetFieldValue,\r\n\t\tgetFieldDecorator,\r\n\t\tvalidateFields,\r\n\t\tresetFields,\r\n\t} = form;\r\n\tconst isSignUpModal = type === RegistrationTypes.SignUp;\r\n\tconst isResetPasswordModal = type === RegistrationTypes.ResetPassword;\r\n\tconst {\r\n\t\tlogInUser,\r\n\t\tsignUpUser,\r\n\t\tsendForgotPasswordEmail,\r\n\t\tchangeUserPassword,\r\n\t} = useUser();\r\n\r\n\tconst {\r\n\t\tsetIsVisible,\r\n\t\tpathForRedirect,\r\n\t} = useAccountOrMembershipRequiredModalContext();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetSuccessMessage(null);\r\n\t\tresetFields();\r\n\t}, [type]);\r\n\r\n\tconst handleError = err => {\r\n\t\tsetError(\r\n\t\t\terr.message ? (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<Translate id=\"there_was_an_error_with_your_request\" />\r\n\t\t\t\t\t{err.message}. <Translate id=\"please_try_again\" />\r\n\t\t\t\t</>\r\n\t\t\t) : (\r\n\t\t\t\t<div className=\"registration-error-text\">{err}</div>\r\n\t\t\t),\r\n\t\t);\r\n\t};\r\n\r\n\tconst handleSuccess = () => {\r\n\t\tconst message = isResetPasswordModal ? (\r\n\t\t\t<ResetPasswordSuccessMessage />\r\n\t\t) : (\r\n\t\t\t<ForgotPasswordSuccessMessage />\r\n\t\t);\r\n\t\tsetSuccessMessage(message);\r\n\t};\r\n\r\n\tconst handleStopLoading = async () => {\r\n\t\tawait delay(500);\r\n\t\tsetIsLoading(false);\r\n\t};\r\n\r\n\tconst getSignUpValues = (fieldsValue: FieldsValue) => {\r\n\t\treturn {\r\n\t\t\tuser: {\r\n\t\t\t\tfirstName: fieldsValue.firstName,\r\n\t\t\t\tlastName: fieldsValue.lastName,\r\n\t\t\t\temail: fieldsValue.email,\r\n\t\t\t\tpassword: fieldsValue.pword,\r\n\t\t\t},\r\n\t\t\trecaptchaResponse: fieldsValue.recaptcha,\r\n\t\t\tdoSendEmail: true,\r\n\t\t\tcountryCode: fieldsValue.country_code,\r\n\t\t\tdoKeepMeUpdated: fieldsValue.do_keep_me_updated,\r\n\t\t};\r\n\t};\r\n\r\n\tconst getChangePasswordValues = (fieldsValue: FieldsValue) => {\r\n\t\treturn {\r\n\t\t\tpassword: fieldsValue.pword,\r\n\t\t\tverifyPassword: fieldsValue.confirm_pword,\r\n\t\t\ttoken: userToken,\r\n\t\t\tcurrentPassword: fieldsValue.current_pword,\r\n\t\t};\r\n\t};\r\n\r\n\tconst onSuccess = () => {\r\n\t\tsetIsVisible(false);\r\n\t\tpathForRedirect\r\n\t\t\t? (window.location.href = pathForRedirect)\r\n\t\t\t: window.location.reload();\r\n\t};\r\n\r\n\tconst performRegistrationAction = (fieldsValue: FieldsValue) => {\r\n\t\tswitch (type) {\r\n\t\t\tcase RegistrationTypes.SignUp:\r\n\t\t\t\treturn signUpUser(\r\n\t\t\t\t\tgetSignUpValues(fieldsValue),\r\n\t\t\t\t\thandleError,\r\n\t\t\t\t\tonSuccess,\r\n\t\t\t\t);\r\n\t\t\tcase RegistrationTypes.LogIn:\r\n\t\t\t\treturn logInUser(fieldsValue, handleError, onSuccess);\r\n\t\t\tcase RegistrationTypes.ForgotPassword:\r\n\t\t\t\treturn sendForgotPasswordEmail(\r\n\t\t\t\t\tfieldsValue,\r\n\t\t\t\t\thandleError,\r\n\t\t\t\t\thandleSuccess,\r\n\t\t\t\t);\r\n\t\t\tcase RegistrationTypes.ResetPassword:\r\n\t\t\t\treturn changeUserPassword(\r\n\t\t\t\t\tgetChangePasswordValues(fieldsValue),\r\n\t\t\t\t\thandleError,\r\n\t\t\t\t\thandleSuccess,\r\n\t\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleRegistration = e => {\r\n\t\te.preventDefault();\r\n\t\tvalidateFields((err, fieldsValue) => {\r\n\t\t\tif (err) return;\r\n\t\t\tsetError(null);\r\n\t\t\tsetIsLoading(true);\r\n\t\t\treturn performRegistrationAction(fieldsValue).then(\r\n\t\t\t\thandleStopLoading,\r\n\t\t\t);\r\n\t\t});\r\n\t};\r\n\r\n\tconst getPasswordRules = () => {\r\n\t\tconst { rules } = RegistrationFormItems.Password;\r\n\t\tconst atLeastOneUppercase = '?=.*?[A-Z]';\r\n\t\tconst atLeastOneLowercase = '?=.*?[a-z]';\r\n\t\tconst atLeastOneNumber = '?=.*?[0-9]';\r\n\t\tconst atLeastOneSpecialCharacter = '?=.*?[#?!@$%^&*-]';\r\n\t\tconst minimumLength = 8;\r\n\t\tconst passwordCharacterRequirement = new RegExp(\r\n\t\t\t`^(${atLeastOneUppercase})(${atLeastOneLowercase})(${atLeastOneNumber})(${atLeastOneSpecialCharacter}).{${minimumLength},}$`,\r\n\t\t);\r\n\t\treturn isSignUpModal || isResetPasswordModal\r\n\t\t\t? [\r\n\t\t\t\t\t...RegistrationFormItems.Password.rules,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpattern: passwordCharacterRequirement,\r\n\t\t\t\t\t\tmessage: <Translate id=\"password_must_be_at_least\" />,\r\n\t\t\t\t\t},\r\n\t\t\t ]\r\n\t\t\t: rules;\r\n\t};\r\n\r\n\tconst getConfirmPasswordRules = () => {\r\n\t\tconst { rules } = RegistrationFormItems.ConfirmPassword;\r\n\t\treturn [\r\n\t\t\t...rules,\r\n\t\t\t{\r\n\t\t\t\tvalidator: (_, value) => {\r\n\t\t\t\t\tif (!value || getFieldValue('pword') === value) {\r\n\t\t\t\t\t\treturn Promise.resolve();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn Promise.reject(\r\n\t\t\t\t\t\tnew Error(`${translate('passwords_do_not_match')}`),\r\n\t\t\t\t\t);\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t];\r\n\t};\r\n\r\n\tconst getItemRules = (item: IFormItem) => {\r\n\t\tconst { label, rules } = item;\r\n\t\tswitch (label) {\r\n\t\t\tcase RegistrationFormItems.ConfirmPassword.label:\r\n\t\t\t\treturn getConfirmPasswordRules();\r\n\t\t\tcase RegistrationFormItems.Password.label:\r\n\t\t\t\treturn getPasswordRules();\r\n\t\t\tdefault:\r\n\t\t\t\treturn rules;\r\n\t\t}\r\n\t};\r\n\r\n\tconst getFormItem = (\r\n\t\titem: IFormItem,\r\n\t\tsubstituteLabel?: JSX.Element,\r\n\t\tdata?: any,\r\n\t) => {\r\n\t\tconst { label, fieldDecorator } = item;\r\n\r\n\t\tconst itemVisibility =\r\n\t\t\tlabel === RegistrationFormItems.KeepMeUpdated.label &&\r\n\t\t\tshowKeepMeUpdatedCheckbox === false\r\n\t\t\t\t? false\r\n\t\t\t\t: true;\r\n\r\n\t\treturn (\r\n\t\t\t<Item\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tvisibility: itemVisibility ? 'visible' : 'hidden',\r\n\t\t\t\t}}\r\n\t\t\t\tlabel={substituteLabel || label}>\r\n\t\t\t\t{getFieldDecorator(fieldDecorator, {\r\n\t\t\t\t\trules: getItemRules(item),\r\n\t\t\t\t})(getFieldInput(item, data))}\r\n\t\t\t</Item>\r\n\t\t);\r\n\t};\r\n\r\n\tfunction handleSelectChange(countryCodeValue: string) {\r\n\t\tconst nonGdprCountryCodes = ['us', 'ca', 'au'];\r\n\r\n\t\tif (nonGdprCountryCodes.indexOf(countryCodeValue) === -1) {\r\n\t\t\tsetShowKeepMeUpdatedCheckbox(true);\r\n\t\t} else {\r\n\t\t\tsetShowKeepMeUpdatedCheckbox(false);\r\n\t\t}\r\n\t}\r\n\r\n\tconst getFieldInput = (item: IFormItem, data?: any) => {\r\n\t\tconst { label, fieldType } = item;\r\n\t\tconst isPasswordItem = label === RegistrationFormItems.Password.label;\r\n\t\tconst isConfirmPasswordItem =\r\n\t\t\tlabel === RegistrationFormItems.ConfirmPassword.label;\r\n\t\tconst isCurrentPasswordItem =\r\n\t\t\tlabel === RegistrationFormItems.CurrentPassword.label;\r\n\t\tconst isSelectFieldType = fieldType === 'select';\r\n\t\tconst isCheckboxFieldType = fieldType === 'checkbox';\r\n\r\n\t\tif (isPasswordItem || isConfirmPasswordItem || isCurrentPasswordItem) {\r\n\t\t\treturn <Input.Password />;\r\n\t\t} else if (isCheckboxFieldType) {\r\n\t\t\treturn <Checkbox></Checkbox>;\r\n\t\t} else if (isSelectFieldType) {\r\n\t\t\treturn (\r\n\t\t\t\t<Select onChange={handleSelectChange}>\r\n\t\t\t\t\t{data.map(element => (\r\n\t\t\t\t\t\t<Option key={element['id']}>\r\n\t\t\t\t\t\t\t{element['description']}\r\n\t\t\t\t\t\t</Option>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Select>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn <Input></Input>;\r\n\t\t}\r\n\t};\r\n\r\n\tconst getFormFields = () => {\r\n\t\tswitch (type) {\r\n\t\t\tcase RegistrationTypes.SignUp:\r\n\t\t\t\treturn <SignUpForm getFormItem={getFormItem} />;\r\n\t\t\tcase RegistrationTypes.LogIn:\r\n\t\t\t\treturn <LogInForm getFormItem={getFormItem} />;\r\n\t\t\tcase RegistrationTypes.ForgotPassword:\r\n\t\t\t\treturn <ForgotPasswordForm getFormItem={getFormItem} />;\r\n\t\t\tcase RegistrationTypes.ResetPassword:\r\n\t\t\t\treturn <ResetPasswordForm getFormItem={getFormItem} />;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid type: ${type}`);\r\n\t\t}\r\n\t};\r\n\r\n\treturn isLoading ? (\r\n\t\t<LoadingSpinner size={LoadingSpinnerSize.small} />\r\n\t) : successMessage ? (\r\n\t\tsuccessMessage\r\n\t) : (\r\n\t\t<>\r\n\t\t\t{error && <div className=\"registration-error\">{error}</div>}\r\n\t\t\t<Form\r\n\t\t\t\tclassName=\"registration-modal-form\"\r\n\t\t\t\tonSubmit={handleRegistration}\r\n\t\t\t\thideRequiredMark={!isSignUpModal}>\r\n\t\t\t\t{getFormFields()}\r\n\t\t\t\t<RegistrationFormSubmitButton type={type} form={form} />\r\n\t\t\t</Form>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nconst WrappedRegistrationForm = Form.create<IRegistrationFormProps>({\r\n\tname: 'registration',\r\n})(RegistrationForm);\r\n\r\nexport default WrappedRegistrationForm;\r\n","import React from 'react';\r\nimport { Button, Tooltip } from 'antd';\r\nimport LocalizedDate from '../../Localization/LocalizedDate';\r\nimport api from '../../../Api';\r\nimport { connectToRequests } from '../../Requests/containers/RequestsDataStore';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\n\r\nexport function CancelRequestLabel({ submittedDate }) {\r\n\treturn (\r\n\t\t<React.Fragment>\r\n\t\t\tCancel Pending Request\r\n\t\t\t<br />\r\n\t\t\t<span style={{ fontSize: 'smaller' }}>\r\n\t\t\t\t(made on <LocalizedDate dateString={submittedDate} />)\r\n\t\t\t</span>\r\n\t\t</React.Fragment>\r\n\t);\r\n}\r\n\r\nexport class CancelRequest extends React.Component {\r\n\trender() {\r\n\t\tif (this.props.isMobile()) {\r\n\t\t\treturn this.renderButton();\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<Tooltip title={this.getTooltip()} placement=\"left\">\r\n\t\t\t\t{this.renderButton()}\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t}\r\n\r\n\trenderButton = () => (\r\n\t\t<Button shape=\"circle\" onClick={this.cancelRequest}>\r\n\t\t\t<div className=\"relative\">\r\n\t\t\t\t<div className=\"icon-hand-paper-o request-hand\" />\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"icon-declined cancel-request\"\r\n\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\tfontSize: '9px',\r\n\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\tbottom: '5px',\r\n\t\t\t\t\t\tright: '10px',\r\n\t\t\t\t\t\tcolor: '#fc601f',\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t</Button>\r\n\t);\r\n\r\n\tgetTooltip() {\r\n\t\tconst { submittedDate } = this.props;\r\n\t\treturn <CancelRequestLabel submittedDate={submittedDate} />;\r\n\t}\r\n\r\n\tcancelRequest = () => {\r\n\t\tconst { sku } = this.props;\r\n\r\n\t\tif (!window.confirm('Cancel this request?')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tapi.post(`/api/me/galleys/${sku}/cancel`).then(res => {\r\n\t\t\tthis.props.requestsDataStore.refresh();\r\n\t\t});\r\n\t};\r\n}\r\n\r\nexport default connectToRequests(withIsMobile(CancelRequest));\r\n","import React, { useCallback } from 'react';\r\nimport api from '../../../../Api';\r\nimport { ShareTargetType } from './ShareTargetType';\r\nimport { Action } from './useShareTargets';\r\n\r\nexport const NominationAction = {\r\n\tNOMINATIONS_SUBMITTED: 'NOMINATIONS_SUBMITTED',\r\n};\r\n\r\nexport default function useNominationTargets(sku) {\r\n\tconst [isLoading, setIsLoading] = React.useState(true);\r\n\tconst [nominationOptions, setNominationOptions] = React.useState([]);\r\n\r\n\tconst [alreadyNominatedIds, setAlreadyNominatedIds] = React.useState([]);\r\n\tconst [nominationTargetIds, setNominationTargetIds] = React.useState([]);\r\n\r\n\tconst fetchNominatedCallback = useCallback(async () => {\r\n\t\tconst url = `/api/me/reviews/products/${sku}/shares-inclusions/nominations`;\r\n\t\tconst nominated = await api.get(url);\r\n\r\n\t\tif (Array.isArray(nominated)) {\r\n\t\t\tconst nominatedIds = nominated.map(n => n.submissionListId);\r\n\t\t\tsetNominationTargetIds(nominatedIds);\r\n\t\t\tsetAlreadyNominatedIds(nominatedIds);\r\n\t\t}\r\n\t}, [sku]);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlet request;\r\n\r\n\t\tconst fetchSubmittableNominationSubmissionLists = async () => {\r\n\t\t\tconst url = `/api/affiliations/submissionLists/submittable/${sku}`;\r\n\t\t\trequest = api.cancelableGet(url);\r\n\r\n\t\t\tconst nominationOptions = await request.promise;\r\n\t\t\tsetNominationOptions(nominationOptions);\r\n\t\t};\r\n\r\n\t\tconst initialize = async () => {\r\n\t\t\tawait fetchNominatedCallback();\r\n\r\n\t\t\tawait fetchSubmittableNominationSubmissionLists();\r\n\r\n\t\t\tsetIsLoading(false);\r\n\t\t};\r\n\r\n\t\tinitialize();\r\n\r\n\t\treturn () => {\r\n\t\t\tapi.revoke(request);\r\n\t\t};\r\n\t}, [sku, fetchNominatedCallback]);\r\n\r\n\tconst isActiveNomination = shareTarget => {\r\n\t\tswitch (shareTarget.type) {\r\n\t\t\tcase ShareTargetType.nomination:\r\n\t\t\t\treturn nominationTargetIds.includes(shareTarget.id);\r\n\t\t\tdefault:\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleNominationsSubmitted = () => {\r\n\t\tsetAlreadyNominatedIds(alreadyNominatedIds => {\r\n\t\t\tconst idsToAdd = [];\r\n\r\n\t\t\tnominationTargetIds.forEach(targetId => {\r\n\t\t\t\tif (!alreadyNominatedIds.includes(targetId)) {\r\n\t\t\t\t\tidsToAdd.push(targetId);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn [...alreadyNominatedIds, ...idsToAdd];\r\n\t\t});\r\n\t};\r\n\r\n\tconst reduceState = action => {\r\n\t\tconst { type, payload: p } = action;\r\n\t\tswitch (type) {\r\n\t\t\tcase Action.ADD_SHARE_TARGET:\r\n\t\t\t\tsetNominationTargetIds(ids => [...ids, p.shareTarget.id]);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Action.REMOVE_SHARE_TARGET:\r\n\t\t\t\tsetNominationTargetIds(ids =>\r\n\t\t\t\t\tids.filter(id => id !== p.shareTarget.id),\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase NominationAction.NOMINATIONS_SUBMITTED:\r\n\t\t\t\thandleNominationsSubmitted();\r\n\t\t\t\tbreak;\r\n\t\t\tcase Action.CLEAR_SHARE_TARGETS:\r\n\t\t\t\tsetNominationTargetIds([]);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\treturn {\r\n\t\tisLoading: () => isLoading,\r\n\t\tisActive: isActiveNomination,\r\n\t\tgetOptions: () => nominationOptions,\r\n\t\tupdate: reduceState,\r\n\t\tisNominationSubmitted: id => alreadyNominatedIds.includes(id),\r\n\t\trefresh: () => fetchNominatedCallback(),\r\n\t\tgetAlreadySubmittedCount: () => alreadyNominatedIds.length,\r\n\t\tgetSelectedNominationAffiliationIds: () =>\r\n\t\t\tnominationTargetIds.filter(id => !alreadyNominatedIds.includes(id)),\r\n\t};\r\n}\r\n","import React from 'react';\r\n\r\nexport default function useSaveEditor(editorController) {\r\n\tconst [isLoading, setIsLoading] = React.useState(false);\r\n\r\n\tconst handleSave = async () => {\r\n\t\tsetIsLoading(true);\r\n\t\tawait editorController.save();\r\n\t\tsetIsLoading(false);\r\n\t};\r\n\r\n\treturn {\r\n\t\tisLoading,\r\n\t\thandleSave,\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, message, Popconfirm, Tooltip } from 'antd';\r\nimport useSaveEditor from './data/useSaveEditor';\r\nimport { useUserReviewEditor } from './data/UserReviewEditorProvider';\r\nimport { RatingType } from './data/RatingType';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\n\r\nEditorControlButtons.propTypes = {\r\n\tisMobile: PropTypes.func,\r\n\tproductName: PropTypes.string,\r\n\teditorController: PropTypes.object,\r\n\tdrawer: PropTypes.shape({ open: PropTypes.func, close: PropTypes.func }),\r\n};\r\n\r\nfunction EditorControlButtons({\r\n\tdrawer,\r\n\tisMobile,\r\n\tproductName,\r\n\teditorController,\r\n}) {\r\n\tconst [isRemoving, setIsRemoving] = React.useState(false);\r\n\r\n\tconst { isLoading, handleSave } = useSaveEditor(editorController);\r\n\r\n\tconst { ratingsEditor, shareTargetsEditor } = useUserReviewEditor();\r\n\r\n\tconst handleRemove = async () => {\r\n\t\tsetIsRemoving(true);\r\n\t\tawait editorController.remove();\r\n\t\tdrawer.close();\r\n\t\tmessage.success(`Deleted review for ${productName}`);\r\n\t};\r\n\r\n\tconst renderCancelButton = () => {\r\n\t\treturn (\r\n\t\t\t<Button\r\n\t\t\t\tonClick={drawer.close}\r\n\t\t\t\tdisabled={isRemoving || isLoading}\r\n\t\t\t\tstyle={{ minWidth: 80 }}>\r\n\t\t\t\tCancel\r\n\t\t\t</Button>\r\n\t\t);\r\n\t};\r\n\r\n\tconst editorCanBeSaved = () => {\r\n\t\tconst { getGenreCommunityOptionsState } = shareTargetsEditor;\r\n\t\treturn (\r\n\t\t\t!isRemoving &&\r\n\t\t\tratingsEditor.exists(RatingType.overall) &&\r\n\t\t\t!getGenreCommunityOptionsState().isLoading\r\n\t\t);\r\n\t};\r\n\r\n\tconst getCannotSaveEditorMessage = () => {\r\n\t\tconst { getGenreCommunityOptionsState } = shareTargetsEditor;\r\n\r\n\t\tif (isRemoving) {\r\n\t\t\treturn 'Deleting...';\r\n\t\t}\r\n\r\n\t\tif (!ratingsEditor.exists(RatingType.overall)) {\r\n\t\t\treturn 'Overall rating is required';\r\n\t\t}\r\n\r\n\t\tif (getGenreCommunityOptionsState().isLoading) {\r\n\t\t\treturn 'Loading genre community options';\r\n\t\t}\r\n\r\n\t\treturn 'Cannot save';\r\n\t};\r\n\r\n\tconst handleRenderSaveButton = canSaveEditor => {\r\n\t\tconst renderSaveButton = () => {\r\n\t\t\treturn (\r\n\t\t\t\t<Button\r\n\t\t\t\t\ttype=\"primary\"\r\n\t\t\t\t\tdisabled={!canSaveEditor}\r\n\t\t\t\t\tloading={isLoading}\r\n\t\t\t\t\tstyle={{ marginLeft: '1.5rem', minWidth: 80 }}\r\n\t\t\t\t\tonClick={handleSave}>\r\n\t\t\t\t\tSave\r\n\t\t\t\t</Button>\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tif (isMobile()) {\r\n\t\t\treturn renderSaveButton();\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<Tooltip\r\n\t\t\t\ttitle={\r\n\t\t\t\t\tcanSaveEditor\r\n\t\t\t\t\t\t? 'Save review and ratings'\r\n\t\t\t\t\t\t: getCannotSaveEditorMessage()\r\n\t\t\t\t}>\r\n\t\t\t\t{renderSaveButton()}\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t};\r\n\r\n\tconst canSaveEditor = editorCanBeSaved();\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tstyle={{\r\n\t\t\t\tdisplay: 'flex',\r\n\t\t\t\tmarginBottom: '5rem',\r\n\t\t\t\tjustifyContent: 'space-between',\r\n\t\t\t}}>\r\n\t\t\t<div>\r\n\t\t\t\t{editorController.doesReviewExist() && renderCancelButton()}\r\n\t\t\t</div>\r\n\t\t\t<div style={{ display: 'flex' }}>\r\n\t\t\t\t{editorController.doesReviewExist() ? (\r\n\t\t\t\t\t<Popconfirm\r\n\t\t\t\t\t\tokText=\"Yes\"\r\n\t\t\t\t\t\tcancelText=\"No\"\r\n\t\t\t\t\t\ttitle=\"Do you want to delete the review?\"\r\n\t\t\t\t\t\tplacement=\"topRight\"\r\n\t\t\t\t\t\tonConfirm={handleRemove}>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\ttype=\"danger\"\r\n\t\t\t\t\t\t\tdisabled={isLoading}\r\n\t\t\t\t\t\t\tloading={isRemoving}\r\n\t\t\t\t\t\t\tstyle={{ minWidth: 80 }}>\r\n\t\t\t\t\t\t\tDelete\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Popconfirm>\r\n\t\t\t\t) : (\r\n\t\t\t\t\trenderCancelButton()\r\n\t\t\t\t)}\r\n\t\t\t\t{handleRenderSaveButton(canSaveEditor)}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(EditorControlButtons);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Select } from 'antd';\r\n\r\nRatingSelector.propTypes = {\r\n\tassessment: PropTypes.object,\r\n\tratingsDataEditor: PropTypes.object,\r\n\tlabel: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),\r\n};\r\n\r\nexport default function RatingSelector({\r\n\tlabel,\r\n\tassessment,\r\n\tratingsDataEditor,\r\n}) {\r\n\tconst getStyles = () => ({\r\n\t\tdisplay: 'flex',\r\n\t\talignItems: 'center',\r\n\t\tmarginBottom: '1.5rem',\r\n\t\tjustifyContent: 'space-between',\r\n\t});\r\n\r\n\tconst getOptions = () => {\r\n\t\tconst options = [];\r\n\t\tfor (let i = 1; i <= 10; i++) {\r\n\t\t\toptions.push(i);\r\n\t\t}\r\n\t\treturn options;\r\n\t};\r\n\r\n\tconst renderOneOption = (option, idx) => {\r\n\t\tconst optionAsValue = option.toString();\r\n\t\treturn (\r\n\t\t\t<Select.Option key={idx} value={optionAsValue}>\r\n\t\t\t\t{`${optionAsValue} / 10`}\r\n\t\t\t</Select.Option>\r\n\t\t);\r\n\t};\r\n\r\n\tconst assignDefaultValue = () => {\r\n\t\tif (assessment.value > -1) {\r\n\t\t\treturn assessment.value.toString();\r\n\t\t}\r\n\t\treturn undefined;\r\n\t};\r\n\r\n\tconst onSelectOption = value => {\r\n\t\tconst next = typeof value === 'string' ? Number(value) : -1;\r\n\t\tratingsDataEditor.update({ ...assessment, value: next });\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"rating-selector\">\r\n\t\t\t<div style={getStyles()}>\r\n\t\t\t\t<span>{label}</span>\r\n\t\t\t\t<Select\r\n\t\t\t\t\tplaceholder=\"1 - 10\"\r\n\t\t\t\t\tdefaultValue={assignDefaultValue()}\r\n\t\t\t\t\tonChange={onSelectOption}\r\n\t\t\t\t\tstyle={{ minWidth: 120 }}>\r\n\t\t\t\t\t{getOptions().map(renderOneOption)}\r\n\t\t\t\t</Select>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport RatingSelector from './RatingSelector';\r\nimport ReviewStepHeader from '../UI/ReviewStepHeader';\r\nimport { Collapse } from 'antd';\r\nimport { RatingType } from '../data/RatingType';\r\n\r\nconst { Panel } = Collapse;\r\n\r\nRatingsEditor.propTypes = {\r\n\tratingsDataEditor: PropTypes.object,\r\n};\r\n\r\nexport default function RatingsEditor({ ratingsDataEditor }) {\r\n\tconst getAssessment = type => {\r\n\t\treturn ratingsDataEditor.get(type);\r\n\t};\r\n\r\n\tconst renderOverallRatingSelector = () => {\r\n\t\treturn (\r\n\t\t\t<RatingSelector\r\n\t\t\t\tlabel={\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<b>Overall Rating</b>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t}\r\n\t\t\t\tratingsDataEditor={ratingsDataEditor}\r\n\t\t\t\tassessment={getAssessment(RatingType.overall)}\r\n\t\t\t/>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"ratings-editor editor-root\">\r\n\t\t\t<ReviewStepHeader label=\"Rate (1/3)\" icon=\"star\" />\r\n\t\t\t<div>\r\n\t\t\t\t{renderOverallRatingSelector()}\r\n\t\t\t\t<Collapse bordered={false}>\r\n\t\t\t\t\t<Panel header=\"More Ratings\" key=\"1\">\r\n\t\t\t\t\t\t<RatingSelector\r\n\t\t\t\t\t\t\tlabel=\"Originality\"\r\n\t\t\t\t\t\t\tratingsDataEditor={ratingsDataEditor}\r\n\t\t\t\t\t\t\tassessment={getAssessment(RatingType.originality)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<RatingSelector\r\n\t\t\t\t\t\t\tlabel=\"Writing Quality\"\r\n\t\t\t\t\t\t\tratingsDataEditor={ratingsDataEditor}\r\n\t\t\t\t\t\t\tassessment={getAssessment(\r\n\t\t\t\t\t\t\t\tRatingType.writingQuality,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<RatingSelector\r\n\t\t\t\t\t\t\tlabel=\"Intellectual Depth\"\r\n\t\t\t\t\t\t\tratingsDataEditor={ratingsDataEditor}\r\n\t\t\t\t\t\t\tassessment={getAssessment(\r\n\t\t\t\t\t\t\t\tRatingType.intellectualDepth,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<RatingSelector\r\n\t\t\t\t\t\t\tlabel=\"Character Development\"\r\n\t\t\t\t\t\t\tratingsDataEditor={ratingsDataEditor}\r\n\t\t\t\t\t\t\tassessment={getAssessment(\r\n\t\t\t\t\t\t\t\tRatingType.characterDevelopment,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<RatingSelector\r\n\t\t\t\t\t\t\tlabel=\"'Couldn't Put It Down'-ness\"\r\n\t\t\t\t\t\t\tratingsDataEditor={ratingsDataEditor}\r\n\t\t\t\t\t\t\tassessment={getAssessment(\r\n\t\t\t\t\t\t\t\tRatingType.couldntPutItDownness,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<RatingSelector\r\n\t\t\t\t\t\t\tlabel=\"Image or Illustration Quality\"\r\n\t\t\t\t\t\t\tratingsDataEditor={ratingsDataEditor}\r\n\t\t\t\t\t\t\tassessment={getAssessment(\r\n\t\t\t\t\t\t\t\tRatingType.imageIllustrationQuality,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Panel>\r\n\t\t\t\t</Collapse>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport { Input, Button } from 'antd';\r\nimport { Action } from '../data/useReviewEditor';\r\nimport ReviewStepHeader from '../UI/ReviewStepHeader';\r\nimport './reviewTextEditor.less';\r\nimport CommunityGuidelinesLink from '../../../UI/Links/CommunityGuidelines/CommunityGuidelinesLink';\r\n\r\nconst { TextArea } = Input;\r\n\r\nReviewTextEditor.propTypes = {\r\n\treviewEditor: PropTypes.object,\r\n};\r\n\r\nexport default function ReviewTextEditor({ reviewEditor }) {\r\n\tconst handleChange = evt => {\r\n\t\tconst action = {\r\n\t\t\ttype: Action.SET_EDITOR_VALUE,\r\n\t\t\tpayload: evt.currentTarget.value,\r\n\t\t};\r\n\t\treviewEditor.update(action);\r\n\t};\r\n\r\n\tconst handleReset = () => {\r\n\t\tconst action = {\r\n\t\t\ttype: Action.RESET_EDITOR_VALUE,\r\n\t\t};\r\n\t\treviewEditor.update(action);\r\n\t};\r\n\r\n\tconst names = 'review-text-editor editor-root';\r\n\r\n\treturn (\r\n\t\t<div className={names} style={{ marginTop: '2rem' }}>\r\n\t\t\t<ReviewStepHeader icon=\"form\" label=\"Review (2/3)\" />\r\n\t\t\t<div>\r\n\t\t\t\t<TextArea\r\n\t\t\t\t\trows={8}\r\n\t\t\t\t\tplaceholder=\"Write your review here\"\r\n\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\tvalue={reviewEditor.getEditorValue()}\r\n\t\t\t\t/>\r\n\t\t\t\t<CommunityGuidelinesLink />\r\n\t\t\t</div>\r\n\t\t\t{reviewEditor.didEdit() && (\r\n\t\t\t\t<div className=\"review-reset\">\r\n\t\t\t\t\t<Button onClick={handleReset}>Reset</Button>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ReviewStepHeader from '../UI/ReviewStepHeader';\r\nimport { ShareTargetType } from '../data/ShareTargetType';\r\nimport ShareTargetCheckbox from './ShareTargetCheckbox';\r\nimport './shareEditor.css';\r\n\r\nShareEditor.propTypes = {\r\n\tshareTargetsEditor: PropTypes.object,\r\n};\r\n\r\nexport default function ShareEditor({ shareTargetsEditor }) {\r\n\tconst communities = shareTargetsEditor.getCommunities();\r\n\tconst genreCommunitiesState = shareTargetsEditor.getGenreCommunityOptionsState();\r\n\r\n\tconst renderGenreCommunityCheckBox = genreCommunity => {\r\n\t\tconst shareTarget = {\r\n\t\t\tid: genreCommunity.id,\r\n\t\t\ttype: ShareTargetType.genreCommunity,\r\n\t\t};\r\n\t\treturn (\r\n\t\t\t<ShareTargetCheckbox\r\n\t\t\t\tkey={genreCommunity.id}\r\n\t\t\t\tshareTarget={shareTarget}\r\n\t\t\t\tshareTargetsEditor={shareTargetsEditor}>\r\n\t\t\t\t{genreCommunity.name}\r\n\t\t\t</ShareTargetCheckbox>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderCommunityCheckbox = community => {\r\n\t\tconst shareTarget = {\r\n\t\t\tid: community.id,\r\n\t\t\ttype: ShareTargetType.generalCommunity,\r\n\t\t};\r\n\t\treturn (\r\n\t\t\t<ShareTargetCheckbox\r\n\t\t\t\tkey={community.id}\r\n\t\t\t\tshareTarget={shareTarget}\r\n\t\t\t\tshareTargetsEditor={shareTargetsEditor}>\r\n\t\t\t\t{community.name}\r\n\t\t\t</ShareTargetCheckbox>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"share-editor editor-root\">\r\n\t\t\t<ReviewStepHeader label=\"Share (3/3)\" icon=\"usergroup-add\" />\r\n\t\t\t<div className=\"checkbox-container\">\r\n\t\t\t\t<ShareTargetCheckbox\r\n\t\t\t\t\tshareTarget={{ type: ShareTargetType.all }}\r\n\t\t\t\t\tshareTargetsEditor={shareTargetsEditor}>\r\n\t\t\t\t\tSelect All\r\n\t\t\t\t</ShareTargetCheckbox>\r\n\t\t\t\t<ShareTargetCheckbox\r\n\t\t\t\t\tshareTarget={{ type: ShareTargetType.friends }}\r\n\t\t\t\t\tshareTargetsEditor={shareTargetsEditor}>\r\n\t\t\t\t\tFriends\r\n\t\t\t\t</ShareTargetCheckbox>\r\n\t\t\t\t<ShareTargetCheckbox\r\n\t\t\t\t\tshareTarget={{ type: ShareTargetType.colleagues }}\r\n\t\t\t\t\tshareTargetsEditor={shareTargetsEditor}>\r\n\t\t\t\t\tColleagues\r\n\t\t\t\t</ShareTargetCheckbox>\r\n\t\t\t\t<ShareTargetCheckbox\r\n\t\t\t\t\tshareTarget={{ type: ShareTargetType.publisher }}\r\n\t\t\t\t\tshareTargetsEditor={shareTargetsEditor}>\r\n\t\t\t\t\tPublisher\r\n\t\t\t\t</ShareTargetCheckbox>\r\n\t\t\t</div>\r\n\t\t\t<h4>Genre Communities</h4>\r\n\t\t\t<div className=\"checkbox-container\">\r\n\t\t\t\t{genreCommunitiesState.isLoading ? (\r\n\t\t\t\t\t<em>Loading options...</em>\r\n\t\t\t\t) : (\r\n\t\t\t\t\tgenreCommunitiesState.options.map(\r\n\t\t\t\t\t\trenderGenreCommunityCheckBox,\r\n\t\t\t\t\t)\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t\t<h4>My Other Communities</h4>\r\n\t\t\t<div className=\"checkbox-container\">\r\n\t\t\t\t{communities.map(renderCommunityCheckbox)}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport EditorControlButtons from './EditorControlButtons';\r\nimport RatingsEditor from './Ratings/RatingsEditor';\r\nimport ReviewTextEditor from './Review/ReviewTextEditor';\r\nimport ShareEditor from './Share/ShareEditor';\r\nimport Fade from 'treeline-react-core-components/Fade';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport { Result, Button, message, Tooltip } from 'antd';\r\nimport { useUserReviewEditor } from './data/UserReviewEditorProvider';\r\nimport NominationsEditor from './Share/NominationsEditor';\r\nimport useSaveEditor from './data/useSaveEditor';\r\nimport useSocialNetworkShareUris from './data/useSocialNetworkShareUris';\r\nimport './reviewEditor.css';\r\nimport LoadingSpinnerInContainer from '../../UI/LoadingSpinnerInContainer';\r\n\r\nUserReviewEditor.propTypes = {\r\n\tisMobile: PropTypes.func,\r\n\tproduct: PropTypes.object,\r\n\tdrawer: PropTypes.shape({ open: PropTypes.func, close: PropTypes.func }),\r\n};\r\n\r\nclass UserReviewEditorUnmount extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.element,\r\n\t\teditorController: PropTypes.object,\r\n\t};\r\n\r\n\trender() {\r\n\t\treturn this.props.children;\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tthis.props.editorController.reset();\r\n\t}\r\n}\r\n\r\nfunction UserReviewEditor({ drawer, product, isMobile }) {\r\n\tconst {\r\n\t\tisLoading,\r\n\t\treviewEditor,\r\n\t\tratingsEditor,\r\n\t\teditorController,\r\n\t\tshareTargetsEditor,\r\n\t} = useUserReviewEditor();\r\n\r\n\tconst [isNominating, setIsNominating] = React.useState(false);\r\n\r\n\tconst { isLoading: isLoadingSave, handleSave } = useSaveEditor(\r\n\t\teditorController,\r\n\t);\r\n\r\n\tconst { twitter, facebook } = useSocialNetworkShareUris(product.sku);\r\n\r\n\tconst renderSocialNetworkShareButton = (icon, socialNetwork) => {\r\n\t\tconst renderButton = () => (\r\n\t\t\t<Button\r\n\t\t\t\ticon={icon}\r\n\t\t\t\tshape=\"circle\"\r\n\t\t\t\ttarget=\"_blank\"\r\n\t\t\t\tdisabled={socialNetwork.error.exists}\r\n\t\t\t\tloading={socialNetwork.isLoading}\r\n\t\t\t\thref={socialNetwork.uri}\r\n\t\t\t/>\r\n\t\t);\r\n\r\n\t\tif (isMobile()) {\r\n\t\t\treturn renderButton();\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<Tooltip\r\n\t\t\t\ttitle={`Share on ${socialNetwork.displayName}`}\r\n\t\t\t\tplacement=\"bottomRight\">\r\n\t\t\t\t{renderButton()}\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderNominateButton = () => {\r\n\t\treturn (\r\n\t\t\t<div style={{ display: 'flex', justifyContent: 'center' }}>\r\n\t\t\t\t<div style={{ width: 300 }}>\r\n\t\t\t\t\t<Button block onClick={() => setIsNominating(true)}>\r\n\t\t\t\t\t\tNominate\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\tjustifyContent: 'center',\r\n\t\t\t\t\t\t\tmarginTop: '1rem',\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\tjustifyContent: 'space-between',\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t{renderSocialNetworkShareButton(\r\n\t\t\t\t\t\t\t\t'facebook',\r\n\t\t\t\t\t\t\t\tfacebook,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{renderSocialNetworkShareButton('twitter', twitter)}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderSaveWasCompleted = () => {\r\n\t\treturn (\r\n\t\t\t<Fade>\r\n\t\t\t\t<Result\r\n\t\t\t\t\tstatus=\"success\"\r\n\t\t\t\t\ttitle=\"Review Saved\"\r\n\t\t\t\t\tsubTitle=\"Consider sharing your review on the platforms below\"\r\n\t\t\t\t\textra={renderNominateButton()}\r\n\t\t\t\t/>\r\n\t\t\t</Fade>\r\n\t\t);\r\n\t};\r\n\r\n\tconst handleNominationSave = async () => {\r\n\t\tawait handleSave();\r\n\t\tsetIsNominating(false);\r\n\t\tmessage.success(`Nominations saved for ${product.name}`);\r\n\t};\r\n\r\n\tconst renderEditors = () => {\r\n\t\tif (isNominating) {\r\n\t\t\treturn (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<NominationsEditor />\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\tmarginTop: '1rem',\r\n\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\tjustifyContent: 'center',\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tdisabled={isLoadingSave}\r\n\t\t\t\t\t\t\tonClick={() => setIsNominating(false)}\r\n\t\t\t\t\t\t\tstyle={{ minWidth: 80 }}>\r\n\t\t\t\t\t\t\tCancel\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tloading={isLoadingSave}\r\n\t\t\t\t\t\t\tstyle={{ minWidth: 80, marginLeft: '1rem' }}\r\n\t\t\t\t\t\t\tonClick={handleNominationSave}>\r\n\t\t\t\t\t\t\tSave\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (editorController.didSave()) {\r\n\t\t\treturn renderSaveWasCompleted();\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"editors\">\r\n\t\t\t\t<RatingsEditor ratingsDataEditor={ratingsEditor} />\r\n\t\t\t\t<ReviewTextEditor reviewEditor={reviewEditor} />\r\n\t\t\t\t<ShareEditor shareTargetsEditor={shareTargetsEditor} />\r\n\t\t\t\t<EditorControlButtons\r\n\t\t\t\t\tdrawer={drawer}\r\n\t\t\t\t\tproductName={product.name}\r\n\t\t\t\t\teditorController={editorController}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<UserReviewEditorUnmount editorController={editorController}>\r\n\t\t\t<div className=\"user-review-editor\">\r\n\t\t\t\t{isLoading() ? (\r\n\t\t\t\t\t<LoadingSpinnerInContainer height=\"200px\" />\r\n\t\t\t\t) : (\r\n\t\t\t\t\trenderEditors()\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t</UserReviewEditorUnmount>\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(UserReviewEditor);\r\n","import React from 'react';\r\nimport api from '../../../../Api';\r\n\r\nexport default function useSocialNetworkShareUris(sku) {\r\n\tconst socialNetwork = {\r\n\t\turi: '',\r\n\t\tisLoading: true,\r\n\t\terror: { exists: false, value: {} },\r\n\t};\r\n\r\n\tconst [twitter, setTwitter] = React.useState(socialNetwork);\r\n\tconst [facebook, setFacebook] = React.useState(socialNetwork);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlet request;\r\n\r\n\t\tconst fetchSocialNetworkShareUri = async (\r\n\t\t\tendpoint,\r\n\t\t\tsetSocialNetwork,\r\n\t\t) => {\r\n\t\t\trequest = api.cancelableGet(endpoint);\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst uri = await request.promise;\r\n\t\t\t\tsetSocialNetwork(sn => ({ ...sn, uri, isLoading: false }));\r\n\t\t\t} catch (err) {\r\n\t\t\t\tconst error = { exists: true, value: err };\r\n\t\t\t\tsetSocialNetwork(sn => ({ ...sn, error, isLoading: false }));\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst fetchFacebookShareUri = () => {\r\n\t\t\tconst endpoint = `/api/me/reviews/products/${sku}/share-uri/facebook`;\r\n\t\t\treturn fetchSocialNetworkShareUri(endpoint, setFacebook);\r\n\t\t};\r\n\r\n\t\tconst fetchTwitterShareUri = () => {\r\n\t\t\tconst endpoint = `/api/me/reviews/products/${sku}/share-uri/twitter`;\r\n\t\t\treturn fetchSocialNetworkShareUri(endpoint, setTwitter);\r\n\t\t};\r\n\r\n\t\tconst initialize = async () => {\r\n\t\t\tawait fetchFacebookShareUri();\r\n\t\t\tawait fetchTwitterShareUri();\r\n\t\t};\r\n\r\n\t\tinitialize();\r\n\r\n\t\treturn () => {\r\n\t\t\tapi.revoke(request);\r\n\t\t};\r\n\t}, [sku]);\r\n\r\n\treturn {\r\n\t\ttwitter: { ...twitter, displayName: 'Twitter' },\r\n\t\tfacebook: { ...facebook, displayName: 'Facebook' },\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport UserReviewEditor from './UserReviewEditor';\r\nimport useTitle from '../../Title/hooks/useTitle';\r\nimport ResponsiveDrawerAnchor from '../../UI/ResponsiveDrawerAnchor';\r\nimport UserReviewEditorProvider from './data/UserReviewEditorProvider';\r\n\r\nReviewEditorAnchor.propTypes = {\r\n\tsku: PropTypes.string,\r\n\tonUpdate: PropTypes.func,\r\n\tchildren: PropTypes.element,\r\n};\r\n\r\nexport default function ReviewEditorAnchor({ sku, children, onUpdate }) {\r\n\tconst { title, isLoading } = useTitle(sku);\r\n\r\n\tconst renderHeader = () => {\r\n\t\tif (isLoading || !title.name) {\r\n\t\t\treturn <span>Your review</span>;\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<span>Your review of </span>\r\n\t\t\t\t<em>{title.name}</em>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<ResponsiveDrawerAnchor\r\n\t\t\twidth={{ mobile: '100%', desktop: '650px' }}\r\n\t\t\trenderDrawerContent={drawer => (\r\n\t\t\t\t<UserReviewEditorProvider sku={sku} onUpdate={onUpdate}>\r\n\t\t\t\t\t<UserReviewEditor drawer={drawer} product={title} />\r\n\t\t\t\t</UserReviewEditorProvider>\r\n\t\t\t)}\r\n\t\t\theader={<div style={{ padding: 15 }}>{renderHeader()}</div>}>\r\n\t\t\t{children}\r\n\t\t</ResponsiveDrawerAnchor>\r\n\t);\r\n}\r\n","export const drmMethods = {\r\n\topen: 'open',\r\n\tadobe: 'adobe',\r\n};\r\n","export const kindleDownloadMethods = {\r\n\tsendToEmail: 1,\r\n\tsendToKindle: 2,\r\n};\r\n","export const requestFormats = {\r\n\tunknown: 0,\r\n\tprint: 1,\r\n\tePub: 2,\r\n\tpdf: 3,\r\n\tkindle: 4,\r\n\tmobi: 5,\r\n\tmp3: 11,\r\n\taudioZip: 12,\r\n\taudioChapters: 13,\r\n\texternalUrl: 1000,\r\n\tany: 999999,\r\n\tanyDigital: 888888,\r\n};\r\n","import { Button, Checkbox, Input, Modal, Radio, Tooltip } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport api from '../../Api';\r\nimport { connectToDownloads } from '../Downloads/containers/DownloadsDataStore';\r\nimport LocalizedDate from '../Localization/LocalizedDate';\r\nimport { connectToUserPreferences } from '../UserPreferences';\r\nimport combineConnectors from '../util/combineConnectors';\r\nimport { drmMethods } from './DrmMethods';\r\nimport ReviewCopyActionTooltip from './ReviewCopyActionTooltip';\r\nimport EdelweissReaderLink from './EdelweissReaderLink';\r\nimport { connectToAccountOrMembershipRequiredModalContext } from '../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\nimport { kindleDownloadMethods } from './KindleDownloadMethods';\r\nimport { requestFormats } from './RequestFormats';\r\nimport {\r\n\tdoOpenReviewCopyAction,\r\n\tdeactivateAutoOpenReviewCopyAction,\r\n} from './routines';\r\nimport './reviewCopy.less';\r\nimport { connectToUser } from '../User/containers/UserDataStore';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport ApprovedIcon from '../UI/ApprovedIcon';\r\n\r\nexport class ReviewCopyDownloadModalAnchor extends React.Component {\r\n\tstatic propTypes = {\r\n\t\ttitle: PropTypes.object,\r\n\t\ttooltipPlacement: PropTypes.string,\r\n\t\tdownloadDate: PropTypes.string,\r\n\t\tdigitalCreatedDate: PropTypes.string,\r\n\t\tdigitalUpdatedDate: PropTypes.string,\r\n\t\tdoAllowOpenOnMount: PropTypes.bool,\r\n\t\tisMobile: PropTypes.func,\r\n\t};\r\n\r\n\tstatic defaultProps = {\r\n\t\tdoAllowOpenOnMount: false,\r\n\t};\r\n\r\n\tsteps = {\r\n\t\tunknown: -1,\r\n\t\tselectFormat: 1,\r\n\t\tkindleInfo: 2,\r\n\t\tkindleOverview: 3,\r\n\t\tstandardOverview: 4,\r\n\t\taudioOverview: 5,\r\n\t\taudioDownload: 6,\r\n\t\texternalUrlOverview: 7,\r\n\t};\r\n\r\n\tstate = {\r\n\t\tisModalOpen: false,\r\n\t\tchangeKindleEmailModalOpen: false,\r\n\t\tcurrentStep: this.steps.unknown,\r\n\t\tselectedFormat: requestFormats.unknown,\r\n\t\tselectedKindleDownloadMethod: kindleDownloadMethods.sendToEmail,\r\n\t\tkindleEmail: '',\r\n\t\tkindleEmailLocked: false,\r\n\t\thasInitialKindleEmail: false,\r\n\t\tdoSaveAsDefaultFormat: false,\r\n\t\tsending: false,\r\n\t\tsuccess: false,\r\n\t\tfailure: false,\r\n\t};\r\n\r\n\tcomponentDidMount() {\r\n\t\tif (this.props.doAllowOpenOnMount && doOpenReviewCopyAction()) {\r\n\t\t\tthis.openModal();\r\n\t\t\tdeactivateAutoOpenReviewCopyAction();\r\n\t\t}\r\n\t}\r\n\r\n\trender = () => {\r\n\t\tconst { downloadDate, tooltipPlacement } = this.props;\r\n\r\n\t\tconst renderButton = () => {\r\n\t\t\treturn (\r\n\t\t\t\t<div className=\"column-narrow\">\r\n\t\t\t\t\t<Button shape=\"circle\" onClick={this.handleClick}>\r\n\t\t\t\t\t\t<div className=\"relative\">\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName={`icon-cloud-download ${\r\n\t\t\t\t\t\t\t\t\tdownloadDate\r\n\t\t\t\t\t\t\t\t\t\t? 'cloud-downloaded'\r\n\t\t\t\t\t\t\t\t\t\t: 'cloud-download'\r\n\t\t\t\t\t\t\t\t}`}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{downloadDate && (\r\n\t\t\t\t\t\t\t\t<ApprovedIcon style={{ bottom: 8, right: 4 }} />\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tconst renderButtonWithTooltip = () => {\r\n\t\t\treturn (\r\n\t\t\t\t<Tooltip\r\n\t\t\t\t\ttitle={this.getTooltip(downloadDate)}\r\n\t\t\t\t\tplacement={tooltipPlacement || 'topRight'}>\r\n\t\t\t\t\t{renderButton()}\r\n\t\t\t\t\t<div className=\"clear\" />\r\n\t\t\t\t</Tooltip>\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t{this.props.isMobile()\r\n\t\t\t\t\t? renderButton()\r\n\t\t\t\t\t: renderButtonWithTooltip()}\r\n\t\t\t\t<Modal\r\n\t\t\t\t\twidth={700}\r\n\t\t\t\t\tclassName=\"download-and-read-modal\"\r\n\t\t\t\t\tvisible={this.state.isModalOpen}\r\n\t\t\t\t\ttitle={this.getModalTitle()}\r\n\t\t\t\t\tbodyStyle={this.getModalBodyStyle()}\r\n\t\t\t\t\tonCancel={() => this.setState({ isModalOpen: false })}\r\n\t\t\t\t\tfooter={this.getModalButtons()}>\r\n\t\t\t\t\t{this.renderModalContents()}\r\n\t\t\t\t</Modal>\r\n\t\t\t\t<Modal\r\n\t\t\t\t\tvisible={this.infoModalVisible()}\r\n\t\t\t\t\tclosable={false}\r\n\t\t\t\t\tfooter={[\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\ttype=\"primary\"\r\n\t\t\t\t\t\t\tdisabled={this.state.sending}\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\t\t\t\tsending: false,\r\n\t\t\t\t\t\t\t\t\tsuccess: false,\r\n\t\t\t\t\t\t\t\t\tfailure: false,\r\n\t\t\t\t\t\t\t\t\tmessage: '',\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t<Translate id=\"ok\" />\r\n\t\t\t\t\t\t</Button>,\r\n\t\t\t\t\t]}>\r\n\t\t\t\t\t{this.renderInfoModalContents()}\r\n\t\t\t\t</Modal>\r\n\t\t\t\t<Modal\r\n\t\t\t\t\tvisible={this.state.changeKindleEmailModalOpen}\r\n\t\t\t\t\tclosable={false}\r\n\t\t\t\t\ttitle={<Translate id=\"change_email_address\" />}\r\n\t\t\t\t\tonCancel={() =>\r\n\t\t\t\t\t\tthis.setState({ changeKindleEmailModalOpen: false })\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonOk={() =>\r\n\t\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\t\tchangeKindleEmailModalOpen: false,\r\n\t\t\t\t\t\t\tkindleEmailLocked: false,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t<Translate id=\"kindle_email_disclaimer\" />\r\n\t\t\t\t</Modal>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\thandleClick = () => {\r\n\t\tconst {\r\n\t\t\tuserDataStore: { isAnonymous },\r\n\t\t\taccountOrMembershipRequiredModalContext: { setIsVisible },\r\n\t\t} = this.props;\r\n\t\treturn isAnonymous() ? setIsVisible(true) : this.openModal();\r\n\t};\r\n\r\n\topenModal = () => {\r\n\t\tconst {\r\n\t\t\tkindleDownloadMethod,\r\n\t\t\tkindleEmail,\r\n\t\t\tpreferredFormat,\r\n\t\t} = this.props.userPreferences.getReviewCopyDownloadPreferences();\r\n\r\n\t\tconst hasInitialKindleEmail = kindleEmail && kindleEmail.length > 0;\r\n\t\tconst availableFormats = this.getAvailableFormats();\r\n\t\tlet selectedFormat = requestFormats.unknown;\r\n\t\tlet currentStep = this.steps.selectFormat;\r\n\r\n\t\tif (availableFormats) {\r\n\t\t\tif (availableFormats.length === 1) {\r\n\t\t\t\tselectedFormat = availableFormats[0].format;\r\n\t\t\t} else if (\r\n\t\t\t\tpreferredFormat &&\r\n\t\t\t\tavailableFormats.some(f => f.format === preferredFormat)\r\n\t\t\t) {\r\n\t\t\t\tselectedFormat = preferredFormat;\r\n\t\t\t} else if (this.hasPdfFormat()) {\r\n\t\t\t\tselectedFormat = requestFormats.pdf;\r\n\t\t\t} else {\r\n\t\t\t\tselectedFormat = availableFormats[0].format;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tswitch (selectedFormat) {\r\n\t\t\tcase requestFormats.unknown:\r\n\t\t\t\tcurrentStep = this.steps.selectFormat;\r\n\t\t\t\tbreak;\r\n\t\t\tcase requestFormats.kindle:\r\n\t\t\t\tcurrentStep = this.steps.kindleOverview;\r\n\t\t\t\tbreak;\r\n\t\t\tcase requestFormats.externalUrl:\r\n\t\t\t\tcurrentStep = this.steps.externalUrlOverview;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tcurrentStep = this.steps.standardOverview;\r\n\t\t}\r\n\r\n\t\tthis.setState({\r\n\t\t\tisModalOpen: true,\r\n\t\t\tcurrentStep,\r\n\t\t\tselectedFormat,\r\n\t\t\tkindleEmail,\r\n\t\t\tselectedKindleDownloadMethod: kindleDownloadMethod,\r\n\t\t\thasInitialKindleEmail,\r\n\t\t\tkindleEmailLocked: hasInitialKindleEmail,\r\n\t\t});\r\n\t};\r\n\r\n\tgetFormatName = format => {\r\n\t\tswitch (format) {\r\n\t\t\tcase requestFormats.kindle:\r\n\t\t\t\treturn 'Kindle';\r\n\t\t\tcase requestFormats.audioZip:\r\n\t\t\tcase requestFormats.audioChapters:\r\n\t\t\tcase requestFormats.mp3:\r\n\t\t\t\treturn 'Audio';\r\n\t\t\tdefault:\r\n\t\t\t\treturn 'Standard';\r\n\t\t}\r\n\t};\r\n\r\n\tgetAudioZipFormatInfo = () =>\r\n\t\tthis.getAvailableFormats().filter(\r\n\t\t\tf => f.format === requestFormats.audioZip,\r\n\t\t);\r\n\r\n\tgetAudioChaptersFormatInfo = () =>\r\n\t\tthis.getAvailableFormats().filter(\r\n\t\t\tf => f.format === requestFormats.audioChapters,\r\n\t\t);\r\n\r\n\tgetFormatInfo = format =>\r\n\t\tthis.getAvailableFormats().find(f => f.format === format);\r\n\r\n\tgetFormatResourceId = format => this.getFormatInfo(format).resourceId;\r\n\r\n\tgetFormatDrmMethod = format => this.getFormatInfo(format).drmMethod;\r\n\r\n\tisOpenDrmMethod = format =>\r\n\t\tthis.getFormatDrmMethod(format) === drmMethods.open;\r\n\r\n\tgetTitle = () => this.props.title;\r\n\r\n\tgetSku = () => this.getTitle().sku;\r\n\r\n\tgetTitleName = () => this.getTitle().name;\r\n\r\n\tgetTitleUri = () => this.getTitleUri().uri;\r\n\r\n\tgetAvailableFormats = () => this.getTitle().availableReviewCopyFormats;\r\n\r\n\thasMultipleFormatsAvailable = () =>\r\n\t\tthis.getAvailableFormats() && this.getAvailableFormats().length > 1;\r\n\r\n\thasFormat = format =>\r\n\t\tthis.getAvailableFormats() &&\r\n\t\tthis.getAvailableFormats().some(f => f.format === format);\r\n\r\n\thasEPubFormat = () => this.hasFormat(requestFormats.ePub);\r\n\r\n\thasKindleFormat = () => this.hasFormat(requestFormats.kindle);\r\n\r\n\thasPdfFormat = () => this.hasFormat(requestFormats.pdf);\r\n\r\n\thasMobiFormat = () => this.hasFormat(requestFormats.mobi);\r\n\r\n\thasExternalUrlFormat = () => this.hasFormat(requestFormats.externalUrl);\r\n\r\n\thasAudioZipFormat = () => this.hasFormat(requestFormats.audioZip);\r\n\r\n\thasAudioChaptersFormat = () => this.hasFormat(requestFormats.audioChapters);\r\n\r\n\thasMp3Format = () => this.hasFormat(requestFormats.mp3);\r\n\r\n\thadDigitalFormat = () =>\r\n\t\tthis.hasEPubFormat() ||\r\n\t\tthis.hasKindleFormat() ||\r\n\t\tthis.hasPdfFormat() ||\r\n\t\tthis.hasMobiFormat() ||\r\n\t\tthis.hasExternalUrlFormat();\r\n\r\n\thasAudioFormat = () =>\r\n\t\tthis.hasAudioChaptersFormat() ||\r\n\t\tthis.hasAudioZipFormat() ||\r\n\t\tthis.hasMp3Format();\r\n\r\n\tgetFormatDescription = format => {\r\n\t\tswitch (format) {\r\n\t\t\tcase requestFormats.pdf:\r\n\t\t\tcase requestFormats.ePub:\r\n\t\t\t\treturn <Translate id=\"drc_standard_description\" />;\r\n\t\t\tcase requestFormats.kindle:\r\n\t\t\t\treturn <Translate id=\"drc_kindle_description\" />;\r\n\t\t\tcase requestFormats.audioChapters:\r\n\t\t\tcase requestFormats.audioZip:\r\n\t\t\tcase requestFormats.mp3:\r\n\t\t\t\treturn <Translate id=\"drc_audio_description\" />;\r\n\t\t}\r\n\t};\r\n\r\n\tgetTooltip(downloadDate) {\r\n\t\tconst { digitalCreatedDate, digitalUpdatedDate } = this.props;\r\n\t\tif (downloadDate) {\r\n\t\t\treturn (\r\n\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t<Translate id=\"drc_downloaded\" />\r\n\t\t\t\t\t \r\n\t\t\t\t\t<LocalizedDate dateString={downloadDate} />\r\n\t\t\t\t</React.Fragment>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<ReviewCopyActionTooltip\r\n\t\t\t\t\theaderText={'Download DRC'}\r\n\t\t\t\t\tcreatedDate={digitalCreatedDate}\r\n\t\t\t\t\tupdatedDate={digitalUpdatedDate}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tinfoModalVisible = () =>\r\n\t\tthis.state.sending || this.state.success || this.state.failure;\r\n\r\n\trenderInfoSendingModalContents = () => {\r\n\t\tconst { message } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<b>\r\n\t\t\t\t\t<Translate id=\"sending\" />\r\n\t\t\t\t\t: \r\n\t\t\t\t</b>\r\n\t\t\t\t<span>{message}</span>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderInfoSuccessModalContents = () => {\r\n\t\tconst title = this.getTitle();\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<b className=\"success\">Success: </b>\r\n\t\t\t\t<span>\r\n\t\t\t\t\tRequest sent for <b>{title.name}</b>.\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderInfoFailureModalContents = () => {\r\n\t\tconst { message } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<b className=\"error\">\r\n\t\t\t\t\t<Translate id=\"error\" />\r\n\t\t\t\t\t: \r\n\t\t\t\t</b>\r\n\t\t\t\t<span>{message}</span>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderInfoModalContents = () => {\r\n\t\tconst { sending, success, failure } = this.state;\r\n\r\n\t\tif (sending) {\r\n\t\t\treturn this.renderInfoSendingModalContents();\r\n\t\t}\r\n\r\n\t\tif (success) {\r\n\t\t\treturn this.renderInfoSuccessModalContents();\r\n\t\t}\r\n\r\n\t\tif (failure) {\r\n\t\t\treturn this.renderInfoFailureModalContents();\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n\r\n\tgetBackButton = step => (\r\n\t\t<Button key=\"back\" onClick={() => this.handleBackButton(step)}>\r\n\t\t\t<Translate id=\"back\" />\r\n\t\t</Button>\r\n\t);\r\n\r\n\tgetContinueButton = () => (\r\n\t\t<Button\r\n\t\t\tkey=\"submit\"\r\n\t\t\ttype=\"primary\"\r\n\t\t\tonClick={() => this.handleSubmitButton()}>\r\n\t\t\t<Translate id=\"continue\" />\r\n\t\t</Button>\r\n\t);\r\n\r\n\tgetSubmitButton = () => (\r\n\t\t<Button\r\n\t\t\tkey=\"submit\"\r\n\t\t\ttype=\"primary\"\r\n\t\t\tonClick={() => this.handleSubmitButton()}>\r\n\t\t\t<Translate id=\"download\" />\r\n\t\t</Button>\r\n\t);\r\n\r\n\tgetEdelweissReaderLink = () => (\r\n\t\t<EdelweissReaderLink title={this.getTitle()} buttonType=\"ghost\" />\r\n\t);\r\n\r\n\tgetModalButtons = () => {\r\n\t\tconst { currentStep } = this.state;\r\n\t\tconst buttons = [];\r\n\r\n\t\tswitch (currentStep) {\r\n\t\t\tcase this.steps.kindleInfo:\r\n\t\t\t\tbuttons.push(this.getBackButton(this.steps.selectFormat));\r\n\t\t\t\tbuttons.push(this.getContinueButton());\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.steps.audioOverview:\r\n\t\t\tcase this.steps.selectFormat:\r\n\t\t\tcase this.steps.externalUrlOverview:\r\n\t\t\t\tbuttons.push(this.getContinueButton());\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbuttons.push(this.getEdelweissReaderLink());\r\n\t\t\t\tbuttons.push(this.getSubmitButton());\r\n\t\t}\r\n\r\n\t\treturn buttons;\r\n\t};\r\n\r\n\thandleBackButton = step => this.goToStep(step);\r\n\r\n\thandleSubmitButton = async () => {\r\n\t\tconst { currentStep } = this.state;\r\n\r\n\t\tswitch (currentStep) {\r\n\t\t\tcase this.steps.selectFormat:\r\n\t\t\t\treturn this.submitSelectFormat();\r\n\t\t\tcase this.steps.kindleInfo:\r\n\t\t\t\treturn this.submitKindleInfo();\r\n\t\t\tcase this.steps.kindleOverview:\r\n\t\t\t\treturn await this.submitKindleDownload();\r\n\t\t\tcase this.steps.standardOverview:\r\n\t\t\t\treturn this.submitStandardDownload();\r\n\t\t\tcase this.steps.audioOverview:\r\n\t\t\t\treturn this.goToAudioDownloadStep();\r\n\t\t\tcase this.steps.externalUrlOverview:\r\n\t\t\t\treturn this.openExternalDrcUrl();\r\n\t\t\tcase this.steps.audioDownload:\r\n\t\t\tdefault:\r\n\t\t}\r\n\t};\r\n\r\n\topenExternalDrcUrl = () => {\r\n\t\tconst { selectedFormat } = this.state;\r\n\t\tconst format = this.getFormatInfo(selectedFormat);\r\n\r\n\t\tif (format && format.resourceUri) {\r\n\t\t\twindow.open(format.resourceUri);\r\n\t\t}\r\n\t};\r\n\r\n\tsubmitStandardDownload = () => {\r\n\t\tconst { selectedFormat } = this.state;\r\n\t\tconst resourceId = this.getFormatResourceId(selectedFormat);\r\n\r\n\t\twindow.open(\r\n\t\t\t`${process.env.REACT_APP_API_URL}/api/v1/me/galleys/${resourceId}/download`,\r\n\t\t);\r\n\r\n\t\tthis.props.downloadsDataStore.refresh();\r\n\t};\r\n\r\n\tsubmitKindleDownload = async () => {\r\n\t\tconst { selectedFormat } = this.state;\r\n\t\tconst resourceId = this.getFormatResourceId(selectedFormat);\r\n\r\n\t\tthis.setState({\r\n\t\t\tsending: true,\r\n\t\t\tsuccess: false,\r\n\t\t\tfailure: false,\r\n\t\t\tmessage: 'Kindle download request',\r\n\t\t});\r\n\r\n\t\tif (!resourceId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tawait api.get(`/api/v1/me/galleys/${resourceId}/download`);\r\n\r\n\t\t\tthis.setState({\r\n\t\t\t\tsending: false,\r\n\t\t\t\tsuccess: true,\r\n\t\t\t\tfailure: false,\r\n\t\t\t\tmessage: '',\r\n\t\t\t});\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\r\n\t\t\tthis.setState({\r\n\t\t\t\tsending: false,\r\n\t\t\t\tsuccess: false,\r\n\t\t\t\tfailure: true,\r\n\t\t\t\tmessage:\r\n\t\t\t\t\t'An error occurred while attempting to send this title to your Kindle. Please contact Edelweiss customer support for assistance.',\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tsubmitKindleInfo = () => {\r\n\t\tconst { kindleEmail, selectedKindleDownloadMethod } = this.state;\r\n\r\n\t\tthis.props.userPreferences\r\n\t\t\t.saveKindlePreferences(kindleEmail, selectedKindleDownloadMethod)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.setState({ currentStep: this.steps.kindleOverview });\r\n\t\t\t});\r\n\t};\r\n\r\n\tsubmitSelectFormat = () => {\r\n\t\tconst { selectedFormat, doSaveAsDefaultFormat } = this.state;\r\n\r\n\t\tif (doSaveAsDefaultFormat) {\r\n\t\t\tthis.props.userPreferences.saveDrcDownloadFormatPreference(\r\n\t\t\t\tselectedFormat,\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tswitch (selectedFormat) {\r\n\t\t\tcase requestFormats.kindle:\r\n\t\t\t\treturn this.goToKindleInfoStep();\r\n\t\t\tcase requestFormats.ePub:\r\n\t\t\tcase requestFormats.pdf:\r\n\t\t\t\treturn this.goToStandardOverviewStep();\r\n\t\t\tcase requestFormats.audioChapters:\r\n\t\t\tcase requestFormats.audioZip:\r\n\t\t\tcase requestFormats.mp3:\r\n\t\t\t\treturn this.goToAudioOverviewStep();\r\n\t\t}\r\n\t};\r\n\r\n\tgoToStep = step => this.setState({ currentStep: step });\r\n\r\n\tgoToSelectFormatStep = () => this.goToStep(this.steps.selectFormat);\r\n\r\n\tgoToKindleInfoStep = () => this.goToStep(this.steps.kindleInfo);\r\n\r\n\tgoToKindleOverviewStep = () => this.goToStep(this.steps.kindleOverview);\r\n\r\n\tgoToStandardOverviewStep = () => this.goToStep(this.steps.standardOverview);\r\n\r\n\tgoToAudioOverviewStep = () => this.goToStep(this.steps.audioOverview);\r\n\r\n\tgoToAudioDownloadStep = () => this.goToStep(this.steps.audioDownload);\r\n\r\n\tgetModalBodyStyle = () => {\r\n\t\treturn { paddingTop: 10 };\r\n\t};\r\n\r\n\tgetModalTitle = () => (\r\n\t\t<b>\r\n\t\t\t<Translate id=\"download_and_read\" />\r\n\t\t\t {this.getTitleName()}\r\n\t\t</b>\r\n\t);\r\n\r\n\trenderKindleDownloadMethod = kindleDownloadMethod => {\r\n\t\tswitch (kindleDownloadMethod) {\r\n\t\t\tcase kindleDownloadMethods.sendToEmail:\r\n\t\t\t\treturn <Translate id=\"kindle_method_send_to_email\" />;\r\n\t\t\tcase kindleDownloadMethods.sendToKindle:\r\n\t\t\t\treturn <Translate id=\"kindle_method_send_to_kindle\" />;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n\r\n\trenderSelectFormatOption = format => (\r\n\t\t<div>\r\n\t\t\t<Radio value={format}>{this.getFormatDescription(format)}</Radio>\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderSelectFormatStep = () => {\r\n\t\tconst { selectedFormat, doSaveAsDefaultFormat } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<p>\r\n\t\t\t\t\t<Translate id=\"drc_select_format\" />\r\n\t\t\t\t</p>\r\n\t\t\t\t<Radio.Group\r\n\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\tthis.setState({ selectedFormat: e.target.value })\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={selectedFormat}>\r\n\t\t\t\t\t{this.hasPdfFormat() &&\r\n\t\t\t\t\t\tthis.renderSelectFormatOption(requestFormats.pdf)}\r\n\t\t\t\t\t{this.hasEPubFormat() &&\r\n\t\t\t\t\t\tthis.renderSelectFormatOption(requestFormats.ePub)}\r\n\t\t\t\t\t{this.hasKindleFormat() &&\r\n\t\t\t\t\t\tthis.renderSelectFormatOption(requestFormats.kindle)}\r\n\t\t\t\t\t{this.hasAudioFormat() &&\r\n\t\t\t\t\t\tthis.renderSelectFormatOption(requestFormats.audioZip)}\r\n\t\t\t\t</Radio.Group>\r\n\t\t\t\t<div id=\"set-preferred-format-option\">\r\n\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\t\t\tdoSaveAsDefaultFormat: e.target.checked,\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tchecked={doSaveAsDefaultFormat}>\r\n\t\t\t\t\t\t<Translate id=\"drc_set_preferred_format\" />\r\n\t\t\t\t\t</Checkbox>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderKindleEmail = () => {\r\n\t\tconst { kindleEmail, kindleEmailLocked } = this.state;\r\n\r\n\t\tif (kindleEmailLocked) {\r\n\t\t\treturn (\r\n\t\t\t\t<div>\r\n\t\t\t\t\t<Input value={kindleEmail} disabled />\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\t\tthis.setState({ changeKindleEmailModalOpen: true })\r\n\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t<Translate id=\"change_email_address\" />\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<Input\r\n\t\t\t\t\tvalue={kindleEmail}\r\n\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\tthis.setState({ kindleEmail: e.target.value })\r\n\t\t\t\t\t}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderKindleDownloadMethodOptions = () => {\r\n\t\tconst { selectedKindleDownloadMethod } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<Radio.Group\r\n\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\t\tselectedKindleDownloadMethod: e.target.value,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={selectedKindleDownloadMethod}>\r\n\t\t\t\t\t<Radio value={kindleDownloadMethods.sendToEmail}>\r\n\t\t\t\t\t\t{this.renderKindleDownloadMethod(\r\n\t\t\t\t\t\t\tkindleDownloadMethods.sendToEmail,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Radio>\r\n\t\t\t\t\t<Radio value={kindleDownloadMethods.sendToKindle}>\r\n\t\t\t\t\t\t{this.renderKindleDownloadMethod(\r\n\t\t\t\t\t\t\tkindleDownloadMethods.sendToKindle,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Radio>\r\n\t\t\t\t</Radio.Group>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderKindleInfoStep = () => {\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<p>\r\n\t\t\t\t\t<Translate id=\"kindle_additional_info_required\" />\r\n\t\t\t\t</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\t<Translate id=\"kindle_in_order_to_send\" />:\r\n\t\t\t\t</p>\r\n\t\t\t\t<ol>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<Translate id=\"kindle_in_order_to_send_point_one\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<Translate id=\"kindle_in_order_to_send_point_two\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<Translate id=\"kindle_in_order_to_send_point_three\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<Translate id=\"kindle_in_order_to_send_point_four\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ol>\r\n\t\t\t\t<fieldset>\r\n\t\t\t\t\t<legend>\r\n\t\t\t\t\t\t<Translate id=\"kindle_information\" />\r\n\t\t\t\t\t</legend>\r\n\t\t\t\t\t<strong>\r\n\t\t\t\t\t\t<Translate id=\"kindle_email_address\" />:\r\n\t\t\t\t\t</strong>\r\n\t\t\t\t\t{this.renderKindleEmail()}\r\n\t\t\t\t\t<strong>\r\n\t\t\t\t\t\t<Translate id=\"download_method\" />:\r\n\t\t\t\t\t</strong>\r\n\t\t\t\t\t{this.renderKindleDownloadMethodOptions()}\r\n\t\t\t\t</fieldset>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderSelectedFormat = () => {\r\n\t\tconst { selectedFormat } = this.state;\r\n\t\tconst formatName = this.getFormatName(selectedFormat);\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<Translate>\r\n\t\t\t\t\t{translate => (\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t{translate('drc_downloading_message').replace(\r\n\t\t\t\t\t\t\t\t'{0}',\r\n\t\t\t\t\t\t\t\tformatName,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Translate>\r\n\t\t\t\t<span>. </span>\r\n\t\t\t\t{this.hasMultipleFormatsAvailable() && (\r\n\t\t\t\t\t<a onClick={() => this.goToSelectFormatStep()}>\r\n\t\t\t\t\t\t<Translate id=\"change\" />\r\n\t\t\t\t\t</a>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderKindleOverviewStep = () => {\r\n\t\tconst { kindleEmail, selectedKindleDownloadMethod } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<p>{this.renderSelectedFormat()}</p>\r\n\t\t\t\t<Translate id=\"drc_kindle_message\" />\r\n\t\t\t\t<fieldset>\r\n\t\t\t\t\t<legend>\r\n\t\t\t\t\t\t<Translate id=\"drc_kindle_profile\" />\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t<a onClick={() => this.goToKindleInfoStep()}>\r\n\t\t\t\t\t\t\t<Translate id=\"change\" />\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</legend>\r\n\t\t\t\t\t<p>\r\n\t\t\t\t\t\t<strong>\r\n\t\t\t\t\t\t\t<Translate id=\"send_to\" />\r\n\t\t\t\t\t\t\t: \r\n\t\t\t\t\t\t</strong>\r\n\t\t\t\t\t\t<span>{kindleEmail}</span>\r\n\t\t\t\t\t</p>\r\n\t\t\t\t\t<p>\r\n\t\t\t\t\t\t<strong>\r\n\t\t\t\t\t\t\t<Translate id=\"drc_method\" />\r\n\t\t\t\t\t\t\t: \r\n\t\t\t\t\t\t</strong>\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t{this.renderKindleDownloadMethod(\r\n\t\t\t\t\t\t\t\tselectedKindleDownloadMethod,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</p>\r\n\t\t\t\t</fieldset>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderOpenDrmStandardOverviewStep = () => (\r\n\t\t<div>\r\n\t\t\t<p>{this.renderSelectedFormat()}</p>\r\n\t\t\t<p>\r\n\t\t\t\t<Translate id=\"drc_open_drm_message\" />\r\n\t\t\t</p>\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderExpirationDate = () => {\r\n\t\tconst { selectedFormat } = this.state;\r\n\t\tconst { drcExpirationDate, drcExpirationDays } = this.getFormatInfo(\r\n\t\t\tselectedFormat,\r\n\t\t);\r\n\r\n\t\tif (drcExpirationDate && drcExpirationDate > 0) {\r\n\t\t\treturn (\r\n\t\t\t\t<Translate>\r\n\t\t\t\t\t{translate => (\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t{translate('drc_will_expire_on').replace(\r\n\t\t\t\t\t\t\t\t'{0}',\r\n\t\t\t\t\t\t\t\tdrcExpirationDate,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Translate>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (drcExpirationDays && drcExpirationDays > 0) {\r\n\t\t\treturn (\r\n\t\t\t\t<Translate>\r\n\t\t\t\t\t{translate => (\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t{translate('drc_will_expire_in').replace(\r\n\t\t\t\t\t\t\t\t'{0}',\r\n\t\t\t\t\t\t\t\tdrcExpirationDays,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Translate>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n\r\n\trenderAdobeDrmStandardOverviewStep = () => {\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<p>{this.renderSelectedFormat()}</p>\r\n\t\t\t\t<p>\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<Translate id=\"drc_standard_message\" />\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span> </span>\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"http://www.adobe.com/products/digitaleditions/\"\r\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\r\n\t\t\t\t\t\t\ttarget=\"_blank\">\r\n\t\t\t\t\t\t\t<Translate id=\"drc_adobe_digital_editions\" />\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span>. </span>\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<Translate id=\"drc_standard_message_parttwo\" />\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</p>\r\n\t\t\t\t<p>{this.renderExpirationDate()}</p>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderStandardOverviewStep = () => {\r\n\t\tconst { selectedFormat } = this.state;\r\n\r\n\t\tif (this.isOpenDrmMethod(selectedFormat)) {\r\n\t\t\treturn this.renderOpenDrmStandardOverviewStep();\r\n\t\t}\r\n\r\n\t\treturn this.renderAdobeDrmStandardOverviewStep();\r\n\t};\r\n\r\n\trenderAudioOverview = () => (\r\n\t\t<div>\r\n\t\t\t<p>{this.renderSelectedFormat()}</p>\r\n\t\t\t<p>\r\n\t\t\t\t<Translate id=\"drc_audio_message\" />\r\n\t\t\t</p>\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderAudioChapterDownloadOption = (chapter, url, fileSize) => (\r\n\t\t<div>\r\n\t\t\t<a href={url}>{chapter}</a>\r\n\t\t\t<span>({fileSize})</span>\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderAudioChaptersDownloadOptions = (\r\n\t\taudioChapterUrlByChapter,\r\n\t\taudioChapterFileSizeByChapter,\r\n\t) => (\r\n\t\t<div>\r\n\t\t\t{Object.keys(audioChapterUrlByChapter).map(chapter =>\r\n\t\t\t\tthis.renderAudioChapterDownloadOption(\r\n\t\t\t\t\tchapter,\r\n\t\t\t\t\taudioChapterUrlByChapter[chapter],\r\n\t\t\t\t\taudioChapterFileSizeByChapter[chapter],\r\n\t\t\t\t),\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderAudioZipDownloadOption = (audioZipUrl, audioZipFileSize) => (\r\n\t\t<div>\r\n\t\t\t<span>\r\n\t\t\t\t<a target=\"_blank\" href={audioZipUrl} rel=\"noopener noreferrer\">\r\n\t\t\t\t\t<Translate id=\"download\" />\r\n\t\t\t\t</a>\r\n\t\t\t</span>\r\n\t\t\t{audioZipFileSize && (\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<i>({audioZipFileSize})</i>\r\n\t\t\t\t</span>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderAudioDownload = () => {\r\n\t\tconst formats = this.getAvailableFormats();\r\n\t\tconst zipFormatInfo = formats[0]; //this.getAudioZipFormatInfo();\r\n\t\tconst chaptersFormatInfo = formats[0]; //this.getAudioChaptersFormatInfo();\r\n\r\n\t\tconst { audioZipUrl, audioZipFileSize } = zipFormatInfo;\r\n\t\tconst {\r\n\t\t\taudioChapterUrlByChapter,\r\n\t\t\taudioChapterFileSizeByChapter,\r\n\t\t} = chaptersFormatInfo;\r\n\r\n\t\tif (\r\n\t\t\taudioChapterUrlByChapter &&\r\n\t\t\tObject.keys(audioChapterUrlByChapter).length > 0\r\n\t\t) {\r\n\t\t\treturn (\r\n\t\t\t\t<div>\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t<b>\r\n\t\t\t\t\t\t\t\t<Translate id=\"download_option\" />\r\n\t\t\t\t\t\t\t\t 1) \r\n\t\t\t\t\t\t\t</b>\r\n\t\t\t\t\t\t\t<Translate id=\"individual_chapters\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t{this.renderAudioChaptersDownloadOptions(\r\n\t\t\t\t\t\t\taudioChapterUrlByChapter,\r\n\t\t\t\t\t\t\taudioChapterFileSizeByChapter,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<b>\r\n\t\t\t\t\t\t\t<Translate id=\"download_option\" />\r\n\t\t\t\t\t\t\t 2) \r\n\t\t\t\t\t\t</b>\r\n\t\t\t\t\t\t<Translate id=\"compressed_zip_file_with_all_chapter_mp3_files\" />\r\n\t\t\t\t\t\t{this.renderAudioZipDownloadOption(\r\n\t\t\t\t\t\t\taudioZipUrl,\r\n\t\t\t\t\t\t\taudioZipFileSize,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<Translate id=\"compressed_zip_file_with_all_chapter_mp3_files\" />\r\n\t\t\t\t{this.renderAudioZipDownloadOption(\r\n\t\t\t\t\taudioZipUrl,\r\n\t\t\t\t\taudioZipFileSize,\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderExternalUrlStep = () => {\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<Translate id=\"drc_external_url_message\" />\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderModalContents = () => {\r\n\t\tconst { currentStep } = this.state;\r\n\r\n\t\tswitch (currentStep) {\r\n\t\t\tcase this.steps.selectFormat:\r\n\t\t\t\treturn this.renderSelectFormatStep();\r\n\t\t\tcase this.steps.kindleInfo:\r\n\t\t\t\treturn this.renderKindleInfoStep();\r\n\t\t\tcase this.steps.kindleOverview:\r\n\t\t\t\treturn this.renderKindleOverviewStep();\r\n\t\t\tcase this.steps.standardOverview:\r\n\t\t\t\treturn this.renderStandardOverviewStep();\r\n\t\t\tcase this.steps.audioOverview:\r\n\t\t\t\treturn this.renderAudioOverview();\r\n\t\t\tcase this.steps.audioDownload:\r\n\t\t\t\treturn this.renderAudioDownload();\r\n\t\t\tcase this.steps.externalUrlOverview:\r\n\t\t\t\treturn this.renderExternalUrlStep();\r\n\t\t}\r\n\t};\r\n\r\n\tgetKindleDownloadMethod = () =>\r\n\t\tthis.props.userPreferences.getReviewCopyDownloadPreferences()\r\n\t\t\t.kindleDownloadMethod;\r\n}\r\n\r\nconst connectors = [\r\n\tconnectToUser,\r\n\tconnectToUserPreferences,\r\n\tconnectToDownloads,\r\n\tconnectToAccountOrMembershipRequiredModalContext,\r\n];\r\n\r\nexport default combineConnectors(connectors)(\r\n\twithIsMobile(ReviewCopyDownloadModalAnchor),\r\n);\r\n","export default function doOpenReviewCopyAction() {\r\n\tconst url = new URL(window.location.href);\r\n\treturn (\r\n\t\t!window.location.hash &&\r\n\t\turl.searchParams.get('doOpenReviewCopyAction') === 'true'\r\n\t);\r\n}\r\n\r\nexport function deactivateAutoOpenReviewCopyAction() {\r\n\twindow.location.hash = 'actionComplete';\r\n}\r\n","import moment from 'moment-timezone';\r\n\r\nexport const isDateInPast = date => {\r\n\tconst dateNow = new Date();\r\n\tconst dateToCheck = new Date(date);\r\n\treturn dateNow >= dateToCheck;\r\n};\r\n\r\nexport const isEventInProgress = (startTime, endTime) => {\r\n\tconst currentTime = new Date();\r\n\treturn (\r\n\t\tnew Date(startTime) <= currentTime && currentTime <= new Date(endTime)\r\n\t);\r\n};\r\n\r\nexport const isDayBeforeEvent = startTime => {\r\n\tconst eventDay = new Date(startTime);\r\n\tlet dayBeforeEvent = new Date(eventDay);\r\n\tdayBeforeEvent.setDate(eventDay.getDate() - 1);\r\n\treturn isDateToday(dayBeforeEvent);\r\n};\r\n\r\nexport const isDayOfEvent = startTime => {\r\n\tconst eventDate = new Date(startTime);\r\n\treturn isDateToday(eventDate);\r\n};\r\n\r\nexport const isDateToday = dateObjectToCompare => {\r\n\tconst today = new Date();\r\n\treturn (\r\n\t\ttoday.getDate() === dateObjectToCompare.getDate() &&\r\n\t\ttoday.getMonth() === dateObjectToCompare.getMonth() &&\r\n\t\ttoday.getFullYear() === dateObjectToCompare.getFullYear()\r\n\t);\r\n};\r\n\r\nexport const convertTimeToUtc = (time, date, timeZone) => {\r\n\tconst timeToFormat = new Date(time);\r\n\tconst dateToFormat = new Date(date);\r\n\tconst year = dateToFormat.getFullYear();\r\n\tconst month = dateToFormat.getMonth() + 1;\r\n\tconst day = dateToFormat.getDate();\r\n\tconst hours = timeToFormat.getHours();\r\n\tconst minutes = timeToFormat.getMinutes();\r\n\tconst dateInTimezoneSpecified = `${year}-${month}-${day} ${hours}:${minutes}`;\r\n\tconst format = 'YYYY-MM-DD h:mm';\r\n\tconst dateObjToConvert = moment.tz(\r\n\t\tdateInTimezoneSpecified,\r\n\t\tformat,\r\n\t\ttimeZone,\r\n\t);\r\n\tconst utc = dateObjToConvert.utc().format();\r\n\treturn utc;\r\n};\r\n\r\nexport const transformFileToBase64 = file =>\r\n\tnew Promise((resolve, reject) => {\r\n\t\tconst reader = new FileReader();\r\n\t\treader.readAsDataURL(file);\r\n\t\treader.onload = () => resolve(reader.result.split(',', 2)[1]);\r\n\t\treader.onerror = error => reject(error);\r\n\t});\r\n\r\nexport const getEventOrgImageUrl = event => {\r\n\tif (event) {\r\n\t\treturn event.images?.orgImageUri || event.eventsOrganization?.imageUri;\r\n\t}\r\n\treturn null;\r\n};\r\n","import React from 'react';\r\nimport eventsApi from '../../../apiFetcher/eventsApiFetcher';\r\nimport { isDateInPast } from '../util';\r\nimport { initialState as eventInitialState } from './EventDataStoreContext/EventDataStoreContext';\r\nimport {\r\n\tEvent,\r\n\tEventRequest,\r\n\tEventRequestRef,\r\n} from './EventDataStoreContext/types';\r\nimport { MyEventsFilteringEnum } from '../enums/MyEventsFilteringEnum';\r\nimport { useUser } from '../../User/containers/UserDataStore';\r\nimport { useAccountOrMembershipRequiredModalContext } from '../../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\n\r\nconst initialStoreValue = {\r\n\tisLoading: false,\r\n\tupcomingEvents: [],\r\n\tpastEvents: [],\r\n\trefresh: () => {},\r\n\trefreshWithoutLoadingState: () => {},\r\n\tfilterEventsByCommunityIds: ([], []) => [],\r\n\tbuildEvent: () => eventInitialState,\r\n\tgetMyEvents: () => [],\r\n\tsortEventsInAscendingOrderByStartTime: ([]) => [],\r\n};\r\n\r\ninterface IStoreValue {\r\n\tisLoading: boolean;\r\n\tupcomingEvents: Event[];\r\n\tpastEvents: Event[];\r\n\trefresh: () => void;\r\n\trefreshWithoutLoadingState: () => void;\r\n\tfilterEventsByCommunityIds: (\r\n\t\tevents: Event[],\r\n\t\tcommunityIds: number[],\r\n\t) => Event[];\r\n\tbuildEvent: (event: Event) => Event;\r\n\tgetMyEvents: (filterType: MyEventsFilteringEnum) => Event[];\r\n\tsortEventsInAscendingOrderByStartTime: (eventsToSort: Event[]) => Event[];\r\n}\r\n\r\nconst EventsContext = React.createContext<IStoreValue>(initialStoreValue);\r\n\r\nexport const useEventsDataStore = () => React.useContext(EventsContext);\r\n\r\nconst eventsRequestInitialValue: EventRequestRef = {\r\n\tcancel: () => {},\r\n\tpromise: new Promise<Event[]>(resolve => {\r\n\t\tresolve([]);\r\n\t}),\r\n};\r\n\r\nexport const EventsDataStoreProvider = ({ children }) => {\r\n\tconst [isLoading, setIsLoading] = React.useState(false);\r\n\r\n\tconst { isAnonymous } = useUser();\r\n\tconst { isNonMember } = useAccountOrMembershipRequiredModalContext();\r\n\r\n\tconst showAnonOrNonmemberView = isAnonymous() || isNonMember();\r\n\r\n\tconst [\r\n\t\teventsWithJoinedCommunities,\r\n\t\tsetEventsWithJoinedCommunities,\r\n\t] = React.useState<Event[]>([]);\r\n\tconst [\r\n\t\teventsWithGenreCommunities,\r\n\t\tsetEventsWithGenreCommunities,\r\n\t] = React.useState<Event[]>([]);\r\n\tconst [ownedEvents, setOwnedEvents] = React.useState<Event[]>([]);\r\n\r\n\tconst events = showAnonOrNonmemberView\r\n\t\t? eventsWithGenreCommunities\r\n\t\t: eventsWithJoinedCommunities;\r\n\tconst upcomingEvents: Event[] = events.filter(\r\n\t\t(e: Event) => !isDateInPast(e.time.endTime),\r\n\t);\r\n\tconst pastEvents: Event[] = events\r\n\t\t.filter((e: Event) => isDateInPast(e.time.endTime))\r\n\t\t.reverse();\r\n\r\n\tconst eventsWithJoinedCommunitiesRequest: EventRequest = {\r\n\t\tref: React.useRef(eventsRequestInitialValue),\r\n\t\troute: '/api/events/communities/joined',\r\n\t\tsetEvents: setEventsWithJoinedCommunities,\r\n\t};\r\n\r\n\tconst eventsWithGenreCommunitiesRequest: EventRequest = {\r\n\t\tref: React.useRef(eventsRequestInitialValue),\r\n\t\troute: '/api/events/communities/genre',\r\n\t\tsetEvents: setEventsWithGenreCommunities,\r\n\t};\r\n\r\n\tconst ownedEventsRequest: EventRequest = {\r\n\t\tref: React.useRef(eventsRequestInitialValue),\r\n\t\troute: '/api/events/owned',\r\n\t\tsetEvents: setOwnedEvents,\r\n\t};\r\n\r\n\tconst anonymousRequests: EventRequest[] = [\r\n\t\teventsWithGenreCommunitiesRequest,\r\n\t];\r\n\tconst authenticatedRequests: EventRequest[] = [\r\n\t\teventsWithJoinedCommunitiesRequest,\r\n\t\townedEventsRequest,\r\n\t];\r\n\tconst requestsToMake: EventRequest[] = showAnonOrNonmemberView\r\n\t\t? anonymousRequests\r\n\t\t: authenticatedRequests;\r\n\r\n\tReact.useEffect(() => {\r\n\t\tfetchEvents();\r\n\r\n\t\treturn () => {\r\n\t\t\trequestsToMake.forEach((request: EventRequest) => {\r\n\t\t\t\trequest.ref.current.cancel();\r\n\t\t\t});\r\n\t\t};\r\n\t}, [showAnonOrNonmemberView]);\r\n\r\n\tconst fetchEvents = async (withLoadingState = true) => {\r\n\t\twithLoadingState && setIsLoading(true);\r\n\t\ttry {\r\n\t\t\trequestsToMake.forEach((request: EventRequest) => {\r\n\t\t\t\trequest.ref.current = eventsApi.cancelableGet(request.route);\r\n\t\t\t});\r\n\r\n\t\t\tconst responses: PromiseSettledResult<\r\n\t\t\t\tEvent[]\r\n\t\t\t>[] = await Promise.allSettled(\r\n\t\t\t\trequestsToMake.map(request => request.ref.current.promise),\r\n\t\t\t);\r\n\r\n\t\t\trequestsToMake.forEach((request: EventRequest, index: number) => {\r\n\t\t\t\thandleEventsResponse(responses[index], request.setEvents);\r\n\t\t\t});\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error(e);\r\n\t\t} finally {\r\n\t\t\twithLoadingState && setIsLoading(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleEventsResponse = (\r\n\t\tresponse: PromiseSettledResult<Event[]>,\r\n\t\tsetEvents: React.Dispatch<React.SetStateAction<Event[]>>,\r\n\t) => {\r\n\t\tif (response.status === 'fulfilled') {\r\n\t\t\tconst fulfilledResponse: PromiseFulfilledResult<Event[]> = response;\r\n\t\t\tconst events: Event[] = fulfilledResponse.value || [];\r\n\t\t\tconst formattedAndSortedEvents = formatAndSortEvents(events);\r\n\t\t\tsetEvents(formattedAndSortedEvents);\r\n\t\t} else {\r\n\t\t\tconsole.error(response.reason);\r\n\t\t}\r\n\t};\r\n\r\n\tconst buildEvent = (event: Event) => ({\r\n\t\t...event,\r\n\t\tvenue: event.venue || {},\r\n\t\tlinks: event.links || {},\r\n\t\ttime: event.time || {},\r\n\t\torganization: event.organization || {},\r\n\t\timages: event.images || {},\r\n\t});\r\n\r\n\tconst formatAndSortEvents = (eventsToSave: Event[]) => {\r\n\t\tconst formattedEvents = eventsToSave.map(buildEvent);\r\n\t\tconst formattedAndSortedEvents: Event[] = sortEventsInAscendingOrderByStartTime(\r\n\t\t\tformattedEvents,\r\n\t\t);\r\n\t\treturn formattedAndSortedEvents;\r\n\t};\r\n\r\n\tconst sortEventsInAscendingOrderByStartTime = (\r\n\t\teventsToSort: Event[],\r\n\t): Event[] =>\r\n\t\tArray.isArray(eventsToSort)\r\n\t\t\t? eventsToSort.sort(\r\n\t\t\t\t\t(a: Event, b: Event) =>\r\n\t\t\t\t\t\t+new Date(a.time.startTime) -\r\n\t\t\t\t\t\t+new Date(b.time.startTime),\r\n\t\t\t )\r\n\t\t\t: [];\r\n\r\n\tconst filterEventsByCommunityIds = (\r\n\t\tevents: Event[],\r\n\t\tcommunityIds: number[],\r\n\t) => {\r\n\t\treturn events.filter((event: Event) =>\r\n\t\t\tevent.communities.some(comm =>\r\n\t\t\t\tcommunityIds.includes(Number(comm.communityId)),\r\n\t\t\t),\r\n\t\t);\r\n\t};\r\n\r\n\tconst getMyEvents = (filterType: MyEventsFilteringEnum) => {\r\n\t\tswitch (filterType) {\r\n\t\t\tcase MyEventsFilteringEnum.Upcoming:\r\n\t\t\t\treturn ownedEvents.filter(e => !isDateInPast(e.time.endTime));\r\n\t\t\tcase MyEventsFilteringEnum.Past:\r\n\t\t\t\treturn ownedEvents\r\n\t\t\t\t\t.filter(e => isDateInPast(e.time.endTime))\r\n\t\t\t\t\t.reverse();\r\n\t\t\tdefault:\r\n\t\t\t\treturn ownedEvents;\r\n\t\t}\r\n\t};\r\n\r\n\tconst getStore = () => ({\r\n\t\tisLoading,\r\n\t\tupcomingEvents,\r\n\t\tpastEvents,\r\n\t\trefresh: () => fetchEvents(),\r\n\t\trefreshWithoutLoadingState: () => fetchEvents(false),\r\n\t\tfilterEventsByCommunityIds,\r\n\t\tbuildEvent,\r\n\t\tgetMyEvents,\r\n\t\tsortEventsInAscendingOrderByStartTime,\r\n\t});\r\n\r\n\treturn (\r\n\t\t<EventsContext.Provider value={getStore()}>\r\n\t\t\t{typeof children === 'function' ? children(getStore()) : children}\r\n\t\t</EventsContext.Provider>\r\n\t);\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport * as Util from '../../../util';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\n\r\nconst CommunityReviewsContext = React.createContext();\r\n\r\nexport const useCommunityReviews = () =>\r\n\tReact.useContext(CommunityReviewsContext);\r\n\r\nconst name = 'communityReviewsDataStore';\r\n\r\nexport const connectToCommunityReviews = makeConnectTo(\r\n\tCommunityReviewsContext,\r\n\tname,\r\n);\r\n\r\nclass CommunityReviewsDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t\tuserDataStore: PropTypes.object,\r\n\t};\r\n\r\n\tstate = {\r\n\t\ttitles: [],\r\n\t\tisLoading: true,\r\n\t\tskus: {},\r\n\t\tconversations: {},\r\n\t\tareConversationsLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst communityReviewsDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<CommunityReviewsContext.Provider value={communityReviewsDataStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(communityReviewsDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</CommunityReviewsContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchCommunityReviews();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.communityReviewsFetch && this.communityReviewsFetch.cancel) {\r\n\t\t\tthis.communityReviewsFetch.cancel();\r\n\t\t}\r\n\t\tif (this.conversationsFetch && this.conversationsFetch.cancel) {\r\n\t\t\tthis.conversationsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshCommunityReviews(),\r\n\t\tfetchConversationStatus: () => this.fetchConversationStatus(),\r\n\t});\r\n\r\n\trefreshCommunityReviews = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchCommunityReviews();\r\n\t\treturn this.communityReviewsFetch.promise;\r\n\t};\r\n\r\n\tfetchCommunityReviews = () => {\r\n\t\tconst {\r\n\t\t\tcommunityId,\r\n\t\t\tmaxTitles,\r\n\t\t\tuserDataStore: { isAnonymous },\r\n\t\t} = this.props;\r\n\t\tconst communityIdentifier =\r\n\t\t\tisAnonymous() && communityId === 0 ? 'genres' : communityId;\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/affiliations/${communityIdentifier}/buzz?maxTitles=${maxTitles}`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.communityReviewsFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst {\r\n\t\t\tuserDataStore: { isAnonymous },\r\n\t\t} = this.props;\r\n\t\tconst titles = apiResponse ? Util.createTitleObject(apiResponse) : [];\r\n\t\tthis.setState({ titles, isLoading: false, skus: this.getSkus(titles) });\r\n\t\t!isAnonymous() && this.fetchConversationStatus();\r\n\t};\r\n\r\n\tgetSkus = titles => {\r\n\t\treturn titles && titles.map(item => item.sku);\r\n\t};\r\n\r\n\tfetchConversationStatus = () => {\r\n\t\tconst { communityId } = this.props;\r\n\t\tconst { skus } = this.state;\r\n\r\n\t\tconst request = api.cancelablePost(\r\n\t\t\t`/api/v1/conversations/${communityId}/titles`,\r\n\t\t\tskus,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheConversationApiResponse);\r\n\t\tthis.conversationsFetch = request;\r\n\t};\r\n\r\n\tcacheConversationApiResponse = apiResponse => {\r\n\t\tthis.setState({\r\n\t\t\tconversations: apiResponse,\r\n\t\t\tareConversationsLoading: false,\r\n\t\t});\r\n\t};\r\n}\r\n\r\nexport default connectToUser(CommunityReviewsDataStore);\r\n","import { ApiFetcher } from 'api-fetcher-treeline/dist';\r\n\r\nconst eventsApi = new ApiFetcher(`${process.env.REACT_APP_EVENTS_API_URL}`);\r\n\r\nexport default eventsApi;\r\n","const ScrollerType = {\r\n\tsimpleBar: 'simpleBar',\r\n\tcarousel: 'carousel',\r\n};\r\n\r\nexport default ScrollerType;","import React from 'react';\r\nimport api from '../../../../Api';\r\n\r\nexport const Action = {\r\n\tSET_EDITOR_VALUE: 'SET_EDITOR_VALUE',\r\n\tRESET_EDITOR_VALUE: 'RESET_EDITOR_VALUE',\r\n\tCLEAR_CURRENT_REVIEW: 'CLEAR_CURRENT_REVIEW',\r\n\tSET_HAS_EXISTING_REVIEW: 'SET_HAS_EXISTING_REVIEW',\r\n};\r\n\r\nexport default function useReviewEditor(sku) {\r\n\tconst [isLoading, setIsLoading] = React.useState(true);\r\n\tconst [hasExistingReview, setHasExistingReview] = React.useState(false);\r\n\r\n\tconst initialEmptyReviewState = {\r\n\t\tabstract: '',\r\n\t\tappUserId: 0,\r\n\t\tassessmentId: 0,\r\n\t\toverallAssessment: 0,\r\n\t\ttext: '',\r\n\t\ttitleName: '',\r\n\t};\r\n\r\n\tconst [review, setReview] = React.useState(initialEmptyReviewState);\r\n\r\n\tconst [editor, setEditor] = React.useState({\r\n\t\tvalue: '',\r\n\t});\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlet request;\r\n\r\n\t\tconst fetchReview = async () => {\r\n\t\t\trequest = api.cancelableGet(`/api/me/reviews/${sku}/review`);\r\n\t\t\tconst currentReview = await request.promise;\r\n\r\n\t\t\tif (currentReview) {\r\n\t\t\t\tconst { text } = currentReview;\r\n\r\n\t\t\t\tsetReview(currentReview);\r\n\r\n\t\t\t\tsetEditor(current => ({\r\n\t\t\t\t\t...current,\r\n\t\t\t\t\tvalue: text ? text : '',\r\n\t\t\t\t}));\r\n\r\n\t\t\t\tsetHasExistingReview(true);\r\n\t\t\t}\r\n\r\n\t\t\tsetIsLoading(false);\r\n\t\t};\r\n\r\n\t\tfetchReview();\r\n\r\n\t\treturn () => {\r\n\t\t\tapi.revoke(request);\r\n\t\t};\r\n\t}, [sku]);\r\n\r\n\tconst reduceState = action => {\r\n\t\tswitch (action.type) {\r\n\t\t\tcase Action.SET_EDITOR_VALUE:\r\n\t\t\t\tsetEditor(current => ({ ...current, value: action.payload }));\r\n\t\t\t\tbreak;\r\n\t\t\tcase Action.RESET_EDITOR_VALUE:\r\n\t\t\t\tsetEditor(current => ({ ...current, value: review.text }));\r\n\t\t\t\tbreak;\r\n\t\t\tcase Action.CLEAR_CURRENT_REVIEW:\r\n\t\t\t\tsetEditor({ value: '' });\r\n\t\t\t\tsetReview(initialEmptyReviewState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Action.SET_HAS_EXISTING_REVIEW:\r\n\t\t\t\tsetHasExistingReview(action.payload);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Action.default:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\treturn {\r\n\t\tcurrentReview: review,\r\n\t\tisLoading: () => isLoading,\r\n\t\tgetEditorValue: () => editor.value,\r\n\t\tgetSavedValue: () => (review.text ? review.text : ''),\r\n\t\tupdate: action => reduceState(action),\r\n\t\tdoesReviewExist: () => hasExistingReview,\r\n\t\thasExistingAssessment: () => review.assessmentId > 0,\r\n\t\tdidEdit: () => review.text && review.text !== editor.value,\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useCommunities } from '../Communities/containers/communitiesDataStore';\r\nimport LoadingSpinnerInContainer from '../UI/LoadingSpinnerInContainer';\r\nimport './communityImage.less';\r\n\r\nCommunityImage.propTypes = {\r\n\tcommunityId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n\tdimensions: PropTypes.number,\r\n\tisLoading: PropTypes.bool,\r\n};\r\n\r\nCommunityImage.defaultProps = {\r\n\tdimensions: 50,\r\n};\r\n\r\nexport default function CommunityImage({ communityId, dimensions, isLoading }) {\r\n\tconst communitiesDataStore = useCommunities();\r\n\tconst { communities, circles } = communitiesDataStore.state;\r\n\r\n\tconst community = communitiesDataStore.getCommunityById(communityId);\r\n\r\n\tconst logoUri = community && community.logoUri;\r\n\r\n\tconst renderLogo = (logoUri, renderDimensions) => {\r\n\t\tconst noImageFontSize = renderDimensions * 0.84 + 'px';\r\n\t\trenderDimensions = renderDimensions + 'px';\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t{logoUri ? (\r\n\t\t\t\t\t<img\r\n\t\t\t\t\t\talt={community.name}\r\n\t\t\t\t\t\tclassName=\"community-logo\"\r\n\t\t\t\t\t\tsrc={logoUri}\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\theight: `${renderDimensions}`,\r\n\t\t\t\t\t\t\twidth: `${renderDimensions}`,\r\n\t\t\t\t\t\t\tobjectFit: 'contain',\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\taria-label=\"Community icon\"\r\n\t\t\t\t\t\tclassName=\"icon-community affil-no-logo\"\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\theight: `${renderDimensions}`,\r\n\t\t\t\t\t\t\twidth: `${renderDimensions}`,\r\n\t\t\t\t\t\t\tfontSize: `${noImageFontSize}`,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderParentLogo = () => {\r\n\t\treturn circles &&\r\n\t\t\tcircles.length > 0 &&\r\n\t\t\tcircles.filter(c => c.childGroupId === communityId).length > 0 ? (\r\n\t\t\t<div className=\"parent-logo\">\r\n\t\t\t\t{renderLogo(\r\n\t\t\t\t\tcommunities.find(\r\n\t\t\t\t\t\tc =>\r\n\t\t\t\t\t\t\tc.id ===\r\n\t\t\t\t\t\t\tcircles.filter(\r\n\t\t\t\t\t\t\t\tc => c.childGroupId === communityId,\r\n\t\t\t\t\t\t\t)[0].parentGroupId,\r\n\t\t\t\t\t).logoUri,\r\n\t\t\t\t\tdimensions * 0.45,\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t) : (\r\n\t\t\t<React.Fragment></React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName=\"community-image-container\"\r\n\t\t\tstyle={{\r\n\t\t\t\twidth: dimensions,\r\n\t\t\t}}>\r\n\t\t\t{!isLoading ? (\r\n\t\t\t\trenderLogo(logoUri, dimensions)\r\n\t\t\t) : (\r\n\t\t\t\t<LoadingSpinnerInContainer height={dimensions} />\r\n\t\t\t)}\r\n\t\t\t{renderParentLogo()}\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React, { useContext } from 'react';\r\nimport api from '../../../Api';\r\nimport { groupBy } from '../../../util';\r\nimport PropTypes from 'prop-types';\r\nimport { useCommunities } from '../../Communities/containers/communitiesDataStore';\r\nimport {\r\n\tgetFilterRefinementDefinitionToSave,\r\n\taddSavedFiltersToState,\r\n} from '../util';\r\nimport { useUser } from '../../User/containers/UserDataStore';\r\n\r\nconst SavedCommunityFiltersContext = React.createContext();\r\n\r\nSavedCommunityFiltersDataStore.propTypes = {\r\n\tchildren: PropTypes.oneOfType([\r\n\t\tPropTypes.arrayOf(PropTypes.node),\r\n\t\tPropTypes.node,\r\n\t]),\r\n\tcommunityId: PropTypes.number,\r\n\tisOnDrawer: PropTypes.bool,\r\n};\r\n\r\nexport default function SavedCommunityFiltersDataStore({\r\n\tchildren,\r\n\tisOnDrawer,\r\n\tcommunityId,\r\n}) {\r\n\tconst [savedCommunityFilters, setSavedCommunityFilters] = React.useState(\r\n\t\t[],\r\n\t);\r\n\tconst [community, setCommunity] = React.useState({});\r\n\tconst [isLoading, setIsLoading] = React.useState(true);\r\n\tconst doesHaveEdits = React.useRef();\r\n\tconst isMounted = React.useRef();\r\n\tconst request = React.useRef();\r\n\tconst communitiesDataStore = useCommunities();\r\n\tconst { isAnonymous } = useUser();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tfetchSavedCommunityFilters();\r\n\t\tisMounted.current = true;\r\n\r\n\t\treturn () => {\r\n\t\t\tapi.revoke(request.current);\r\n\t\t\tisMounted.current = false;\r\n\t\t\tdoesHaveEdits.current &&\r\n\t\t\t\tisOnDrawer &&\r\n\t\t\t\tcommunitiesDataStore.refreshWithLoadingState();\r\n\t\t};\r\n\t}, []);\r\n\r\n\tconst saveSavedCommunityFilters = async filters => {\r\n\t\tconst grouped = groupBy(filters, 'viewId');\r\n\t\tconst communityDetails = await fetchCommunityDetails();\r\n\t\tif (communityDetails) {\r\n\t\t\tsetCommunity(communityDetails);\r\n\t\t\tconst communityViewId = communityDetails.viewId;\r\n\t\t\tcommunityViewId\r\n\t\t\t\t? setSavedCommunityFilters(\r\n\t\t\t\t\t\tgrouped[communityViewId.toString()] || [],\r\n\t\t\t\t )\r\n\t\t\t\t: setSavedCommunityFilters([]);\r\n\t\t}\r\n\t\tsetIsLoading(false);\r\n\t};\r\n\r\n\tconst fetchCommunityDetails = async () => {\r\n\t\ttry {\r\n\t\t\tconst communityRequest = api.get(\r\n\t\t\t\t`/api/v1/affiliations/${communityId}/summary`,\r\n\t\t\t);\r\n\t\t\tconst { affiliations: community } = await communityRequest;\r\n\t\t\treturn community[0];\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error(e);\r\n\t\t}\r\n\t};\r\n\r\n\tconst fetchSavedCommunityFilters = async () => {\r\n\t\tif (!isAnonymous()) {\r\n\t\t\ttry {\r\n\t\t\t\trequest.current = api.cancelableGet('/api/v1/affiliations/me');\r\n\t\t\t\tconst data = await request.current.promise;\r\n\t\t\t\tconst { browseRefinements } = data;\r\n\t\t\t\tisMounted.current &&\r\n\t\t\t\t\tsaveSavedCommunityFilters(browseRefinements);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.error(e);\r\n\t\t\t\tisMounted.current && setIsLoading(false);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tsetIsLoading(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst refreshFilters = () => {\r\n\t\tisMounted.current && setIsLoading(true);\r\n\t\tfetchSavedCommunityFilters();\r\n\t};\r\n\r\n\tconst saveFilters = (activeCategories, browseLaneType) => {\r\n\t\tdoesHaveEdits.current = true;\r\n\t\tvar thisSavedFilter = savedCommunityFilters.filter(\r\n\t\t\tsf => sf.viewId == community.viewId,\r\n\t\t);\r\n\t\tthisSavedFilter = thisSavedFilter.filter(\r\n\t\t\ttsf => tsf.browseLaneType !== browseLaneType.key,\r\n\t\t);\r\n\t\taddSavedFiltersToState(\r\n\t\t\tthisSavedFilter,\r\n\t\t\tactiveCategories,\r\n\t\t\tbrowseLaneType,\r\n\t\t\tcommunity.viewId,\r\n\t\t);\r\n\t\tprocessBrowseRefinements(thisSavedFilter);\r\n\t};\r\n\r\n\tconst processBrowseRefinements = thisSavedFilter => {\r\n\t\tconst definition = getFilterRefinementDefinitionToSave(thisSavedFilter);\r\n\t\tconst groupBrowseViewDTO = {\r\n\t\t\tviewId: community.viewId,\r\n\t\t\tdefinition: JSON.stringify(definition),\r\n\t\t\tgroupId: communityId,\r\n\t\t};\r\n\t\tif (!community.viewId) {\r\n\t\t\tapi.post(\r\n\t\t\t\t`/api/v1/affiliations/${communityId}/filters`,\r\n\t\t\t\tgroupBrowseViewDTO,\r\n\t\t\t).then(() => refreshFilters());\r\n\t\t} else {\r\n\t\t\tapi.put(\r\n\t\t\t\t`/api/v1/affiliations/${communityId}/filters`,\r\n\t\t\t\tgroupBrowseViewDTO,\r\n\t\t\t).then(() => refreshFilters());\r\n\t\t}\r\n\t};\r\n\r\n\tconst getStore = () => ({\r\n\t\tsavedCommunityFilters,\r\n\t\tisLoading,\r\n\t\tcommunity,\r\n\t\tsaveFilters: (activeCategories, browseLaneType) =>\r\n\t\t\tsaveFilters(activeCategories, browseLaneType),\r\n\t\tprocessBrowseRefinements: (\r\n\t\t\tcommunityId,\r\n\t\t\tviewId,\r\n\t\t\tdefinition,\r\n\t\t\tfilterType,\r\n\t\t) =>\r\n\t\t\tprocessBrowseRefinements(\r\n\t\t\t\tcommunityId,\r\n\t\t\t\tviewId,\r\n\t\t\t\tdefinition,\r\n\t\t\t\tfilterType,\r\n\t\t\t),\r\n\t});\r\n\r\n\tconst savedCommunityFiltersData = getStore();\r\n\r\n\treturn (\r\n\t\t<SavedCommunityFiltersContext.Provider\r\n\t\t\tvalue={savedCommunityFiltersData}>\r\n\t\t\t{typeof children === 'function'\r\n\t\t\t\t? children(savedCommunityFiltersData)\r\n\t\t\t\t: children}\r\n\t\t</SavedCommunityFiltersContext.Provider>\r\n\t);\r\n}\r\n\r\nexport const useSavedCommunityFilters = () =>\r\n\tuseContext(SavedCommunityFiltersContext);\r\n","import React from 'react';\r\nimport parse from 'react-html-parser';\r\nimport DOMPurify from 'dompurify';\r\n\r\ntype ParseContentProps = { content?: string | null };\r\n\r\nconst ParseContent: React.FC<ParseContentProps> = ({ content }) => {\r\n\treturn <>{content && parse(DOMPurify.sanitize(content))}</>;\r\n};\r\n\r\nexport default ParseContent;\r\n","import React from 'react';\r\nimport './titleImage.css';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\n\r\nexport class TitleImage extends React.Component {\r\n\trender() {\r\n\t\tconst { title } = this.props;\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\tvar uri = title.uri\r\n\t\t\t? title.uri\r\n\t\t\t: title &&\r\n\t\t\t title.images &&\r\n\t\t\t title.images.filter(im => im.type === 'jacketCover').length > 0 &&\r\n\t\t\t title.images.filter(im => im.type === 'jacketCover')[0].uri +\r\n\t\t\t\t\t'?height=600';\r\n\t\tconst titleName = title.product ? title.product.name : 'Unknown Title';\r\n\t\treturn (\r\n\t\t\t<div className=\"relative\">\r\n\t\t\t\t{uri ? (\r\n\t\t\t\t\t<img\r\n\t\t\t\t\t\talt={titleName}\r\n\t\t\t\t\t\tsrc={uri}\r\n\t\t\t\t\t\tclassName={\r\n\t\t\t\t\t\t\t!isMobile ? 'jacket-height' : 'jacket-height-mobile'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t/>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName={\r\n\t\t\t\t\t\t\t!isMobile\r\n\t\t\t\t\t\t\t\t? 'no-jacket-scroller-outer'\r\n\t\t\t\t\t\t\t\t: 'no-jacket-scroller-outer-mobile'\r\n\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName={\r\n\t\t\t\t\t\t\t\t!isMobile\r\n\t\t\t\t\t\t\t\t\t? 'no-jacket-scroller-inner'\r\n\t\t\t\t\t\t\t\t\t: 'no-jacket-scroller-inner-mobile'\r\n\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t<span className=\"bold\">{titleName}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withIsMobile(TitleImage);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../../Api';\r\nimport makeConnectTo from '../../../util/makeConnectTo';\r\nimport { message } from 'antd';\r\nimport SubscriptionFrequencyOption from '../SubscriptionFrequencyOption';\r\n\r\nconst NoticesContext = React.createContext();\r\n\r\nconst name = 'noticesDataStore';\r\n\r\nexport const connectToNotices = makeConnectTo(NoticesContext, name);\r\n\r\nexport default class NoticesDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tnotices: [],\r\n\t\tsubscriptionFrequency: '',\r\n\t\tisLoading: true,\r\n\t\tisSubscriptionFrequencyLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst noticesDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<NoticesContext.Provider value={noticesDataStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(noticesDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</NoticesContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchNotices();\r\n\t\tthis.fetchSubscriptionPreference();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.noticesFetch && this.noticesFetch.cancel) {\r\n\t\t\tthis.noticesFetch.cancel();\r\n\t\t}\r\n\t\tif (\r\n\t\t\tthis.subscriptionPreferencesFetch &&\r\n\t\t\tthis.subscriptionPreferencesFetch.cancel\r\n\t\t) {\r\n\t\t\tthis.subscriptionPreferencesFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshNotices(),\r\n\t\tchangeStatus: (noticeId, status) => this.changeStatus(noticeId, status),\r\n\t\tchangeSubscriptionPreference: subscriptionFrequencyOption =>\r\n\t\t\tthis.changeSubscriptionPreference(subscriptionFrequencyOption),\r\n\t});\r\n\r\n\trefreshNotices = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchNotices();\r\n\t\treturn this.noticesFetch.promise;\r\n\t};\r\n\r\n\tfetchNotices = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/me/notifications`);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.noticesFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst notices = apiResponse && this.getNotices(apiResponse);\r\n\t\tthis.setState({\r\n\t\t\tnotices:\r\n\t\t\t\tnotices &&\r\n\t\t\t\tnotices.sort(\r\n\t\t\t\t\t(a, b) => new Date(b.updatedDate) - new Date(a.updatedDate),\r\n\t\t\t\t),\r\n\t\t\tisLoading: false,\r\n\t\t});\r\n\t};\r\n\r\n\tgetNotices = apiResponse => {\r\n\t\tconst {\r\n\t\t\tuserNotices,\r\n\t\t\tusersById,\r\n\t\t\tuserAvatarsByAppUserId,\r\n\t\t\torganizationsById,\r\n\t\t} = apiResponse;\r\n\t\treturn (\r\n\t\t\tuserNotices &&\r\n\t\t\tuserNotices.map(notice => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...notice,\r\n\t\t\t\t\tsource: this.getSourceInfo(\r\n\t\t\t\t\t\tnotice.sourceAppUserId,\r\n\t\t\t\t\t\tuserAvatarsByAppUserId[notice.sourceAppUserId],\r\n\t\t\t\t\t\tusersById[notice.sourceAppUserId] &&\r\n\t\t\t\t\t\t\tusersById[notice.sourceAppUserId].orgID &&\r\n\t\t\t\t\t\t\torganizationsById[\r\n\t\t\t\t\t\t\t\tusersById[\r\n\t\t\t\t\t\t\t\t\tnotice.sourceAppUserId\r\n\t\t\t\t\t\t\t\t].orgID.toLowerCase()\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t),\r\n\t\t\t\t};\r\n\t\t\t})\r\n\t\t);\r\n\t};\r\n\r\n\tgetSourceInfo = (appUserId, userAvatar, organization) => {\r\n\t\tvar source = {};\r\n\t\tif (organization) {\r\n\t\t\tsource.userAvatar = userAvatar && userAvatar;\r\n\t\t\tsource.organization = organization.name;\r\n\t\t\tsource.appUserId = appUserId;\r\n\t\t}\r\n\t\treturn source;\r\n\t};\r\n\r\n\tfetchSubscriptionPreference = () => {\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/subscriptions/homepageLane/310`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheSubscriptionApiResponse);\r\n\t\tthis.subscriptionPreferencesFetch = request;\r\n\t};\r\n\r\n\tcacheSubscriptionApiResponse = apiResponse => {\r\n\t\tthis.setState({\r\n\t\t\tsubscriptionFrequency: apiResponse.frequency,\r\n\t\t\tisSubscriptionFrequencyLoading: false,\r\n\t\t});\r\n\t};\r\n\r\n\tchangeStatus(noticeId, status) {\r\n\t\tapi.put(`/api/v1/me/notifications/${noticeId}/status/${status}`).then(\r\n\t\t\t() => {\r\n\t\t\t\tthis.fetchNotices();\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n\r\n\tchangeSubscriptionPreference = subscriptionFrequencyOption => {\r\n\t\tapi.post(\r\n\t\t\t`/api/v1/subscriptions/homepageLane/310/frequency/${subscriptionFrequencyOption}`,\r\n\t\t).then(() => {\r\n\t\t\tthis.fetchSubscriptionPreference();\r\n\t\t\tif (\r\n\t\t\t\tsubscriptionFrequencyOption ===\r\n\t\t\t\tSubscriptionFrequencyOption.never\r\n\t\t\t) {\r\n\t\t\t\tmessage.success(\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\tYou will no longer receive emailed summaries of\r\n\t\t\t\t\t\tEdelweiss notification\r\n\t\t\t\t\t</span>,\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tmessage.success(\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\tYou will receive a summary of Edelweiss notifications\r\n\t\t\t\t\t\t(if any) via email on a {subscriptionFrequencyOption}{' '}\r\n\t\t\t\t\t\tbasis\r\n\t\t\t\t\t</span>,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n}\r\n","import './titleJacketImage.less';\r\nimport { getTitleJacketUri } from './../util';\r\n\r\nfunction TitleJacketImage({ product, height, doNotPadRight }) {\r\n\tif (product) {\r\n\t\tconst uri = getTitleJacketUri(product);\r\n\t\tif (uri) {\r\n\t\t\treturn !height ? (\r\n\t\t\t\t<div style={{ position: 'relative' }}>\r\n\t\t\t\t\t<img\r\n\t\t\t\t\t\talt={product.name}\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\twidth: !doNotPadRight ? '90%' : '100%',\r\n\t\t\t\t\t\t\topacity: '0.2',\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\ttitle={product.name}\r\n\t\t\t\t\t\tsrc={uri}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<img\r\n\t\t\t\t\t\talt={product.name}\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\twidth: !doNotPadRight ? '74%' : '90%',\r\n\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\tleft: '5%',\r\n\t\t\t\t\t\t\ttop: '5%',\r\n\t\t\t\t\t\t\tboxShadow: '0 0 4px #6b6868',\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\ttitle={product.name}\r\n\t\t\t\t\t\tsrc={uri}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t) : (\r\n\t\t\t\t<div style={{ position: 'relative' }}>\r\n\t\t\t\t\t<img\r\n\t\t\t\t\t\talt={product.name}\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\theight: `${height}px`,\r\n\t\t\t\t\t\t\topacity: '0.2',\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\ttitle={product.name}\r\n\t\t\t\t\t\tsrc={uri}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<img\r\n\t\t\t\t\t\talt={product.name}\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\theight: `${height * 0.82}px`,\r\n\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\tleft: '8%',\r\n\t\t\t\t\t\t\ttop: '8%',\r\n\t\t\t\t\t\t\tboxShadow: '0 0 4px #6b6868',\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\ttitle={product.name}\r\n\t\t\t\t\t\tsrc={uri}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"no-jacket-scroller-outer\"\r\n\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\theight: `${height - 2}px`,\r\n\t\t\t\t\t\twidth: `${height * 0.66}px`,\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName={`no-jacket-scroller-inner${\r\n\t\t\t\t\t\t\theight <= 50 ? '-small' : ''\r\n\t\t\t\t\t\t}`}\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\theight: `${height}px`,\r\n\t\t\t\t\t\t\tmaxWidth: `${height * 1.1}px`,\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<span className=\"bold\">\r\n\t\t\t\t\t\t\t{product ? product.name : 'Unknown Title'}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t}\r\n\t} else {\r\n\t\treturn <div></div>;\r\n\t}\r\n}\r\n\r\nexport default TitleJacketImage;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport BrowseLaneType from '../Administer/BrowseLaneType';\r\nimport OptionSelectionTypes from '../Administer/OptionSelectionTypes';\r\n\r\nconst FilterOptionsContext = React.createContext();\r\n\r\nexport const useFilterOptions = () => React.useContext(FilterOptionsContext);\r\n\r\nconst name = 'filterOptionsDataStore';\r\n\r\nexport const connectToFilterOptions = makeConnectTo(FilterOptionsContext, name);\r\n\r\nexport default class FilterOptionsDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tfilterOptions: [],\r\n\t\tfilters: [],\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst filterOptionsDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<FilterOptionsContext.Provider value={filterOptionsDataStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(filterOptionsDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</FilterOptionsContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchFilterOptions();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.filterOptionsFetch && this.filterOptionsFetch.cancel) {\r\n\t\t\tthis.filterOptionsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t});\r\n\r\n\tfetchFilterOptions = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/savedFilters/filterOptions`);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.filterOptionsFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tvar filterOptions = [];\r\n\t\tObject.keys(BrowseLaneType).map(key => {\r\n\t\t\tif (\r\n\t\t\t\tBrowseLaneType[key].optionSelectionType ===\r\n\t\t\t\tOptionSelectionTypes.alpha\r\n\t\t\t) {\r\n\t\t\t\tfilterOptions[\r\n\t\t\t\t\tBrowseLaneType[key].type\r\n\t\t\t\t] = this.sortByFirstLetter(\r\n\t\t\t\t\tapiResponse.filter(\r\n\t\t\t\t\t\tar => ar.type === BrowseLaneType[key].type,\r\n\t\t\t\t\t),\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.setState({\r\n\t\t\tfilters: apiResponse,\r\n\t\t\tfilterOptions,\r\n\t\t\tisLoading: false,\r\n\t\t});\r\n\t};\r\n\r\n\tsortByFirstLetter = data => {\r\n\t\treturn data.reduce((sortedFormats, format) => {\r\n\t\t\tif (format.displayName) {\r\n\t\t\t\tisNaN(format.displayName[0])\r\n\t\t\t\t\t? this.buildAndSortKeys(format, sortedFormats, false)\r\n\t\t\t\t\t: this.buildAndSortKeys(format, sortedFormats, true);\r\n\t\t\t}\r\n\t\t\treturn sortedFormats;\r\n\t\t}, {});\r\n\t};\r\n\r\n\tbuildAndSortKeys = (format, sortedFormats, isNumber) => {\r\n\t\tconst key = isNumber ? '[0-9]' : format.displayName[0].toUpperCase();\r\n\t\tsortedFormats[key]\r\n\t\t\t? sortedFormats[key].push(format)\r\n\t\t\t: (sortedFormats[key] = [format]);\r\n\t};\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport { connectToTitle } from '../../Title/containers/TitleDataStore';\r\nimport combineConnectors from '../../util/combineConnectors';\r\nimport { connectToConversations } from './conversationsDataStore';\r\n\r\nconst CommentsContext = React.createContext();\r\n\r\nconst name = 'commentsDataStore';\r\n\r\nexport const useComments = () => React.useContext(CommentsContext);\r\n\r\nexport const connectToComments = makeConnectTo(CommentsContext, name);\r\n\r\nexport class CommentsDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\ttopicId: 0,\r\n\t\tcomments: [],\r\n\t\tisLoading: true,\r\n\t\tscrollOnUpdate: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst commentsDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<CommentsContext.Provider value={commentsDataStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(commentsDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</CommentsContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchComments();\r\n\t}\r\n\r\n\tcomponentDidUpdate(prevProps) {\r\n\t\tif (prevProps.id !== this.props.id) {\r\n\t\t\tthis.refreshComments();\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.commentsFetch && this.commentsFetch.cancel) {\r\n\t\t\tthis.commentsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: noLoading => this.refreshComments(noLoading),\r\n\t\ttoggleBadge: (commentId, badgeType) =>\r\n\t\t\tthis.toggleBadge(commentId, badgeType),\r\n\t\tcreateNewComment: (commentDTO, isReply) =>\r\n\t\t\tthis.createNewComment(commentDTO, isReply),\r\n\t\tupdateComment: commentDTO => this.updateComment(commentDTO),\r\n\t\tchangeConversationStatus: (communityId, status) =>\r\n\t\t\tthis.changeConversationStatus(communityId, status),\r\n\t\tgetScrollOnUpdate: () => this.getScrollOnUpdate(),\r\n\t\tchangeCommentStatus: (commentId, status) =>\r\n\t\t\tthis.changeCommentStatus(commentId, status),\r\n\t});\r\n\r\n\trefreshComments = noLoading => {\r\n\t\tif (!noLoading) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tisLoading: true,\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.fetchComments();\r\n\t\treturn this.commentsFetch.promise;\r\n\t};\r\n\r\n\tfetchComments = () => {\r\n\t\tconst { type, id } = this.props;\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/conversations/comments/${type.key}/${id}`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.commentsFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst { type, id } = this.props;\r\n\t\tconst threads = apiResponse && this.getThreads(apiResponse);\r\n\t\tthis.setState({\r\n\t\t\tthreads: threads.sort(\r\n\t\t\t\t(a, b) =>\r\n\t\t\t\t\tnew Date(a.mostRecentComment) -\r\n\t\t\t\t\tnew Date(b.mostRecentComment),\r\n\t\t\t),\r\n\t\t\ttype: type,\r\n\t\t\tid: id,\r\n\t\t\tisLoading: false,\r\n\t\t});\r\n\t};\r\n\r\n\tgetThreads = apiResponse => {\r\n\t\tconst {\r\n\t\t\tcomments,\r\n\t\t\tthreads,\r\n\t\t\tuserAvatarsByAppUserId,\r\n\t\t\tusersById,\r\n\t\t\torganizationsById,\r\n\t\t\tbadges,\r\n\t\t} = apiResponse;\r\n\t\treturn threads.map(thread => {\r\n\t\t\treturn {\r\n\t\t\t\t...thread,\r\n\t\t\t\tcomments: this.getComments(\r\n\t\t\t\t\tthread.parentCommentId,\r\n\t\t\t\t\tcomments,\r\n\t\t\t\t\tuserAvatarsByAppUserId,\r\n\t\t\t\t\tusersById,\r\n\t\t\t\t\torganizationsById,\r\n\t\t\t\t\tbadges,\r\n\t\t\t\t),\r\n\t\t\t};\r\n\t\t});\r\n\t};\r\n\r\n\tgetComments = (\r\n\t\tparentCommentId,\r\n\t\tcomments,\r\n\t\tuserAvatarsByAppUserId,\r\n\t\tusersById,\r\n\t\torganizationsById,\r\n\t\tbadges,\r\n\t) => {\r\n\t\tconst threadComments = comments\r\n\t\t\t.filter(com => com.thread == parentCommentId)\r\n\t\t\t.sort((a, b) => new Date(a.updatedDate) - new Date(b.updatedDate));\r\n\t\tconst badgesWithNames =\r\n\t\t\tbadges && this.getBadgesWithNames(badges, userAvatarsByAppUserId);\r\n\t\treturn threadComments.map(comment => {\r\n\t\t\treturn {\r\n\t\t\t\t...comment,\r\n\t\t\t\tbadges:\r\n\t\t\t\t\tbadgesWithNames &&\r\n\t\t\t\t\tbadgesWithNames.filter(bad => bad.commentId == comment.id),\r\n\t\t\t\tuserAvatar: userAvatarsByAppUserId[comment.appUserId],\r\n\t\t\t\torgName:\r\n\t\t\t\t\tusersById[comment.appUserId] &&\r\n\t\t\t\t\tusersById[comment.appUserId].orgID &&\r\n\t\t\t\t\torganizationsById[\r\n\t\t\t\t\t\tusersById[comment.appUserId].orgID.toLowerCase()\r\n\t\t\t\t\t] &&\r\n\t\t\t\t\torganizationsById[\r\n\t\t\t\t\t\tusersById[comment.appUserId].orgID.toLowerCase()\r\n\t\t\t\t\t].name,\r\n\t\t\t};\r\n\t\t});\r\n\t};\r\n\r\n\tgetBadgesWithNames = (badges, userAvatarsByAppUserId) => {\r\n\t\treturn badges.map(badge => {\r\n\t\t\treturn {\r\n\t\t\t\t...badge,\r\n\t\t\t\tuserName: userAvatarsByAppUserId[badge.appUserId].displayName,\r\n\t\t\t};\r\n\t\t});\r\n\t};\r\n\r\n\tgetOwnerInfo = (appUserId, userAvatar, organization) => {\r\n\t\tvar owner = {};\r\n\t\towner.userAvatar = userAvatar && userAvatar;\r\n\t\towner.organization = organization.name;\r\n\t\towner.appUserId = appUserId;\r\n\t\treturn owner;\r\n\t};\r\n\r\n\ttoggleBadge = (commentId, badgeType) => {\r\n\t\tvar badgeDTO = {\r\n\t\t\tcommentId: commentId,\r\n\t\t\ttype: badgeType,\r\n\t\t};\r\n\t\tapi.put(`/api/v1/conversations/badges`, badgeDTO).then(() => {\r\n\t\t\tthis.setState({ scrollOnUpdate: false });\r\n\t\t\tthis.refreshComments(true);\r\n\t\t});\r\n\t};\r\n\r\n\tgetScrollOnUpdate = () => {\r\n\t\treturn this.state.scrollOnUpdate;\r\n\t};\r\n\r\n\tcreateNewComment = (commentDTO, isReply) => {\r\n\t\tif (!isReply) {\r\n\t\t\tconst { type, id } = this.props;\r\n\t\t\tcommentDTO.conversationType = type.key;\r\n\t\t\tcommentDTO.conversationId = id;\r\n\t\t\tcommentDTO.status = 0;\r\n\t\t}\r\n\t\tapi.post(`/api/v1/conversations/comments`, commentDTO).then(() => {\r\n\t\t\tthis.setState({ scrollOnUpdate: true });\r\n\t\t\tthis.refreshComments(true);\r\n\t\t\tthis.props.titleDataStore &&\r\n\t\t\t\tthis.props.titleDataStore.refreshConversations();\r\n\t\t});\r\n\t};\r\n\r\n\tupdateComment = commentDTO => {\r\n\t\tapi.put(`/api/v1/conversations/comments`, commentDTO).then(() => {\r\n\t\t\tthis.setState({ scrollOnUpdate: true });\r\n\t\t\tthis.refreshComments(true);\r\n\t\t});\r\n\t};\r\n\r\n\tchangeCommentStatus = (commentId, status) => {\r\n\t\tapi.del(`/api/v1/conversations/comments/${commentId}/${status}`).then(\r\n\t\t\t() => {\r\n\t\t\t\tthis.setState({ scrollOnUpdate: false });\r\n\t\t\t\tthis.refreshComments(true);\r\n\t\t\t},\r\n\t\t);\r\n\t};\r\n\r\n\tchangeConversationStatus = (communityId, status) => {\r\n\t\tconst { type, id } = this.props;\r\n\t\tvar conversationDTO = {};\r\n\t\tconversationDTO.conversationType = type.key;\r\n\t\tconversationDTO.conversationId = id;\r\n\t\tconversationDTO.communityId = communityId;\r\n\t\tconversationDTO.status = status;\r\n\t\tapi.put(`/api/v1/conversations/status`, conversationDTO).then(() => {\r\n\t\t\tthis.refreshComments(true);\r\n\t\t});\r\n\t};\r\n}\r\n\r\nconst connectors = [connectToTitle, connectToConversations];\r\n\r\nexport default combineConnectors(connectors)(CommentsDataStore);\r\n","import { Button, Tooltip } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport classNames from 'classnames';\r\nimport { useAccountOrMembershipRequiredModalContext } from '../../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\nimport { useUser } from '../../User/containers/UserDataStore';\r\nimport { useComments } from '../containers/commentsDataStore';\r\nimport CommentInputWithMentioning from './CommentInputWithMentioning/CommentInputWithMentioning';\r\nimport CommunityGuidelinesLink from '../../UI/Links/CommunityGuidelines/CommunityGuidelinesLink';\r\n\r\nCommentInputFrame.propTypes = {\r\n\tparentComment: PropTypes.object,\r\n\tcomment: PropTypes.object,\r\n\tchildCount: PropTypes.number,\r\n\tcommunityId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n\tthreadCount: PropTypes.number,\r\n\tisEditingExistingNote: PropTypes.bool,\r\n\ttoggleEditMode: PropTypes.func,\r\n};\r\n\r\nCommentInputFrame.defaultProps = {\r\n\tcomment: {},\r\n\tisEditingExistingNote: false,\r\n};\r\n\r\nexport default function CommentInputFrame({\r\n\tparentComment,\r\n\tcomment,\r\n\tchildCount,\r\n\tthreadCount,\r\n\tcommunityId,\r\n\tisEditingExistingNote,\r\n\ttoggleEditMode,\r\n}) {\r\n\tconst [isEditingNote, setIsEditingNote] = React.useState(false);\r\n\tconst [text, setText] = React.useState(comment.text || '');\r\n\tconst { setIsVisible } = useAccountOrMembershipRequiredModalContext();\r\n\tconst { isAnonymous } = useUser();\r\n\r\n\tuseEffect(() => {\r\n\t\tsetIsEditingNote(isEditingExistingNote);\r\n\t}, [parentComment, childCount, threadCount]);\r\n\r\n\tconst commentsDataStore = useComments();\r\n\r\n\tconst renderInput = (placeholderText, isReply) => {\r\n\t\tlet isReadyToSave = text && text !== comment.text;\r\n\t\tconst inputClassName =\r\n\t\t\tisReply || isEditingExistingNote\r\n\t\t\t\t? 'comment-input-reply'\r\n\t\t\t\t: 'comment-input-new-thought';\r\n\t\treturn (\r\n\t\t\t<div className=\"comment-frame\">\r\n\t\t\t\t<CommentInputWithMentioning\r\n\t\t\t\t\tcomment={comment && comment.text}\r\n\t\t\t\t\tclassName={inputClassName}\r\n\t\t\t\t\tplaceholderText={placeholderText}\r\n\t\t\t\t\tonChangeEvent={setText}\r\n\t\t\t\t/>\r\n\t\t\t\t{isReadyToSave ? (\r\n\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t\t<span style={{ fontSize: 'smaller' }}>Send</span>\r\n\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"comment-save icon-send\"\r\n\t\t\t\t\t\t\tonClick={saveComment}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t\t<span style={{ fontSize: 'smaller' }}>Cancel</span>\r\n\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"comment-cancel icon-declined\"\r\n\t\t\t\t\t\t\tonClick={leaveEditMode}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst saveComment = () => {\r\n\t\tconst isReply = parentComment || false;\r\n\t\tif (isReply) {\r\n\t\t\tparentComment.text = text;\r\n\t\t\tparentComment.parentCommentId = parentComment.id;\r\n\t\t\tcommentsDataStore.createNewComment(parentComment, true);\r\n\t\t\tleaveEditMode();\r\n\t\t} else if (isEditingExistingNote) {\r\n\t\t\tcomment.text = text;\r\n\t\t\tcommentsDataStore.updateComment(comment);\r\n\t\t\ttoggleEditMode();\r\n\t\t} else {\r\n\t\t\tconst newComment = { text: text, parentCommentId: 0, communityId };\r\n\t\t\tcommentsDataStore.createNewComment(newComment);\r\n\t\t\tleaveEditMode();\r\n\t\t\tsetText('');\r\n\t\t}\r\n\t};\r\n\r\n\tconst leaveEditMode = () => {\r\n\t\tsetIsEditingNote(false);\r\n\t\tisEditingExistingNote && toggleEditMode();\r\n\t};\r\n\r\n\tconst handleGoToEditMode = () => {\r\n\t\treturn isAnonymous() ? setIsVisible(true) : setIsEditingNote(true);\r\n\t};\r\n\r\n\tconst renderCommentFooter = () => {\r\n\t\tconst commentFooterClass = classNames({\r\n\t\t\t'new-thought-comment-frame': !isEditingExistingNote,\r\n\t\t\t'new-thought-button-and-guidelines-link':\r\n\t\t\t\t!isEditingExistingNote && !isEditingNote,\r\n\t\t});\r\n\t\treturn (\r\n\t\t\t<div className={commentFooterClass}>\r\n\t\t\t\t{isEditingNote ? (\r\n\t\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t\t{renderInput(\r\n\t\t\t\t\t\t\t'Type your thought here and use the \"@\" to link title',\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div onClick={handleGoToEditMode} className=\"clickable\">\r\n\t\t\t\t\t\t\t<Button>New Thought</Button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<CommunityGuidelinesLink />\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderReplyButton = () => (\r\n\t\t<div onClick={handleGoToEditMode} className=\"clickable\">\r\n\t\t\t<div className=\"column icon-export\" />\r\n\t\t\t<div className=\"column-spaced\">Reply</div>\r\n\t\t\t<div className=\"clear\" />\r\n\t\t</div>\r\n\t);\r\n\r\n\treturn (\r\n\t\t<React.Fragment>\r\n\t\t\t{!parentComment || Number(parentComment.id) === 0 ? (\r\n\t\t\t\trenderCommentFooter()\r\n\t\t\t) : (\r\n\t\t\t\t<div className=\"inline-comment clickable\">\r\n\t\t\t\t\t{isEditingNote\r\n\t\t\t\t\t\t? renderInput('Reply', true)\r\n\t\t\t\t\t\t: renderReplyButton()}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</React.Fragment>\r\n\t);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { useCommunities } from '../../Communities/containers/communitiesDataStore';\r\nimport NotAMemberOfAnyCommunityMessage from '../../Communities/NotAMemberOfAnyCommunityMessage/NotAMemberOfAnyCommunityMessage';\r\nimport CommunityImage from '../../Community/CommunityImage';\r\nimport { useUser } from '../../User/containers/UserDataStore';\r\nimport ThreadSummary from '../UI/ThreadSummary';\r\n\r\nCommunityOptions.propTypes = {\r\n\tthreadsByCommunityId: PropTypes.object,\r\n\tgoToCommunity: PropTypes.func,\r\n};\r\n\r\nexport default function CommunityOptions({\r\n\tthreadsByCommunityId,\r\n\tgoToCommunity,\r\n}) {\r\n\tconst { getCommunities } = useCommunities();\r\n\tconst communities = getCommunities();\r\n\tconst { isAnonymous } = useUser();\r\n\r\n\tconst communityCount = Object.keys(threadsByCommunityId).length;\r\n\r\n\tconst renderCommunityOption = (threads, communityId) => {\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tonClick={() => goToCommunity(communityId)}\r\n\t\t\t\tclassName=\"community-option\">\r\n\t\t\t\t<div className=\"column\">\r\n\t\t\t\t\t<CommunityImage communityId={communityId} dimensions={20} />\r\n\t\t\t\t</div>\r\n\t\t\t\t<div className=\"column bold\">\r\n\t\t\t\t\t{getCommunityName(communityId)}\r\n\t\t\t\t</div>\r\n\t\t\t\t{threads && (\r\n\t\t\t\t\t<div className=\"column-right\">\r\n\t\t\t\t\t\t<ThreadSummary\r\n\t\t\t\t\t\t\tthreads={threads}\r\n\t\t\t\t\t\t\tdoIncludeCommunities={false}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t\t<div className=\"clear\" />\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderCommunitiesWithoutThreads = threadsByCommunityId => {\r\n\t\tvar communitiesWithoutThreads = communities.filter(\r\n\t\t\tcommunity =>\r\n\t\t\t\t!Object.keys(threadsByCommunityId)\r\n\t\t\t\t\t.map(Number)\r\n\t\t\t\t\t.includes(community.id),\r\n\t\t);\r\n\t\tcommunitiesWithoutThreads =\r\n\t\t\tcommunitiesWithoutThreads &&\r\n\t\t\tcommunitiesWithoutThreads.length > 0 &&\r\n\t\t\tcommunitiesWithoutThreads.filter(c => c.member && c.name);\r\n\r\n\t\treturn communitiesWithoutThreads.length && !isAnonymous() ? (\r\n\t\t\tcommunitiesWithoutThreads.map(community => (\r\n\t\t\t\t<React.Fragment key={community.id}>\r\n\t\t\t\t\t{renderCommunityOption(null, community.id)}\r\n\t\t\t\t</React.Fragment>\r\n\t\t\t))\r\n\t\t) : (\r\n\t\t\t<div style={{ paddingTop: 10 }}>\r\n\t\t\t\t<NotAMemberOfAnyCommunityMessage />\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst getCommunityName = communityId => {\r\n\t\tconst community = communities.find(\r\n\t\t\tcom => com.id === Number(communityId),\r\n\t\t);\r\n\t\tconst communityName = community ? community.name : undefined;\r\n\t\treturn communityName;\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"multiple-community-frame\">\r\n\t\t\t{communityCount > 0 && (\r\n\t\t\t\t<div>\r\n\t\t\t\t\tThis title has an active conversation in{' '}\r\n\t\t\t\t\t{Object.keys(threadsByCommunityId).length} of your\r\n\t\t\t\t\tcommunities. Select which you want to see:\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t{Object.keys(threadsByCommunityId).map(communityId => (\r\n\t\t\t\t<React.Fragment key={communityId}>\r\n\t\t\t\t\t{renderCommunityOption(\r\n\t\t\t\t\t\tthreadsByCommunityId[communityId],\r\n\t\t\t\t\t\tcommunityId,\r\n\t\t\t\t\t)}\r\n\t\t\t\t</React.Fragment>\r\n\t\t\t))}\r\n\t\t\t<div>\r\n\t\t\t\t{communityCount === 0 && (\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\tThis title has no active conversations in your\r\n\t\t\t\t\t\tcommunities.{' '}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t)}\r\n\t\t\t\t<span>\r\n\t\t\t\t\tTo start a conversation about this title in one of your\r\n\t\t\t\t\tother communities, click below...\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t\t<div>{renderCommunitiesWithoutThreads(threadsByCommunityId)}</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport TimeStamp from '../../UI/TimeStamp';\r\n\r\nCommentAttribution.propTypes = {\r\n\tcomment: PropTypes.object,\r\n};\r\n\r\nexport default function CommentAttribution({ comment }) {\r\n\treturn (\r\n\t\t<div className=\"clear text-small relative\">\r\n\t\t\t<span className=\"name bold\">{comment.userAvatar.displayName}</span>\r\n\t\t\t, \r\n\t\t\t<span className=\"org-name\">{comment.orgName}</span>\r\n\t\t\t, \r\n\t\t\t<span className=\"italic card-timestamp\">\r\n\t\t\t\t<TimeStamp timeStamp={comment.updatedDate} />\r\n\t\t\t</span>\r\n\t\t</div>\r\n\t);\r\n}\r\n","const BadgeType = {\r\n\tThumbsUp: {\r\n\t\tlabel: 'Thumbs Up',\r\n\t\tkey: 'thumbsUp',\r\n\t\ticon: 'icon-recommend-icon badge-thumbs-up',\r\n\t},\r\n\tLove: {\r\n\t\tlabel: 'Love',\r\n\t\tkey: 'love',\r\n\t\ticon: 'icon-love-icon color-true-red',\r\n\t},\r\n\tThumbsDown: {\r\n\t\tlabel: 'Thumbs Down',\r\n\t\tkey: 'thumbsDown',\r\n\t\ticon: 'icon-not-recommend-icon badge-thumbs-down',\r\n\t},\r\n\tLaugh: {\r\n\t\tlabel: 'Laugh',\r\n\t\tkey: 'laugh',\r\n\t\ticon: 'icon-laugh badge-laugh',\r\n\t},\r\n};\r\n\r\nexport default BadgeType;\r\n","import { Tooltip } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport BadgeType from '../BadgeType';\r\n\r\nBadges.propTypes = {\r\n\tbadges: PropTypes.array,\r\n\tcommentId: PropTypes.number,\r\n};\r\n\r\nexport default function Badges({ badges, commentId }) {\r\n\tconst getNames = theseBadges => {\r\n\t\treturn theseBadges.map(badge => (\r\n\t\t\t<div key={badge.id}>{badge.userName}</div>\r\n\t\t));\r\n\t};\r\n\r\n\tconst renderBadge = badgeType => {\r\n\t\tconst theseBadges =\r\n\t\t\tbadges && badges.filter(b => b.type == badgeType.key);\r\n\t\treturn (\r\n\t\t\t<div key={badgeType.key}>\r\n\t\t\t\t{theseBadges.length > 0 && (\r\n\t\t\t\t\t<div className=\"column-spaced\">\r\n\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\ttitle={getNames(theseBadges)}\r\n\t\t\t\t\t\t\tplacement=\"bottomRight\"\r\n\t\t\t\t\t\t\tkey={`tip-like-${commentId}`}\r\n\t\t\t\t\t\t\tclassName=\"clickable\">\r\n\t\t\t\t\t\t\t<div className={`column ${badgeType.icon}`}></div>\r\n\t\t\t\t\t\t\t<div className=\"column-narrow text-medium bold\">\r\n\t\t\t\t\t\t\t\t{theseBadges.length}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div className=\"clear\" />\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div key={`badge-${commentId}`}>\r\n\t\t\t{Object.keys(BadgeType).map(badgeType =>\r\n\t\t\t\trenderBadge(BadgeType[badgeType]),\r\n\t\t\t)}\r\n\t\t\t<div className=\"clear\" />\r\n\t\t</div>\r\n\t);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { useAccountOrMembershipRequiredModalContext } from '../../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\nimport { useUser } from '../../User/containers/UserDataStore';\r\nimport BadgeType from '../BadgeType';\r\nimport { useComments } from '../containers/commentsDataStore';\r\nimport ConversationStatus from '../ConversationStatus';\r\n\r\nBadgeActions.propTypes = {\r\n\tcomment: PropTypes.object,\r\n\ttoggleEditMode: PropTypes.func,\r\n};\r\n\r\nexport default function BadgeActions({ comment, toggleEditMode }) {\r\n\tconst commentsDataStore = useComments();\r\n\tconst { setIsVisible } = useAccountOrMembershipRequiredModalContext();\r\n\tconst {\r\n\t\tstate: {\r\n\t\t\tuser: { user },\r\n\t\t},\r\n\t\tisAnonymous,\r\n\t} = useUser();\r\n\r\n\tconst isOwner = user && user.id === comment.appUserId;\r\n\r\n\tconst toggleBadge = badgeType => {\r\n\t\tcommentsDataStore.toggleBadge(comment.id, badgeType.key);\r\n\t};\r\n\r\n\tconst toggleDeleteNote = commentId => {\r\n\t\tcommentsDataStore.changeCommentStatus(\r\n\t\t\tcommentId,\r\n\t\t\tConversationStatus.deleted,\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderBadge = badgeType => {\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tkey={badgeType.key}\r\n\t\t\t\tclassName={`column-spaced clickable ${badgeType.icon}`}\r\n\t\t\t\tonClick={() =>\r\n\t\t\t\t\tisAnonymous() ? setIsVisible(true) : toggleBadge(badgeType)\r\n\t\t\t\t}></div>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"hidden-anchor badge-action\">\r\n\t\t\t<div\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tpaddingLeft: '10px',\r\n\t\t\t\t\tpaddingRight: '10px',\r\n\t\t\t\t}}>\r\n\t\t\t\t{Object.keys(BadgeType).map(badgeType =>\r\n\t\t\t\t\trenderBadge(BadgeType[badgeType]),\r\n\t\t\t\t)}\r\n\t\t\t\t{isOwner && (\r\n\t\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"column-spaced icon-note-icon clickable\"\r\n\t\t\t\t\t\t\tonClick={() => toggleEditMode()}></div>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"column-spaced icon-delete-icon clickable\"\r\n\t\t\t\t\t\t\tonClick={() => toggleDeleteNote(comment.id)}></div>\r\n\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t)}\r\n\t\t\t\t<div className=\"clear\" />\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { useUser } from '../../User/containers/UserDataStore';\r\nimport { useComments } from '../containers/commentsDataStore';\r\nimport ConversationStatus from '../ConversationStatus';\r\nimport CommentAttribution from '../UI/CommentAttribution';\r\nimport Badges from './Badges';\r\nimport BadgeActions from './BadgesActions';\r\nimport CommentInputFrame from './CommentInputFrame';\r\nimport ParsedComment from './ParsedComment/ParsedComment.js';\r\n\r\nComment.propTypes = {\r\n\tcomment: PropTypes.object,\r\n};\r\n\r\nComment.defaultProps = {\r\n\tcomment: {},\r\n};\r\n\r\nexport default function Comment({ comment }) {\r\n\tconst [isInEditMode, setIsInEditMode] = React.useState(false);\r\n\r\n\tconst commentsDataStore = useComments();\r\n\r\n\tconst userDataStore = useUser();\r\n\tconst { user } = userDataStore.state.user;\r\n\r\n\tconst renderDeletedMessage = comment => {\r\n\t\tconst isOwner = user && user.id === comment.appUserId;\r\n\t\treturn (\r\n\t\t\t<div style={{ marginTop: '6px' }}>\r\n\t\t\t\t<span className=\"italic\">\r\n\t\t\t\t\tThis message has been deleted{' '}\r\n\t\t\t\t\t{isOwner ? 'by you.' : 'by the user.'}\r\n\t\t\t\t</span>\r\n\t\t\t\t{isOwner && (\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\tclassName=\"acc-font pad-left-10 clickable\"\r\n\t\t\t\t\t\tonClick={() => toggleDeleteNote(comment.id)}>\r\n\t\t\t\t\t\tUndo\r\n\t\t\t\t\t</span>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderActiveMessage = comment => {\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t<CommentAttribution comment={comment} />\r\n\t\t\t\t<div className=\"clear\">\r\n\t\t\t\t\t{!isInEditMode ? (\r\n\t\t\t\t\t\t<ParsedComment commentText={comment.text} />\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<CommentInputFrame\r\n\t\t\t\t\t\t\tcomment={comment}\r\n\t\t\t\t\t\t\ttoggleEditMode={toggleEditMode}\r\n\t\t\t\t\t\t\tisEditingExistingNote={true}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t\t{comment.badges && comment.badges.length > 0 && (\r\n\t\t\t\t\t<div className=\"badges\">\r\n\t\t\t\t\t\t<Badges\r\n\t\t\t\t\t\t\tbadges={comment.badges}\r\n\t\t\t\t\t\t\tcommentId={comment.id}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t\t<BadgeActions\r\n\t\t\t\t\tcomment={comment}\r\n\t\t\t\t\ttoggleEditMode={toggleEditMode}\r\n\t\t\t\t/>\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\tconst toggleDeleteNote = commentId => {\r\n\t\tcommentsDataStore.changeCommentStatus(commentId, 0);\r\n\t};\r\n\r\n\tconst toggleEditMode = () => {\r\n\t\tsetIsInEditMode(!isInEditMode);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"relative comment-card\">\r\n\t\t\t{comment.commentStatus === ConversationStatus.deleted ? (\r\n\t\t\t\t<React.Fragment>{renderDeletedMessage(comment)}</React.Fragment>\r\n\t\t\t) : (\r\n\t\t\t\t<React.Fragment>{renderActiveMessage(comment)}</React.Fragment>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport UserAvatar from 'treeline-react-core-components/UserAvatar';\r\nimport { useComments } from '../containers/commentsDataStore';\r\nimport { useConversations } from '../containers/conversationsDataStore';\r\nimport ConversationStatus from '../ConversationStatus';\r\nimport Comment from './Comment';\r\nimport CommentInputFrame from './CommentInputFrame';\r\nimport { useCommunityReviews } from '../../Community/containers/CommunityReviewsDataStore';\r\nimport useNewReviewCopies from '../../ReviewCopies/hooks/useNewReviewCopies';\r\nimport { useRequests } from '../../Requests/containers/RequestsDataStore';\r\nimport useCommunityPageParams from '../../hooks/useCommunityPageParams';\r\nimport useTitleConversationStatuses from '../../Titles/hooks/useTitleConversationStatuses';\r\nimport CacheKeysEnum from '../../../CacheKeysEnum';\r\n\r\nParentCommentFrame.propTypes = {\r\n\tcomments: PropTypes.array,\r\n\trefreshAfterViewing: PropTypes.func,\r\n\tmarkAsRead: PropTypes.func,\r\n};\r\n\r\nexport default function ParentCommentFrame({\r\n\tcomments,\r\n\trefreshAfterViewing,\r\n\tmarkAsRead,\r\n}) {\r\n\tconst { communityId } = useCommunityPageParams();\r\n\tconst maxTitles = communityId ? 20 : 40;\r\n\tconst commentsDataStore = useComments();\r\n\tconst conversationsDataStore = useConversations();\r\n\tconst communityReviewsDataStore = useCommunityReviews();\r\n\tconst {\r\n\t\tdata: { skus },\r\n\t} = useNewReviewCopies(communityId ?? 0, maxTitles);\r\n\tconst requestsDataStore = useRequests();\r\n\tconst {\r\n\t\trefetch: refetchTitleConversationStatuses,\r\n\t} = useTitleConversationStatuses(\r\n\t\tcommunityId ?? 0,\r\n\t\tskus,\r\n\t\tCacheKeysEnum.NewReviewCopyConvoStatuses,\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tcomments &&\r\n\t\t\tcomments.length > 0 &&\r\n\t\t\tcommentsDataStore.changeConversationStatus(\r\n\t\t\t\tcomments[0].communityId,\r\n\t\t\t\tConversationStatus.read,\r\n\t\t\t);\r\n\t\tmarkAsRead();\r\n\r\n\t\treturn () => {\r\n\t\t\trefreshAfterViewing();\r\n\t\t\tconversationsDataStore && conversationsDataStore.refresh(true);\r\n\t\t\tcommunityReviewsDataStore &&\r\n\t\t\t\tcommunityReviewsDataStore.fetchConversationStatus();\r\n\t\t\trefetchTitleConversationStatuses();\r\n\t\t\trequestsDataStore && requestsDataStore.fetchConversationStatus();\r\n\t\t};\r\n\t}, []);\r\n\r\n\tconst renderAvatar = (comment, size) => {\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t{comment.commentStatus != ConversationStatus.deleted ? (\r\n\t\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t\t{renderUserAvatar(comment.userAvatar, size)}\r\n\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<React.Fragment>{renderDeletedAvatar(size)}</React.Fragment>\r\n\t\t\t\t)}\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderUserAvatar = (userAvatar, size) => {\r\n\t\treturn (\r\n\t\t\t<UserAvatar\r\n\t\t\t\tuserInitials={userAvatar && userAvatar.initials}\r\n\t\t\t\tavatarUri={(userAvatar && userAvatar.uri) || null}\r\n\t\t\t\tdisplayName={userAvatar && userAvatar.displayName}\r\n\t\t\t\tavatarSizeClass={size}\r\n\t\t\t/>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderDeletedAvatar = size => {\r\n\t\treturn (\r\n\t\t\t<UserAvatar\r\n\t\t\t\tuserInitials={\r\n\t\t\t\t\t<div className=\"icon-delete-icon text-x-large\"></div>\r\n\t\t\t\t}\r\n\t\t\t\tavatarUri={null}\r\n\t\t\t\tavatarSizeClass={size}\r\n\t\t\t/>\r\n\t\t);\r\n\t};\r\n\r\n\tconst parentComment = comments.filter(com => !com.parentCommentId)[0];\r\n\r\n\tconst childComments = comments.filter(com => com.parentCommentId);\r\n\r\n\treturn (\r\n\t\t<div className=\"parent-frame\">\r\n\t\t\t{parentComment && (\r\n\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t<div className=\"parent-avatar\">\r\n\t\t\t\t\t\t{parentComment &&\r\n\t\t\t\t\t\t\trenderAvatar(parentComment, UserAvatar.medium)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className=\"thread-body\">\r\n\t\t\t\t\t\t<div className=\"parent-body\">\r\n\t\t\t\t\t\t\t{parentComment && (\r\n\t\t\t\t\t\t\t\t<Comment comment={parentComment} />\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t{childComments &&\r\n\t\t\t\t\t\t\t\tchildComments.length > 0 &&\r\n\t\t\t\t\t\t\t\tchildComments.map(comment => (\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"child-frame\"\r\n\t\t\t\t\t\t\t\t\t\tkey={comment.id}>\r\n\t\t\t\t\t\t\t\t\t\t<div className=\"child-avatar\">\r\n\t\t\t\t\t\t\t\t\t\t\t{renderAvatar(\r\n\t\t\t\t\t\t\t\t\t\t\t\tcomment,\r\n\t\t\t\t\t\t\t\t\t\t\t\tUserAvatar.small,\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div className=\"child-body\">\r\n\t\t\t\t\t\t\t\t\t\t\t<Comment comment={comment} />\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{parentComment.commentStatus !=\r\n\t\t\t\t\t\t\tConversationStatus.deleted && (\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\t\tborderBottom: '1px solid #d2d6d8',\r\n\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t<CommentInputFrame\r\n\t\t\t\t\t\t\t\t\tparentComment={parentComment}\r\n\t\t\t\t\t\t\t\t\tchildCount={comments.length}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</React.Fragment>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Menu, Dropdown, Icon } from 'antd';\r\nimport ConversationStatus from '../../ConversationStatus';\r\nimport ConversationType from '../../ConversationType';\r\nimport './actionOptionsDropdown.less';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nActionOptionsDropdown.propTypes = {\r\n\tstatus: PropTypes.string,\r\n\ttype: PropTypes.object,\r\n\tunarchiveButton: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),\r\n\tarchiveButton: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),\r\n\tmarkUnreadButton: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),\r\n\tstartConvoInOtherCommunitiesButton: PropTypes.oneOfType([\r\n\t\tPropTypes.func,\r\n\t\tPropTypes.element,\r\n\t]),\r\n};\r\n\r\nexport default function ActionOptionsDropdown({\r\n\tstatus,\r\n\ttype,\r\n\tunarchiveButton,\r\n\tarchiveButton,\r\n\tmarkUnreadButton,\r\n\tstartConvoInOtherCommunitiesButton,\r\n}) {\r\n\tconst [isLoading, setIsLoading] = React.useState(false);\r\n\tconst menuItems = [\r\n\t\t{\r\n\t\t\tdoShow: type === ConversationType.Title,\r\n\t\t\tmenuItem: startConvoInOtherCommunitiesButton,\r\n\t\t},\r\n\t\t{\r\n\t\t\tdoShow: status === ConversationStatus.read,\r\n\t\t\tmenuItem: markUnreadButton,\r\n\t\t},\r\n\t\t{\r\n\t\t\tdoShow: status === ConversationStatus.read,\r\n\t\t\tmenuItem: archiveButton,\r\n\t\t},\r\n\t\t{\r\n\t\t\tdoShow: status === ConversationStatus.archived,\r\n\t\t\tmenuItem: unarchiveButton,\r\n\t\t},\r\n\t];\r\n\tconst menu = (\r\n\t\t<Menu onClick={() => setIsLoading(true)}>\r\n\t\t\t{menuItems.map(\r\n\t\t\t\t(item, index) =>\r\n\t\t\t\t\t!isLoading &&\r\n\t\t\t\t\titem.doShow && (\r\n\t\t\t\t\t\t<Menu.Item key={index}>{item.menuItem}</Menu.Item>\r\n\t\t\t\t\t),\r\n\t\t\t)}\r\n\t\t</Menu>\r\n\t);\r\n\r\n\treturn (\r\n\t\t<div className=\"action-options-dropdown\">\r\n\t\t\t<Dropdown\r\n\t\t\t\ttrigger={['click']}\r\n\t\t\t\toverlay={menu}\r\n\t\t\t\tonVisibleChange={() => setIsLoading(false)}>\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<Translate id=\"options\" /> <Icon type=\"down\" />\r\n\t\t\t\t</span>\r\n\t\t\t</Dropdown>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ConversationStatus from '../../ConversationStatus';\r\nimport ActionOptionsDropdown from '../ActionOptionsDropDown/ActionOptionsDropdown';\r\nimport ConversationType from '../../ConversationType';\r\nimport classNames from 'classnames';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport { useAccountOrMembershipRequiredModalContext } from '../../../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\nimport { useUser } from '../../../User/containers/UserDataStore';\r\nimport './headerActionOptions.less';\r\n\r\nHeaderActionOptions.propTypes = {\r\n\tchangeStatus: PropTypes.func,\r\n\tcommunitiesWithThreads: PropTypes.number,\r\n\tisMobile: PropTypes.bool,\r\n\tgoToCommunityOptions: PropTypes.func,\r\n\tstatus: PropTypes.string,\r\n\ttype: PropTypes.object,\r\n};\r\n\r\nfunction HeaderActionOptions({\r\n\tchangeStatus,\r\n\tcommunitiesWithThreads,\r\n\tisMobile,\r\n\tgoToCommunityOptions,\r\n\tstatus,\r\n\ttype,\r\n}) {\r\n\tconst {\r\n\t\tsetIsVisible,\r\n\t\tisNonMember,\r\n\t} = useAccountOrMembershipRequiredModalContext();\r\n\tconst isAnonymous = useUser().isAnonymous();\r\n\r\n\tconst handleChangeStatus = status => {\r\n\t\treturn isNonMember() ? setIsVisible(true) : changeStatus(status);\r\n\t};\r\n\r\n\tconst markUnreadButton = (\r\n\t\t<span\r\n\t\t\tclassName=\"acc-font\"\r\n\t\t\tonClick={() => handleChangeStatus(ConversationStatus.active)}>\r\n\t\t\t<Translate id=\"mark_unread\" />\r\n\t\t</span>\r\n\t);\r\n\r\n\tconst archiveButton = (\r\n\t\t<span\r\n\t\t\tclassName=\"acc-font\"\r\n\t\t\tonClick={() => handleChangeStatus(ConversationStatus.archived)}>\r\n\t\t\t<Translate id=\"archive\" />\r\n\t\t</span>\r\n\t);\r\n\r\n\tconst readConversationActionButtons = (\r\n\t\t<div className=\"conversation-action-buttons\">\r\n\t\t\t{markUnreadButton}\r\n\t\t\t<div className=\"column\"> • </div>\r\n\t\t\t{archiveButton}\r\n\t\t</div>\r\n\t);\r\n\r\n\tconst unarchiveButton = (\r\n\t\t<span\r\n\t\t\tclassName=\"acc-font\"\r\n\t\t\tonClick={() => handleChangeStatus(ConversationStatus.read)}>\r\n\t\t\t<Translate id=\"unarchive\" />\r\n\t\t</span>\r\n\t);\r\n\r\n\tconst renderStartConvoInOtherCommunities = () => {\r\n\t\treturn (\r\n\t\t\t<span\r\n\t\t\t\tclassName=\"other-communities-option acc-font\"\r\n\t\t\t\tonClick={() =>\r\n\t\t\t\t\tisAnonymous ? setIsVisible(true) : goToCommunityOptions()\r\n\t\t\t\t}>\r\n\t\t\t\t{communitiesWithThreads > 1 ? (\r\n\t\t\t\t\t<span className=\"other-conversations-title\">\r\n\t\t\t\t\t\t{communitiesWithThreads - 1 > 1 ? (\r\n\t\t\t\t\t\t\t<Translate\r\n\t\t\t\t\t\t\t\tid=\"x_other_conversations\"\r\n\t\t\t\t\t\t\t\tdata={{\r\n\t\t\t\t\t\t\t\t\tconversationAmount:\r\n\t\t\t\t\t\t\t\t\t\tcommunitiesWithThreads - 1,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<Translate\r\n\t\t\t\t\t\t\t\tid=\"x_other_conversation\"\r\n\t\t\t\t\t\t\t\tdata={{\r\n\t\t\t\t\t\t\t\t\tconversationAmount:\r\n\t\t\t\t\t\t\t\t\t\tcommunitiesWithThreads - 1,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Translate id=\"start_conversation_in_another_community\" />\r\n\t\t\t\t)}\r\n\t\t\t</span>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderHeaderBottomDesktop = () => (\r\n\t\t<>\r\n\t\t\t{type === ConversationType.Title &&\r\n\t\t\t\trenderStartConvoInOtherCommunities()}\r\n\t\t\t<div className=\"conversation-action-container\">\r\n\t\t\t\t{status === ConversationStatus.read &&\r\n\t\t\t\t\treadConversationActionButtons}\r\n\t\t\t\t{status === ConversationStatus.archived && unarchiveButton}\r\n\t\t\t</div>\r\n\t\t</>\r\n\t);\r\n\r\n\tconst getHeaderActionOptionsClasses = () =>\r\n\t\tclassNames('header-action-options', {\r\n\t\t\tisMobile: isMobile,\r\n\t\t\tisDesktop: !isMobile,\r\n\t\t});\r\n\r\n\treturn (\r\n\t\t<div className={getHeaderActionOptionsClasses()}>\r\n\t\t\t{!isMobile ? (\r\n\t\t\t\trenderHeaderBottomDesktop()\r\n\t\t\t) : (\r\n\t\t\t\t<ActionOptionsDropdown\r\n\t\t\t\t\tmarkUnreadButton={markUnreadButton}\r\n\t\t\t\t\tunarchiveButton={unarchiveButton}\r\n\t\t\t\t\tarchiveButton={archiveButton}\r\n\t\t\t\t\tstartConvoInOtherCommunitiesButton={renderStartConvoInOtherCommunities(\r\n\t\t\t\t\t\tcommunitiesWithThreads,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\tstatus={status}\r\n\t\t\t\t\ttype={type}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default HeaderActionOptions;\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport * as Util from '../../../util';\r\nimport { useCommunities } from '../../Communities/containers/communitiesDataStore';\r\nimport CommunityImage from '../../Community/CommunityImage';\r\nimport AddEditTopic from '../AddEditTopic';\r\nimport { useComments } from '../containers/commentsDataStore';\r\nimport ConversationStatus from '../ConversationStatus';\r\nimport CommentInputFrame from './CommentInputFrame';\r\nimport './comments.less';\r\nimport CommunityOptions from './CommunityOptions';\r\nimport ParentCommentFrame from './ParentCommentFrame';\r\nimport HeaderActionOptions from './HeaderActionOptions/HeaderActionOptions';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport CustomShowMoreText from '../../UI/CustomShowMoreText/CustomShowMoreText';\r\nimport LoadingSpinnerInContainer from '../../UI/LoadingSpinnerInContainer';\r\n\r\nComments.propTypes = {\r\n\tcommunityId: PropTypes.number,\r\n\ttext: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\r\n\tisOwner: PropTypes.bool,\r\n\tconversationId: PropTypes.number,\r\n\tisMobile: PropTypes.bool,\r\n};\r\n\r\nexport default function Comments({\r\n\tcommunityId,\r\n\ttext,\r\n\tisOwner,\r\n\tconversationId,\r\n\tisMobile,\r\n}) {\r\n\tconst [selectedCommunityId, setSelectedCommunityId] = React.useState(0);\r\n\tconst [overrideDefault, setOverrideDefault] = React.useState(false);\r\n\tconst [status, setStatus] = React.useState(ConversationStatus.active);\r\n\tconst [maxThoughts, setMaxThoughts] = React.useState(6);\r\n\r\n\tlet messagesEnd = React.createRef();\r\n\r\n\tconst commentsDataStore = useComments();\r\n\tconst { threads, type, isLoading } = commentsDataStore.state;\r\n\r\n\tconst { getCommunities } = useCommunities();\r\n\tconst communities = getCommunities();\r\n\r\n\tuseEffect(() => {\r\n\t\tif (communityId > 0) {\r\n\t\t\tsetSelectedCommunityId(communityId);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tcommentsDataStore.getScrollOnUpdate() && scrollToBottom();\r\n\t}, [threads]);\r\n\r\n\tconst scrollToBottom = () => {\r\n\t\tif (messagesEnd && messagesEnd.current) {\r\n\t\t\tmessagesEnd.current.scrollIntoView({ behavior: 'instant' });\r\n\t\t}\r\n\t};\r\n\r\n\tconst showMore = () => {\r\n\t\tsetMaxThoughts(maxThoughts * 1 + 6);\r\n\t};\r\n\r\n\tconst goToCommunity = passedCommunityId => {\r\n\t\tsetSelectedCommunityId(passedCommunityId);\r\n\t\tsetOverrideDefault(true);\r\n\t};\r\n\r\n\tconst goToCommunityOptions = () => {\r\n\t\tgoToCommunity(0);\r\n\t};\r\n\r\n\tconst getCommunityName = communityId => {\r\n\t\tconst community =\r\n\t\t\tcommunities &&\r\n\t\t\tcommunities.find(com => Number(com.id) === Number(communityId));\r\n\t\treturn community && community.name;\r\n\t};\r\n\r\n\tconst renderThread = thread => {\r\n\t\tconst { comments } = thread;\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t{comments && (\r\n\t\t\t\t\t<ParentCommentFrame\r\n\t\t\t\t\t\tcomments={comments}\r\n\t\t\t\t\t\trefreshAfterViewing={refreshAfterViewing}\r\n\t\t\t\t\t\tmarkAsRead={markAsRead}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\tconst markAsRead = () => {\r\n\t\tsetStatus(ConversationStatus.read);\r\n\t};\r\n\r\n\tconst changeStatus = status => {\r\n\t\tsetStatus(status);\r\n\t\tcommentsDataStore &&\r\n\t\t\tcommentsDataStore.changeConversationStatus(\r\n\t\t\t\tselectedCommunityId,\r\n\t\t\t\tstatus,\r\n\t\t\t);\r\n\t};\r\n\r\n\tconst refreshAfterViewing = () => {\r\n\t\tcommentsDataStore.refresh(true);\r\n\t};\r\n\r\n\tconst addEditTopicIcon = (\r\n\t\t<div className=\"column-spaced\">\r\n\t\t\t<AddEditTopic\r\n\t\t\t\tcommunityId={selectedCommunityId}\r\n\t\t\t\ttopicId={conversationId}\r\n\t\t\t\tname={text}\r\n\t\t\t/>\r\n\t\t</div>\r\n\t);\r\n\r\n\tconst renderTopicTitleAndActions = communitiesWithThreads => {\r\n\t\tconst typeLabel = type && `${type.label}: `;\r\n\t\tconst textToTruncate = (\r\n\t\t\t<span>\r\n\t\t\t\t{typeLabel}\r\n\t\t\t\t{text}\r\n\t\t\t</span>\r\n\t\t);\r\n\t\treturn (\r\n\t\t\t<div className=\"topic-title-and-actions\">\r\n\t\t\t\t<CustomShowMoreText text={textToTruncate} />\r\n\t\t\t\t{isOwner && addEditTopicIcon}\r\n\t\t\t\t<HeaderActionOptions\r\n\t\t\t\t\tchangeStatus={changeStatus}\r\n\t\t\t\t\tcommunitiesWithThreads={communitiesWithThreads}\r\n\t\t\t\t\tisMobile={isMobile}\r\n\t\t\t\t\tgoToCommunityOptions={goToCommunityOptions}\r\n\t\t\t\t\tstatus={status}\r\n\t\t\t\t\ttype={type}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderCommentsHeader = (\r\n\t\tthreadCommunityId,\r\n\t\tcommunitiesWithThreads,\r\n\t) => {\r\n\t\tconst communityName = getCommunityName(threadCommunityId);\r\n\t\treturn (\r\n\t\t\t<div className=\"comments-header\">\r\n\t\t\t\t<div className=\"comments-header-main\">\r\n\t\t\t\t\t<CommunityImage\r\n\t\t\t\t\t\tcommunityId={threadCommunityId}\r\n\t\t\t\t\t\tdimensions={50}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<div className=\"header-right\">\r\n\t\t\t\t\t\t<div className=\"community-name bold\">\r\n\t\t\t\t\t\t\t<CustomShowMoreText\r\n\t\t\t\t\t\t\t\ttext={\r\n\t\t\t\t\t\t\t\t\t<Translate\r\n\t\t\t\t\t\t\t\t\t\tid=\"x_community_conversation_title\"\r\n\t\t\t\t\t\t\t\t\t\tdata={{ communityName: communityName }}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{!isMobile &&\r\n\t\t\t\t\t\t\trenderTopicTitleAndActions(communitiesWithThreads)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t{isMobile && renderTopicTitleAndActions(communitiesWithThreads)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tif (!isLoading) {\r\n\t\tconst communityIds = Util.groupBy(threads, 'communityId');\r\n\t\tconst communitiesWithThreads = Object.keys(communityIds).length;\r\n\t\tif (\r\n\t\t\tselectedCommunityId > 0 ||\r\n\t\t\t(communitiesWithThreads === 1 && overrideDefault == false)\r\n\t\t) {\r\n\t\t\tconst threadCommunityId = selectedCommunityId\r\n\t\t\t\t? selectedCommunityId\r\n\t\t\t\t: communitiesWithThreads === 1 && Object.keys(communityIds)[0];\r\n\t\t\tconst communityThreads =\r\n\t\t\t\tthreads &&\r\n\t\t\t\tthreads.filter(\r\n\t\t\t\t\tth => th.communityId === parseInt(threadCommunityId),\r\n\t\t\t\t);\r\n\t\t\treturn (\r\n\t\t\t\t<div className=\"conversation-comments\">\r\n\t\t\t\t\t{renderCommentsHeader(\r\n\t\t\t\t\t\tthreadCommunityId,\r\n\t\t\t\t\t\tcommunitiesWithThreads,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<div className=\"comments-body\">\r\n\t\t\t\t\t\t{communityThreads.length > 0 ? (\r\n\t\t\t\t\t\t\tcommunityThreads.map((thread, idx) => (\r\n\t\t\t\t\t\t\t\t<React.Fragment key={`thread-${idx}`}>\r\n\t\t\t\t\t\t\t\t\t{communityThreads.length - maxThoughts ===\r\n\t\t\t\t\t\t\t\t\tidx + 1 ? (\r\n\t\t\t\t\t\t\t\t\t\t<div onClick={showMore}>Load More</div>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t\t\t\t\t\t\t{communityThreads.length -\r\n\t\t\t\t\t\t\t\t\t\t\t\tmaxThoughts <=\r\n\t\t\t\t\t\t\t\t\t\t\t\tidx + 1 && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<React.Fragment key={thread.id}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{renderThread(thread)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<span className=\"no-activity-message\">\r\n\t\t\t\t\t\t\t\t<Translate id=\"no_activity\" />\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tstyle={{ float: 'left', clear: 'both' }}\r\n\t\t\t\t\t\t\tref={messagesEnd}></div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className=\"comments-footer\">\r\n\t\t\t\t\t\t<CommentInputFrame\r\n\t\t\t\t\t\t\tcommunityId={threadCommunityId}\r\n\t\t\t\t\t\t\tthreadCount={threads.length}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<CommunityOptions\r\n\t\t\t\t\tthreadsByCommunityId={communityIds}\r\n\t\t\t\t\tgoToCommunity={goToCommunity}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t}\r\n\t} else {\r\n\t\treturn (\r\n\t\t\t<div className=\"conversation-comments conversations-spinner\">\r\n\t\t\t\t<LoadingSpinnerInContainer height=\"100%\" />\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport DrawerAnchor from '../UI/DrawerAnchor';\r\nimport CommentsDataStore from './containers/commentsDataStore';\r\nimport Comments from './Comments/Comments';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport './conversationDrawer.less';\r\nimport WindowSizeThresholdsEnum from '../../enums/WindowSizeThresholdsEnum';\r\n\r\nConversationDrawer.propTypes = {\r\n\ttype: PropTypes.object,\r\n\tid: PropTypes.string,\r\n\tcommunityId: PropTypes.number,\r\n\ttext: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\r\n\tisOwner: PropTypes.bool,\r\n\tisMobile: PropTypes.func,\r\n\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n};\r\n\r\nfunction ConversationDrawer({\r\n\ttype,\r\n\tid,\r\n\tcommunityId,\r\n\ttext,\r\n\tisOwner,\r\n\tisMobile,\r\n\tchildren,\r\n}) {\r\n\tconst isMobileSize = isMobile();\r\n\treturn (\r\n\t\t<DrawerAnchor\r\n\t\t\tdrawerClassName=\"conversation-drawer\"\r\n\t\t\tclosable={true}\r\n\t\t\twidth={isMobileSize ? '100%' : '900'}\r\n\t\t\tplacement={isMobileSize ? 'bottom' : 'right'}\r\n\t\t\theight={isMobileSize ? '90%' : '100%'}\r\n\t\t\trenderDrawerContent={() => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<CommentsDataStore type={type} id={id} results={6}>\r\n\t\t\t\t\t\t<Comments\r\n\t\t\t\t\t\t\tcommunityId={Number(communityId)}\r\n\t\t\t\t\t\t\ttext={text}\r\n\t\t\t\t\t\t\tisOwner={isOwner}\r\n\t\t\t\t\t\t\tconversationId={parseInt(id)}\r\n\t\t\t\t\t\t\tisMobile={isMobileSize}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</CommentsDataStore>\r\n\t\t\t\t);\r\n\t\t\t}}>\r\n\t\t\t{children}\r\n\t\t</DrawerAnchor>\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(\r\n\tConversationDrawer,\r\n\tWindowSizeThresholdsEnum.Medium,\r\n);\r\n","import React from 'react';\r\nimport LocalizedDate from '../Localization/LocalizedDate';\r\n\r\nexport default class TitleAutocompleteRow extends React.Component {\r\n\trender() {\r\n\t\tconst { product } = this.props;\r\n\t\tvar uri =\r\n\t\t\tproduct &&\r\n\t\t\tproduct.images &&\r\n\t\t\tproduct.images.filter(im => im.type === 'jacketCover').length > 0 &&\r\n\t\t\tproduct.images.filter(im => im.type === 'jacketCover')[0].uri +\r\n\t\t\t\t'?height=200';\r\n\t\treturn (\r\n\t\t\t<div className=\"clickable\" key={`image-${product.sku}`}>\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"column relative\"\r\n\t\t\t\t\tstyle={{ maxWidth: '70px', overflow: 'hidden' }}>\r\n\t\t\t\t\t{uri ? (\r\n\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\theight: '80px',\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\talt={product.name}\r\n\t\t\t\t\t\t\ttitle={product.name}\r\n\t\t\t\t\t\t\tsrc={uri}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<div />\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"column-spaced\"\r\n\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\twidth: '200px',\r\n\t\t\t\t\t\tfontSize: '13px',\r\n\t\t\t\t\t\tlineHeight: '18px',\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName=\"acc-font bold dotDot full-width\"\r\n\t\t\t\t\t\ttitle={product.name}>\r\n\t\t\t\t\t\t{product.name}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className=\"dotDot full-width\">{product.author}</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName=\"dotDot full-width\"\r\n\t\t\t\t\t\tstyle={{ fontSize: '11px' }}>\r\n\t\t\t\t\t\t{product.supplier}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName=\"dotDot full-width\"\r\n\t\t\t\t\t\tstyle={{ fontSize: '11px' }}>\r\n\t\t\t\t\t\t{product.pubDate !== '0001-01-01T00:00:00' && (\r\n\t\t\t\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t\t\t\t<LocalizedDate dateString={product.pubDate} />\r\n\t\t\t\t\t\t\t\t • \r\n\t\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{product.format}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div className=\"clear\" />\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport TitleAutocompleteRow from './TitleAutocompleteRow';\r\nimport LoadableAutocomplete from 'treeline-react-core-components/LoadableAutocomplete';\r\nimport { cancelableDelay } from 'treeline-react-core-components/util';\r\nimport './titleAutocomplete.less';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport { LoadingSpinnerSize } from '../UI/LoadingSpinner';\r\nimport LoadingWrapper from '../UI/LoadingWrapper';\r\n\r\nexport default class TitleAutocomplete extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.element,\r\n\t\tonSelectOption: PropTypes.func,\r\n\t\trenderTitleOption: PropTypes.func,\r\n\t\tplaceholder: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\r\n\t\tautoFocus: PropTypes.bool,\r\n\t};\r\n\r\n\tstatic defaultProps = {\r\n\t\tonSelectOption: () => {},\r\n\t\tplaceholder: <Translate id=\"search_for_titles\" />,\r\n\t\trenderTitleOption: product => {\r\n\t\t\treturn <TitleAutocompleteRow product={product} />;\r\n\t\t},\r\n\t\tautoFocus: false,\r\n\t};\r\n\r\n\tstate = {\r\n\t\tisLoading: false,\r\n\t};\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t<div className=\"title-autocomplete\">\r\n\t\t\t\t<LoadingWrapper\r\n\t\t\t\t\tisLoading={this.state.isLoading}\r\n\t\t\t\t\tsize={LoadingSpinnerSize.xssmall}>\r\n\t\t\t\t\t<LoadableAutocomplete\r\n\t\t\t\t\t\toptionIdName=\"sku\"\r\n\t\t\t\t\t\toptionDisplayNameKey=\"name\"\r\n\t\t\t\t\t\tplaceholder={this.props.placeholder}\r\n\t\t\t\t\t\tcanShowSuccess={false}\r\n\t\t\t\t\t\tonSelectHook={this.onSelectHook}\r\n\t\t\t\t\t\thasSearchIcon={true}\r\n\t\t\t\t\t\tgetURLForOptions={this.getURLForOptions}\r\n\t\t\t\t\t\tgetOptionLabel={this.props.renderTitleOption}\r\n\t\t\t\t\t\tclassName={this.props.className}\r\n\t\t\t\t\t\tinputRequiredFeedback=\"Too short!\"\r\n\t\t\t\t\t\tisClearable={false}\r\n\t\t\t\t\t\twidth={325}\r\n\t\t\t\t\t\tautoFocus={this.props.autoFocus}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</LoadingWrapper>\r\n\t\t\t\t{this.props.children}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.delay && this.delay.cancel) {\r\n\t\t\tthis.delay.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetURLForOptions = userInput => {\r\n\t\tconst base = `${process.env.REACT_APP_API_URL}/api/products/`;\r\n\t\tconst endpoint = `/search?q=${userInput}&attributes=product,images`;\r\n\t\treturn `${base}${endpoint}`;\r\n\t};\r\n\r\n\tonSelectHook = autocompleteState => {\r\n\t\tconst { selectedId: sku } = autocompleteState;\r\n\t\tthis.setState({ isLoading: true });\r\n\r\n\t\tthis.delay = cancelableDelay(500);\r\n\r\n\t\tthis.delay.promise.then(() => {\r\n\t\t\tthis.setState({ isLoading: false });\r\n\t\t\tthis.props.onSelectOption(sku, autocompleteState);\r\n\t\t});\r\n\t};\r\n}\r\n","import api from '../../../Api';\r\nimport TitleType from '../../../types/Title';\r\nimport { DrcProducts } from '../../../types';\r\nimport { useQuery } from 'react-query';\r\nimport CacheKeysEnum from '../../../CacheKeysEnum';\r\n\r\nexport type UseWebReaderProductsType = {\r\n\tisLoading: boolean;\r\n\tgetActive: () => TitleType[];\r\n\tgetExpired: () => TitleType[];\r\n\texists: (skuOrEan: string) => boolean;\r\n\tisActive: (skuOrEan: string) => boolean;\r\n\tisExpired: (skuOrEan: string) => boolean;\r\n\tgetLastAccessedDate: (sku: string) => string | null;\r\n\tgetPercentOfBookCompleted: (sku: string) => number;\r\n};\r\n\r\nconst initialState: DrcProducts = {\r\n\tactiveProducts: [],\r\n\texpiredProducts: [],\r\n\tlastReadPositionBySku: {},\r\n};\r\n\r\nexport default function useWebReaderProducts(): UseWebReaderProductsType {\r\n\tconst { data: webReaderDrcProducts, isLoading } = useQuery<DrcProducts>(\r\n\t\tCacheKeysEnum.WebReaderDrcProducts,\r\n\t\tfetchWebReaderProducts,\r\n\t);\r\n\r\n\tconst getWebReaderDrcProducts = (): DrcProducts => {\r\n\t\tif (!webReaderDrcProducts) return initialState;\r\n\t\treturn webReaderDrcProducts;\r\n\t};\r\n\r\n\tconst webReaderProducts: DrcProducts = getWebReaderDrcProducts();\r\n\r\n\tconst getAllProducts = () => {\r\n\t\treturn [\r\n\t\t\t...webReaderProducts.activeProducts,\r\n\t\t\t...webReaderProducts.expiredProducts,\r\n\t\t];\r\n\t};\r\n\r\n\tconst hasLastReadPosition = (sku: string): boolean => {\r\n\t\treturn (\r\n\t\t\twebReaderProducts.lastReadPositionBySku &&\r\n\t\t\twebReaderProducts.lastReadPositionBySku[sku] &&\r\n\t\t\ttypeof webReaderProducts.lastReadPositionBySku[sku] === 'object' &&\r\n\t\t\twebReaderProducts.lastReadPositionBySku[sku] !== null &&\r\n\t\t\tObject.keys(webReaderProducts.lastReadPositionBySku[sku]).length ===\r\n\t\t\t\t2\r\n\t\t);\r\n\t};\r\n\r\n\treturn {\r\n\t\tisLoading,\r\n\t\tgetActive: () => webReaderProducts.activeProducts,\r\n\t\tgetExpired: () => webReaderProducts.expiredProducts,\r\n\t\texists: (skuOrEan: string) => exists(skuOrEan, getAllProducts()),\r\n\t\tisActive: (skuOrEan: string) =>\r\n\t\t\texists(skuOrEan, webReaderProducts.activeProducts),\r\n\t\tisExpired: (skuOrEan: string) =>\r\n\t\t\texists(skuOrEan, webReaderProducts.expiredProducts),\r\n\t\tgetLastAccessedDate: (sku: string): string | null => {\r\n\t\t\tif (hasLastReadPosition(sku)) {\r\n\t\t\t\treturn webReaderProducts.lastReadPositionBySku[sku].created;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tgetPercentOfBookCompleted: (sku: string): number => {\r\n\t\t\tif (hasLastReadPosition(sku)) {\r\n\t\t\t\treturn webReaderProducts.lastReadPositionBySku[sku]\r\n\t\t\t\t\t.percentOfBookCompleted;\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t},\r\n\t};\r\n}\r\n\r\nasync function fetchWebReaderProducts(): Promise<DrcProducts> {\r\n\ttry {\r\n\t\tconst endpoint = '/api/me/galleys/reader/viewed';\r\n\t\tconst drcProducts: DrcProducts = await api.get(endpoint);\r\n\t\treturn drcProducts;\r\n\t} catch (err) {\r\n\t\treturn initialState;\r\n\t}\r\n}\r\n\r\nfunction exists(skuOrEan: string, products: TitleType[]): boolean {\r\n\tconst skus: string[] = getSkus(products);\r\n\tconst eans: string[] = getEans(products);\r\n\treturn skus.includes(skuOrEan) || eans.includes(skuOrEan);\r\n}\r\n\r\nconst isValid = (sku: string) => typeof sku === 'string' && sku.length > 0;\r\n\r\nfunction getSkus(products: TitleType[]): string[] {\r\n\treturn select(products, 'sku');\r\n}\r\n\r\nfunction getEans(products: TitleType[]): string[] {\r\n\treturn select(products, 'ean');\r\n}\r\n\r\nfunction select(products: TitleType[], field: string): string[] {\r\n\treturn products.filter(p => isValid(p[field])).map(p => p[field]);\r\n}\r\n","import EdelweissReaderLink from '../ReviewCopy/EdelweissReaderLink';\r\nimport { useWebReaderGalleyAccess } from '../hooks/useWebReaderGalleyAccess';\r\nimport DrcActionDownloadOption from './DrcActionDownloadOption';\r\nimport DrcActionRequestOption from './DrcActionRequestOption';\r\n\r\nexport const TitleActionsScroller = ({\r\n\ttitle,\r\n\ttooltipPlacement,\r\n\tdoAllowOpenReviewCopyActionOnMount,\r\n}) => {\r\n\tconst { sku } = title;\r\n\tconst { hasWebReaderGalleyAccess } = useWebReaderGalleyAccess();\r\n\r\n\treturn (\r\n\t\t<div className=\"list-action-frame\" style={{ marginRight: '10px' }}>\r\n\t\t\t{hasWebReaderGalleyAccess(sku) && (\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"column-right\"\r\n\t\t\t\t\tstyle={{ marginBottom: '5px', marginTop: '5px' }}>\r\n\t\t\t\t\t<EdelweissReaderLink title={title} buttonType=\"round\" />\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t{(title.isDownloadable || title.isRequestable) && (\r\n\t\t\t\t<div style={{ marginTop: '5px' }}>\r\n\t\t\t\t\t{title.isDownloadable ? (\r\n\t\t\t\t\t\t<DrcActionDownloadOption\r\n\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t\ttooltipPlacement={tooltipPlacement}\r\n\t\t\t\t\t\t\tdoAllowOpenReviewCopyActionOnMount={\r\n\t\t\t\t\t\t\t\tdoAllowOpenReviewCopyActionOnMount\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<DrcActionRequestOption\r\n\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t\ttooltipPlacement={tooltipPlacement}\r\n\t\t\t\t\t\t\tdoAllowOpenReviewCopyActionOnMount={\r\n\t\t\t\t\t\t\t\tdoAllowOpenReviewCopyActionOnMount\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t<div className=\"clear\" />\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nTitleActionsScroller.defaultProps = {\r\n\tdoAllowOpenReviewCopyActionOnMount: false,\r\n};\r\n\r\nexport default TitleActionsScroller;\r\n","import React from 'react';\r\n\r\n/**\r\n * @param {Element} Context\r\n * @param {String} nameOfDataStore\r\n * @returns {Function}\r\n */\r\nexport default (Context, nameOfDataStore) => (Component, mapStoreToProps) => {\r\n\treturn props => {\r\n\t\treturn (\r\n\t\t\t<Context.Consumer>\r\n\t\t\t\t{dataStore => {\r\n\t\t\t\t\tif (typeof mapStoreToProps === 'function') {\r\n\t\t\t\t\t\tconst storeProps = mapStoreToProps(dataStore, props);\r\n\t\t\t\t\t\treturn <Component {...storeProps} {...props} />;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst fallbackProps = {\r\n\t\t\t\t\t\t[nameOfDataStore]: dataStore,\r\n\t\t\t\t\t\t...props,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\treturn <Component {...fallbackProps} />;\r\n\t\t\t\t}}\r\n\t\t\t</Context.Consumer>\r\n\t\t);\r\n\t};\r\n};\r\n","import { RegistrationTypes } from './AnonymousHeader/RegistrationModal/RegistrationEnums';\r\n\r\nconst getModalTitle = (type: string, isMustHaveAccountModal: boolean) => {\r\n\tswitch (type) {\r\n\t\tcase RegistrationTypes.SignUp:\r\n\t\t\treturn isMustHaveAccountModal\r\n\t\t\t\t? 'you_must_have_an_edelweiss_account'\r\n\t\t\t\t: 'sign_up_for_an_edelweiss_account';\r\n\t\tcase RegistrationTypes.LogIn:\r\n\t\t\treturn 'log_in_with_your_edelweiss_account';\r\n\t\tdefault:\r\n\t\t\treturn type;\r\n\t}\r\n};\r\n\r\nexport const getRegistrationModalTitle = (type: string) => {\r\n\treturn getModalTitle(type, false);\r\n};\r\n\r\nexport const getAccountRequiredModalTitle = (type: string) => {\r\n\treturn getModalTitle(type, true);\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { MentionsInput, Mention } from 'react-mentions';\r\nimport { Popover } from 'antd';\r\nimport TitleAutocomplete from '../../../Title/TitleAutocomplete';\r\nimport classNames from 'classnames';\r\nimport './commentInputWithMentioning.less';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nCommentInputWithMentioning.propTypes = {\r\n\tclassName: PropTypes.string,\r\n\tplaceholderText: PropTypes.string,\r\n\tcomment: PropTypes.string,\r\n\tonChangeEvent: PropTypes.func,\r\n\tisOnModal: PropTypes.bool,\r\n};\r\n\r\nCommentInputWithMentioning.defaultProps = {\r\n\tisOnModal: false,\r\n};\r\n\r\nfunction CommentInputWithMentioning({\r\n\tclassName,\r\n\tplaceholderText,\r\n\tcomment,\r\n\tonChangeEvent,\r\n\tisOnModal,\r\n}) {\r\n\tconst [text, setText] = React.useState(comment || '');\r\n\tconst [isTagging, setIsTagging] = React.useState(false);\r\n\tconst [plainText, setPlainText] = React.useState('');\r\n\tconst [mentions, setMentions] = React.useState([]);\r\n\tconst [textInput, setTextInput] = React.useState(null);\r\n\tconst setTextInputRef = element => {\r\n\t\tsetTextInput(element);\r\n\t};\r\n\r\n\tconst onChange = (e, newValue, plainText, allMentions) => {\r\n\t\tsetTextValue(newValue);\r\n\t\tsetIsTagging(plainText[textInput.selectionStart - 1] === '@');\r\n\t\tsetMentions(allMentions);\r\n\t\tsetPlainText(plainText);\r\n\t};\r\n\r\n\tconst setTextValue = value => {\r\n\t\tsetText(value);\r\n\t\tif (typeof onChangeEvent === 'function') onChangeEvent(value);\r\n\t};\r\n\r\n\tconst mentionTitleInComment = (sku, instance) => {\r\n\t\tconst caretIndex = textInput.selectionStart;\r\n\t\tconst titleTag = `[${instance.selectedDisplayName}](${sku})`;\r\n\t\tconst textToSave = insertTitleIntoComment(caretIndex, titleTag);\r\n\t\tsetTextValue(textToSave);\r\n\t\tsetIsTagging(false);\r\n\t\ttextInput.focus();\r\n\t};\r\n\r\n\tconst getTitleTagInsertionIndex = caretIndex => {\r\n\t\tlet insertionIndex = caretIndex;\r\n\t\tconst specialCharacterCount = 5;\r\n\t\tmentions.forEach(mention => {\r\n\t\t\tlet indicesToAddForMarkup =\r\n\t\t\t\tmention.id.length + specialCharacterCount;\r\n\t\t\tif (mention.index < insertionIndex) {\r\n\t\t\t\tinsertionIndex += indicesToAddForMarkup;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn insertionIndex;\r\n\t};\r\n\r\n\tconst insertTitleIntoComment = (caretIndex, titleTag) => {\r\n\t\tlet commentWithTitle;\r\n\t\tif (plainText.length === caretIndex) {\r\n\t\t\tcommentWithTitle = `${text}${titleTag}`;\r\n\t\t} else {\r\n\t\t\tlet insertionIndex = getTitleTagInsertionIndex(caretIndex);\r\n\t\t\tcommentWithTitle =\r\n\t\t\t\ttext.slice(0, insertionIndex) +\r\n\t\t\t\ttitleTag +\r\n\t\t\t\ttext.slice(insertionIndex);\r\n\t\t}\r\n\t\treturn commentWithTitle;\r\n\t};\r\n\r\n\tconst autocompleteClasses = classNames(\r\n\t\t'comment-frame-autocomplete-popover',\r\n\t\t{\r\n\t\t\t'is-on-modal': isOnModal,\r\n\t\t\t'is-not-on-modal': !isOnModal,\r\n\t\t},\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Popover\r\n\t\t\tvisible={isTagging}\r\n\t\t\tdestroyTooltipOnHide={true}\r\n\t\t\toverlayClassName={autocompleteClasses}\r\n\t\t\tcontent={\r\n\t\t\t\t<TitleAutocomplete\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\t<Translate id=\"click_here_to_search_for_titles\" />\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonSelectOption={mentionTitleInComment}\r\n\t\t\t\t\tautoFocus={true}\r\n\t\t\t\t/>\r\n\t\t\t}>\r\n\t\t\t<div onClick={() => setIsTagging(false)} className={className}>\r\n\t\t\t\t<MentionsInput\r\n\t\t\t\t\tclassName=\"comments-text-area\"\r\n\t\t\t\t\tplaceholder={placeholderText}\r\n\t\t\t\t\tvalue={text}\r\n\t\t\t\t\tonChange={onChange}\r\n\t\t\t\t\tinputRef={setTextInputRef}>\r\n\t\t\t\t\t<Mention data={[]} />\r\n\t\t\t\t</MentionsInput>\r\n\t\t\t</div>\r\n\t\t</Popover>\r\n\t);\r\n}\r\n\r\nexport default CommentInputWithMentioning;\r\n","import { Link } from 'react-router-dom';\r\nimport { useTranslate } from '@above-the-treeline/localization';\r\n\r\nconst CommunityGuidelinesLink = () => {\r\n\tconst { translate } = useTranslate();\r\n\tconst url =\r\n\t\t'https://www.abovethetreeline.com/edelweiss-community-guidelines/';\r\n\treturn (\r\n\t\t<div className=\"community-guidelines-link-container\">\r\n\t\t\t<Link to={{ pathname: url }} target=\"_blank\">\r\n\t\t\t\t{translate('community_guidelines')}\r\n\t\t\t</Link>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default CommunityGuidelinesLink;\r\n","import React from 'react';\r\nimport LocalizedDate from '../../Localization/LocalizedDate';\r\nimport TitleDetailDrawer from '../TitleDetailDrawer';\r\n\r\nexport default function TitleBaseMeta({\r\n\tproduct,\r\n\tformat,\r\n\tdisableLink,\r\n\tcommunityId,\r\n}) {\r\n\tconst renderFrontListBackList = pubDate => {\r\n\t\tif (new Date(pubDate) > new Date()) {\r\n\t\t\treturn 'FRONTLIST';\r\n\t\t} else {\r\n\t\t\treturn 'BACKLIST';\r\n\t\t}\r\n\t};\r\n\r\n\tconst renderProductNameWithDrawer = () => {\r\n\t\treturn (\r\n\t\t\t<TitleDetailDrawer sku={product.sku} communityId={communityId}>\r\n\t\t\t\t<span className=\"acc-font\">{product.name}</span>\r\n\t\t\t</TitleDetailDrawer>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderProductName = () => {\r\n\t\treturn disableLink ? (\r\n\t\t\t<span>{product.name}</span>\r\n\t\t) : (\r\n\t\t\trenderProductNameWithDrawer()\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<React.Fragment>\r\n\t\t\t<div\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tfontWeight: 'bold',\r\n\t\t\t\t\tfontSize: `${format === 'simple' ? 18 : 22}px`,\r\n\t\t\t\t\tmarginTop: '2px',\r\n\t\t\t\t}}>\r\n\t\t\t\t{renderProductName()}\r\n\t\t\t</div>\r\n\t\t\t<div\r\n\t\t\t\tclassName=\"dotDot\"\r\n\t\t\t\tstyle={{ fontSize: `${format === 'simple' ? 14 : 16}px` }}>\r\n\t\t\t\t{product.author}\r\n\t\t\t\t{product.series && (\r\n\t\t\t\t\t<span> • Series: {product.series}</span>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t\t<div className=\"dotDot\">\r\n\t\t\t\t{product.supplier} • \r\n\t\t\t\t<span className=\"bold\">\r\n\t\t\t\t\t{renderFrontListBackList(product.pubDate)}\r\n\t\t\t\t</span>\r\n\t\t\t\t | \r\n\t\t\t\t<LocalizedDate dateString={product.pubDate} />\r\n\t\t\t</div>\r\n\t\t\t<div className=\"dotDot\">\r\n\t\t\t\t{product.format} • \r\n\t\t\t\t{product.formattedPrices}\r\n\t\t\t</div>\r\n\t\t\t<div className=\"dotDot\">\r\n\t\t\t\t{product.ean} • \r\n\t\t\t\t{product.pages} pages • \r\n\t\t\t\t{product.measurements}\r\n\t\t\t</div>\r\n\t\t\t{format !== 'simple' && <div>{product.category}</div>}\r\n\t\t</React.Fragment>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ScrollerType from './ScrollerType.js';\r\n\r\nexport const ScrollerConfigContext = React.createContext();\r\n\r\nconst ScrollerConfigurationModel = PropTypes.shape({\r\n\tscrollerType: PropTypes.string,\r\n});\r\n\r\nScrollerConfigProvider.propTypes = {\r\n\tchildren: PropTypes.element,\r\n\tscrollerConfig: PropTypes.shape({\r\n\t\tmobile: ScrollerConfigurationModel,\r\n\t\tdesktop: ScrollerConfigurationModel,\r\n\t}),\r\n};\r\n\r\nScrollerConfigProvider.defaultProps = {\r\n\tscrollerConfig: {\r\n\t\tmobile: { scrollerType: ScrollerType.simpleBar },\r\n\t\tdesktop: { scrollerType: ScrollerType.simpleBar },\r\n\t},\r\n};\r\n\r\nexport function ScrollerConfigProvider({ scrollerConfig, children }) {\r\n\treturn (\r\n\t\t<ScrollerConfigContext.Provider value={scrollerConfig}>\r\n\t\t\t{children}\r\n\t\t</ScrollerConfigContext.Provider>\r\n\t);\r\n}","export enum RegistrationTypes {\r\n\tSignUp = 'sign_up',\r\n\tLogIn = 'log_in',\r\n\tForgotPassword = 'forgot_password',\r\n\tResetPassword = 'reset_password',\r\n}\r\n\r\nexport enum NameTypes {\r\n\tFirstName = 'first',\r\n\tLastName = 'last',\r\n}\r\n","import React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst RegistrationContext = React.createContext();\r\n\r\nconst name = 'registrationDataStore';\r\n\r\nexport const useRegistration = () => React.useContext(RegistrationContext);\r\n\r\nexport const connectToRegistration = makeConnectTo(RegistrationContext, name);\r\n\r\nexport default class RegistrationDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t\tisMobile: PropTypes.func,\r\n\t};\r\n\r\n\tstate = {\r\n\t\tisLoading: true,\r\n\t\tcountries: {},\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst registrationDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<RegistrationContext.Provider value={registrationDataStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(registrationDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</RegistrationContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchCountries();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.countriesFetch && this.countriesFetch.cancel) {\r\n\t\t\tthis.countriesFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefreshCountries: () => this.fetchCountries(),\r\n\t});\r\n\r\n\trefreshCountries = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchCountries();\r\n\t\treturn this.countriesFetch.promise;\r\n\t};\r\n\r\n\tfetchCountries = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/registration/countries`);\r\n\t\trequest.promise.then(this.cacheFetchCountries);\r\n\t\tthis.countriesFetch = request;\r\n\t};\r\n\r\n\tcacheFetchCountries = countries => {\r\n\t\tthis.setState({ countries, isLoading: false });\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport { Button } from 'antd';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport { RegistrationTypes } from '../RegistrationEnums';\r\nimport './registrationModalLinks.less';\r\n\r\ntype RegistrationModalLinksProps = {\r\n\tsetType: (type: string) => void;\r\n\ttype: string;\r\n};\r\n\r\nexport default function RegistrationModalLinks({\r\n\tsetType,\r\n\ttype,\r\n}: RegistrationModalLinksProps): JSX.Element {\r\n\tconst isLogInModal = type === RegistrationTypes.LogIn;\r\n\r\n\tconst getLinkLabel = () => {\r\n\t\tswitch (type) {\r\n\t\t\tcase RegistrationTypes.SignUp:\r\n\t\t\t\treturn <Translate id=\"already_have_an_edelweiss_acount\" />;\r\n\t\t\tcase RegistrationTypes.LogIn:\r\n\t\t\t\treturn <Translate id=\"dont_have_an_edelweiss_account\" />;\r\n\t\t\tdefault:\r\n\t\t\t\treturn <Translate id=\"back_to\" />;\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{isLogInModal &&\r\n\t\t\t\tBoolean(process.env.REACT_APP_DO_SHOW_PASSWORD_EDITOR) && (\r\n\t\t\t\t\t<div className=\"registration-modal-link\">\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\t\t\tsetType(RegistrationTypes.ForgotPassword)\r\n\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t<Translate id=\"forgot_password\" />\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t<div className=\"registration-modal-link\">\r\n\t\t\t\t{getLinkLabel()}\r\n\t\t\t\t<Button\r\n\t\t\t\t\tstyle={{ padding: '0 5px' }}\r\n\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\tsetType(\r\n\t\t\t\t\t\t\t!isLogInModal\r\n\t\t\t\t\t\t\t\t? RegistrationTypes.LogIn\r\n\t\t\t\t\t\t\t\t: RegistrationTypes.SignUp,\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t<Translate id={!isLogInModal ? 'log_in' : 'sign_up'} />\r\n\t\t\t\t</Button>\r\n\t\t\t</div>\r\n\t\t</>\r\n\t);\r\n}\r\n","const ViewType = {\r\n\tPage: 'page',\r\n\tDrawer: 'drawer',\r\n};\r\n\r\nexport default ViewType;\r\n","import ISBN from 'isbn3';\r\n\r\nexport const isIsbn = isbnToValidate => {\r\n\treturn ISBN.parse(isbnToValidate)?.isValid ?? false;\r\n};\r\n","import React from 'react';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport './notAMemberOfAnyCommunityMessage.less';\r\n\r\nfunction NotAMemberOfAnyCommunityMessage() {\r\n\treturn (\r\n\t\t<p className=\"not-a-member-of-any-community-message\">\r\n\t\t\t<Translate id=\"not_member_of_any_communities\" />\r\n\t\t</p>\r\n\t);\r\n}\r\n\r\nexport default NotAMemberOfAnyCommunityMessage;\r\n","import React from 'react';\r\nimport handlePlural from '../../../util/handlePlural';\r\nimport * as Util from '../../../util';\r\nimport PropTypes from 'prop-types';\r\n\r\nThreadSummary.propTypes = {\r\n\tthreads: PropTypes.array,\r\n\tdoIncludeCommunities: PropTypes.bool,\r\n};\r\n\r\nexport default function ThreadSummary({ threads, doIncludeCommunities }) {\r\n\tconst replies =\r\n\t\tthreads && threads.reduce((a, b) => a + (b['children'] || 0), 0);\r\n\r\n\tconst communityIds = threads && Util.groupBy(threads, 'communityId');\r\n\r\n\tconst communitiesWithThreads = communityIds\r\n\t\t? Object.keys(communityIds).length\r\n\t\t: 0;\r\n\r\n\treturn (\r\n\t\t<React.Fragment>\r\n\t\t\t{threads && (\r\n\t\t\t\t<span>\r\n\t\t\t\t\t{handlePlural('thought', threads.length)},{' '}\r\n\t\t\t\t\t{replies.toLocaleString()}{' '}\r\n\t\t\t\t\t{replies === 1 ? 'reply' : 'replies'}\r\n\t\t\t\t\t{doIncludeCommunities && (\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t{', '}\r\n\t\t\t\t\t\t\t{communitiesWithThreads.toLocaleString()}{' '}\r\n\t\t\t\t\t\t\t{communitiesWithThreads === 1\r\n\t\t\t\t\t\t\t\t? 'community'\r\n\t\t\t\t\t\t\t\t: 'communities'}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</span>\r\n\t\t\t)}\r\n\t\t</React.Fragment>\r\n\t);\r\n}\r\n","type ApprovedIconProps = {\r\n\tstyle: React.CSSProperties;\r\n};\r\n\r\nApprovedIcon.defaultProps = {\r\n\tstyle: {},\r\n};\r\n\r\nexport default function ApprovedIcon({ style }: ApprovedIconProps) {\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName=\"icon-approved\"\r\n\t\t\tstyle={{\r\n\t\t\t\tfontSize: '12px',\r\n\t\t\t\tposition: 'absolute',\r\n\t\t\t\tbottom: 6,\r\n\t\t\t\tright: -1,\r\n\t\t\t\tcolor: 'green',\r\n\t\t\t\t...style,\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { useDownloads } from '../Downloads/containers/DownloadsDataStore';\r\nimport ReviewCopyDownloadModalAnchor from '../ReviewCopy/ReviewCopyDownloadModalAnchor';\r\n\r\ntype DrcActionDownloadOptionProps = {\r\n\ttitle: any;\r\n\tchildren?: React.ReactNode;\r\n\ttooltipPlacement: string;\r\n\tdoAllowOpenReviewCopyActionOnMount: boolean;\r\n};\r\n\r\nDrcActionDownloadOption.defaultProps = {\r\n\tdoAllowOpenReviewCopyActionOnMount: false,\r\n};\r\n\r\nexport default function DrcActionDownloadOption({\r\n\ttitle,\r\n\tchildren,\r\n\ttooltipPlacement,\r\n\tdoAllowOpenReviewCopyActionOnMount,\r\n}: DrcActionDownloadOptionProps) {\r\n\tconst { sku } = title;\r\n\tconst downloadsDataStore = useDownloads();\r\n\tconst { downloads, isLoading } = downloadsDataStore.state;\r\n\r\n\tif (isLoading) {\r\n\t\treturn <React.Fragment />;\r\n\t}\r\n\r\n\tconst render = () => {\r\n\t\tconst thisDownload =\r\n\t\t\tdownloads && downloads.filter(req => req.sku === sku);\r\n\t\tif (thisDownload && thisDownload.length > 0) {\r\n\t\t\treturn (\r\n\t\t\t\t<ReviewCopyDownloadModalAnchor\r\n\t\t\t\t\ttitle={title}\r\n\t\t\t\t\ttooltipPlacement={tooltipPlacement}\r\n\t\t\t\t\tdigitalCreatedDate={title.digitalCreatedDate}\r\n\t\t\t\t\tdigitalUpdatedDate={title.digitalUpdatedDate}\r\n\t\t\t\t\tdownloadDate={thisDownload[0].downloadDate}\r\n\t\t\t\t\tdoAllowOpenOnMount={doAllowOpenReviewCopyActionOnMount}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<ReviewCopyDownloadModalAnchor\r\n\t\t\t\t\ttitle={title}\r\n\t\t\t\t\ttooltipPlacement={tooltipPlacement}\r\n\t\t\t\t\tdigitalCreatedDate={title.digitalCreatedDate}\r\n\t\t\t\t\tdigitalUpdatedDate={title.digitalUpdatedDate}\r\n\t\t\t\t\tdoAllowOpenOnMount={doAllowOpenReviewCopyActionOnMount}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!children) {\r\n\t\treturn render();\r\n\t}\r\n\r\n\treturn (\r\n\t\t<div style={{ display: 'flex' }}>\r\n\t\t\t{render()}\r\n\t\t\t{children}\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { useRequests } from '../Requests/containers/RequestsDataStore';\r\nimport ReviewCopyRequestModalAnchor from '../ReviewCopy/ReviewCopyRequestModalAnchor';\r\nimport CancelRequest from '../UI/Actions/CancelRequest';\r\nimport EnableRequest from '../UI/Actions/EnableRequest';\r\n\r\ntype DrcActionRequestOptionProps = {\r\n\ttitle: any;\r\n\tchildren?: React.ReactNode;\r\n\ttooltipPlacement: string;\r\n\tdoAllowOpenReviewCopyActionOnMount: boolean;\r\n};\r\n\r\nDrcActionRequestOption.defaultProps = {\r\n\tdoAllowOpenReviewCopyActionOnMount: false,\r\n};\r\n\r\nexport default function DrcActionRequestOption({\r\n\ttitle,\r\n\tchildren,\r\n\ttooltipPlacement,\r\n\tdoAllowOpenReviewCopyActionOnMount,\r\n}: DrcActionRequestOptionProps) {\r\n\tconst { sku } = title;\r\n\tconst requestsDataStore = useRequests();\r\n\r\n\tconst { requests, isLoading } = requestsDataStore.state;\r\n\r\n\tif (isLoading) {\r\n\t\treturn <React.Fragment />;\r\n\t}\r\n\r\n\tconst render = () => {\r\n\t\tconst thisRequest = requests.find(req => req.sku === sku);\r\n\r\n\t\tif (thisRequest) {\r\n\t\t\tconst { status } = thisRequest;\r\n\r\n\t\t\tif (status === 30) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<EnableRequest\r\n\t\t\t\t\t\tid={thisRequest.id}\r\n\t\t\t\t\t\tsubmittedDate={thisRequest.submittedDate}\r\n\t\t\t\t\t\tdigitalUpdatedDate={title.digitalUpdatedDate}\r\n\t\t\t\t\t\tsku={sku}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<CancelRequest\r\n\t\t\t\t\tid={thisRequest.id}\r\n\t\t\t\t\tsubmittedDate={thisRequest.submittedDate}\r\n\t\t\t\t\tdigitalUpdatedDate={title.digitalUpdatedDate}\r\n\t\t\t\t\tsku={sku}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<ReviewCopyRequestModalAnchor\r\n\t\t\t\ttitle={title}\r\n\t\t\t\ttooltipPlacement={tooltipPlacement}\r\n\t\t\t\tdigitalCreatedDate={title.digitalCreatedDate}\r\n\t\t\t\tdigitalUpdatedDate={title.digitalUpdatedDate}\r\n\t\t\t\tdoAllowOpenOnMount={doAllowOpenReviewCopyActionOnMount}\r\n\t\t\t/>\r\n\t\t);\r\n\t};\r\n\r\n\tif (!children) {\r\n\t\treturn render();\r\n\t}\r\n\r\n\treturn (\r\n\t\t<div style={{ display: 'flex' }}>\r\n\t\t\t{render()}\r\n\t\t\t{children}\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { Button, Tooltip } from 'antd';\r\nimport LocalizedDate from '../../Localization/LocalizedDate';\r\nimport api from '../../../Api';\r\nimport { connectToRequests } from '../../Requests/containers/RequestsDataStore';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\n\r\nexport function EnableRequestLabel({ submittedDate }) {\r\n\treturn (\r\n\t\t<React.Fragment>\r\n\t\t\tEnable cancelled request\r\n\t\t\t<br />\r\n\t\t\t<span style={{ fontSize: 'smaller' }}>\r\n\t\t\t\t(made on <LocalizedDate dateString={submittedDate} />)\r\n\t\t\t</span>\r\n\t\t</React.Fragment>\r\n\t);\r\n}\r\n\r\nexport class EnableRequest extends React.Component {\r\n\trender() {\r\n\t\tif (this.props.isMobile()) {\r\n\t\t\treturn this.renderButton();\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<Tooltip title={this.getTooltip()} placement=\"left\">\r\n\t\t\t\t{this.renderButton()}\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t}\r\n\r\n\trenderButton = () => {\r\n\t\treturn (\r\n\t\t\t<Button shape=\"circle\" onClick={this.enableRequest}>\r\n\t\t\t\t<div className=\"relative\">\r\n\t\t\t\t\t<div className=\"icon-hand-paper-o request-hand\" />\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName=\"icon-undo enable-request\"\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\tfontSize: '9px',\r\n\t\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\t\tbottom: '5px',\r\n\t\t\t\t\t\t\tright: '10px',\r\n\t\t\t\t\t\t\tcolor: '#fc601f',\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</Button>\r\n\t\t);\r\n\t};\r\n\r\n\tgetTooltip() {\r\n\t\tconst { submittedDate } = this.props;\r\n\t\treturn <EnableRequestLabel submittedDate={submittedDate} />;\r\n\t}\r\n\r\n\tenableRequest = () => {\r\n\t\tconst { sku } = this.props;\r\n\r\n\t\tapi.post(`/api/me/galleys/${sku}/enable`).then(res => {\r\n\t\t\tthis.props.requestsDataStore.refresh();\r\n\t\t});\r\n\t};\r\n}\r\n\r\nexport default connectToRequests(withIsMobile(EnableRequest));\r\n","import React from 'react';\r\nimport { ShareTargetType } from '../data/ShareTargetType';\r\nimport ShareTargetCheckbox from './ShareTargetCheckbox';\r\nimport ReviewStepHeader from '../UI/ReviewStepHeader';\r\nimport { useUserReviewEditor } from '../data/UserReviewEditorProvider';\r\nimport './nominationsEditor.css';\r\n\r\nexport default function NominationsEditor() {\r\n\tconst { nominationTargetsEditor } = useUserReviewEditor();\r\n\tconst { getOptions, isNominationSubmitted } = nominationTargetsEditor;\r\n\r\n\tconst nominationOptions = getOptions();\r\n\r\n\tconst renderNominationCheckbox = nominationOption => {\r\n\t\tconst shareTarget = {\r\n\t\t\tid: nominationOption.submissionListId,\r\n\t\t\ttype: ShareTargetType.nomination,\r\n\t\t};\r\n\r\n\t\tconst isSubmitted = isNominationSubmitted(\r\n\t\t\tnominationOption.submissionListId,\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<ShareTargetCheckbox\r\n\t\t\t\tkey={nominationOption.submissionListId}\r\n\t\t\t\tshareTarget={shareTarget}\r\n\t\t\t\tisDisabled={isSubmitted}\r\n\t\t\t\tshareTargetsEditor={nominationTargetsEditor}>\r\n\t\t\t\t{nominationOption.name}\r\n\t\t\t</ShareTargetCheckbox>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"nominations-editor-root editor-root\">\r\n\t\t\t<div className=\"nominations-editor\">\r\n\t\t\t\t<ReviewStepHeader label=\"Nominate\" icon=\"trophy\" />\r\n\t\t\t\t<div className=\"checkbox-container\">\r\n\t\t\t\t\t<div className=\"checkbox-wrapper\">\r\n\t\t\t\t\t\t{nominationOptions.map(renderNominationCheckbox)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport DrawerAnchor from './DrawerAnchor';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\n\r\nResponsiveDrawerAnchor.propTypes = {\r\n\twidth: PropTypes.object,\r\n\tisMobile: PropTypes.func,\r\n\trenderDrawerContent: PropTypes.func,\r\n\theader: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\r\n\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n};\r\n\r\nResponsiveDrawerAnchor.defaultProps = {\r\n\twidth: { mobile: '100%', desktop: '700px' },\r\n};\r\n\r\nfunction ResponsiveDrawerAnchor({\r\n\twidth,\r\n\tisMobile,\r\n\tchildren,\r\n\trenderDrawerContent,\r\n\theader,\r\n}) {\r\n\tconst isMobileSize = isMobile();\r\n\treturn (\r\n\t\t<DrawerAnchor\r\n\t\t\tclosable={isMobileSize}\r\n\t\t\twidth={isMobileSize ? width.mobile : width.desktop}\r\n\t\t\tplacement={isMobileSize ? 'bottom' : 'left'}\r\n\t\t\theight={isMobileSize ? '90%' : '100%'}\r\n\t\t\ttitle={header}\r\n\t\t\trenderDrawerContent={renderDrawerContent}>\r\n\t\t\t{children}\r\n\t\t</DrawerAnchor>\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(ResponsiveDrawerAnchor);\r\n","import Title from './../../types/Title';\r\n\r\nexport const getTitleJacketUri = (\r\n\tproduct: Title,\r\n\theight = 600,\r\n): string | null => {\r\n\tconst jacketCover = product?.images?.filter(\r\n\t\tim => im.type === 'jacketCover',\r\n\t);\r\n\tconst uri =\r\n\t\tjacketCover?.length > 0\r\n\t\t\t? jacketCover[0].uri + `?height=${height}`\r\n\t\t\t: null;\r\n\treturn uri;\r\n};\r\n","import { Tooltip } from 'antd';\r\nimport React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\n\r\nexport class TitleReviewBursts extends React.Component {\r\n\trender() {\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\tconst { reviews, rating } = this.props;\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t{reviews > 0 && (\r\n\t\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t\t\t<span style={{ fontSize: '11px' }}>\r\n\t\t\t\t\t\t\t\t\t# of Reviews\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tplacement=\"bottom\">\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName={`burst-12 ${\r\n\t\t\t\t\t\t\t\t\t!isMobile\r\n\t\t\t\t\t\t\t\t\t\t? 'review-count-badge'\r\n\t\t\t\t\t\t\t\t\t\t: 'review-count-badge-mobile'\r\n\t\t\t\t\t\t\t\t}`}>\r\n\t\t\t\t\t\t\t\t<div>{reviews}</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t\t\t<span style={{ fontSize: '11px' }}>\r\n\t\t\t\t\t\t\t\t\tAvg Rating (1-10)\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tplacement=\"bottom\">\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName={`burst-12 ${\r\n\t\t\t\t\t\t\t\t\t!isMobile\r\n\t\t\t\t\t\t\t\t\t\t? 'review-rating-badge'\r\n\t\t\t\t\t\t\t\t\t\t: 'review-rating-badge-mobile'\r\n\t\t\t\t\t\t\t\t}`}>\r\n\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t<b>{rating * 1 < 10 ? rating : parseInt(rating)}</b>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t)}\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withIsMobile(TitleReviewBursts);\r\n","import { Collapse, Icon, Progress } from 'antd';\r\nimport React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport * as Util from '../../util';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport Review from './Review';\r\nimport { connectToTitle } from '../Title/containers/TitleDataStore';\r\nimport { connectToCommunities } from '../Communities/containers/communitiesDataStore';\r\nimport combineConnectors from '../util/combineConnectors';\r\nimport { connectToUser } from '../User/containers/UserDataStore';\r\n\r\nconst Panel = Collapse.Panel;\r\n\r\nexport class ReviewsByRating extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tvisible: false,\r\n\t\t\tdataRetrieved: false,\r\n\t\t\treviews: [],\r\n\t\t};\r\n\t}\r\n\r\n\trenderReviews = reviews => {\r\n\t\treturn reviews.map((review, idx) => {\r\n\t\t\treturn <Review review={review} source=\"title\" key={`rev-${idx}`} />;\r\n\t\t});\r\n\t};\r\n\r\n\tgetReviewExpandables = reviews => {\r\n\t\tconst reviewsByRating = Util.groupBy(reviews, 'rating');\r\n\t\tconst { isAnonymous } = this.props.userDataStore;\r\n\t\treturn Object.keys(reviewsByRating)\r\n\t\t\t.reverse()\r\n\t\t\t.map(rating => (\r\n\t\t\t\t<Panel\r\n\t\t\t\t\tdisabled={isAnonymous()}\r\n\t\t\t\t\theader={this.getReviewHeader(\r\n\t\t\t\t\t\trating,\r\n\t\t\t\t\t\tObject.keys(reviewsByRating[rating]).length,\r\n\t\t\t\t\t\treviews.length,\r\n\t\t\t\t\t)}\r\n\t\t\t\t\tkey={rating}>\r\n\t\t\t\t\t{this.renderReviews(\r\n\t\t\t\t\t\treviews.filter(rev => rev.rating == rating),\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Panel>\r\n\t\t\t));\r\n\t};\r\n\r\n\tgetReviewHeader = (rating, reviews, totalReviews) => {\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t<span>\r\n\t\t\t\t\t{reviews} rated <span className=\"bold\">{rating} of 10</span>\r\n\t\t\t\t</span>\r\n\t\t\t\t<Progress\r\n\t\t\t\t\tpercent={parseInt(\r\n\t\t\t\t\t\t((reviews / totalReviews) * 100).toFixed(0),\r\n\t\t\t\t\t)}\r\n\t\t\t\t/>\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { communityId } = this.props;\r\n\t\tconst { areReviewsLoading, reviews } = this.props.titleDataStore.state;\r\n\t\tif (!areReviewsLoading) {\r\n\t\t\tif (reviews && reviews.length > 0) {\r\n\t\t\t\tconst averageRating =\r\n\t\t\t\t\treviews.reduce((a, b) => a + (b['rating'] || 0), 0) /\r\n\t\t\t\t\treviews.length;\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<LaneContainer\r\n\t\t\t\t\t\tmajorHeader={this.getHeader(reviews, averageRating)}>\r\n\t\t\t\t\t\t<Collapse\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\tmarginRight: '20px',\r\n\t\t\t\t\t\t\t\tmarginBottom: '15px',\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\texpandIcon={({ isActive }) => (\r\n\t\t\t\t\t\t\t\t<Icon\r\n\t\t\t\t\t\t\t\t\ttype=\"caret-right\"\r\n\t\t\t\t\t\t\t\t\trotate={isActive ? 90 : 0}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t)}>\r\n\t\t\t\t\t\t\t{this.getReviewExpandables(reviews)}\r\n\t\t\t\t\t\t</Collapse>\r\n\t\t\t\t\t</LaneContainer>\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tif (communityId === 0) {\r\n\t\t\t\t\treturn <LaneContainer majorHeader=\"No Community Reviews\" />;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst { communities } = this.props.communitiesDataStore.state;\r\n\t\t\t\tconst community = communities.filter(\r\n\t\t\t\t\tc => !c.id === communityId,\r\n\t\t\t\t);\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<LaneContainer\r\n\t\t\t\t\t\tmajorHeader={\r\n\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t<span>No </span>\r\n\t\t\t\t\t\t\t\t{community &&\r\n\t\t\t\t\t\t\t\t\tcommunity.length > 0 &&\r\n\t\t\t\t\t\t\t\t\tcommunity[0].name}\r\n\t\t\t\t\t\t\t\t<span>Community Reviews</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<LaneContainer\r\n\t\t\t\t\tmajorHeader={\r\n\t\t\t\t\t\t<span style={{ fontStyle: 'italic', color: '#d2d6d8' }}>\r\n\t\t\t\t\t\t\tLoading Community Reviews...\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeader = (reviews, averageRating) => {\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\treturn !isMobile ? (\r\n\t\t\t<span>\r\n\t\t\t\t{reviews.length} Community Reviews - {averageRating.toFixed(1)}{' '}\r\n\t\t\t\taverage rating\r\n\t\t\t</span>\r\n\t\t) : (\r\n\t\t\t<span>\r\n\t\t\t\t{reviews.length} Community Reviews\r\n\t\t\t\t<br />\r\n\t\t\t\t<span style={{ fontSize: '15px', fontWeight: 'normal' }}>\r\n\t\t\t\t\t{averageRating.toFixed(1)} average rating\r\n\t\t\t\t</span>\r\n\t\t\t</span>\r\n\t\t);\r\n\t};\r\n}\r\n\r\nconst connectors = [\r\n\tconnectToTitle,\r\n\twithIsMobile,\r\n\tconnectToCommunities,\r\n\tconnectToUser,\r\n];\r\n\r\nexport default combineConnectors(connectors)(ReviewsByRating);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Modal } from 'antd';\r\nimport './biblioImageGalleryModal.less';\r\nimport 'react-image-gallery/styles/css/image-gallery.css';\r\nimport ImageGallery from 'react-image-gallery';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport classNames from 'classnames';\r\n\r\nBiblioImageGalleryModal.propTypes = {\r\n\tisVisible: PropTypes.bool,\r\n\tonCancel: PropTypes.func,\r\n\tinteriors: PropTypes.array,\r\n\tisMobile: PropTypes.func,\r\n\tstartIndex: PropTypes.number,\r\n};\r\n\r\nfunction BiblioImageGalleryModal({\r\n\tisVisible,\r\n\tonCancel,\r\n\tinteriors,\r\n\tisMobile,\r\n\tstartIndex,\r\n}) {\r\n\tconst isMobileSize = isMobile();\r\n\tconst [isFullScreen, setIsFullScreen] = React.useState(false);\r\n\tconst images = interiors.map((interior, idx) => {\r\n\t\tconst defaultImgAlt = `Illustration ${idx + 1}`;\r\n\t\treturn {\r\n\t\t\tthumbnailAlt: interior.caption || defaultImgAlt,\r\n\t\t\toriginalAlt: interior.caption || defaultImgAlt,\r\n\t\t\tthumbnail: `${interior.uri}?height=360`,\r\n\t\t\toriginal: `${interior.uri}?width=1000`,\r\n\t\t};\r\n\t});\r\n\r\n\tconst getModalClasses = () =>\r\n\t\tclassNames('biblio-image-gallery-modal', { fullscreen: isFullScreen });\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\tclassName={getModalClasses()}\r\n\t\t\tmask={false}\r\n\t\t\tvisible={isVisible}\r\n\t\t\tfooter={null}\r\n\t\t\tonCancel={onCancel}\r\n\t\t\twidth={isMobileSize ? '100%' : '90%'}\r\n\t\t\tdestroyOnClose={true}>\r\n\t\t\t<ImageGallery\r\n\t\t\t\tonScreenChange={isFullScreenGallery =>\r\n\t\t\t\t\tsetIsFullScreen(isFullScreenGallery)\r\n\t\t\t\t}\r\n\t\t\t\tstartIndex={startIndex}\r\n\t\t\t\titems={images}\r\n\t\t\t\tadditionalClass=\"image-gallery\"\r\n\t\t\t/>\r\n\t\t</Modal>\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(BiblioImageGalleryModal);\r\n","const TitleBiblioDescriptionsEnum = {\r\n\tsummary: {\r\n\t\tLocalizeId: 'desc_summary',\r\n\t},\r\n\tauthorBio: {\r\n\t\tLocalizeId: 'tb_author_bio',\r\n\t},\r\n\tmarketingPlans: {\r\n\t\tLocalizeId: 'marketing_plans',\r\n\t},\r\n\tkeySellingPoints: {\r\n\t\tLocalizeId: 'key_selling_points',\r\n\t},\r\n\tquotes: {\r\n\t\tLocalizeId: 'quotes',\r\n\t},\r\n};\r\n\r\nexport default TitleBiblioDescriptionsEnum;\r\n","//@ts-nocheck\r\n\r\nimport React from 'react';\r\nimport { Card } from 'antd';\r\nimport EdelweissReaderLink from '../ReviewCopy/EdelweissReaderLink';\r\nimport { useWebReaderGalleyAccess } from '../hooks/useWebReaderGalleyAccess';\r\nimport DrcActionDownloadOption from './DrcActionDownloadOption';\r\nimport DrcActionRequestOption from './DrcActionRequestOption';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport { useDownloads } from '../Downloads/containers/DownloadsDataStore';\r\nimport LocalizedDate from '../Localization/LocalizedDate';\r\nimport ReviewCopyActionTooltip from '../ReviewCopy/ReviewCopyActionTooltip';\r\nimport { CancelRequestLabel } from '../UI/Actions/CancelRequest';\r\nimport { EnableRequestLabel } from '../UI/Actions/EnableRequest';\r\nimport { useRequests } from '../Requests/containers/RequestsDataStore';\r\nimport TitleType from '../../types/Title';\r\nimport './drcActionsCard.less';\r\n\r\ntype DrcActionsCardProps = {\r\n\ttitle: TitleType;\r\n};\r\n\r\nexport default function DrcActionsCard({ title }: DrcActionsCardProps) {\r\n\tconst { sku } = title;\r\n\tconst { hasWebReaderGalleyAccess } = useWebReaderGalleyAccess();\r\n\r\n\tconst downloadsDataStore = useDownloads();\r\n\tconst requestsDataStore = useRequests();\r\n\r\n\tconst getDownloadOptionLabel = () => {\r\n\t\tconst { downloads, isLoading } = downloadsDataStore.state;\r\n\t\tif (isLoading) return <React.Fragment />;\r\n\r\n\t\tconst download = downloads && downloads.find(req => req.sku === sku);\r\n\t\tif (!download) {\r\n\t\t\treturn (\r\n\t\t\t\t<ReviewCopyActionTooltip\r\n\t\t\t\t\theaderText={<Translate id=\"download_the_drc\" />}\r\n\t\t\t\t\tcreatedDate={title.digitalCreatedDate}\r\n\t\t\t\t\tupdatedDate={title.digitalUpdatedDate}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<Translate id=\"drc_downloaded\" />\r\n\t\t\t\t \r\n\t\t\t\t{download.downloadDate && (\r\n\t\t\t\t\t<LocalizedDate dateString={download.downloadDate} />\r\n\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t);\r\n\t};\r\n\r\n\tconst getRequestOptionLabel = () => {\r\n\t\tconst { requests, isLoading } = requestsDataStore.state;\r\n\r\n\t\tif (isLoading) {\r\n\t\t\treturn <React.Fragment />;\r\n\t\t}\r\n\r\n\t\tconst drcRequest = requests.find(req => req.sku === sku);\r\n\r\n\t\tif (drcRequest) {\r\n\t\t\tif (drcRequest.status === 30) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<EnableRequestLabel\r\n\t\t\t\t\t\tsubmittedDate={drcRequest.submittedDate}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<CancelRequestLabel submittedDate={drcRequest.submittedDate} />\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<ReviewCopyActionTooltip\r\n\t\t\t\theaderText={'Request DRC'}\r\n\t\t\t\tcreatedDate={title.digitalCreatedDate}\r\n\t\t\t\tupdatedDate={title.digitalUpdatedDate}\r\n\t\t\t/>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Card className=\"drc-actions-card\" size=\"small\">\r\n\t\t\t{hasWebReaderGalleyAccess(sku) && (\r\n\t\t\t\t<div className=\"drc-action-btn-container\">\r\n\t\t\t\t\t<EdelweissReaderLink title={title} buttonType=\"round\" />\r\n\t\t\t\t\t<div className=\"drc-action-label\">\r\n\t\t\t\t\t\t<Translate id=\"read_online\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t{(title.isDownloadable || title.isRequestable) && (\r\n\t\t\t\t<div style={{ marginTop: '5px' }}>\r\n\t\t\t\t\t{title.isDownloadable ? (\r\n\t\t\t\t\t\t<div className=\"drc-action-btn-container\">\r\n\t\t\t\t\t\t\t<DrcActionDownloadOption\r\n\t\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t\t\ttooltipPlacement={''}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<div className=\"drc-action-label\">\r\n\t\t\t\t\t\t\t\t{getDownloadOptionLabel()}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<div className=\"drc-action-btn-container\">\r\n\t\t\t\t\t\t\t<DrcActionRequestOption\r\n\t\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t\t\ttooltipPlacement={''}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<div className=\"drc-action-label\">\r\n\t\t\t\t\t\t\t\t{getRequestOptionLabel()}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t<div className=\"clear\" />\r\n\t\t</Card>\r\n\t);\r\n}\r\n","import { Collapse, Icon, Button, Tooltip, Popover, Input, message } from 'antd';\r\nimport React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport { connectToTitle } from './containers/TitleDataStore';\r\nimport TitleBaseMeta from './UI/TitleBaseMeta';\r\nimport { TitleExport } from '../Titles/Export/TitleExport';\r\nimport BiblioImageGalleryModal from './UI/BiblioImageGalleryModal/BiblioImageGalleryModal';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport TitleBiblioDescriptionsEnum from './TitleBiblioDescriptionsEnum';\r\nimport { connectToUser } from '../User/containers/UserDataStore';\r\nimport { connectToAccountOrMembershipRequiredModalContext } from '../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\nimport combineConnectors from '../util/combineConnectors';\r\nimport DrcActionsCard from './DrcActionsCard';\r\nimport './titleBiblio.less';\r\nimport ParseContent from '../ParseContent';\r\n\r\nconst Panel = Collapse.Panel;\r\n\r\nconst titleBiblioDescriptionsKeys = Object.keys(TitleBiblioDescriptionsEnum);\r\n\r\nexport class TitleBiblio extends React.Component {\r\n\tstate = {\r\n\t\tgalleryModal: {\r\n\t\t\tisVisible: false,\r\n\t\t\tstartIndex: 0,\r\n\t\t},\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst {\r\n\t\t\ttitleDataStore,\r\n\t\t\tuserDataStore: { isAnonymous },\r\n\t\t\taccountOrMembershipRequiredModalContext: { setIsVisible },\r\n\t\t\tisMobile,\r\n\t\t} = this.props;\r\n\t\tconst {\r\n\t\t\tisProductDataLoading,\r\n\t\t\ttitle,\r\n\t\t\tisCollaborativeListDataLoading,\r\n\t\t\tcollaborativeLists,\r\n\t\t} = titleDataStore.state;\r\n\r\n\t\tif (!isProductDataLoading && !isCollaborativeListDataLoading) {\r\n\t\t\tconst {\r\n\t\t\t\tdownloadableSkus,\r\n\t\t\t\trequestableSkus,\r\n\t\t\t\tdigitalCopyInfo,\r\n\t\t\t} = collaborativeLists;\r\n\t\t\ttitle.isDownloadable =\r\n\t\t\t\tdownloadableSkus && downloadableSkus.includes(title.sku);\r\n\t\t\ttitle.isRequestable =\r\n\t\t\t\trequestableSkus && requestableSkus.includes(title.sku);\r\n\r\n\t\t\tconst availableReviewCopyFormats = digitalCopyInfo.filter(\r\n\t\t\t\tdci => dci.sku === title.sku,\r\n\t\t\t);\r\n\t\t\ttitle.availableReviewCopyFormats = availableReviewCopyFormats;\r\n\r\n\t\t\tif (\r\n\t\t\t\tavailableReviewCopyFormats &&\r\n\t\t\t\tavailableReviewCopyFormats.length &&\r\n\t\t\t\tavailableReviewCopyFormats[0]\r\n\t\t\t) {\r\n\t\t\t\tvar availableReviewCopyFormat = availableReviewCopyFormats[0];\r\n\t\t\t\ttitle.digitalCreatedDate =\r\n\t\t\t\t\tavailableReviewCopyFormat.createdDate;\r\n\t\t\t\ttitle.digitalUpdatedDate =\r\n\t\t\t\t\tavailableReviewCopyFormat.updatedDate;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst hasInteriors =\r\n\t\t\ttitle &&\r\n\t\t\ttitle.images &&\r\n\t\t\ttitle.images.filter(im => im.type === 'interior').length > 0;\r\n\t\tconst { disableLink, source } = this.props;\r\n\t\treturn (\r\n\t\t\t<div className=\"title-biblio\">\r\n\t\t\t\t{!isProductDataLoading &&\r\n\t\t\t\t\tisMobile() &&\r\n\t\t\t\t\t(title.isDownloadable || title.isRequestable) && (\r\n\t\t\t\t\t\t<div style={{ marginBottom: 10 }}>\r\n\t\t\t\t\t\t\t<DrcActionsCard title={title} />\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t{!isProductDataLoading && (\r\n\t\t\t\t\t<LaneContainer>\r\n\t\t\t\t\t\t{title.sku ? (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<div style={{ paddingRight: '20px' }}>\r\n\t\t\t\t\t\t\t\t\t<TitleBaseMeta\r\n\t\t\t\t\t\t\t\t\t\tproduct={title}\r\n\t\t\t\t\t\t\t\t\t\tdisableLink={disableLink && disableLink}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<Collapse\r\n\t\t\t\t\t\t\t\t\tdefaultActiveKey={\r\n\t\t\t\t\t\t\t\t\t\ttitleBiblioDescriptionsKeys[0]\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\taccordion\r\n\t\t\t\t\t\t\t\t\tclassName={`collapse-container ${\r\n\t\t\t\t\t\t\t\t\t\tisMobile()\r\n\t\t\t\t\t\t\t\t\t\t\t? 'standard-collapse-mobile'\r\n\t\t\t\t\t\t\t\t\t\t\t: 'standard-collapse'\r\n\t\t\t\t\t\t\t\t\t}`}\r\n\t\t\t\t\t\t\t\t\tbordered={false}\r\n\t\t\t\t\t\t\t\t\texpandIcon={({ isActive }) => (\r\n\t\t\t\t\t\t\t\t\t\t<Icon\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"caret-right\"\r\n\t\t\t\t\t\t\t\t\t\t\trotate={isActive ? 90 : 0}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t)}>\r\n\t\t\t\t\t\t\t\t\t{hasInteriors &&\r\n\t\t\t\t\t\t\t\t\t\tthis.getInteriorsPanel(title)}\r\n\t\t\t\t\t\t\t\t\t{this.getPanels(title)}\r\n\t\t\t\t\t\t\t\t</Collapse>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<p className=\"issue-loading-title-details-message\">\r\n\t\t\t\t\t\t\t\t<Translate id=\"issue_loading_title_details\" />\r\n\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</LaneContainer>\r\n\t\t\t\t)}\r\n\t\t\t\t{source === 'titleDetail' && title && title.sku && (\r\n\t\t\t\t\t<div className=\"export\">\r\n\t\t\t\t\t\t{this.renderShareTitleButton()}\r\n\t\t\t\t\t\t{isAnonymous() ? (\r\n\t\t\t\t\t\t\t<div onClick={() => setIsVisible(true)}>\r\n\t\t\t\t\t\t\t\t{this.renderExportTitleInfoButton()}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<TitleExport skus={title && title.sku.split(',')}>\r\n\t\t\t\t\t\t\t\t{this.renderExportTitleInfoButton()}\r\n\t\t\t\t\t\t\t</TitleExport>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\trenderShareTitleButton = () => {\r\n\t\treturn (\r\n\t\t\t<Popover\r\n\t\t\t\ttrigger=\"click\"\r\n\t\t\t\tcontent={this.renderShareTitleContent()}\r\n\t\t\t\toverlayStyle={{\r\n\t\t\t\t\twidth: '400px',\r\n\t\t\t\t}}>\r\n\t\t\t\t<Tooltip title=\"Share this title\">\r\n\t\t\t\t\t<Button shape=\"circle\">\r\n\t\t\t\t\t\t<div className=\"icon-share-alt\" />\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</Tooltip>\r\n\t\t\t</Popover>\r\n\t\t);\r\n\t};\r\n\r\n\trenderShareTitleContent = () => {\r\n\t\tconst { titleDataStore } = this.props;\r\n\t\tconst { title } = titleDataStore.state;\r\n\t\tconst { sku } = title;\r\n\r\n\t\tconst base = window.location.origin;\r\n\t\tconst url = `${base}/title/${sku}`;\r\n\r\n\t\tconst onClick = () => {\r\n\t\t\tnavigator.clipboard.writeText(url);\r\n\t\t\tmessage.success('Copied to clipboard.');\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"share-title-content\">\r\n\t\t\t\t<Input value={url} />\r\n\t\t\t\t<Tooltip title=\"Copy url to clipboard\">\r\n\t\t\t\t\t<Button icon=\"copy\" onClick={onClick} />\r\n\t\t\t\t</Tooltip>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderExportTitleInfoButton = () => {\r\n\t\treturn (\r\n\t\t\t<Tooltip title=\"Export title information\" placement=\"leftTop\">\r\n\t\t\t\t<Button shape=\"circle\">\r\n\t\t\t\t\t<div className=\"icon-export share-icon\"></div>\r\n\t\t\t\t</Button>\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t};\r\n\r\n\tshowBiblioImageGalleyModal = idx => {\r\n\t\tthis.setState({ galleryModal: { isVisible: true, startIndex: idx } });\r\n\t};\r\n\r\n\thideBiblioImageGalleryModal = () =>\r\n\t\tthis.setState({ galleryModal: { isVisible: false, startIndex: 0 } });\r\n\r\n\tgetInteriorsPanel(title) {\r\n\t\tconst interiors = title.images.filter(im => im.type === 'interior');\r\n\t\tconst { isVisible, startIndex } = this.state.galleryModal;\r\n\t\treturn (\r\n\t\t\t<Panel\r\n\t\t\t\theader={\r\n\t\t\t\t\t<Translate\r\n\t\t\t\t\t\tid=\"images_with_quantity_in_parenthesis\"\r\n\t\t\t\t\t\tdata={{ quantity: interiors.length }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t}\r\n\t\t\t\tkey=\"interiors\">\r\n\t\t\t\t<BiblioImageGalleryModal\r\n\t\t\t\t\tisVisible={isVisible}\r\n\t\t\t\t\tonCancel={this.hideBiblioImageGalleryModal}\r\n\t\t\t\t\tinteriors={interiors}\r\n\t\t\t\t\tstartIndex={startIndex}\r\n\t\t\t\t/>\r\n\t\t\t\t{interiors.map((interior, idx) => (\r\n\t\t\t\t\t<div className=\"column-spaced images-section\" key={idx}>\r\n\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\talt={title.name}\r\n\t\t\t\t\t\t\tonClick={() => this.showBiblioImageGalleyModal(idx)}\r\n\t\t\t\t\t\t\tsrc={`${interior.uri}?height=360`}\r\n\t\t\t\t\t\t\tclassName=\"title-image-thumbnail\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t))}\r\n\t\t\t\t<div className=\"clear\" />\r\n\t\t\t</Panel>\r\n\t\t);\r\n\t}\r\n\r\n\tgetPanels = title =>\r\n\t\ttitleBiblioDescriptionsKeys.map(titleBiblioDescriptionsKey =>\r\n\t\t\ttitle &&\r\n\t\t\ttitle.descriptions &&\r\n\t\t\ttitle.descriptions[titleBiblioDescriptionsKey] ? (\r\n\t\t\t\t<Panel\r\n\t\t\t\t\theader={\r\n\t\t\t\t\t\t<Translate\r\n\t\t\t\t\t\t\tid={\r\n\t\t\t\t\t\t\t\tTitleBiblioDescriptionsEnum[\r\n\t\t\t\t\t\t\t\t\ttitleBiblioDescriptionsKey\r\n\t\t\t\t\t\t\t\t].LocalizeId\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t}\r\n\t\t\t\t\tkey={titleBiblioDescriptionsKey}>\r\n\t\t\t\t\t<ParseContent\r\n\t\t\t\t\t\tcontent={title.descriptions[titleBiblioDescriptionsKey]}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Panel>\r\n\t\t\t) : null,\r\n\t\t);\r\n}\r\n\r\nconst connectors = [\r\n\tconnectToUser,\r\n\tconnectToAccountOrMembershipRequiredModalContext,\r\n\tconnectToTitle,\r\n\twithIsMobile,\r\n];\r\n\r\nexport default combineConnectors(connectors)(TitleBiblio);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useAccountOrMembershipRequiredModalContext } from '../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\nimport ListAssignDrawer from '../CollaborativeLists/ManageFromTitleOrList/ListAssignDrawer';\r\nimport { useShelves } from '../Shelves/containers/ShelvesDataStore';\r\nimport ShelfSelectDrawer from '../Shelves/Selection/ShelfSelectDrawer';\r\nimport ShelfType from '../Shelves/ShelfType';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport { useUser } from '../User/containers/UserDataStore';\r\nimport { useTitle } from './containers/TitleDataStore';\r\n\r\nTitleYourLists.propTypes = {\r\n\tsku: PropTypes.string,\r\n};\r\n\r\nexport default function TitleYourLists({ sku }) {\r\n\tconst { shelves } = useShelves();\r\n\tconst {\r\n\t\tstate: { collaborativeLists, isCollectionDataLoading, collections },\r\n\t} = useTitle();\r\n\tconst { isAnonymous } = useUser();\r\n\tconst { setIsVisible } = useAccountOrMembershipRequiredModalContext();\r\n\r\n\tconst getShelfDisplay = () => {\r\n\t\tconst selectedShelf =\r\n\t\t\tshelves &&\r\n\t\t\tshelves.length > 0 &&\r\n\t\t\tshelves.filter(sh => sh.sku === sku).length > 0\r\n\t\t\t\t? shelves.find(sh => sh.sku === sku).shelf\r\n\t\t\t\t: 0;\r\n\t\tif (selectedShelf === 0) {\r\n\t\t\treturn (\r\n\t\t\t\t<span className=\"acc-font bold\">Place title on a shelf</span>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t<span>On your </span>\r\n\t\t\t\t\t<span className=\"acc-font bold\">\r\n\t\t\t\t\t\t{ShelfType[selectedShelf].text}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span> shelf</span>\r\n\t\t\t\t</React.Fragment>\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tconst renderShelfDisplay = () => {\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t<div>• {getShelfDisplay()}</div>\r\n\t\t\t\t<div>\r\n\t\t\t\t\t• In{' '}\r\n\t\t\t\t\t<span className=\"acc-font bold\">\r\n\t\t\t\t\t\t{!isCollectionDataLoading &&\r\n\t\t\t\t\t\tcollections &&\r\n\t\t\t\t\t\tcollections.filter(cl => cl.hasFlaggedTitle)\r\n\t\t\t\t\t\t\t? collections.filter(cl => cl.hasFlaggedTitle)\r\n\t\t\t\t\t\t\t\t\t.length\r\n\t\t\t\t\t\t\t: 0}\r\n\t\t\t\t\t</span>{' '}\r\n\t\t\t\t\tof your {collections && collections.length} Collections\r\n\t\t\t\t</div>\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<LaneContainer majorHeader=\"Your Stacks\" icon=\"books\">\r\n\t\t\t\t{isAnonymous() ? (\r\n\t\t\t\t\t<div onClick={() => setIsVisible(true)}>\r\n\t\t\t\t\t\t{renderShelfDisplay()}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<ShelfSelectDrawer sku={sku}>\r\n\t\t\t\t\t\t{renderShelfDisplay()}\r\n\t\t\t\t\t</ShelfSelectDrawer>\r\n\t\t\t\t)}\r\n\t\t\t\t<div style={{ marginBottom: '10px' }}>\r\n\t\t\t\t\t<ListAssignDrawer>\r\n\t\t\t\t\t\t• In{' '}\r\n\t\t\t\t\t\t<span className=\"acc-font bold\">\r\n\t\t\t\t\t\t\t{collaborativeLists.lists\r\n\t\t\t\t\t\t\t\t? collaborativeLists.lists.length\r\n\t\t\t\t\t\t\t\t: 0}{' '}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\tCollaborative Lists\r\n\t\t\t\t\t</ListAssignDrawer>\r\n\t\t\t\t</div>\r\n\t\t\t</LaneContainer>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { Tooltip } from 'antd';\r\nimport ReviewEditorAnchor from '../ReviewEditorAnchor';\r\nimport { useUserReviewEditor } from '../data/UserReviewEditorProvider';\r\nimport { Popconfirm } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport { useUser } from '../../../User/containers/UserDataStore';\r\nimport './muchLoveAnchor.css';\r\n\r\nMuchLoveAnchor.propTypes = {\r\n\trating: PropTypes.number,\r\n\tsku: PropTypes.string,\r\n\tonUpdate: PropTypes.func,\r\n};\r\n\r\nexport default function MuchLoveAnchor({ rating, sku, onUpdate }) {\r\n\tconst { editorController } = useUserReviewEditor();\r\n\tconst { isAnonymous } = useUser();\r\n\r\n\tconst clickedHeartStyle = 'icon-heart color-red clickable much-love-anchor';\r\n\tconst unclickedHeartStyle = 'icon-heart-o clickable much-love-anchor';\r\n\r\n\tconst handleSubmit = async () => {\r\n\t\tawait editorController.save({\r\n\t\t\tfallbackOverallRating: 9,\r\n\t\t\tdoSubmitSharingState: true,\r\n\t\t});\r\n\t\tawait onUpdate();\r\n\t};\r\n\r\n\tconst handleRemove = async () => {\r\n\t\tawait editorController.remove();\r\n\t\tawait onUpdate();\r\n\t};\r\n\r\n\tconst getRatingHeart = rating => {\r\n\t\tlet muchLove = rating > 8;\r\n\t\treturn !rating\r\n\t\t\t? noRatingHeart()\r\n\t\t\t: muchLove\r\n\t\t\t? muchLoveRatingHeart()\r\n\t\t\t: ratingHeart();\r\n\t};\r\n\r\n\tconst muchLoveRatingHeart = () => {\r\n\t\treturn (\r\n\t\t\t<Popconfirm\r\n\t\t\t\tplacement=\"bottomLeft\"\r\n\t\t\t\ttitle=\"Are you sure you want to delete this review?\"\r\n\t\t\t\tonConfirm={handleRemove}\r\n\t\t\t\tokText=\"Yes\"\r\n\t\t\t\tcancelText=\"No\">\r\n\t\t\t\t<div className={clickedHeartStyle} />\r\n\t\t\t</Popconfirm>\r\n\t\t);\r\n\t};\r\n\r\n\tconst noRatingHeart = () => {\r\n\t\treturn <div onClick={handleSubmit} className={unclickedHeartStyle} />;\r\n\t};\r\n\r\n\tconst ratingHeart = () => {\r\n\t\treturn (\r\n\t\t\t<ReviewEditorAnchor sku={sku} onUpdate={onUpdate}>\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName={\r\n\t\t\t\t\t\trating === 8 ? clickedHeartStyle : unclickedHeartStyle\r\n\t\t\t\t\t}\r\n\t\t\t\t/>\r\n\t\t\t</ReviewEditorAnchor>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Tooltip title={<span style={{ fontSize: '11px' }}>Much Love!</span>}>\r\n\t\t\t{isAnonymous() ? (\r\n\t\t\t\t<div className={unclickedHeartStyle} />\r\n\t\t\t) : (\r\n\t\t\t\tgetRatingHeart(rating)\r\n\t\t\t)}\r\n\t\t</Tooltip>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport TitleReview from '../Reviews/TitleReview';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport { useTitle } from './containers/TitleDataStore';\r\nimport CommunityButton from '../UI/CommunityButton';\r\nimport ReviewEditorAnchor from '../Reviews/ReviewEditor/ReviewEditorAnchor';\r\nimport UserReviewEditorProvider from '../Reviews/ReviewEditor/data/UserReviewEditorProvider';\r\nimport { useReviews } from '../Reviews/containers/ReviewsDataStore';\r\nimport PropTypes from 'prop-types';\r\nimport MuchLoveAnchor from '../Reviews/ReviewEditor/MuchLove/MuchLoveAnchor';\r\nimport { useUser } from '../User/containers/UserDataStore';\r\nimport { useAccountOrMembershipRequiredModalContext } from '../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\n\r\nTitleYourReview.propTypes = {\r\n\tsku: PropTypes.string,\r\n};\r\n\r\nexport default function TitleYourReview({ sku }) {\r\n\tconst {\r\n\t\tisReviewDataLoading,\r\n\t\treview,\r\n\t\tisProductDataLoading,\r\n\t\trefreshReview,\r\n\t} = useTitle();\r\n\tconst { refresh } = useReviews();\r\n\tconst { isAnonymous } = useUser();\r\n\tconst { setIsVisible } = useAccountOrMembershipRequiredModalContext();\r\n\r\n\tconst refreshReviewInfo = () => {\r\n\t\trefreshReview();\r\n\t\trefresh();\r\n\t};\r\n\r\n\tconst renderCommunityButton = () => {\r\n\t\treturn (\r\n\t\t\t<CommunityButton\r\n\t\t\t\ttext={review && review.assessmentId > 0 ? 'Edit' : 'Write'}\r\n\t\t\t\ticon=\"icon-review-icon\"\r\n\t\t\t\ticonClass=\"add-review\"\r\n\t\t\t/>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderMuchLoveAnchor = () => {\r\n\t\treturn (\r\n\t\t\t<MuchLoveAnchor\r\n\t\t\t\trating={review && review.overallAssessment}\r\n\t\t\t\tsku={sku}\r\n\t\t\t\tonUpdate={refreshReviewInfo}\r\n\t\t\t/>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderLaneExtra = () => {\r\n\t\treturn isAnonymous() ? (\r\n\t\t\t<div style={{ display: 'flex' }} onClick={() => setIsVisible(true)}>\r\n\t\t\t\t{renderCommunityButton()}\r\n\t\t\t\t{renderMuchLoveAnchor()}\r\n\t\t\t</div>\r\n\t\t) : (\r\n\t\t\t<div style={{ display: 'flex' }}>\r\n\t\t\t\t<ReviewEditorAnchor sku={sku} onUpdate={refreshReview}>\r\n\t\t\t\t\t{renderCommunityButton()}\r\n\t\t\t\t</ReviewEditorAnchor>\r\n\t\t\t\t<UserReviewEditorProvider\r\n\t\t\t\t\tsku={sku}\r\n\t\t\t\t\tonUpdate={refreshReview}\r\n\t\t\t\t\tshareTargetsOptions={{ doIncludeGenreCommunities: false }}>\r\n\t\t\t\t\t{renderMuchLoveAnchor()}\r\n\t\t\t\t</UserReviewEditorProvider>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<LaneContainer\r\n\t\t\t\tmajorHeader=\"Your Review\"\r\n\t\t\t\ticon=\"review-icon\"\r\n\t\t\t\textra={\r\n\t\t\t\t\t!isProductDataLoading &&\r\n\t\t\t\t\t!isReviewDataLoading &&\r\n\t\t\t\t\trenderLaneExtra()\r\n\t\t\t\t}>\r\n\t\t\t\t{!isReviewDataLoading && review && review.assessmentId > 0 && (\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\tmarginTop: '5px',\r\n\t\t\t\t\t\t\tmarginBottom: '10px',\r\n\t\t\t\t\t\t\tmarginRight: '20px',\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<TitleReview\r\n\t\t\t\t\t\t\treview={review}\r\n\t\t\t\t\t\t\tsource={'titleDetail'}\r\n\t\t\t\t\t\t\tcommunityId={0}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</LaneContainer>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport NomnationsEditor from './Share/NominationsEditor';\r\nimport useTitle from '../../Title/hooks/useTitle';\r\nimport ResponsiveDrawerAnchor from '../../UI/ResponsiveDrawerAnchor';\r\nimport UserReviewEditorProvider, {\r\n\tuseUserReviewEditor,\r\n} from './data/UserReviewEditorProvider';\r\nimport CommunityButton from '../../UI/CommunityButton';\r\nimport { Icon, Button, message } from 'antd';\r\nimport delay from '../../../util/delay';\r\nimport './nominationsEditorAnchor.css';\r\nimport LoadingSpinnerInContainer from '../../UI/LoadingSpinnerInContainer';\r\n\r\nNominationsEditorAnchor.propTypes = {\r\n\tsku: PropTypes.string,\r\n\tonUpdate: PropTypes.func,\r\n\tchildren: PropTypes.element,\r\n};\r\n\r\nSubmitNominationsButton.propTypes = {\r\n\tproductName: PropTypes.string,\r\n\tdrawer: PropTypes.shape({ close: PropTypes.func }),\r\n};\r\n\r\nfunction SubmitNominationsButton({ drawer, productName }) {\r\n\tconst [isSaving, setIsSaving] = React.useState(false);\r\n\r\n\tconst { editorController } = useUserReviewEditor();\r\n\r\n\tconst handleSave = async () => {\r\n\t\tsetIsSaving(true);\r\n\r\n\t\tawait editorController.save({\r\n\t\t\tfallbackOverallRating: 9,\r\n\t\t\tdoSubmitSharingState: false,\r\n\t\t});\r\n\r\n\t\tmessage.success(`Nominations saved for ${productName}`);\r\n\r\n\t\tawait delay(750);\r\n\t\tdrawer.close();\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Button\r\n\t\t\tclassName=\"submit-nominations-button\"\r\n\t\t\ttype=\"primary\"\r\n\t\t\tonClick={handleSave}\r\n\t\t\tloading={isSaving}>\r\n\t\t\tSave\r\n\t\t</Button>\r\n\t);\r\n}\r\n\r\nexport default function NominationsEditorAnchor({ sku, children, onUpdate }) {\r\n\tconst { title, isLoading } = useTitle(sku);\r\n\r\n\tconst renderHeaderContent = () => {\r\n\t\tif (isLoading || !title.name) {\r\n\t\t\treturn <span>Your nominations</span>;\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<span>Your nominations for </span>\r\n\t\t\t\t<em>{title.name}</em>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderHeader = () => {\r\n\t\treturn (\r\n\t\t\t<div style={{ textAlign: 'center' }}>{renderHeaderContent()}</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderNominationsEditor = (drawer, isLoading) => {\r\n\t\tif (isLoading()) {\r\n\t\t\treturn <LoadingSpinnerInContainer height=\"200px\" />;\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<div className=\"nominations-editor-anchor\">\r\n\t\t\t\t<NomnationsEditor />\r\n\t\t\t\t<div style={{ display: 'flex', justifyContent: 'center' }}>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\t\t\tmarginTop: '2rem',\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<SubmitNominationsButton\r\n\t\t\t\t\t\t\tdrawer={drawer}\r\n\t\t\t\t\t\t\tproductName={title.name}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<Button onClick={drawer.close}>Cancel</Button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<ResponsiveDrawerAnchor\r\n\t\t\twidth={{ mobile: '100%', desktop: '650px' }}\r\n\t\t\trenderDrawerContent={drawer => (\r\n\t\t\t\t<UserReviewEditorProvider\r\n\t\t\t\t\tsku={sku}\r\n\t\t\t\t\tonUpdate={onUpdate}\r\n\t\t\t\t\tshareTargetsOptions={{ doIncludeGenreCommunities: false }}>\r\n\t\t\t\t\t{({ isLoading }) => {\r\n\t\t\t\t\t\treturn renderNominationsEditor(drawer, isLoading);\r\n\t\t\t\t\t}}\r\n\t\t\t\t</UserReviewEditorProvider>\r\n\t\t\t)}\r\n\t\t\theader={<div style={{ padding: 15 }}>{renderHeader()}</div>}>\r\n\t\t\t{children ? (\r\n\t\t\t\tchildren\r\n\t\t\t) : (\r\n\t\t\t\t<CommunityButton text=\"Nominate\">\r\n\t\t\t\t\t<Icon type=\"trophy\" />\r\n\t\t\t\t</CommunityButton>\r\n\t\t\t)}\r\n\t\t</ResponsiveDrawerAnchor>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport { useTitle } from './containers/TitleDataStore';\r\nimport { Icon } from 'antd';\r\nimport handlePlural from '../../util/handlePlural';\r\nimport CommunityButton from '../UI/CommunityButton';\r\nimport useNominationTargets from '../Reviews/ReviewEditor/data/useNominationTargets';\r\nimport NominationsEditorAnchor from '../Reviews/ReviewEditor/NominationsEditorAnchor';\r\n\r\nTitleYourNominations.propTypes = {\r\n\tsku: PropTypes.string,\r\n\tshowSmallJacket: PropTypes.bool,\r\n\tisMobile: PropTypes.bool,\r\n};\r\n\r\nexport default function TitleYourNominations({\r\n\tsku,\r\n\tshowSmallJacket,\r\n\tisMobile,\r\n}) {\r\n\tconst titleDataStore = useTitle();\r\n\tconst nominationTargets = useNominationTargets(sku);\r\n\tconst options = nominationTargets.getOptions();\r\n\tconst optionsCount = options.length;\r\n\r\n\tconst { isReviewDataLoading, isProductDataLoading } = titleDataStore.state;\r\n\r\n\tconst renderAnchor = () => {\r\n\t\tconst options = nominationTargets.getOptions();\r\n\t\tconst optionsCount = options.length;\r\n\r\n\t\tif (optionsCount === 0) {\r\n\t\t\treturn <div />;\r\n\t\t}\r\n\r\n\t\tconst submittedCount = nominationTargets.getAlreadySubmittedCount();\r\n\t\tconst submittedCountLabel = handlePlural('nomination', submittedCount);\r\n\r\n\t\treturn (\r\n\t\t\t<NominationsEditorAnchor\r\n\t\t\t\tsku={sku}\r\n\t\t\t\tonUpdate={nominationTargets.refresh}>\r\n\t\t\t\t<CommunityButton\r\n\t\t\t\t\ttext={`${submittedCountLabel}, ${optionsCount} available`}>\r\n\t\t\t\t\t<Icon type=\"trophy\" />\r\n\t\t\t\t</CommunityButton>\r\n\t\t\t</NominationsEditorAnchor>\r\n\t\t);\r\n\t};\r\n\r\n\tconst doRenderAnchor = () => {\r\n\t\treturn (\r\n\t\t\t!isProductDataLoading &&\r\n\t\t\t!isReviewDataLoading &&\r\n\t\t\t!nominationTargets.isLoading()\r\n\t\t);\r\n\t};\r\n\r\n\tif (optionsCount > 0) {\r\n\t\treturn (\r\n\t\t\t<LaneContainer\r\n\t\t\t\tmajorHeader=\"Nominate\"\r\n\t\t\t\trenderIcon={() => <Icon type=\"trophy\" />}\r\n\t\t\t\textra={\r\n\t\t\t\t\tdoRenderAnchor() && !showSmallJacket && !isMobile ? (\r\n\t\t\t\t\t\trenderAnchor()\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<React.Fragment />\r\n\t\t\t\t\t)\r\n\t\t\t\t}>\r\n\t\t\t\t{doRenderAnchor() && (showSmallJacket || isMobile) ? (\r\n\t\t\t\t\t<div style={{ marginBottom: '10px' }}>{renderAnchor()}</div>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<React.Fragment />\r\n\t\t\t\t)}\r\n\t\t\t</LaneContainer>\r\n\t\t);\r\n\t} else {\r\n\t\treturn <React.Fragment />;\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport LaneContainer from '../UI/LaneContainer';\r\nimport { useTitle } from './containers/TitleDataStore';\r\nimport ConversationDrawer from '../Conversations/ConversationDrawer';\r\nimport ThreadSummary from '../Conversations/UI/ThreadSummary';\r\nimport ConversationType from '../Conversations/ConversationType';\r\nimport { useUser } from '../User/containers/UserDataStore';\r\nimport { useAccountOrMembershipRequiredModalContext } from '../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\n\r\nTitleConversations.propTypes = {\r\n\tsku: PropTypes.string,\r\n\tshowSmallJacket: PropTypes.bool,\r\n\tisMobile: PropTypes.bool,\r\n};\r\n\r\nexport default function TitleConversations({ sku, showSmallJacket, isMobile }) {\r\n\tconst titleDataStore = useTitle();\r\n\tconst { isAnonymous } = useUser();\r\n\tconst { setIsVisible } = useAccountOrMembershipRequiredModalContext();\r\n\r\n\tconst { conversations, title } = titleDataStore.state;\r\n\r\n\tconst renderThreadSummary = () => (\r\n\t\t<ThreadSummary threads={conversations} doIncludeCommunities={true} />\r\n\t);\r\n\r\n\tconst renderAnchor = () => {\r\n\t\treturn isAnonymous() ? (\r\n\t\t\t<div className=\"clickable\" onClick={() => setIsVisible(true)}>\r\n\t\t\t\t{renderThreadSummary()}\r\n\t\t\t</div>\r\n\t\t) : (\r\n\t\t\t<ConversationDrawer\r\n\t\t\t\ttype={ConversationType.Title}\r\n\t\t\t\tid={sku}\r\n\t\t\t\tcommunityId={0}\r\n\t\t\t\ttext={getConversationName()}>\r\n\t\t\t\t{renderThreadSummary()}\r\n\t\t\t</ConversationDrawer>\r\n\t\t);\r\n\t};\r\n\r\n\tconst getConversationName = () => {\r\n\t\treturn (\r\n\t\t\t<span>\r\n\t\t\t\t<span className=\"bold\">{title.name}</span> by {title.author}\r\n\t\t\t</span>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<LaneContainer\r\n\t\t\tmajorHeader=\"Conversations\"\r\n\t\t\ticon=\"chat\"\r\n\t\t\textra={\r\n\t\t\t\t!showSmallJacket && !isMobile ? (\r\n\t\t\t\t\trenderAnchor()\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<React.Fragment />\r\n\t\t\t\t)\r\n\t\t\t}>\r\n\t\t\t{showSmallJacket || isMobile ? (\r\n\t\t\t\t<div style={{ marginBottom: '10px' }}>{renderAnchor()}</div>\r\n\t\t\t) : (\r\n\t\t\t\t<React.Fragment />\r\n\t\t\t)}\r\n\t\t</LaneContainer>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport { connectToTitle } from './containers/TitleDataStore';\r\nimport TitleActionsScroller from './TitleActionsScroller';\r\nimport './titleBiblio.less';\r\nimport TitleJacketImage from './UI/TitleJacketImage';\r\nimport { getTitleJacketUri } from './util';\r\n\r\nexport class TitleDetailJacketFrame extends React.Component {\r\n\tcomponentDidMount() {\r\n\t\tconst { title } = this.props.titleDataStore.state;\r\n\t\tconst titleJacketImageUri = getTitleJacketUri(title);\r\n\t\treturn (\r\n\t\t\t(!title.sku || !titleJacketImageUri) &&\r\n\t\t\tthis.props.setDoShowTitleJacket &&\r\n\t\t\tthis.props.setDoShowTitleJacket(false)\r\n\t\t);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\tconst {\r\n\t\t\tisProductDataLoading,\r\n\t\t\ttitle,\r\n\t\t\tisCollaborativeListDataLoading,\r\n\t\t\tcollaborativeLists,\r\n\t\t} = this.props.titleDataStore.state;\r\n\t\tif (!isProductDataLoading) {\r\n\t\t\tif (!isCollaborativeListDataLoading) {\r\n\t\t\t\tconst {\r\n\t\t\t\t\tdownloadableSkus,\r\n\t\t\t\t\trequestableSkus,\r\n\t\t\t\t\tdigitalCopyInfo,\r\n\t\t\t\t} = collaborativeLists;\r\n\t\t\t\ttitle.isDownloadable =\r\n\t\t\t\t\tdownloadableSkus && downloadableSkus.includes(title.sku);\r\n\t\t\t\ttitle.isRequestable =\r\n\t\t\t\t\trequestableSkus && requestableSkus.includes(title.sku);\r\n\r\n\t\t\t\tconst availableReviewCopyFormats = digitalCopyInfo.filter(\r\n\t\t\t\t\tdci => dci.sku === title.sku,\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tavailableReviewCopyFormats &&\r\n\t\t\t\t\tavailableReviewCopyFormats.length &&\r\n\t\t\t\t\tavailableReviewCopyFormats[0]\r\n\t\t\t\t) {\r\n\t\t\t\t\tvar availableReviewCopyFormat =\r\n\t\t\t\t\t\tavailableReviewCopyFormats[0];\r\n\t\t\t\t\ttitle.digitalCreatedDate =\r\n\t\t\t\t\t\tavailableReviewCopyFormat.createdDate;\r\n\t\t\t\t\ttitle.digitalUpdatedDate =\r\n\t\t\t\t\t\tavailableReviewCopyFormat.updatedDate;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst size = isMobile ? 'fillwidth-image' : 'medium-image';\r\n\t\treturn (\r\n\t\t\t<div className=\"title-biblio\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"flex biblio-section\"\r\n\t\t\t\t\tstyle={{ marginBottom: '10px' }}>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName={size}\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\tmargin: isMobile ? '20px' : '0 0 0 10px',\r\n\t\t\t\t\t\t\tposition: 'relative',\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<TitleJacketImage\r\n\t\t\t\t\t\t\tproduct={title}\r\n\t\t\t\t\t\t\tdoNotPadRight={true}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<div className=\"title-actions-scroller\">\r\n\t\t\t\t\t\t\t<TitleActionsScroller\r\n\t\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t\t\ttooltipPlacement=\"leftTop\"\r\n\t\t\t\t\t\t\t\tdoAllowOpenReviewCopyActionOnMount\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default connectToTitle(withIsMobile(TitleDetailJacketFrame));\r\n","import { Tooltip, Button } from 'antd';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport { useTitle } from './containers/TitleDataStore';\r\nimport TitleDetailJacketFrame from './TitleDetailJacketFrame';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport LoadingSpinnerInContainer from '../UI/LoadingSpinnerInContainer/LoadingSpinnerInContainer';\r\n\r\ntype TitleDetailJacketProps = {\r\n\tdoShowSmallJacket?: boolean;\r\n\tsetDoShowTitleJacket: (doShowTitleJacket: boolean) => void;\r\n\tsetDoShowSmallJacket?: (\r\n\t\tdoShowSmallJacket: boolean | ((doShowSmallJacket: boolean) => boolean),\r\n\t) => void;\r\n\tisMobile: () => boolean;\r\n};\r\n\r\nconst TitleDetailJacket = ({\r\n\tdoShowSmallJacket,\r\n\tsetDoShowTitleJacket,\r\n\tsetDoShowSmallJacket,\r\n\tisMobile,\r\n}: TitleDetailJacketProps) => {\r\n\tconst {\r\n\t\tstate: { isProductDataLoading },\r\n\t} = useTitle();\r\n\tconst isMobileSize = isMobile();\r\n\r\n\tconst getJacketSizeTooltip = () =>\r\n\t\tdoShowSmallJacket ? (\r\n\t\t\t<Translate id=\"show_larger_jacket_cover\" />\r\n\t\t) : (\r\n\t\t\t<Translate id=\"show_smaller_jacket_cover\" />\r\n\t\t);\r\n\r\n\treturn isProductDataLoading ? (\r\n\t\t<LoadingSpinnerInContainer height={100} />\r\n\t) : (\r\n\t\t<>\r\n\t\t\t<TitleDetailJacketFrame\r\n\t\t\t\tsetDoShowTitleJacket={setDoShowTitleJacket}\r\n\t\t\t/>\r\n\t\t\t{!isMobileSize && (\r\n\t\t\t\t<div className=\"jacket-size-frame\">\r\n\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\toverlayClassName=\"title-detail jacket-size-tooltip\"\r\n\t\t\t\t\t\ttitle={getJacketSizeTooltip()}\r\n\t\t\t\t\t\tplacement=\"bottomRight\">\r\n\t\t\t\t\t\t<Button shape=\"circle\">\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName={\r\n\t\t\t\t\t\t\t\t\tdoShowSmallJacket\r\n\t\t\t\t\t\t\t\t\t\t? 'icon-expand'\r\n\t\t\t\t\t\t\t\t\t\t: 'icon-compress'\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\t\t\t\tsetDoShowSmallJacket &&\r\n\t\t\t\t\t\t\t\t\tsetDoShowSmallJacket(\r\n\t\t\t\t\t\t\t\t\t\t(prev: boolean) => !prev,\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default withIsMobile(TitleDetailJacket);\r\n","import React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport ReviewsByRating from '../Reviews/ReviewsByRating';\r\nimport MobileDrawerHeader from '../UI/MobileDrawerHeader';\r\nimport TitleDataStore from './containers/TitleDataStore';\r\nimport TitleBiblio from './TitleBiblio';\r\nimport TitleYourLists from './TitleYourLists';\r\nimport TitleYourReview from './TitleYourReview';\r\nimport TitleYourNominations from './TitleYourNominations';\r\nimport { usePreferences } from '../Preferences/containers/PreferencesDataStore';\r\nimport PreferenceName from '../Preferences/PreferenceName';\r\nimport './titleDetail.less';\r\nimport TitleConversations from './TitleConversations';\r\nimport PreferenceType from '../Preferences/PreferenceType';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport classNames from 'classnames';\r\nimport { useUser } from '../User/containers/UserDataStore';\r\nimport TitleDetailJacket from './TitleDetailJacket';\r\n\r\nexport function TitleDetail({ sku, communityId, isMobile }) {\r\n\tconst isMobileSize = isMobile();\r\n\tconst preferencesDataStore = usePreferences();\r\n\tconst { preferences } = preferencesDataStore.state;\r\n\tconst [doShowTitleJacket, setDoShowTitleJacket] = React.useState(true);\r\n\tconst [doShowSmallJacket, setDoShowSmallJacket] = React.useState(\r\n\t\tpreferences.findIndex(\r\n\t\t\tpref =>\r\n\t\t\t\tpref.name === PreferenceName.showSmallJacket &&\r\n\t\t\t\tpref.value === 'true',\r\n\t\t) !== -1,\r\n\t);\r\n\r\n\tconst isAnonymous = useUser().isAnonymous();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetShowSmallJacketPreference();\r\n\t}, [doShowSmallJacket]);\r\n\r\n\tconst getBiblioFrameContainerClasses = () =>\r\n\t\tclassNames('biblio-frame-container', {\r\n\t\t\t'small-jacket-biblio': doShowSmallJacket,\r\n\t\t\t'wide-jacket-biblio': !doShowSmallJacket && doShowTitleJacket,\r\n\t\t\t'full-width': !doShowSmallJacket && !doShowTitleJacket,\r\n\t\t});\r\n\r\n\tconst setShowSmallJacketPreference = () => {\r\n\t\tpreferencesDataStore.addUserPreference(\r\n\t\t\tPreferenceType.communityApp,\r\n\t\t\tPreferenceName.showSmallJacket,\r\n\t\t\tdoShowSmallJacket,\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className={classNames('title-detail', { desktop: !isMobileSize })}>\r\n\t\t\t<MobileDrawerHeader header={<Translate id=\"title_information\" />} />\r\n\t\t\t<TitleDataStore sku={sku} communityId={communityId}>\r\n\t\t\t\t{!isMobileSize ? (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName={`jacket-frame-container ${\r\n\t\t\t\t\t\t\t\tdoShowSmallJacket\r\n\t\t\t\t\t\t\t\t\t? 'small-jacket'\r\n\t\t\t\t\t\t\t\t\t: 'wide-jacket'\r\n\t\t\t\t\t\t\t}`}>\r\n\t\t\t\t\t\t\t{doShowTitleJacket && (\r\n\t\t\t\t\t\t\t\t<TitleDetailJacket\r\n\t\t\t\t\t\t\t\t\tdoShowSmallJacket={doShowSmallJacket}\r\n\t\t\t\t\t\t\t\t\tsetDoShowSmallJacket={setDoShowSmallJacket}\r\n\t\t\t\t\t\t\t\t\tsetDoShowTitleJacket={setDoShowTitleJacket}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{doShowSmallJacket && (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t<TitleYourLists sku={sku} />\r\n\t\t\t\t\t\t\t\t\t{!isAnonymous && (\r\n\t\t\t\t\t\t\t\t\t\t<TitleYourNominations\r\n\t\t\t\t\t\t\t\t\t\t\tsku={sku}\r\n\t\t\t\t\t\t\t\t\t\t\tshowSmallJacket={true}\r\n\t\t\t\t\t\t\t\t\t\t\tisMobileSize={false}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div className={getBiblioFrameContainerClasses()}>\r\n\t\t\t\t\t\t\t<TitleBiblio\r\n\t\t\t\t\t\t\t\tdisableLink=\"true\"\r\n\t\t\t\t\t\t\t\tsource=\"titleDetail\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{!doShowSmallJacket && <TitleYourLists sku={sku} />}\r\n\t\t\t\t\t\t\t<TitleConversations sku={sku} />\r\n\t\t\t\t\t\t\t<TitleYourReview sku={sku} />\r\n\t\t\t\t\t\t\t{!doShowSmallJacket && !isAnonymous && (\r\n\t\t\t\t\t\t\t\t<TitleYourNominations\r\n\t\t\t\t\t\t\t\t\tsku={sku}\r\n\t\t\t\t\t\t\t\t\tshowSmallJacket={false}\r\n\t\t\t\t\t\t\t\t\tisMobile={false}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t<ReviewsByRating communityId={communityId} />\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div className=\"clear\" />\r\n\t\t\t\t\t</>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{doShowTitleJacket && (\r\n\t\t\t\t\t\t\t<TitleDetailJacket\r\n\t\t\t\t\t\t\t\tsetDoShowTitleJacket={setDoShowTitleJacket}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t<TitleBiblio disableLink=\"true\" source=\"titleDetail\" />\r\n\t\t\t\t\t\t<TitleYourLists sku={sku} />\r\n\t\t\t\t\t\t<TitleYourReview sku={sku} />\r\n\t\t\t\t\t\t<TitleConversations sku={sku} />\r\n\t\t\t\t\t\t{!isAnonymous && (\r\n\t\t\t\t\t\t\t<TitleYourNominations\r\n\t\t\t\t\t\t\t\tsku={sku}\r\n\t\t\t\t\t\t\t\tshowSmallJacket={false}\r\n\t\t\t\t\t\t\t\tisMobile={true}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t<ReviewsByRating communityId={communityId} />\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</TitleDataStore>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(TitleDetail);\r\n","import React from 'react';\r\nimport UserAvatar from 'treeline-react-core-components/UserAvatar';\r\nimport { useUser } from '../../User/containers/UserDataStore';\r\n\r\nexport default function ProfileEditorUserAvatar() {\r\n\tconst userDataStore = useUser();\r\n\tconst { userAvatar } = userDataStore.state;\r\n\r\n\treturn (\r\n\t\t<UserAvatar\r\n\t\t\tuserInitials={userAvatar && userAvatar.initials}\r\n\t\t\tavatarUri={userAvatar && userAvatar.uri}\r\n\t\t\tdisplayName={userAvatar && userAvatar.displayName}\r\n\t\t\tavatarSizeClass=\"avatar-large\"\r\n\t\t/>\r\n\t);\r\n}\r\n","import React, { useState } from 'react';\r\nimport propTypes from 'prop-types';\r\nimport { Input, message } from 'antd';\r\nimport { Translate, useTranslate } from '@above-the-treeline/localization';\r\nimport { useUserPreferences } from '../../../UserPreferences';\r\n\r\nconst { TextArea } = Input;\r\n\r\nconst EditRoleDescription = () => {\r\n\tconst { translate } = useTranslate();\r\n\tconst userPreferences = useUserPreferences();\r\n\tconst { requestRole } = userPreferences.getReviewCopyDownloadPreferences();\r\n\r\n\tconst [roleDescription, setRoleDescription] = useState(requestRole);\r\n\r\n\tconst saveRoleDescription = async () => {\r\n\t\tconst didSucceed = await userPreferences.saveRoleDescription(\r\n\t\t\troleDescription,\r\n\t\t);\r\n\t\tif (didSucceed) {\r\n\t\t\treturn message.success(translate('role_description_saved'));\r\n\t\t}\r\n\t\tmessage.error(translate('error_saving_role_description'));\r\n\t};\r\n\r\n\tconst onTextAreaInputChange = e => {\r\n\t\tsetRoleDescription(e.target.value);\r\n\t};\r\n\r\n\tconst getTextAreaSubText = () => {\r\n\t\treturn <Translate id=\"role_desc_note\" />;\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"edit-role-description\">\r\n\t\t\t<div className=\"prompt-and-save-icon-row\">\r\n\t\t\t\t<div className=\"role-description-prompt\">\r\n\t\t\t\t\t<span className=\"description-of-your-role-label\">\r\n\t\t\t\t\t\t<Translate id=\"description_of_role\" />\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t: (<Translate id=\"common_across_requests\" />)\r\n\t\t\t\t</div>\r\n\t\t\t\t<div\r\n\t\t\t\t\ttitle={translate('save_role_description')}\r\n\t\t\t\t\tclassName=\"icon-save-icon plus\"\r\n\t\t\t\t\tonClick={saveRoleDescription}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t\t<TextArea\r\n\t\t\t\trows={4}\r\n\t\t\t\tvalue={roleDescription}\r\n\t\t\t\tonChange={onTextAreaInputChange}\r\n\t\t\t/>\r\n\t\t\t<div className=\"text-area-subtext\">{getTextAreaSubText()}</div>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default EditRoleDescription;\r\n","import React from 'react';\r\nimport { Select, message } from 'antd';\r\nimport { Translate, useTranslate } from '@above-the-treeline/localization';\r\nimport { useUserPreferences } from '../../../UserPreferences';\r\n\r\nconst { Option } = Select;\r\n\r\nconst EditRoleSummary = () => {\r\n\tconst { translate } = useTranslate();\r\n\tconst userPreferences = useUserPreferences();\r\n\tconst {\r\n\t\trequestorType: roleOptionKey,\r\n\t\trequestorTypes: roleOptions,\r\n\t} = userPreferences.getReviewCopyDownloadPreferences();\r\n\r\n\tconst SelectOneOptionKey = 'Select One';\r\n\r\n\tconst getRoleOptionObjects = () => {\r\n\t\tlet roleOptionsObjects = [];\r\n\r\n\t\tconst selectOneOption = {\r\n\t\t\tkey: SelectOneOptionKey,\r\n\t\t\tvalue: (\r\n\t\t\t\t<span className=\"select-one-option\">\r\n\t\t\t\t\t{translate('select_one')}\r\n\t\t\t\t</span>\r\n\t\t\t),\r\n\t\t};\r\n\r\n\t\troleOptionsObjects.push(selectOneOption);\r\n\r\n\t\troleOptions.forEach(ro => {\r\n\t\t\troleOptionsObjects.push({\r\n\t\t\t\tkey: ro,\r\n\t\t\t\tvalue: <span>{ro}</span>,\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn roleOptionsObjects;\r\n\t};\r\n\r\n\tconst getSelectedRoleOptionKey = roleOptionObjects => {\r\n\t\tconst selectedRoleOptionObject = roleOptionObjects.find(\r\n\t\t\troo => roo.key === roleOptionKey,\r\n\t\t);\r\n\t\tif (selectedRoleOptionObject) {\r\n\t\t\treturn selectedRoleOptionObject.key;\r\n\t\t}\r\n\t\treturn roleOptionObjects[0].key;\r\n\t};\r\n\r\n\tconst onSelectChange = async roleOptionKey => {\r\n\t\tif (roleOptionKey === SelectOneOptionKey) {\r\n\t\t\troleOptionKey = null;\r\n\t\t}\r\n\r\n\t\tconst didSucceed = await userPreferences.saveRoleSummary(roleOptionKey);\r\n\t\tif (didSucceed) {\r\n\t\t\treturn message.success(translate('role_summary_saved'));\r\n\t\t}\r\n\t\treturn message.error(translate('error_saving_role_summary'));\r\n\t};\r\n\r\n\tconst renderRoleOption = roleOptionObject => (\r\n\t\t<Option key={roleOptionObject.key}>{roleOptionObject.value}</Option>\r\n\t);\r\n\r\n\tconst roleOptionObjects = getRoleOptionObjects();\r\n\tconst selectedRoleOptionKey = getSelectedRoleOptionKey(roleOptionObjects);\r\n\r\n\treturn (\r\n\t\t<div className=\"edit-role-summary\">\r\n\t\t\t<div className=\"role-summary-label\">\r\n\t\t\t\t<Translate id=\"role_summary\" />:\r\n\t\t\t</div>\r\n\t\t\t<Select\r\n\t\t\t\tsize=\"small\"\r\n\t\t\t\tdefaultValue={selectedRoleOptionKey}\r\n\t\t\t\tdropdownMatchSelectWidth={false}\r\n\t\t\t\tdropdownClassName=\"edit-role-summary-dropdown\"\r\n\t\t\t\tonChange={onSelectChange}>\r\n\t\t\t\t{roleOptionObjects.map(renderRoleOption)}\r\n\t\t\t</Select>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default EditRoleSummary;\r\n","import React, { useState } from 'react';\r\nimport { Modal, message } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport { Translate, useTranslate } from '@above-the-treeline/localization';\r\nimport { useUser } from '../../../../User/containers/UserDataStore';\r\nimport {\r\n\tgetInitialFormValuesById,\r\n\tgetRowOptionsList,\r\n} from './PersonalInfoModalInitializer';\r\nimport { getRowByType } from '../../Form/Form';\r\nimport { FormId } from '../../Form/FormId';\r\n\r\nconst PersonalInfoModal = ({ isVisible, setIsVisible }) => {\r\n\tconst { translate } = useTranslate();\r\n\tconst userDataStore = useUser();\r\n\tconst { user } = userDataStore.state.user;\r\n\r\n\tconst rowOptionsList = getRowOptionsList();\r\n\tconst initialFormValuesById = getInitialFormValuesById(user);\r\n\r\n\tconst [formValuesById, setFormValuesById] = useState(initialFormValuesById);\r\n\r\n\tconst handleSave = async () => {\r\n\t\tif (!formValuesById['firstName'] || !formValuesById['lastName']) {\r\n\t\t\tconst warningMessage = translate(\r\n\t\t\t\t'first_name_and_last_name_are_required',\r\n\t\t\t);\r\n\t\t\treturn message.warn(warningMessage);\r\n\t\t}\r\n\r\n\t\tsetIsVisible(false);\r\n\r\n\t\tconst didSucceed = await userDataStore.saveUser(formValuesById);\r\n\t\tif (didSucceed) {\r\n\t\t\treturn message.success(translate('personal_information_saved'));\r\n\t\t}\r\n\t\tmessage.error(translate('error_saving_personal_information'));\r\n\t};\r\n\r\n\tconst handleCancel = () => setIsVisible(false);\r\n\r\n\tconst getPersonalInfoModalRowByType = (rowOptions, i) => (\r\n\t\t<React.Fragment key={i}>\r\n\t\t\t{getRowByType(\r\n\t\t\t\trowOptions,\r\n\t\t\t\tformValuesById,\r\n\t\t\t\tsetFormValuesById,\r\n\t\t\t\tFormId.PersonalInfo,\r\n\t\t\t)}\r\n\t\t</React.Fragment>\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\tvisible={isVisible}\r\n\t\t\ttitle={\r\n\t\t\t\t<b>\r\n\t\t\t\t\t<Translate id=\"edit_personal_info\" />\r\n\t\t\t\t</b>\r\n\t\t\t}\r\n\t\t\tonOk={handleSave}\r\n\t\t\tonCancel={handleCancel}\r\n\t\t\tokText={translate('save')}\r\n\t\t\tdestroyOnClose={true}>\r\n\t\t\t<div className=\"personal-info-modal-contents\">\r\n\t\t\t\t{rowOptionsList.map(getPersonalInfoModalRowByType)}\r\n\t\t\t</div>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nPersonalInfoModal.propTypes = {\r\n\tisVisible: PropTypes.bool,\r\n\tsetIsVisible: PropTypes.func,\r\n\ttranslate: PropTypes.func,\r\n};\r\n\r\nexport default PersonalInfoModal;\r\n","import React, { useState } from 'react';\r\nimport { useUser } from '../../../User/containers/UserDataStore';\r\nimport AccountInfoModal from './AccountInfoModal/AccountInfoModal';\r\nimport PersonalInfoModal from './PersonalInfoModal/PersonalInfoModal';\r\nimport { useTranslate } from '@above-the-treeline/localization';\r\n\r\nfunction GeneralInfo() {\r\n\tconst { translate } = useTranslate();\r\n\tconst userDataStore = useUser();\r\n\tconst {\r\n\t\tuser: { user },\r\n\t\torganization,\r\n\t} = userDataStore.state;\r\n\r\n\tconst [\r\n\t\tisPersonalInfoModalVisible,\r\n\t\tsetIsPersonalInfoModalVisible,\r\n\t] = useState(false);\r\n\tconst [isAccountInfoModalVisible, setIsAccountInfoModalVisible] = useState(\r\n\t\tfalse,\r\n\t);\r\n\r\n\tconst getLabel = label => <div className=\"general-info-label\">{label}</div>;\r\n\r\n\tconst getValue = value => <div className=\"general-info-value\">{value}</div>;\r\n\r\n\tconst getEditIcon = (title, onClickHandler) => (\r\n\t\t<div\r\n\t\t\ttitle={title}\r\n\t\t\tclassName=\"general-info-edit-icon icon-note-icon\"\r\n\t\t\tonClick={onClickHandler}\r\n\t\t/>\r\n\t);\r\n\r\n\tconst renderPersonalInfoEditIcon = () =>\r\n\t\tgetEditIcon(\r\n\t\t\ttranslate('edit_personal_info'),\r\n\t\t\tonPersonalInfoEditIconClick,\r\n\t\t);\r\n\r\n\tconst renderAccountInfoEditIcon = () =>\r\n\t\tgetEditIcon(translate('edit_account_info'), onAccountInfoEditIconClick);\r\n\r\n\tconst doShowAccountInfoEditIcon = () => user.canEditAccountAndPrivileges;\r\n\r\n\tconst onPersonalInfoEditIconClick = () =>\r\n\t\tsetIsPersonalInfoModalVisible(true);\r\n\r\n\tconst onAccountInfoEditIconClick = () => setIsAccountInfoModalVisible(true);\r\n\r\n\treturn (\r\n\t\t<div className=\"general-info\">\r\n\t\t\t<div className=\"personal-info\">\r\n\t\t\t\t{getLabel(translate('name'))}\r\n\t\t\t\t{getValue(user.fullName)}\r\n\t\t\t\t{renderPersonalInfoEditIcon()}\r\n\t\t\t</div>\r\n\t\t\t<div className=\"account-info\">\r\n\t\t\t\t{getLabel(translate('account'))}\r\n\t\t\t\t{getValue(organization.displayName)}\r\n\t\t\t\t{doShowAccountInfoEditIcon() && renderAccountInfoEditIcon()}\r\n\t\t\t</div>\r\n\t\t\t<PersonalInfoModal\r\n\t\t\t\tisVisible={isPersonalInfoModalVisible}\r\n\t\t\t\tsetIsVisible={setIsPersonalInfoModalVisible}\r\n\t\t\t/>\r\n\t\t\t<AccountInfoModal\r\n\t\t\t\tisVisible={isAccountInfoModalVisible}\r\n\t\t\t\tsetIsVisible={setIsAccountInfoModalVisible}\r\n\t\t\t/>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default GeneralInfo;\r\n","import React from 'react';\r\nimport ProfileEditorUserAvatar from '../ProfileEditorUserAvatar';\r\nimport EditRoleDescription from './EditRoleDescription';\r\nimport EditRoleSummary from './EditRoleSummary';\r\nimport GeneralInfo from './GeneralInfo';\r\n\r\nexport default function Overview() {\r\n\treturn (\r\n\t\t<div className=\"overview\">\r\n\t\t\t<div className=\"top-row\">\r\n\t\t\t\t<ProfileEditorUserAvatar />\r\n\t\t\t\t<GeneralInfo />\r\n\t\t\t</div>\r\n\t\t\t<EditRoleSummary />\r\n\t\t\t<EditRoleDescription />\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { InputType } from '../Form/InputType';\r\nimport { RowType } from '../Form/RowType';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nexport const getInitialFormValuesById = userAttributes => {\r\n\tconst dataKeyByInputId = {\r\n\t\turiPersonal: 'Personal Website Uri',\r\n\t\turiFacebook: 'Facebook Uri',\r\n\t\turiTwitter: 'Twitter Uri',\r\n\t\turiLinkedIn: 'LinkedIn Uri',\r\n\t\turiGoodreads: 'Goodreads Uri',\r\n\t\turiSkype: 'Skype Uri',\r\n\t};\r\n\r\n\tlet initialFormValuesById = {};\r\n\r\n\tfor (const inputId in dataKeyByInputId) {\r\n\t\tconst dataKey = dataKeyByInputId[inputId];\r\n\r\n\t\tinitialFormValuesById[inputId] =\r\n\t\t\tuserAttributes && userAttributes[dataKey]\r\n\t\t\t\t? userAttributes[dataKey].Value\r\n\t\t\t\t: '';\r\n\t}\r\n\r\n\treturn initialFormValuesById;\r\n};\r\n\r\nexport const getRowOptionsList = () => {\r\n\tconst rowOptionsList = [\r\n\t\tgetSocialMediaLinkRowOptions(\r\n\t\t\t<Translate id=\"blog_personal\" />,\r\n\t\t\t'uriPersonal',\r\n\t\t\t'icon-ios-body',\r\n\t\t),\r\n\t\tgetSocialMediaLinkRowOptions(\r\n\t\t\t'Facebook',\r\n\t\t\t'uriFacebook',\r\n\t\t\t'icon-facebook-icon',\r\n\t\t),\r\n\t\tgetSocialMediaLinkRowOptions(\r\n\t\t\t'Twitter',\r\n\t\t\t'uriTwitter',\r\n\t\t\t'icon-twitter-icon',\r\n\t\t),\r\n\t\tgetSocialMediaLinkRowOptions(\r\n\t\t\t'LinkedIn',\r\n\t\t\t'uriLinkedIn',\r\n\t\t\t'icon-linkedin-alt',\r\n\t\t),\r\n\t\tgetSocialMediaLinkRowOptions(\r\n\t\t\t'Goodreads',\r\n\t\t\t'uriGoodreads',\r\n\t\t\t'icon-goodreads',\r\n\t\t),\r\n\t\tgetSocialMediaLinkRowOptions('Skype', 'uriSkype', 'icon-skype'),\r\n\t];\r\n\r\n\treturn rowOptionsList;\r\n};\r\n\r\nconst getSocialMediaLinkRowOptions = (label, inputId, iconCssClass) => {\r\n\treturn {\r\n\t\trowType: RowType.SocialMediaLinkInputRow,\r\n\t\trowTypeData: {\r\n\t\t\tlabel: label,\r\n\t\t\tinputId: inputId,\r\n\t\t\tinputType: InputType.TextInput,\r\n\t\t\ticonCssClass: iconCssClass,\r\n\t\t},\r\n\t};\r\n};\r\n","import React, { useState } from 'react';\r\nimport { Translate, useTranslate } from '@above-the-treeline/localization';\r\nimport { message } from 'antd';\r\nimport { useUser } from '../../../User/containers/UserDataStore';\r\nimport { useUserPreferences } from '../../../UserPreferences';\r\nimport {\r\n\tgetInitialFormValuesById,\r\n\tgetRowOptionsList,\r\n} from './LinksInitializer';\r\nimport { getRowByType } from '../Form/Form';\r\nimport { FormId } from '../Form/FormId';\r\n\r\nconst Links = () => {\r\n\tconst { translate } = useTranslate();\r\n\tconst userDataStore = useUser();\r\n\tconst userPreferences = useUserPreferences();\r\n\tconst userAttributes = userPreferences.getUserAttributes();\r\n\r\n\tconst rowOptionsList = getRowOptionsList();\r\n\tconst initialFormValuesById = getInitialFormValuesById(userAttributes);\r\n\r\n\tconst [formValuesById, setFormValuesById] = useState(initialFormValuesById);\r\n\r\n\tconst getGoodReadsAuthUri = () =>\r\n\t\t`${process.env.REACT_APP_EPLUS_LINK_URL}\r\n\t\t\t/uc/OAuth/OAuthAuthorize.aspx?oAuthProvider=GOODREADS`;\r\n\r\n\tconst saveLinks = async () => {\r\n\t\tconst { id: appUserId } = userDataStore.state.user.user;\r\n\t\tconst didSucceed = await userPreferences.saveLinks(\r\n\t\t\tformValuesById,\r\n\t\t\tappUserId,\r\n\t\t);\r\n\t\tif (didSucceed) {\r\n\t\t\treturn message.success(translate('links_saved'));\r\n\t\t}\r\n\t\tmessage.error(translate('error_saving_links'));\r\n\t};\r\n\r\n\tconst getLinkRowByType = rowOptions =>\r\n\t\tgetRowByType(\r\n\t\t\trowOptions,\r\n\t\t\tformValuesById,\r\n\t\t\tsetFormValuesById,\r\n\t\t\tFormId.Links,\r\n\t\t);\r\n\r\n\treturn (\r\n\t\t<div className=\"links\">\r\n\t\t\t<div className=\"links-prompt\">\r\n\t\t\t\t<Translate id=\"social_media_links_below_will_appear_in_profile\" />\r\n\t\t\t\t:\r\n\t\t\t</div>\r\n\t\t\t{rowOptionsList.map(getLinkRowByType)}\r\n\t\t\t<div\r\n\t\t\t\ttitle={translate('save_links')}\r\n\t\t\t\tclassName=\"icon-save-icon plus\"\r\n\t\t\t\tonClick={saveLinks}\r\n\t\t\t/>\r\n\t\t\t<div className=\"link-social-media-accounts\">\r\n\t\t\t\t<span className=\"acc-font-no-hover link-accounts-label\">\r\n\t\t\t\t\t<Translate id=\"link_your_goodreads_account\" />:\r\n\t\t\t\t</span>\r\n\t\t\t\t<a\r\n\t\t\t\t\ttarget=\"_blank\"\r\n\t\t\t\t\trel=\"noreferrer noopener\"\r\n\t\t\t\t\thref={getGoodReadsAuthUri()}\r\n\t\t\t\t\tclassName=\"icon-goodreads socialIcons socialLink\"></a>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default Links;\r\n","import React from 'react';\r\nimport { Menu } from 'antd';\r\nimport Overview from './Overview/Overview';\r\nimport Links from './Links/Links';\r\n\r\nProfileEditor.propTypes = {};\r\n\r\nconst MenuKeys = {\r\n\toverview: 'overview',\r\n\tlinks: 'links',\r\n};\r\n\r\nexport default function ProfileEditor() {\r\n\tconst defaultSelectedKey = MenuKeys.overview;\r\n\r\n\tconst [selectedKey, setSelectedKey] = React.useState(defaultSelectedKey);\r\n\r\n\tconst handleMenuSelectionChange = event => {\r\n\t\tsetSelectedKey(event.key);\r\n\t};\r\n\r\n\tconst menuItems = [\r\n\t\t{\r\n\t\t\tkey: MenuKeys.overview,\r\n\t\t\tlabel: 'Overview',\r\n\t\t},\r\n\t\t{\r\n\t\t\tkey: MenuKeys.links,\r\n\t\t\tlabel: 'Links',\r\n\t\t},\r\n\t];\r\n\r\n\tconst getMenuSelectionView = () => {\r\n\t\tswitch (selectedKey) {\r\n\t\t\tcase MenuKeys.overview:\r\n\t\t\t\treturn <Overview />;\r\n\t\t\tcase MenuKeys.links:\r\n\t\t\t\treturn <Links />;\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"profile-editor\">\r\n\t\t\t<Menu\r\n\t\t\t\tonClick={handleMenuSelectionChange}\r\n\t\t\t\tstyle={{ width: 200 }}\r\n\t\t\t\tdefaultSelectedKeys={[defaultSelectedKey]}\r\n\t\t\t\tmode=\"inline\">\r\n\t\t\t\t{menuItems.map(menuItem => (\r\n\t\t\t\t\t<Menu.Item key={menuItem.key}>{menuItem.label}</Menu.Item>\r\n\t\t\t\t))}\r\n\t\t\t</Menu>\r\n\t\t\t<div className=\"menu-selection-view\">{getMenuSelectionView()}</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport UserAvatar from 'treeline-react-core-components/UserAvatar';\r\nimport api from '../../Api';\r\nimport { connectToUser } from '../User/containers/UserDataStore';\r\nimport { connectToUserPreferences } from '../UserPreferences';\r\nimport { Modal, Popover, Input, Button, Tooltip } from 'antd';\r\nimport combineConnectors from '../util/combineConnectors';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport TitleImage from '../Title/TitleImage';\r\nimport { connectToRequests } from '../Requests/containers/RequestsDataStore';\r\nimport ReviewCopyActionTooltip from './ReviewCopyActionTooltip';\r\nimport ProfileEditor from './ProfileEditor/ProfileEditor';\r\nimport {\r\n\tdoOpenReviewCopyAction,\r\n\tdeactivateAutoOpenReviewCopyAction,\r\n} from './routines';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport { connectToAccountOrMembershipRequiredModalContext } from '../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\nimport './reviewCopy.less';\r\n\r\nexport class ReviewCopyRequestModalAnchor extends React.Component {\r\n\tstatic propTypes = {\r\n\t\ttitle: PropTypes.object,\r\n\t\ttooltipPlacement: PropTypes.string,\r\n\t\tdigitalCreatedDate: PropTypes.string,\r\n\t\tdigitalUpdatedDate: PropTypes.string,\r\n\t\tdoAllowOpenOnMount: PropTypes.bool,\r\n\t\tisMobile: PropTypes.func,\r\n\t};\r\n\r\n\tstatic defaultProps = {\r\n\t\tdoAllowOpenOnMount: false,\r\n\t};\r\n\r\n\trequestTypes = {\r\n\t\tdrc: 1,\r\n\t\tprc: 2,\r\n\t};\r\n\r\n\tevaluationPurposeTypeIds = {\r\n\t\tacquisition: 1,\r\n\t\tadvocating: 2,\r\n\t\tcourseAdoption: 3,\r\n\t\treviewing: 4,\r\n\t};\r\n\r\n\tstate = {\r\n\t\tisModalOpen: false,\r\n\t\tisEditingProfile: false,\r\n\t\tselectedRequestType: this.requestTypes.drc,\r\n\t\tselectedTitleEvaluationPurposeTypeId: -1,\r\n\t\tselectedAddressId: -1,\r\n\t\taddressPopoverOpen: false,\r\n\t\tevaluationPurposePopoverOpen: false,\r\n\t\tdepartment: '',\r\n\t\tcourse: '',\r\n\t\tenrollment: '',\r\n\t\trequestReason: '',\r\n\t\tsending: false,\r\n\t\tsuccess: false,\r\n\t\tfailure: false,\r\n\t\tmessage: '',\r\n\t};\r\n\r\n\tcomponentDidMount = () => {\r\n\t\tconst {\r\n\t\t\tevaluationType,\r\n\t\t} = this.props.userPreferences.getReviewCopyDownloadPreferences();\r\n\r\n\t\tthis.setState({\r\n\t\t\tselectedTitleEvaluationPurposeTypeId: evaluationType,\r\n\t\t\tselectedAddressId: this.getDefaultAddressId(),\r\n\t\t});\r\n\r\n\t\tif (this.props.doAllowOpenOnMount && doOpenReviewCopyAction()) {\r\n\t\t\tthis.openModal();\r\n\t\t\tdeactivateAutoOpenReviewCopyAction();\r\n\t\t}\r\n\t};\r\n\r\n\thandleClick = () => {\r\n\t\tconst {\r\n\t\t\tuserDataStore: { isAnonymous },\r\n\t\t\taccountOrMembershipRequiredModalContext: { setIsVisible },\r\n\t\t} = this.props;\r\n\t\treturn isAnonymous() ? setIsVisible(true) : this.openModal();\r\n\t};\r\n\r\n\trender = () => (\r\n\t\t<div>\r\n\t\t\t{this.props.isMobile()\r\n\t\t\t\t? this.renderButton()\r\n\t\t\t\t: this.renderButtonWithTooltip()}\r\n\t\t\t<Modal\r\n\t\t\t\twrapClassName={this.getWrapClassName()}\r\n\t\t\t\tbodyStyle={this.getModalBodyStyle()}\r\n\t\t\t\ttitle={this.getModalTitle()}\r\n\t\t\t\twidth={700}\r\n\t\t\t\tvisible={this.state.isModalOpen}\r\n\t\t\t\tonCancel={() => this.setState({ isModalOpen: false })}\r\n\t\t\t\tonOk={() => this.handleModalOnOk()}>\r\n\t\t\t\t{this.renderModalContents()}\r\n\t\t\t</Modal>\r\n\t\t\t<Modal\r\n\t\t\t\tvisible={this.infoModalVisible()}\r\n\t\t\t\tclosable={false}\r\n\t\t\t\tfooter={[\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\ttype=\"primary\"\r\n\t\t\t\t\t\tdisabled={this.state.sending}\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\t\t\tsending: false,\r\n\t\t\t\t\t\t\t\tsuccess: false,\r\n\t\t\t\t\t\t\t\tfailure: false,\r\n\t\t\t\t\t\t\t\tmessage: '',\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Translate id=\"ok\" />\r\n\t\t\t\t\t</Button>,\r\n\t\t\t\t]}>\r\n\t\t\t\t{this.renderInfoModalContents()}\r\n\t\t\t</Modal>\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderButton = () => {\r\n\t\treturn (\r\n\t\t\t<div className=\"column-narrow\">\r\n\t\t\t\t<Button shape=\"circle\" onClick={this.handleClick}>\r\n\t\t\t\t\t<div className=\"icon-hand-paper-o request-hand\" />\r\n\t\t\t\t</Button>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderButtonWithTooltip = () => {\r\n\t\treturn (\r\n\t\t\t<Tooltip\r\n\t\t\t\ttitle={this.getTooltip()}\r\n\t\t\t\tplacement={this.props.tooltipPlacement || 'topRight'}>\r\n\t\t\t\t{this.renderButton()}\r\n\t\t\t\t<div className=\"clear\" />\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t};\r\n\r\n\topenModal = () => {\r\n\t\tthis.setState({\r\n\t\t\tisModalOpen: true,\r\n\t\t\tisEditingProfile: false,\r\n\t\t});\r\n\t};\r\n\r\n\tgetTooltip() {\r\n\t\tconst { digitalCreatedDate, digitalUpdatedDate } = this.props;\r\n\t\treturn (\r\n\t\t\t<ReviewCopyActionTooltip\r\n\t\t\t\theaderText={'Request DRC'}\r\n\t\t\t\tcreatedDate={digitalCreatedDate}\r\n\t\t\t\tupdatedDate={digitalUpdatedDate}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n\r\n\tinfoModalVisible = () =>\r\n\t\tthis.state.sending || this.state.success || this.state.failure;\r\n\r\n\trenderInfoSendingModalContents = () => {\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<Translate id=\"sending\" />\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderInfoSuccessModalContents = () => {\r\n\t\tconst title = this.getTitle();\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<b className=\"success\">\r\n\t\t\t\t\t<Translate id=\"success\" />:\r\n\t\t\t\t</b>\r\n\t\t\t\t \r\n\t\t\t\t<span>\r\n\t\t\t\t\t<Translate id=\"request_sent_for\" />\r\n\t\t\t\t\t <b>{title.name}</b>.\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderInfoFailureModalContents = () => {\r\n\t\tconst { message } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<b className=\"error\">\r\n\t\t\t\t\t<Translate id=\"error\" />:\r\n\t\t\t\t</b>\r\n\t\t\t\t \r\n\t\t\t\t<span>{message}</span>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderInfoModalContents = () => {\r\n\t\tconst { sending, success, failure } = this.state;\r\n\r\n\t\tif (sending) {\r\n\t\t\treturn this.renderInfoSendingModalContents();\r\n\t\t}\r\n\r\n\t\tif (success) {\r\n\t\t\treturn this.renderInfoSuccessModalContents();\r\n\t\t}\r\n\r\n\t\tif (failure) {\r\n\t\t\treturn this.renderInfoFailureModalContents();\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n\r\n\tgetPopoverArrowClassName = visible =>\r\n\t\t`popover-arrow-icon ${\r\n\t\t\tvisible ? 'icon-drop-up-icon-01' : 'icon-drop-down-icon'\r\n\t\t}`;\r\n\r\n\thandleModalOnOk = () => {\r\n\t\tthis.setState({\r\n\t\t\tsending: true,\r\n\t\t\tsuccess: false,\r\n\t\t\tfailure: false,\r\n\t\t});\r\n\r\n\t\tif (this.isDrcSelected()) {\r\n\t\t\tthis.submitDrcRequest();\r\n\t\t} else if (this.isPrcSelected()) {\r\n\t\t\tthis.submitPrcRequest();\r\n\t\t}\r\n\t};\r\n\r\n\tsubmitDrcRequest = () => {\r\n\t\tconst selectedTitleEvaluationPurposeTypeId = this.getSelectedTitleEvaluationPurposeTypeId();\r\n\t\tconst requestProfile = encodeURIComponent(\r\n\t\t\tthis.getUserOverview() || 'No Overview',\r\n\t\t);\r\n\t\tconst requestReason = encodeURIComponent(this.getRequestReason());\r\n\t\tconst department = encodeURIComponent(this.getDepartment());\r\n\t\tconst course = encodeURIComponent(this.getCourse());\r\n\t\tconst enrollment = encodeURIComponent(this.getEnrollment());\r\n\t\tconst sku = this.getTitleSku();\r\n\r\n\t\tconst params = {\r\n\t\t\tsku,\r\n\t\t\tselectedTitleEvaluationPurposeTypeId,\r\n\t\t\trequestProfile,\r\n\t\t\tdepartment,\r\n\t\t\tcourse,\r\n\t\t\tenrollment,\r\n\t\t\trequestReason,\r\n\t\t};\r\n\r\n\t\tapi.post('/api/v1/me/galleys/requests', params).then(response => {\r\n\t\t\tconst { code, text } = response;\r\n\t\t\tconst success = code === 'SUCCESS';\r\n\t\t\tconst failure = !success;\r\n\r\n\t\t\tif (success) {\r\n\t\t\t\tthis.props.requestsDataStore.refresh();\r\n\t\t\t}\r\n\r\n\t\t\tthis.setState({\r\n\t\t\t\tsending: false,\r\n\t\t\t\tsuccess,\r\n\t\t\t\tfailure,\r\n\t\t\t\tmessage: text,\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\r\n\tgetPrcCourseAdoptionAttributes = () => {\r\n\t\tconst department = this.getDepartment();\r\n\t\tconst course = this.getCourse();\r\n\t\tconst enrollment = this.getEnrollment();\r\n\t\tconst attributes = [];\r\n\r\n\t\tif (department) {\r\n\t\t\tattributes.push({\r\n\t\t\t\ttype: 1,\r\n\t\t\t\tvalue: encodeURIComponent(department),\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (course) {\r\n\t\t\tattributes.push({\r\n\t\t\t\ttype: 2,\r\n\t\t\t\tvalue: encodeURIComponent(course),\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (enrollment) {\r\n\t\t\tattributes.push({\r\n\t\t\t\ttype: 3,\r\n\t\t\t\tvalue: encodeURIComponent(enrollment),\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn attributes;\r\n\t};\r\n\r\n\tsubmitPrcRequest = () => {\r\n\t\tif (!this.isValidPrcRequest()) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tsending: false,\r\n\t\t\t\tsuccess: false,\r\n\t\t\t\tfailure: true,\r\n\t\t\t\tmessage: <Translate id=\"please_provide_shipping_for_request\" />,\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst sku = this.getTitleSku();\r\n\t\tconst phone = this.getPhoneNumber();\r\n\t\tconst selectedAddress = this.getSelectedAddress();\r\n\t\tconst selectedTitleEvaluationPurposeTypeId = this.getSelectedTitleEvaluationPurposeTypeId();\r\n\t\tconst requestReason = this.getRequestReason();\r\n\t\tconst emailAddress = this.getUserEmailAddress();\r\n\t\tconst sourceUserId = this.getUserId();\r\n\r\n\t\tlet lineItem = {\r\n\t\t\tsku,\r\n\t\t\ttype: 0,\r\n\t\t\trequestedQty: 1,\r\n\t\t\trequestType: 10,\r\n\t\t\temailAddress,\r\n\t\t\tsourceUserId,\r\n\t\t\trequestMessage: encodeURIComponent(requestReason),\r\n\t\t\tevaluationType: selectedTitleEvaluationPurposeTypeId,\r\n\t\t\taddress: selectedAddress,\r\n\t\t\tphoneNumber: phone,\r\n\t\t};\r\n\r\n\t\tif (this.isCourseAdoptionSelected()) {\r\n\t\t\tconst attributes = this.getPrcCourseAdoptionAttributes();\r\n\r\n\t\t\tif (attributes && attributes.length > 0) {\r\n\t\t\t\tlineItem.attributes = attributes;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tapi.post('api/products/requests/0', lineItem).then(ret => {\r\n\t\t\tthis.setState({\r\n\t\t\t\tsending: false,\r\n\t\t\t\tsuccess: true,\r\n\t\t\t\tfailure: false,\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\r\n\tisValidPrcRequest = () => {\r\n\t\tconst address = this.getSelectedAddress();\r\n\t\tconst phone = this.getPhoneNumber();\r\n\r\n\t\treturn address && phone && phone.length !== 0;\r\n\t};\r\n\r\n\tsaveTitleEvaluationPurpose = selectedTitleEvaluationPurposeTypeId => {\r\n\t\tconst preferenceType = 'DARC';\r\n\t\tconst preferenceName = 'evaluationType';\r\n\r\n\t\tapi.put(\r\n\t\t\t`/api/v1/me/preferences/${preferenceType}/${preferenceName}`,\r\n\t\t\tselectedTitleEvaluationPurposeTypeId,\r\n\t\t);\r\n\t};\r\n\r\n\thandleTitleEvaluationPurposeClick = selectedTitleEvaluationPurposeTypeId => {\r\n\t\tthis.saveTitleEvaluationPurpose(selectedTitleEvaluationPurposeTypeId);\r\n\r\n\t\tthis.setState({\r\n\t\t\tselectedTitleEvaluationPurposeTypeId,\r\n\t\t\tevaluationPurposePopoverOpen: false,\r\n\t\t});\r\n\t};\r\n\r\n\thandleShipToAddressClick = selectedAddressId =>\r\n\t\tthis.setState({\r\n\t\t\tselectedAddressId,\r\n\t\t\taddressPopoverOpen: false,\r\n\t\t});\r\n\r\n\tgetModalBodyStyle = () => {\r\n\t\treturn { paddingTop: 10 };\r\n\t};\r\n\r\n\tgetWrapClassName = () => {\r\n\t\treturn this.state.isEditingProfile\r\n\t\t\t? 'review-copy-request-modal-editing-profile'\r\n\t\t\t: null;\r\n\t};\r\n\r\n\tgetModalTitle = () => (\r\n\t\t<div className=\"review-copy-request-modal-title\">\r\n\t\t\t{this.state.isEditingProfile\r\n\t\t\t\t? this.renderReviewCopyProfileEditorTitle()\r\n\t\t\t\t: this.renderReviewCopyRequestFormTitle()}\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderReviewCopyRequestFormTitle = () => (\r\n\t\t<b>\r\n\t\t\t<Translate id=\"review_copy_request_form\" />\r\n\t\t</b>\r\n\t);\r\n\r\n\trenderReviewCopyProfileEditorTitle = () => (\r\n\t\t<div className=\"profile-editor-title-bar\">\r\n\t\t\t<div>\r\n\t\t\t\t<b>\r\n\t\t\t\t\t<Translate id=\"profile_editor\" />\r\n\t\t\t\t</b>\r\n\t\t\t\t<span className=\"title-and-return-link-separator\">•</span>\r\n\t\t\t\t<span\r\n\t\t\t\t\tonClick={this.returnToRequest}\r\n\t\t\t\t\tclassName=\"acc-font-no-hover\">\r\n\t\t\t\t\t<span className=\"return-to-request-link\">\r\n\t\t\t\t\t\t<Translate id=\"return_to_request\" />\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span className=\"icon-book\" />\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t\t{this.renderUserProfileStrength()}\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderModalContents = () => (\r\n\t\t<div className=\"review-copy-request-modal-contents\">\r\n\t\t\t{this.state.isEditingProfile\r\n\t\t\t\t? this.renderReviewCopyProfileEditor()\r\n\t\t\t\t: this.renderReviewCopyRequestForm()}\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderReviewCopyRequestForm = () => (\r\n\t\t<>\r\n\t\t\t{this.renderUserProfile()}\r\n\t\t\t<hr className=\"margin-top-5\" />\r\n\t\t\t{this.renderTitleInfo()}\r\n\t\t\t{this.renderLibraryUpgradeInfo()}\r\n\t\t</>\r\n\t);\r\n\r\n\trenderReviewCopyProfileEditor = () => <ProfileEditor />;\r\n\r\n\tgetTitle = () => this.props.title;\r\n\r\n\tgetTitleUri = () => this.props.title.uri;\r\n\r\n\tgetTitleSku = () => this.props.title.sku;\r\n\r\n\tgetSelectedRequestType = () => this.state.selectedRequestType;\r\n\r\n\tisDrcSelected = () =>\r\n\t\tthis.getSelectedRequestType() === this.requestTypes.drc;\r\n\r\n\tisPrcSelected = () =>\r\n\t\tthis.getSelectedRequestType() === this.requestTypes.prc;\r\n\r\n\tisLibrary = () => this.props.userDataStore.state.organization.isLibrary;\r\n\r\n\tisAccountUpgradable = () =>\r\n\t\tthis.props.userDataStore.state.user.user.isAccountUpgradable;\r\n\r\n\tgetSelectedTitleEvaluationPurposeTypeId = () =>\r\n\t\tthis.state.selectedTitleEvaluationPurposeTypeId;\r\n\r\n\tgetDepartment = () => this.state.department;\r\n\r\n\tgetCourse = () => this.state.course;\r\n\r\n\tgetEnrollment = () => this.state.enrollment;\r\n\r\n\tgetRequestReason = () => this.state.requestReason;\r\n\r\n\tgetUserEmailAddress = () => this.props.userDataStore.state.user.user.email;\r\n\r\n\tgetUserId = () => this.props.userDataStore.state.user.user.id;\r\n\r\n\tisCourseAdoptionSelected = () =>\r\n\t\tthis.getSelectedTitleEvaluationPurposeTypeId() ===\r\n\t\tthis.evaluationPurposeTypeIds.courseAdoption;\r\n\r\n\tgetAddresses = () => {\r\n\t\tconst { addresses } = this.props.userDataStore.state.user.user;\r\n\r\n\t\treturn addresses;\r\n\t};\r\n\r\n\tgetDefaultAddress = () => {\r\n\t\tconst addresses = this.getAddresses();\r\n\r\n\t\tif (!addresses || addresses.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst address = addresses.find(a => a.isDefault);\r\n\r\n\t\tif (address) {\r\n\t\t\treturn address;\r\n\t\t}\r\n\r\n\t\treturn addresses[0];\r\n\t};\r\n\r\n\tgetDefaultAddressId = () => {\r\n\t\tconst address = this.getDefaultAddress();\r\n\r\n\t\tif (address) {\r\n\t\t\treturn address.addressId;\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t};\r\n\r\n\tgetSelectedAddress = () => {\r\n\t\tconst { selectedAddressId } = this.state;\r\n\t\tconst addresses = this.getAddresses();\r\n\r\n\t\tif (!addresses || addresses.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst address = addresses.find(a => a.addressId === selectedAddressId);\r\n\r\n\t\tif (address) {\r\n\t\t\treturn address;\r\n\t\t}\r\n\r\n\t\treturn this.getDefaultAddress();\r\n\t};\r\n\r\n\tgetUserRole = () => {\r\n\t\tconst {\r\n\t\t\trequestorType,\r\n\t\t} = this.props.userPreferences.getReviewCopyDownloadPreferences();\r\n\r\n\t\treturn requestorType;\r\n\t};\r\n\r\n\tgetUserOverview = () => {\r\n\t\tconst {\r\n\t\t\trequestRole,\r\n\t\t} = this.props.userPreferences.getReviewCopyDownloadPreferences();\r\n\r\n\t\treturn requestRole;\r\n\t};\r\n\r\n\tgetUserAvatarUri = () => {\r\n\t\tconst { userAvatar } = this.props.userDataStore.state;\r\n\t\tconst { uri } = userAvatar;\r\n\r\n\t\treturn uri;\r\n\t};\r\n\r\n\tgetNumberOfJoinedCommunities = () => {\r\n\t\tconst { joinedCommunities } = this.props.userDataStore.state;\r\n\r\n\t\treturn (joinedCommunities && joinedCommunities.length) || 0;\r\n\t};\r\n\r\n\tgetPhoneNumber = () => {\r\n\t\tconst { phone } = this.props.userDataStore.state.user.user;\r\n\r\n\t\treturn phone;\r\n\t};\r\n\r\n\tgetAccentFontColor = () =>\r\n\t\tthis.props.userPreferences.getFonts().accentFontColor;\r\n\r\n\tgetSocialMediaLinksAndClassNames = () => {\r\n\t\tconst userAttributes = this.props.userPreferences.getUserAttributes();\r\n\t\tconst socialMediaIconClassByType = {\r\n\t\t\t'Personal Website Uri': 'icon-ios-body',\r\n\t\t\t'Twitter Uri': 'icon-twitter-icon',\r\n\t\t\t'Facebook Uri': 'icon-facebook-icon',\r\n\t\t\t'Goodreads Uri': 'icon-goodreads',\r\n\t\t\t'LinkedIn Uri': 'icon-linkedin-alt',\r\n\t\t\t'Skype Uri': 'icon-skype',\r\n\t\t};\r\n\r\n\t\tif (!userAttributes) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\treturn Object.keys(userAttributes)\r\n\t\t\t.filter(type => type in socialMediaIconClassByType)\r\n\t\t\t.map(type => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttype,\r\n\t\t\t\t\thref: userAttributes[type].value,\r\n\t\t\t\t\tclassName: socialMediaIconClassByType[type],\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t};\r\n\r\n\tgetUserProfileStrength = () => {\r\n\t\tconst role = this.getUserRole();\r\n\r\n\t\t// Users who don't have a role defined are considered to have 'incomplete' profile strength.\r\n\t\tif (!role) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tconst overview = this.getUserOverview();\r\n\t\tconst avatarUri = this.getUserAvatarUri();\r\n\t\tconst joinedCommunities = this.getNumberOfJoinedCommunities();\r\n\t\tconst socialMediaLinks = this.getSocialMediaLinksAndClassNames();\r\n\r\n\t\tlet strength = 0;\r\n\r\n\t\t// User overview is worth 2 points.\r\n\t\tif (overview) {\r\n\t\t\tstrength += 2;\r\n\t\t}\r\n\r\n\t\t// Avatar image is worth 1 point.\r\n\t\tif (avatarUri) {\r\n\t\t\tstrength++;\r\n\t\t}\r\n\r\n\t\t// Being in > 0 community is worth 1 point.\r\n\t\tif (joinedCommunities > 0) {\r\n\t\t\tstrength++;\r\n\t\t}\r\n\r\n\t\t// Each social media link is worth 1 point.\r\n\t\tif (socialMediaLinks) {\r\n\t\t\tstrength += socialMediaLinks.length;\r\n\t\t}\r\n\r\n\t\treturn strength;\r\n\t};\r\n\r\n\tgetUserProfileStrengthLocalizationAndColor = () => {\r\n\t\tconst strength = this.getUserProfileStrength();\r\n\r\n\t\tif (strength === -1) {\r\n\t\t\treturn { localization: 'incomplete', color: 'red' };\r\n\t\t}\r\n\r\n\t\tif (strength < 2) {\r\n\t\t\treturn { localization: 'weak', color: 'blue' };\r\n\t\t}\r\n\r\n\t\tif (strength < 4) {\r\n\t\t\treturn { localization: 'fair', color: 'blue' };\r\n\t\t}\r\n\r\n\t\tif (strength < 6) {\r\n\t\t\treturn { localization: 'good', color: 'blue' };\r\n\t\t}\r\n\r\n\t\treturn { localization: 'excellent', color: 'blue' };\r\n\t};\r\n\r\n\trenderUserOverview = () => {\r\n\t\tconst overview = this.getUserOverview();\r\n\r\n\t\tif (overview) {\r\n\t\t\treturn <span>{overview}</span>;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<i>\r\n\t\t\t\t<Translate id=\"no_overview\" />\r\n\t\t\t</i>\r\n\t\t);\r\n\t};\r\n\r\n\trenderUserRole = () => {\r\n\t\tconst role = this.getUserRole();\r\n\r\n\t\tif (role) {\r\n\t\t\treturn <span>{role}</span>;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<i>\r\n\t\t\t\t<Translate id=\"no_role_specified\" />\r\n\t\t\t</i>\r\n\t\t);\r\n\t};\r\n\r\n\trenderUserProfileStrengthHelpPopover = () => {\r\n\t\tconst role = this.getUserRole();\r\n\t\tconst avatarUri = this.getUserAvatarUri();\r\n\t\tconst overview = this.getUserOverview();\r\n\t\tconst numberOfJoinedCommunities = this.getNumberOfJoinedCommunities();\r\n\t\tconst socialMediaLinks = this.getSocialMediaLinksAndClassNames();\r\n\r\n\t\tconst getCheckmarkClassName = isChecked =>\r\n\t\t\t`icon-mark-icon ${isChecked ? 'green' : 'red'}`;\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"user-profile-strength-popover-content\">\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<Translate id=\"profile_strength_description\" />\r\n\t\t\t\t</span>\r\n\t\t\t\t<ul className=\"list-style-none pad-left-5\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<span className={getCheckmarkClassName(role)} />\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t<Translate id=\"role_summary\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<span className={getCheckmarkClassName(avatarUri)} />\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t<Translate id=\"profile_picture\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<span className={getCheckmarkClassName(overview)} />\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t<Translate id=\"description_of_role\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclassName={getCheckmarkClassName(\r\n\t\t\t\t\t\t\t\tnumberOfJoinedCommunities > 0,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t<Translate id=\"affiliation\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<span className=\"super-script-number\">\r\n\t\t\t\t\t\t\t{socialMediaLinks.length}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t<Translate id=\"number_of_links\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderUserProfileStrength = () => {\r\n\t\tconst {\r\n\t\t\tlocalization,\r\n\t\t\tcolor,\r\n\t\t} = this.getUserProfileStrengthLocalizationAndColor();\r\n\r\n\t\treturn (\r\n\t\t\t<span className=\"user-profile-strength\">\r\n\t\t\t\t<span className=\"strength-label-and-value\">\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<Translate id=\"profile_strength\" />:\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t \r\n\t\t\t\t\t<span className={color}>{localization}</span> \r\n\t\t\t\t</span>\r\n\t\t\t\t<Popover\r\n\t\t\t\t\tplacement=\"bottom\"\r\n\t\t\t\t\tcontent={this.renderUserProfileStrengthHelpPopover()}\r\n\t\t\t\t\ttrigger=\"hover\">\r\n\t\t\t\t\t<span className=\"icon-help-icon clickable\" />\r\n\t\t\t\t</Popover>\r\n\t\t\t</span>\r\n\t\t);\r\n\t};\r\n\r\n\trenderJoinedCommunitiesCount = () => {\r\n\t\tconst joinedCommunities = this.getNumberOfJoinedCommunities();\r\n\r\n\t\tif (joinedCommunities === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<span>\r\n\t\t\t\t{joinedCommunities} Affiliation\r\n\t\t\t\t{joinedCommunities > 1 ? 's' : ''}\r\n\t\t\t</span>\r\n\t\t);\r\n\t};\r\n\r\n\trenderSocialMediaLink = (href, className, idx) => {\r\n\t\treturn (\r\n\t\t\t<span key={`sml-${idx}`}>\r\n\t\t\t\t<a\r\n\t\t\t\t\thref={href}\r\n\t\t\t\t\ttarget=\"_blank\"\r\n\t\t\t\t\trel=\"noopener noreferrer\"\r\n\t\t\t\t\tclassName=\"social-media-link\">\r\n\t\t\t\t\t<span className={className}></span>\r\n\t\t\t\t</a>\r\n\t\t\t</span>\r\n\t\t);\r\n\t};\r\n\r\n\trenderSocialMediaLinks = () => {\r\n\t\tconst socialMediaLinksAndClassNames = this.getSocialMediaLinksAndClassNames();\r\n\r\n\t\treturn socialMediaLinksAndClassNames.map((i, idx) =>\r\n\t\t\tthis.renderSocialMediaLink(i.href, i.className, idx),\r\n\t\t);\r\n\t};\r\n\r\n\trenderUserName = () => {\r\n\t\tconst { userAvatar } = this.props.userDataStore.state;\r\n\r\n\t\treturn <strong>{userAvatar.displayName}</strong>;\r\n\t};\r\n\r\n\trenderUserAvatar = () => {\r\n\t\tconst { userAvatar } = this.props.userDataStore.state;\r\n\r\n\t\treturn (\r\n\t\t\t<UserAvatar\r\n\t\t\t\tuserInitials={userAvatar && userAvatar.initials}\r\n\t\t\t\tavatarUri={userAvatar && userAvatar.uri}\r\n\t\t\t\tdisplayName={userAvatar && userAvatar.displayName}\r\n\t\t\t\tavatarSizeClass=\"avatar-medium\"\r\n\t\t\t/>\r\n\t\t);\r\n\t};\r\n\r\n\trenderUserProfile = () => {\r\n\t\tconst profileEditIconClasses =\r\n\t\t\t'profile-edit-icon icon-note-icon acc-font-no-hover';\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<div className=\"profile-header\">\r\n\t\t\t\t\t<Translate id=\"your_saved_profile\" />\r\n\t\t\t\t\t{this.renderUserProfileStrength()}\r\n\t\t\t\t</div>\r\n\t\t\t\t<div className=\"profile-overview\">\r\n\t\t\t\t\t<div className=\"profile-image\">\r\n\t\t\t\t\t\t{this.renderUserAvatar()}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className=\"profile-info\">\r\n\t\t\t\t\t\t<div className=\"profile-info-first-row\">\r\n\t\t\t\t\t\t\t<div className=\"first-row-item\">\r\n\t\t\t\t\t\t\t\t{this.renderUserName()}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName=\"first-row-item\"\r\n\t\t\t\t\t\t\t\tdata-type=\"user-role\">\r\n\t\t\t\t\t\t\t\t{this.renderUserRole()}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<span className=\"first-row-item-separator\">•</span>\r\n\t\t\t\t\t\t\t<div className=\"first-row-item\">\r\n\t\t\t\t\t\t\t\t{this.renderJoinedCommunitiesCount()}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName=\"first-row-item\"\r\n\t\t\t\t\t\t\t\tdata-type=\"social-media-links\">\r\n\t\t\t\t\t\t\t\t{this.renderSocialMediaLinks()}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div className=\"profile-info-second-row\">\r\n\t\t\t\t\t\t\t{this.renderUserOverview()}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className=\"profile-edit-icon-container\">\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tonClick={this.showProfileEditor}\r\n\t\t\t\t\t\t\tclassName={profileEditIconClasses}\r\n\t\t\t\t\t\t\ttitle=\"Edit Profile\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tshowProfileEditor = () => {\r\n\t\tthis.setState({ isEditingProfile: true });\r\n\t};\r\n\r\n\treturnToRequest = () => {\r\n\t\tthis.setState({ isEditingProfile: false });\r\n\t};\r\n\r\n\trenderDigitalFormatOption = () => (\r\n\t\t<div>\r\n\t\t\t<input\r\n\t\t\t\tid=\"digital-request-format\"\r\n\t\t\t\ttype=\"radio\"\r\n\t\t\t\tname=\"request-format\"\r\n\t\t\t\tchecked={this.isDrcSelected()}\r\n\t\t\t\tonChange={() =>\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tselectedRequestType: this.requestTypes.drc,\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\t\t\t<label htmlFor=\"digital-request-format\">\r\n\t\t\t\t \r\n\t\t\t\t<Translate id=\"digital\" />\r\n\t\t\t</label>\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderPrintFormatOption = () => (\r\n\t\t<div>\r\n\t\t\t<input\r\n\t\t\t\tid=\"print-request-format\"\r\n\t\t\t\ttype=\"radio\"\r\n\t\t\t\tname=\"request-format\"\r\n\t\t\t\tchecked={this.isPrcSelected()}\r\n\t\t\t\tonChange={() =>\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tselectedRequestType: this.requestTypes.prc,\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\t\t\t<label htmlFor=\"print-request-format\">\r\n\t\t\t\t \r\n\t\t\t\t<Translate id=\"print\" />\r\n\t\t\t</label>\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderTitleFormats = () => {\r\n\t\tconst title = this.getTitle();\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"pad-top-5\">\r\n\t\t\t\t<strong>\r\n\t\t\t\t\t<Translate id=\"format\" />:\r\n\t\t\t\t</strong>\r\n\t\t\t\t{title.isRequestable && this.renderDigitalFormatOption()}\r\n\t\t\t\t{title.isPrcRequestable && this.renderPrintFormatOption()}\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderTitleJacketCover = () => (\r\n\t\t<TitleImage title={this.props.title} height={150} />\r\n\t);\r\n\r\n\trenderTitleName = () => {\r\n\t\tconst title = this.getTitle();\r\n\t\tconst accentFontColor = this.getAccentFontColor();\r\n\r\n\t\treturn (\r\n\t\t\t<p className=\"margin-bottom-5\">\r\n\t\t\t\t<strong>\r\n\t\t\t\t\t<Translate id=\"request_for\" />\r\n\t\t\t\t\t: \r\n\t\t\t\t</strong>\r\n\t\t\t\t<b style={{ color: accentFontColor }}>{title.name}</b>\r\n\t\t\t</p>\r\n\t\t);\r\n\t};\r\n\r\n\trenderTitlePublisher = () => {\r\n\t\tconst title = this.getTitle();\r\n\r\n\t\treturn (\r\n\t\t\t<p className=\"margin-bottom-5\">\r\n\t\t\t\t<strong>\r\n\t\t\t\t\t<Translate id=\"publisher\" />\r\n\t\t\t\t\t: \r\n\t\t\t\t</strong>\r\n\t\t\t\t<span>{title.supplier}</span>\r\n\t\t\t</p>\r\n\t\t);\r\n\t};\r\n\r\n\trenderTitleEvaluationPurposePopoverRow = evaluationTypeId => {\r\n\t\treturn (\r\n\t\t\t<tr\r\n\t\t\t\tclassName=\"title-evaluation-purpose-row clickable\"\r\n\t\t\t\tonClick={() =>\r\n\t\t\t\t\tthis.handleTitleEvaluationPurposeClick(evaluationTypeId)\r\n\t\t\t\t}>\r\n\t\t\t\t<td className=\"pad-5\">\r\n\t\t\t\t\t<span className=\"icon-mark-icon\" />\r\n\t\t\t\t</td>\r\n\t\t\t\t<td className=\"pad-5\">\r\n\t\t\t\t\t<b>\r\n\t\t\t\t\t\t<Translate id={`evalType_${evaluationTypeId}`} />\r\n\t\t\t\t\t</b>\r\n\t\t\t\t</td>\r\n\t\t\t\t<td className=\"pad-5\">\r\n\t\t\t\t\t<Translate id={`evalDesc_${evaluationTypeId}`} />\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t);\r\n\t};\r\n\r\n\trenderTitleEvaluationPurposePopover = () => {\r\n\t\treturn (\r\n\t\t\t<div className=\"title-evaluation-purpose-popover-content\">\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<Translate id=\"select_best_option_for_request\" />\r\n\t\t\t\t</span>\r\n\t\t\t\t<table>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t{this.renderTitleEvaluationPurposePopoverRow(\r\n\t\t\t\t\t\t\tthis.evaluationPurposeTypeIds.acquisition,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{this.renderTitleEvaluationPurposePopoverRow(\r\n\t\t\t\t\t\t\tthis.evaluationPurposeTypeIds.advocating,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{this.renderTitleEvaluationPurposePopoverRow(\r\n\t\t\t\t\t\t\tthis.evaluationPurposeTypeIds.courseAdoption,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{this.renderTitleEvaluationPurposePopoverRow(\r\n\t\t\t\t\t\t\tthis.evaluationPurposeTypeIds.reviewing,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t</table>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderTitleEvaluationPurpose = () => {\r\n\t\tconst selectedTitleEvaluationPurposeTypeId = this.getSelectedTitleEvaluationPurposeTypeId();\r\n\t\tconst { evaluationPurposePopoverOpen } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<p className=\"margin-bottom-5\">\r\n\t\t\t\t<strong>\r\n\t\t\t\t\t<Translate id=\"evaluation_purpose\" />\r\n\t\t\t\t\t: \r\n\t\t\t\t</strong>\r\n\t\t\t\t<Popover\r\n\t\t\t\t\tplacement=\"bottom\"\r\n\t\t\t\t\ttrigger=\"click\"\r\n\t\t\t\t\tcontent={this.renderTitleEvaluationPurposePopover()}\r\n\t\t\t\t\tonVisibleChange={evaluationPurposePopoverOpen =>\r\n\t\t\t\t\t\tthis.setState({ evaluationPurposePopoverOpen })\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvisible={evaluationPurposePopoverOpen}>\r\n\t\t\t\t\t<span className=\"clickable\">\r\n\t\t\t\t\t\t{selectedTitleEvaluationPurposeTypeId ? (\r\n\t\t\t\t\t\t\t<Translate\r\n\t\t\t\t\t\t\t\tid={`evalType_${selectedTitleEvaluationPurposeTypeId}`}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<Translate id=\"please_select\" />\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclassName={this.getPopoverArrowClassName(\r\n\t\t\t\t\t\t\t\tevaluationPurposePopoverOpen,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</Popover>\r\n\t\t\t</p>\r\n\t\t);\r\n\t};\r\n\r\n\trenderTitleCourseAdoptionRequestReason = () => {\r\n\t\tconst { department, course, enrollment, requestReason } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<p className=\"margin-bottom-5 overflow-none\">\r\n\t\t\t\t<div id=\"course-adoption-info-left\" className=\"left\">\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<strong>\r\n\t\t\t\t\t\t\t<Translate id=\"department\" />\r\n\t\t\t\t\t\t</strong>\r\n\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\tvalue={department}\r\n\t\t\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\t\t\tthis.setState({ department: e.target.value })\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<strong>\r\n\t\t\t\t\t\t\t<Translate id=\"course\" />\r\n\t\t\t\t\t\t</strong>\r\n\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\tvalue={course}\r\n\t\t\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\t\t\tthis.setState({ course: e.target.value })\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<strong>\r\n\t\t\t\t\t\t\t<Translate id=\"exp_enrollment\" />\r\n\t\t\t\t\t\t</strong>\r\n\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\tvalue={enrollment}\r\n\t\t\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\t\t\tthis.setState({ enrollment: e.target.value })\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div id=\"course-adoption-info-right\" className=\"left\">\r\n\t\t\t\t\t<strong>\r\n\t\t\t\t\t\t<Translate id=\"additional_information\" />\r\n\t\t\t\t\t</strong>\r\n\t\t\t\t\t<Input.TextArea\r\n\t\t\t\t\t\tclassName=\"full-width margin-top-5\"\r\n\t\t\t\t\t\trows={5}\r\n\t\t\t\t\t\tvalue={requestReason}\r\n\t\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\t\tthis.setState({ requestReason: e.target.value })\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</p>\r\n\t\t);\r\n\t};\r\n\r\n\trenderTitleRequestReason = () => {\r\n\t\tif (this.isCourseAdoptionSelected()) {\r\n\t\t\treturn this.renderTitleCourseAdoptionRequestReason();\r\n\t\t}\r\n\r\n\t\tconst { requestReason } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<p className=\"margin-bottom-5\">\r\n\t\t\t\t<strong>\r\n\t\t\t\t\t<Translate id=\"why_are_you_requesting_this_title\" />\r\n\t\t\t\t</strong>\r\n\t\t\t\t<Input.TextArea\r\n\t\t\t\t\tclassName=\"full-width margin-top-5\"\r\n\t\t\t\t\trows={3}\r\n\t\t\t\t\tvalue={requestReason}\r\n\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\tthis.setState({ requestReason: e.target.value })\r\n\t\t\t\t\t}\r\n\t\t\t\t/>\r\n\t\t\t</p>\r\n\t\t);\r\n\t};\r\n\r\n\trenderMissingInfo = text => {\r\n\t\tconst accentFontColor = this.getAccentFontColor();\r\n\r\n\t\treturn (\r\n\t\t\t<p className=\"margin-bottom-5\">\r\n\t\t\t\t<b style={{ color: accentFontColor }}>{text}</b>\r\n\t\t\t</p>\r\n\t\t);\r\n\t};\r\n\r\n\trenderPhoneNumber = () => {\r\n\t\tconst phone = this.getPhoneNumber();\r\n\r\n\t\tif (!phone) {\r\n\t\t\treturn this.renderMissingInfo(\r\n\t\t\t\t'No phone number entered. Please add a contact phone number.',\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<p className=\"margin-bottom-5\">\r\n\t\t\t\t<strong>\r\n\t\t\t\t\t<Translate id=\"phone\" />\r\n\t\t\t\t\t: \r\n\t\t\t\t</strong>\r\n\t\t\t\t<span>{phone}</span>\r\n\t\t\t</p>\r\n\t\t);\r\n\t};\r\n\r\n\trenderShipToAddressPopoverRow = address => (\r\n\t\t<div\r\n\t\t\tclassName=\"address-popover-row flex-container flex-column clickable\"\r\n\t\t\tonClick={() => this.handleShipToAddressClick(address.addressId)}>\r\n\t\t\t<span>\r\n\t\t\t\t<b>{address.description}</b>\r\n\t\t\t</span>\r\n\t\t\t<span>{address.fullName}</span>\r\n\t\t\t<span>{address.streetAddress1}</span>\r\n\t\t\t<span>\r\n\t\t\t\t{address.city}, {address.stateProvince} \r\n\t\t\t\t{address.postalCode}\r\n\t\t\t</span>\r\n\t\t\t<span>{address.country}</span>\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderShipToAddressPopover = () => {\r\n\t\tconst addresses = this.getAddresses();\r\n\r\n\t\treturn (\r\n\t\t\t<div id=\"address-popover-content\">\r\n\t\t\t\t{addresses.map(address =>\r\n\t\t\t\t\tthis.renderShipToAddressPopoverRow(address),\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderShipToAddress = () => {\r\n\t\tconst addresses = this.getAddresses();\r\n\r\n\t\tif (!addresses || addresses.length === 0) {\r\n\t\t\treturn this.renderMissingInfo(\r\n\t\t\t\t'No addresses entered. Please add a address.',\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tconst { addressPopoverOpen } = this.state;\r\n\t\tconst selectedAddress = this.getSelectedAddress();\r\n\r\n\t\treturn (\r\n\t\t\t<p className=\"margin-bottom-5\">\r\n\t\t\t\t<strong>\r\n\t\t\t\t\t<Translate id=\"ship_to_address\" />\r\n\t\t\t\t\t: \r\n\t\t\t\t</strong>\r\n\t\t\t\t<Popover\r\n\t\t\t\t\tplacement=\"bottom\"\r\n\t\t\t\t\ttrigger=\"click\"\r\n\t\t\t\t\tcontent={this.renderShipToAddressPopover()}\r\n\t\t\t\t\tvisible={addressPopoverOpen}\r\n\t\t\t\t\tonVisibleChange={addressPopoverOpen =>\r\n\t\t\t\t\t\tthis.setState({ addressPopoverOpen })\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t<span className=\"clickable\">\r\n\t\t\t\t\t\t<span>{selectedAddress.description}</span>\r\n\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclassName={this.getPopoverArrowClassName(\r\n\t\t\t\t\t\t\t\taddressPopoverOpen,\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</Popover>\r\n\t\t\t</p>\r\n\t\t);\r\n\t};\r\n\r\n\trenderPrcFields = () => (\r\n\t\t<div>\r\n\t\t\t{this.renderPhoneNumber()}\r\n\t\t\t{this.renderShipToAddress()}\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderTitleInfo = () => (\r\n\t\t<div className=\"flex-container\">\r\n\t\t\t<div>\r\n\t\t\t\t{this.renderTitleJacketCover()}\r\n\t\t\t\t{this.renderTitleFormats()}\r\n\t\t\t</div>\r\n\t\t\t<div className=\"pad-left-20 full-width\">\r\n\t\t\t\t{this.renderTitleName()}\r\n\t\t\t\t{this.renderTitlePublisher()}\r\n\t\t\t\t{this.renderTitleEvaluationPurpose()}\r\n\t\t\t\t{this.isPrcSelected() && this.renderPrcFields()}\r\n\t\t\t\t{this.renderTitleRequestReason()}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n\r\n\trenderLibraryUpgradeInfo = () => {\r\n\t\tconst isAccountUpgradable = this.isAccountUpgradable();\r\n\t\tconst isLibrary = this.isLibrary();\r\n\r\n\t\tif (!isAccountUpgradable || !isLibrary) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<div id=\"library-upgrade-info\">\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<Translate id=\"librarians\" />:\r\n\t\t\t\t\t<br />\r\n\t\t\t\t\t<Translate id=\"gain_more_recognition_by_publishers_react\" />\r\n\t\t\t\t</span>\r\n\t\t\t\t<br />\r\n\t\t\t\t<a\r\n\t\t\t\t\thref={process.env.REACT_APP_LIBRARY_UPGRADE_URL}\r\n\t\t\t\t\tid=\"library-upgrade-info-link\">\r\n\t\t\t\t\t<Translate id=\"learn_more\" />\r\n\t\t\t\t</a>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n}\r\n\r\nconst connectors = [\r\n\tconnectToUser,\r\n\tconnectToUserPreferences,\r\n\tconnectToRequests,\r\n\tconnectToAccountOrMembershipRequiredModalContext,\r\n];\r\n\r\nexport default combineConnectors(connectors)(\r\n\twithIsMobile(ReviewCopyRequestModalAnchor),\r\n);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './listAssign.less';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport paths from '../../../../paths';\r\nimport { Link } from 'react-router-dom';\r\n\r\nListTitleIsOnBullet.propTypes = {\r\n\tlist: PropTypes.object,\r\n\tcommunityName: PropTypes.string,\r\n};\r\n\r\nfunction ListTitleIsOnBullet({ list, communityName }) {\r\n\tconst getCommunityName = () =>\r\n\t\tcommunityName ? (\r\n\t\t\t<span>\r\n\t\t\t\t({communityName} <Translate id=\"community\" />)\r\n\t\t\t</span>\r\n\t\t) : null;\r\n\treturn (\r\n\t\t<div className=\"current-list\">\r\n\t\t\t<div className=\"icon-single\" />\r\n\t\t\t<Link\r\n\t\t\t\tto={paths.collaborativeList(list.id)}\r\n\t\t\t\tclassName=\"column-spaced dotDot collaborative-list-title\">\r\n\t\t\t\t{list.name} {getCommunityName()}\r\n\t\t\t</Link>\r\n\t\t\t<div className=\"clear\" />\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default ListTitleIsOnBullet;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useTitle } from '../../../Title/containers/TitleDataStore';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport ListTitleIsOnBullet from './ListTitleIsOnBullet';\r\nimport './listAssign.less';\r\n\r\nListsTitleIsOnSection.propTypes = {\r\n\tgetCommunity: PropTypes.func,\r\n};\r\n\r\nfunction ListsTitleIsOnSection({ getCommunity }) {\r\n\tconst titleDataStore = useTitle();\r\n\tconst { lists } = titleDataStore.state.collaborativeLists;\r\n\r\n\tconst getTitleBullets = () =>\r\n\t\tlists.map((list, index) => {\r\n\t\t\tconst community = getCommunity(list);\r\n\t\t\treturn (\r\n\t\t\t\t<ListTitleIsOnBullet\r\n\t\t\t\t\tkey={index}\r\n\t\t\t\t\tcommunityName={community.name}\r\n\t\t\t\t\tlist={list}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t});\r\n\r\n\tconst getNoListsMessage = () => (\r\n\t\t<p className=\"no-lists-message\">\r\n\t\t\t<Translate id=\"not_included_on_any_lists\" />\r\n\t\t</p>\r\n\t);\r\n\r\n\treturn (\r\n\t\t<div className=\"current-lists\">\r\n\t\t\t{lists && lists.length ? getTitleBullets() : getNoListsMessage()}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default ListsTitleIsOnSection;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ListTitleIsOnBullet from './ListTitleIsOnBullet';\r\nimport { Button, Tooltip, message } from 'antd';\r\nimport { useTitle } from '../../../Title/containers/TitleDataStore';\r\nimport { useCollaborativeList } from '../../containers/CollaborativeListDataStore';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport paths from '../../../../paths';\r\nimport { Link } from 'react-router-dom';\r\n\r\nListTitle.propTypes = {\r\n\tskus: PropTypes.array,\r\n\tcommunity: PropTypes.object,\r\n\tlist: PropTypes.object,\r\n};\r\n\r\nfunction ListTitle({ skus, list, community }) {\r\n\tconst titleDataStore = useTitle();\r\n\tconst collaborativeListDataStore = useCollaborativeList();\r\n\r\n\tconst getListTitleWithDescriptionPopover = list => {\r\n\t\treturn (\r\n\t\t\t<Tooltip title={list.description} placement=\"right\">\r\n\t\t\t\t{list.name}\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t};\r\n\r\n\tconst addTitleToList = (listId, translate) => {\r\n\t\tif (!skus || skus.length === 1) {\r\n\t\t\ttitleDataStore.addTitles(listId);\r\n\t\t} else {\r\n\t\t\tconst listItems = skus.map(sku => ({\r\n\t\t\t\tlistId: listId,\r\n\t\t\t\tsku: sku,\r\n\t\t\t}));\r\n\t\t\tconst onSuccess = () =>\r\n\t\t\t\tmessage.success(\r\n\t\t\t\t\tlistItems.length > 1\r\n\t\t\t\t\t\t? translate('the_titles_have_been_added')\r\n\t\t\t\t\t\t: translate('the_title_has_been_added'),\r\n\t\t\t\t);\r\n\t\t\tcollaborativeListDataStore.postTitlesToList(\r\n\t\t\t\tlistId,\r\n\t\t\t\tlistItems,\r\n\t\t\t\tonSuccess,\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tlet isOnList = false;\r\n\r\n\tif (titleDataStore) {\r\n\t\tconst { lists } =\r\n\t\t\ttitleDataStore.state && titleDataStore.state.collaborativeLists;\r\n\t\tisOnList = lists && lists.some(li => li.id === list.id);\r\n\t}\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{isOnList ? (\r\n\t\t\t\t<ListTitleIsOnBullet\r\n\t\t\t\t\tlist={list}\r\n\t\t\t\t\tcommunityName={community.name}\r\n\t\t\t\t/>\r\n\t\t\t) : (\r\n\t\t\t\t<div className=\"add-to-list\">\r\n\t\t\t\t\t<Translate>\r\n\t\t\t\t\t\t{translate => (\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\t\t\t\taddTitleToList(list.id, translate)\r\n\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t{translate('add')}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Translate>\r\n\t\t\t\t\t<Link\r\n\t\t\t\t\t\tto={paths.collaborativeList(list.id)}\r\n\t\t\t\t\t\tclassName=\"column-spaced collaborative-list-title\">\r\n\t\t\t\t\t\t{list.description\r\n\t\t\t\t\t\t\t? getListTitleWithDescriptionPopover(list)\r\n\t\t\t\t\t\t\t: list.name}\r\n\t\t\t\t\t</Link>\r\n\t\t\t\t\t<div className=\"clear\" />\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport default ListTitle;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport LoadingSpinnerInContainer from '../../../UI/LoadingSpinnerInContainer/LoadingSpinnerInContainer';\r\nimport ListTitle from './ListTitle';\r\nimport CollaborativeListDataStore from '../../containers/CollaborativeListDataStore';\r\n\r\nListsTitleCouldBeOnSection.propTypes = {\r\n\tisLoading: PropTypes.bool,\r\n\tlists: PropTypes.array,\r\n\tcommunity: PropTypes.object,\r\n\tskus: PropTypes.array,\r\n};\r\n\r\nfunction ListTitleWrapper({ list, children, skus = [] }) {\r\n\tif (skus.length < 2) {\r\n\t\treturn children;\r\n\t} else {\r\n\t\treturn (\r\n\t\t\t<CollaborativeListDataStore\r\n\t\t\t\tkey={list.id}\r\n\t\t\t\tlistId={list.id}\r\n\t\t\t\tcommunityId={list.communityId}>\r\n\t\t\t\t{children}\r\n\t\t\t</CollaborativeListDataStore>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nfunction ListsTitleCouldBeOnSection({ isLoading, lists, community, skus }) {\r\n\tconst availableListsContainerRef = React.useRef(null);\r\n\r\n\tconst spinnerHeight = availableListsContainerRef.current?.clientHeight;\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName=\"community-lists-available-container\"\r\n\t\t\tref={availableListsContainerRef}>\r\n\t\t\t{isLoading ? (\r\n\t\t\t\t<LoadingSpinnerInContainer height={spinnerHeight} />\r\n\t\t\t) : (\r\n\t\t\t\tlists.map(list => (\r\n\t\t\t\t\t<ListTitleWrapper key={list.id} list={list} skus={skus}>\r\n\t\t\t\t\t\t<ListTitle\r\n\t\t\t\t\t\t\tskus={skus}\r\n\t\t\t\t\t\t\tlist={list}\r\n\t\t\t\t\t\t\tcommunity={community}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</ListTitleWrapper>\r\n\t\t\t\t))\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default ListsTitleCouldBeOnSection;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Collapse, Icon } from 'antd';\r\nimport CommunitiesSearch from '../../../Communities/CommunitiesSearch';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport ListsTitleCouldBeOnSection from './ListsTitleCouldBeOnSection';\r\nimport NoMatchesFoundMessage from '../../../UI/NoMatchesFoundMessage';\r\n\r\nconst Panel = Collapse.Panel;\r\n\r\nCommunitiesOfListsToAddTitleTo.propTypes = {\r\n\tlistCommunities: PropTypes.array,\r\n\tisLoading: PropTypes.bool,\r\n\tlistsByCommunityId: PropTypes.object,\r\n\tskus: PropTypes.array,\r\n};\r\n\r\nfunction CommunitiesOfListsToAddTitleTo({\r\n\tlistCommunities,\r\n\tisLoading,\r\n\tlistsByCommunityId,\r\n\tskus,\r\n}) {\r\n\tconst [filteredCommunities, setFilteredCommunities] = React.useState(null);\r\n\tconst communities = filteredCommunities || listCommunities;\r\n\r\n\tconst filterCommunities = value => {\r\n\t\tconst filteredCommunities = listCommunities.filter(comm =>\r\n\t\t\tcomm.name.toLowerCase().includes(value.toLowerCase()),\r\n\t\t);\r\n\t\tsetFilteredCommunities(filteredCommunities);\r\n\t};\r\n\r\n\tconst getCommunityHeader = name => {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<span className=\"bold\">\r\n\t\t\t\t\t<Translate id=\"community\" />\r\n\t\t\t\t</span>\r\n\t\t\t\t{name ? <span> {name}</span> : null}\r\n\t\t\t</>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderCommunities = (lists, idx, community) => {\r\n\t\treturn (\r\n\t\t\t<Panel\r\n\t\t\t\theader={getCommunityHeader(community.name || null)}\r\n\t\t\t\tkey={idx}>\r\n\t\t\t\t<ListsTitleCouldBeOnSection\r\n\t\t\t\t\tlists={lists}\r\n\t\t\t\t\tcommunity={community}\r\n\t\t\t\t\tisLoading={isLoading}\r\n\t\t\t\t\tskus={skus}\r\n\t\t\t\t/>\r\n\t\t\t</Panel>\r\n\t\t);\r\n\t};\r\n\r\n\tconst renderCommunitiesContainer = () => {\r\n\t\treturn !communities.length ? (\r\n\t\t\t<NoMatchesFoundMessage />\r\n\t\t) : (\r\n\t\t\t<Collapse\r\n\t\t\t\taccordion\r\n\t\t\t\tdefaultActiveKey={['0']}\r\n\t\t\t\texpandIcon={({ isActive }) => (\r\n\t\t\t\t\t<Icon type=\"caret-right\" rotate={isActive ? 90 : 0} />\r\n\t\t\t\t)}>\r\n\t\t\t\t{listsByCommunityId &&\r\n\t\t\t\t\tcommunities.map((community, idx) =>\r\n\t\t\t\t\t\trenderCommunities(\r\n\t\t\t\t\t\t\tlistsByCommunityId[community.id],\r\n\t\t\t\t\t\t\tidx,\r\n\t\t\t\t\t\t\tcommunity,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t)}\r\n\t\t\t</Collapse>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<CommunitiesSearch\r\n\t\t\t\tonChange={filterCommunities}\r\n\t\t\t\tcommunitiesCount={listCommunities.length}\r\n\t\t\t/>\r\n\t\t\t{renderCommunitiesContainer()}\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport default CommunitiesOfListsToAddTitleTo;\r\n","import React from 'react';\r\nimport MobileDrawerHeader from '../../../UI/MobileDrawerHeader';\r\nimport { useCollaborativeLists } from '../../containers/CollaborativeListsDataStore';\r\nimport * as Util from '../../../../util';\r\nimport { useUser } from '../../../User/containers/UserDataStore';\r\nimport './listAssign.less';\r\nimport PropTypes from 'prop-types';\r\nimport ListsTitleIsOnSection from './ListsTitleIsOnSection';\r\nimport CommunitiesOfListsToAddTitleTo from './CommunitiesOfListsToAddTitleTo.js';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport NotAMemberOfAnyCommunityMessage from '../../../Communities/NotAMemberOfAnyCommunityMessage/NotAMemberOfAnyCommunityMessage';\r\nimport { AllowAddTitleGroup } from '../../AllowAddTitleGroup';\r\n\r\nListAssign.propTypes = {\r\n\tskus: PropTypes.array,\r\n};\r\n\r\nexport default function ListAssign({ skus }) {\r\n\tconst [isLoading, setIsLoading] = React.useState(false);\r\n\r\n\tconst userDataStore = useUser();\r\n\tconst { isLoading: isUserLoading, joinedCommunities } = userDataStore.state;\r\n\tconst { user } = userDataStore.state.user;\r\n\r\n\tconst collaborativeListsDataStore = useCollaborativeLists();\r\n\tconst { isLoading: areListsLoading } = collaborativeListsDataStore.state;\r\n\tconst { lists } = collaborativeListsDataStore.state.collaborativeListsData;\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetIsLoading(areListsLoading || isUserLoading);\r\n\t}, [areListsLoading, isUserLoading]);\r\n\r\n\tconst getListsByCommunityId = () => {\r\n\t\tconst listsWithAllowableAdds =\r\n\t\t\tlists &&\r\n\t\t\tlists.filter(\r\n\t\t\t\tli =>\r\n\t\t\t\t\tli.allowAddTitleGroup === AllowAddTitleGroup.All ||\r\n\t\t\t\t\tli.appUserId === user.id,\r\n\t\t\t);\r\n\t\tconst listsByCommunityId =\r\n\t\t\tlistsWithAllowableAdds &&\r\n\t\t\tUtil.groupBy(listsWithAllowableAdds, 'communityId');\r\n\t\treturn listsByCommunityId || {};\r\n\t};\r\n\r\n\tconst getListCommunities = () => {\r\n\t\tconst communityIdsOfLists = Object.keys(getListsByCommunityId());\r\n\t\treturn joinedCommunities\r\n\t\t\t.filter(comm => communityIdsOfLists.includes(comm.id.toString()))\r\n\t\t\t.sort((a, b) =>\r\n\t\t\t\ta.name.localeCompare(b.name, { ignorePunctuation: true }),\r\n\t\t\t);\r\n\t};\r\n\r\n\tconst isMemberOfAnyCommunities = getListCommunities().length > 0;\r\n\r\n\tconst getCommunity = list => {\r\n\t\tlet community;\r\n\t\tif (Array.isArray(joinedCommunities)) {\r\n\t\t\tcommunity = joinedCommunities.find(\r\n\t\t\t\tcom => Number(com.id) === Number(list.communityId),\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn community || {};\r\n\t};\r\n\r\n\tconst getListsTitleIsOnSection = () => (\r\n\t\t<div className=\"gradient-background current-lists-section\">\r\n\t\t\t<div className=\"section-header\">\r\n\t\t\t\t<Translate id=\"lists_this_title_is_on\" />\r\n\t\t\t</div>\r\n\t\t\t<ListsTitleIsOnSection getCommunity={getCommunity} />\r\n\t\t</div>\r\n\t);\r\n\r\n\tconst getListsTitleCouldBeOnHeader = () => (\r\n\t\t<div className=\"section-header\">\r\n\t\t\t{skus ? (\r\n\t\t\t\t<>\r\n\t\t\t\t\t{skus.length === 1 ? (\r\n\t\t\t\t\t\t<Translate id=\"add_title_to_list_instructions\" />\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<Translate\r\n\t\t\t\t\t\t\tid=\"add_titles_to_list_instructions\"\r\n\t\t\t\t\t\t\tdata={{ numberOfTitles: skus.length }}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<div className=\"duplicate-message\">\r\n\t\t\t\t\t\t<Translate id=\"titles_already_on_a_list_will_not_be_added_again\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</>\r\n\t\t\t) : (\r\n\t\t\t\t<Translate id=\"add_this_title_to_an_available_list\" />\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n\r\n\tconst getListsTitleCouldBeOn = () => (\r\n\t\t<div className=\"lists-title-could-be-on\">\r\n\t\t\t{isMemberOfAnyCommunities ? (\r\n\t\t\t\t<CommunitiesOfListsToAddTitleTo\r\n\t\t\t\t\tlistCommunities={getListCommunities()}\r\n\t\t\t\t\tskus={skus}\r\n\t\t\t\t\tisLoading={isLoading}\r\n\t\t\t\t\tlistsByCommunityId={getListsByCommunityId()}\r\n\t\t\t\t/>\r\n\t\t\t) : (\r\n\t\t\t\t<NotAMemberOfAnyCommunityMessage />\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<MobileDrawerHeader\r\n\t\t\t\theader={<Translate id=\"collaborative_list_management\" />}\r\n\t\t\t/>\r\n\t\t\t<div className=\"lane-container list-assign-container\">\r\n\t\t\t\t{(!skus || skus.length === 1) && getListsTitleIsOnSection()}\r\n\t\t\t\t<div className=\"gradient-background collab-list-view\">\r\n\t\t\t\t\t{getListsTitleCouldBeOnHeader()}\r\n\t\t\t\t\t{getListsTitleCouldBeOn()}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport DrawerAnchor from '../../UI/DrawerAnchor';\r\nimport ListAssign from './ListAssign/ListAssign';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport TitleDataStore from '../../Title/containers/TitleDataStore';\r\n\r\nexport class ListAssignDrawer extends React.Component {\r\n\trender() {\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\treturn (\r\n\t\t\t<DrawerAnchor\r\n\t\t\t\tclosable={true}\r\n\t\t\t\twidth={isMobile ? '100%' : '700px'}\r\n\t\t\t\tplacement={isMobile ? 'bottom' : 'left'}\r\n\t\t\t\theight={isMobile ? '90%' : '100%'}\r\n\t\t\t\trenderDrawerContent={this.renderDrawerContent}>\r\n\t\t\t\t{this.props.children}\r\n\t\t\t</DrawerAnchor>\r\n\t\t);\r\n\t}\r\n\r\n\trenderDrawerContent = drawer => {\r\n\t\treturn drawer.isVisible && this.renderCollaborativeLists();\r\n\t};\r\n\r\n\trenderCollaborativeLists = () => {\r\n\t\tconst { skus } = this.props;\r\n\t\tif (skus?.length === 1) {\r\n\t\t\treturn (\r\n\t\t\t\t<TitleDataStore sku={skus[0]}>\r\n\t\t\t\t\t<ListAssign skus={skus} />\r\n\t\t\t\t</TitleDataStore>\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn <ListAssign skus={skus} />;\r\n\t};\r\n}\r\n\r\nexport default withIsMobile(ListAssignDrawer);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\n\r\nconst TitlesContext = React.createContext();\r\n\r\nconst name = 'titlesDataStore';\r\n\r\nexport const connectToTitles = makeConnectTo(TitlesContext, name);\r\n\r\nexport const useTitles = () => React.useContext(TitlesContext);\r\n\r\nexport default class TitlesDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\ttitles: [],\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst titlesDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<TitlesContext.Provider value={titlesDataStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(titlesDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</TitlesContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchTitles();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.titlesFetch && this.titlesFetch.cancel) {\r\n\t\t\tthis.titlesFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshTitles(),\r\n\t});\r\n\r\n\trefreshTitles = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchTitles();\r\n\t\treturn this.titlesFetch.promise;\r\n\t};\r\n\r\n\tfetchTitles = () => {\r\n\t\tconst { skus } = this.props;\r\n\t\tif (Array.isArray(skus) && skus.length > 0) {\r\n\t\t\tconst request = api.cancelablePost(\r\n\t\t\t\t`/api/products/products,images`,\r\n\t\t\t\tskus,\r\n\t\t\t);\r\n\t\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\t\tthis.titlesFetch = request;\r\n\t\t} else {\r\n\t\t\tthis.setState({ isLoading: false });\r\n\t\t}\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst titles = apiResponse || [];\r\n\t\tthis.setState({ titles, isLoading: false });\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\nimport { connectToTitles } from '../containers/TitlesDataStore';\r\nimport { Button, Modal } from 'antd';\r\nimport { CSVLink } from 'react-csv';\r\nimport delay from '../../../util/delay';\r\n\r\nexport class TitleExportExcel extends React.Component {\r\n\tstate = {\r\n\t\ttitles: {},\r\n\t\tisActivated: false,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { isActivated } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t<Button onClick={this.activate}>Excel</Button>\r\n\t\t\t\t<Modal\r\n\t\t\t\t\ttitle=\"Download Title CSV\"\r\n\t\t\t\t\tvisible={isActivated}\r\n\t\t\t\t\tonCancel={() => this.setState({ isActivated: false })}\r\n\t\t\t\t\tfooter={null}>\r\n\t\t\t\t\t{isActivated && (\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<span style={{ marginRight: '2rem' }}>\r\n\t\t\t\t\t\t\t\t<strong>Download Ready!</strong>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t{this.renderCsvDownloader()}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Modal>\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t}\r\n\r\n\tactivate = () => {\r\n\t\tthis.setState({ isLoading: true });\r\n\r\n\t\treturn delay(750).then(() => {\r\n\t\t\tthis.setState({ isActivated: true, isLoading: false });\r\n\t\t});\r\n\t};\r\n\r\n\trenderCsvDownloader() {\r\n\t\tconst { titles } = this.props.titlesDataStore.state;\r\n\t\treturn (\r\n\t\t\t<CSVLink\r\n\t\t\t\tfilename=\"list.csv\"\r\n\t\t\t\theaders={[\r\n\t\t\t\t\t'ISBN',\r\n\t\t\t\t\t'Title',\r\n\t\t\t\t\t'Author',\r\n\t\t\t\t\t'Imprint',\r\n\t\t\t\t\t'Format',\r\n\t\t\t\t\t'Pub Date',\r\n\t\t\t\t\t'Price',\r\n\t\t\t\t\t'Pages',\r\n\t\t\t\t\t'Dimensions',\r\n\t\t\t\t\t'Category',\r\n\t\t\t\t]}\r\n\t\t\t\tdata={\r\n\t\t\t\t\ttitles &&\r\n\t\t\t\t\ttitles.map(title => {\r\n\t\t\t\t\t\treturn [\r\n\t\t\t\t\t\t\ttitle.ean,\r\n\t\t\t\t\t\t\ttitle.name,\r\n\t\t\t\t\t\t\ttitle.author,\r\n\t\t\t\t\t\t\ttitle.supplier,\r\n\t\t\t\t\t\t\ttitle.format,\r\n\t\t\t\t\t\t\tthis.formatDateValue(title.pubDate),\r\n\t\t\t\t\t\t\ttitle.prices &&\r\n\t\t\t\t\t\t\ttitle.prices.filter(pr => pr.name == 'USD').length >\r\n\t\t\t\t\t\t\t\t0\r\n\t\t\t\t\t\t\t\t? this.formatAsCurrency(\r\n\t\t\t\t\t\t\t\t\t\ttitle.prices.filter(\r\n\t\t\t\t\t\t\t\t\t\t\tpr => pr.name == 'USD',\r\n\t\t\t\t\t\t\t\t\t\t)[0].price,\r\n\t\t\t\t\t\t\t\t )\r\n\t\t\t\t\t\t\t\t: '-',\r\n\t\t\t\t\t\t\ttitle.pages,\r\n\t\t\t\t\t\t\ttitle.measurements,\r\n\t\t\t\t\t\t\ttitle.category,\r\n\t\t\t\t\t\t];\r\n\t\t\t\t\t})\r\n\t\t\t\t}>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tstyle={{ marginTop: '10px' }}\r\n\t\t\t\t\ticon=\"cloud-download\"\r\n\t\t\t\t\ttype=\"primary\"\r\n\t\t\t\t\tonClick={this.deactivate}>\r\n\t\t\t\t\tRetrieve Prepared File\r\n\t\t\t\t</Button>\r\n\t\t\t</CSVLink>\r\n\t\t);\r\n\t}\r\n\r\n\tformatAsCurrency(number) {\r\n\t\tnumber = !number ? 0 : number;\r\n\t\treturn number.toLocaleString('en-US', {\r\n\t\t\tstyle: 'currency',\r\n\t\t\tcurrency: 'USD',\r\n\t\t});\r\n\t}\r\n\r\n\tdeactivate = () => {\r\n\t\tdelay(200).then(() => this.setState({ isActivated: false }));\r\n\t};\r\n\r\n\tformatDateValue(value) {\r\n\t\tif (!value) return 'Invalid Date';\r\n\t\treturn new Date(value).toLocaleDateString('en-US', {\r\n\t\t\tyear: 'numeric',\r\n\t\t\tmonth: 'long',\r\n\t\t\tday: 'numeric',\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport default connectToUser(connectToTitles(TitleExportExcel));\r\n","import pptxgen from 'pptxgenjs';\r\nimport React from 'react';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\nimport { connectToTitles } from '../containers/TitlesDataStore';\r\nimport { Button } from 'antd';\r\n\r\nexport class TitleExportPowerpoint extends React.Component {\r\n\trender() {\r\n\t\treturn <Button onClick={this.createPPT2}>PowerPoint</Button>;\r\n\t}\r\n\r\n\tcreatePPT2 = () => {\r\n\t\tconst { titles } = this.props.titlesDataStore.state;\r\n\t\tconst { aspect } = this.props;\r\n\r\n\t\tlet pptx = new pptxgen();\r\n\r\n\t\tvar biblioStart = 3.7;\r\n\t\tvar maxJacketWidth = 3.2;\r\n\t\tpptx.defineSlideMaster({\r\n\t\t\ttitle: 'Title_Slide',\r\n\t\t\tbackground: { color: 'FFFFFF' },\r\n\t\t\tobjects: [\r\n\t\t\t\t{\r\n\t\t\t\t\trect: {\r\n\t\t\t\t\t\tx: 0,\r\n\t\t\t\t\t\ty: 0,\r\n\t\t\t\t\t\tw: '100%',\r\n\t\t\t\t\t\th: 0.75,\r\n\t\t\t\t\t\tfill: { color: 'F1F1F1' },\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tplaceholder: {\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tname: 'title',\r\n\t\t\t\t\t\t\tx: 0.4,\r\n\t\t\t\t\t\t\ty: 0.1,\r\n\t\t\t\t\t\t\tw: 9.5,\r\n\t\t\t\t\t\t\th: 0.65,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttext: '{title}',\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tplaceholder: {\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tname: 'biblio',\r\n\t\t\t\t\t\t\ttype: 'body',\r\n\t\t\t\t\t\t\tx: biblioStart,\r\n\t\t\t\t\t\t\ty: 1,\r\n\t\t\t\t\t\t\tw: 5.7,\r\n\t\t\t\t\t\t\th: 3,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttext: '{biblio}',\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t\tslideNumber: { x: '1%', y: '95%', align: 'right', fontSize: 10 },\r\n\t\t});\r\n\r\n\t\ttitles &&\r\n\t\t\ttitles.length > 0 &&\r\n\t\t\ttitles\r\n\t\t\t\t.filter(t => aspect.some(asp => asp.sku === t.sku))\r\n\t\t\t\t.map((title, idx) => {\r\n\t\t\t\t\tlet slide = pptx.addSlide({ masterName: 'Title_Slide' });\r\n\r\n\t\t\t\t\tconst aspectRatio = aspect.filter(\r\n\t\t\t\t\t\tasp => asp.sku === title.sku,\r\n\t\t\t\t\t)[0].ratio;\r\n\t\t\t\t\tvar jacketHeight = 4.3;\r\n\t\t\t\t\tvar jacketWidth = jacketHeight * aspectRatio;\r\n\t\t\t\t\tjacketWidth =\r\n\t\t\t\t\t\tjacketWidth > maxJacketWidth\r\n\t\t\t\t\t\t\t? maxJacketWidth\r\n\t\t\t\t\t\t\t: jacketWidth;\r\n\t\t\t\t\tjacketHeight =\r\n\t\t\t\t\t\tjacketWidth === maxJacketWidth\r\n\t\t\t\t\t\t\t? maxJacketWidth / aspectRatio\r\n\t\t\t\t\t\t\t: jacketHeight;\r\n\r\n\t\t\t\t\tconst titleUri =\r\n\t\t\t\t\t\ttitle &&\r\n\t\t\t\t\t\ttitle.images &&\r\n\t\t\t\t\t\ttitle.images.filter(im => im.type === 'jacketCover')\r\n\t\t\t\t\t\t\t.length > 0 &&\r\n\t\t\t\t\t\ttitle.images.filter(im => im.type === 'jacketCover')[0]\r\n\t\t\t\t\t\t\t.uri;\r\n\r\n\t\t\t\t\tconst url = new URL(titleUri);\r\n\t\t\t\t\tconst proxyurl = `${process.env.REACT_APP_API_URL}/jacketcovers`;\r\n\r\n\t\t\t\t\tslide.addText(title.name, {\r\n\t\t\t\t\t\tplaceholder: 'title',\r\n\t\t\t\t\t\tbold: true,\r\n\t\t\t\t\t});\r\n\t\t\t\t\tslide.addText(\r\n\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: title.author,\r\n\t\t\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\t\t\tbreakLine: true,\r\n\t\t\t\t\t\t\t\t\tbold: true,\r\n\t\t\t\t\t\t\t\t\tfontSize: 20,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: title.supplier + ' • ',\r\n\t\t\t\t\t\t\t\toptions: { fontSize: 16 },\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: this.renderFrontListBackList(\r\n\t\t\t\t\t\t\t\t\ttitle.pubDate,\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\toptions: { bold: true, fontSize: 16 },\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: ' | ' + this.getDate(title.pubDate),\r\n\t\t\t\t\t\t\t\toptions: { breakLine: true, fontSize: 16 },\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: title.format + ' • ',\r\n\t\t\t\t\t\t\t\toptions: { fontSize: 16 },\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: title.formattedPrices,\r\n\t\t\t\t\t\t\t\toptions: { breakLine: true, fontSize: 16 },\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: title.ean + ' • ',\r\n\t\t\t\t\t\t\t\toptions: { fontSize: 16 },\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: title.pages + ' pages',\r\n\t\t\t\t\t\t\t\toptions: { breakLine: true, fontSize: 16 },\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: title.measurements,\r\n\t\t\t\t\t\t\t\toptions: { breakLine: true, fontSize: 16 },\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: title.category,\r\n\t\t\t\t\t\t\t\toptions: { fontSize: 16 },\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t\t{ placeholder: 'biblio' },\r\n\t\t\t\t\t);\r\n\t\t\t\t\tslide.addImage({\r\n\t\t\t\t\t\tpath: proxyurl + url.pathname,\r\n\t\t\t\t\t\tx: 0.4,\r\n\t\t\t\t\t\ty: 1,\r\n\t\t\t\t\t\tw: jacketWidth,\r\n\t\t\t\t\t\th: jacketHeight,\r\n\t\t\t\t\t\tsizing: { type: 'crop', h: 4.3 },\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\tpptx.writeFile();\r\n\t};\r\n\r\n\trenderFrontListBackList = pubDate => {\r\n\t\tif (new Date(pubDate) > new Date()) {\r\n\t\t\treturn 'FRONTLIST';\r\n\t\t} else {\r\n\t\t\treturn 'BACKLIST';\r\n\t\t}\r\n\t};\r\n\r\n\tgetDate = dateString => {\r\n\t\tconst options = { year: 'numeric', month: 'long', day: 'numeric' };\r\n\t\treturn new Date(dateString).toLocaleDateString(\r\n\t\t\tthis.getCultureIndicator(this.props.userDataStore),\r\n\t\t\toptions,\r\n\t\t);\r\n\t};\r\n\r\n\tgetCultureIndicator(userDataStore) {\r\n\t\tconst country = userDataStore.state.organization\r\n\t\t\t? userDataStore.state.organization.address.country\r\n\t\t\t: 'US';\r\n\t\tif (country == 'UK' || country == 'GB') {\r\n\t\t\treturn 'en-GB';\r\n\t\t} else {\r\n\t\t\treturn 'en-US';\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default connectToUser(connectToTitles(TitleExportPowerpoint));\r\n","import { Modal } from 'antd';\r\nimport React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport handlePlural from '../../../util/handlePlural';\r\nimport MobileDrawerHeader from '../../UI/MobileDrawerHeader';\r\nimport Scroller from '../../UI/Scroller/Scroller';\r\nimport TitlesDataStore from '../containers/TitlesDataStore';\r\nimport TitleExportExcel from './TitleExportExcel';\r\nimport TitleExportPowerpoint from './TitleExportPowerpoint';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport class TitleExport extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tskus: PropTypes.array,\r\n\t};\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\taspect: [],\r\n\t\t\tvisible: false,\r\n\t\t};\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<div onClick={this.showModal}>{this.props.children}</div>\r\n\t\t\t\t<Modal\r\n\t\t\t\t\twidth={700}\r\n\t\t\t\t\tvisible={this.state.visible}\r\n\t\t\t\t\ttitle={this.getModalTitle()}\r\n\t\t\t\t\tonCancel={() => this.handleCancel()}\r\n\t\t\t\t\tfooter={null}>\r\n\t\t\t\t\t{this.renderExportInterface()}\r\n\t\t\t\t</Modal>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\tgetModalTitle = () => {\r\n\t\tconst { skus } = this.props;\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tfontSize: '18px',\r\n\t\t\t\t\tfontWeight: 'bold',\r\n\t\t\t\t\tmarginBottom: '10px',\r\n\t\t\t\t}}>\r\n\t\t\t\tExport Information for {handlePlural('title', skus.length)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tshowModal = () => {\r\n\t\tthis.setState({\r\n\t\t\tvisible: true,\r\n\t\t});\r\n\t};\r\n\r\n\thandleCancel = () => {\r\n\t\tthis.setState({ visible: false });\r\n\t};\r\n\r\n\trenderExportInterface = () => {\r\n\t\tconst { skus } = this.props;\r\n\t\tvar { visible, aspect } = this.state;\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t{visible && (\r\n\t\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t\t<MobileDrawerHeader header=\"Export\" />\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\tbackgroundColor: '#ffffff',\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t<div style={{ marginBottom: '10px' }}>\r\n\t\t\t\t\t\t\t\t<TitlesDataStore skus={skus}>\r\n\t\t\t\t\t\t\t\t\t{titleDataStore =>\r\n\t\t\t\t\t\t\t\t\t\t!titleDataStore.state.isLoading && (\r\n\t\t\t\t\t\t\t\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderBottom:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'1px solid #d2d6d8',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmarginBottom: '5px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpaddingBottom: '5px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Scroller>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.renderJacketSection(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitleDataStore,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Scroller>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: '15px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 'bold',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmarginBottom: '5px',\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tExport To:\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"column\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TitleExportPowerpoint\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taspect={aspect}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"column-spaced\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TitleExportExcel\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taspect={aspect}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"clear\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</TitlesDataStore>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t)}\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\trenderJacketSection = titleDataStore => {\r\n\t\treturn (\r\n\t\t\ttitleDataStore.state.titles &&\r\n\t\t\ttitleDataStore.state.titles.length > 0 &&\r\n\t\t\ttitleDataStore.state.titles.map(this.renderJacket)\r\n\t\t);\r\n\t};\r\n\r\n\trenderJacket = title => {\r\n\t\tconst uri =\r\n\t\t\ttitle &&\r\n\t\t\ttitle.images &&\r\n\t\t\ttitle.images.filter(im => im.type === 'jacketCover').length > 0 &&\r\n\t\t\ttitle.images.filter(im => im.type === 'jacketCover')[0].uri;\r\n\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tkey={title.sku}\r\n\t\t\t\tclassName=\"relative\"\r\n\t\t\t\tstyle={{ marginLeft: '5px' }}>\r\n\t\t\t\t<div>\r\n\t\t\t\t\t<img\r\n\t\t\t\t\t\talt={title.name}\r\n\t\t\t\t\t\tid={title.sku}\r\n\t\t\t\t\t\theight=\"90\"\r\n\t\t\t\t\t\tonLoad={this.onImgLoad}\r\n\t\t\t\t\t\tsrc={uri}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tonImgLoad = ({ target: img }) => {\r\n\t\tvar { aspect } = this.state;\r\n\t\taspect.push({\r\n\t\t\tsku: img.id,\r\n\t\t\tratio: img.offsetWidth / img.offsetHeight,\r\n\t\t});\r\n\t\tthis.setState({ aspect });\r\n\t};\r\n}\r\n\r\nexport default withIsMobile(TitleExport);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nexport default class ReviewHeaderUserBlurb extends React.Component {\r\n\tstatic propTypes = {\r\n\t\treview: PropTypes.object,\r\n\t};\r\n\r\n\trenderOrganization = review => {\r\n\t\treturn review.user.fullName !== review.organization.name\r\n\t\t\t? ` from ${review.organization.name}`\r\n\t\t\t: '';\r\n\t};\r\n\r\n\trenderLocation = organization => {\r\n\t\treturn !organization.address || !organization.address.stateProvince ||\r\n\t\t\torganization.address.stateProvince == ''\r\n\t\t\t? ''\r\n\t\t\t: !organization.address.city || organization.address.city == ''\r\n\t\t\t? ''\r\n\t\t\t: ` in ${organization.address.city}, ${organization.address.stateProvince}`;\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { review } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<div\r\n\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\tfontSize: '14px',\r\n\t\t\t\t\t\tfontWeight: 'bold',\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t{review.user.fullName}\r\n\t\t\t\t\t\t{this.renderOrganization(review)}\r\n\t\t\t\t\t\t{this.renderLocation(review.organization)}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div>{review.user.classification}</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport TitleDetailDrawer from '../Title/TitleDetailDrawer';\r\n\r\nexport default class ReviewHeaderTitleBlurb extends React.Component {\r\n\tstatic propTypes = {\r\n\t\treview: PropTypes.object,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { product } = this.props.review;\r\n\t\tconst { communityId } = this.props;\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t<div>\r\n\t\t\t\t\t<div className=\"bold title-detail-name dotDot acc-font\">\r\n\t\t\t\t\t\t<TitleDetailDrawer\r\n\t\t\t\t\t\t\tsku={product.sku}\r\n\t\t\t\t\t\t\tcommunityId={communityId}>\r\n\t\t\t\t\t\t\t{product ? product.name : <div />}\r\n\t\t\t\t\t\t</TitleDetailDrawer>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div>{product && product.author}</div>\r\n\t\t\t\t\t<div className=\"dotDot\">\r\n\t\t\t\t\t\t{product ? (\r\n\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t{product.ean} • \r\n\t\t\t\t\t\t\t\t{product.sku}\r\n\t\t\t\t\t\t\t\t • \r\n\t\t\t\t\t\t\t\t{product.formatDescription}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<div />\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className=\"dotDot\" style={{ maxWidth: 350 }}>\r\n\t\t\t\t\t\t{product ? (\r\n\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t{new Date(product.pubDate).toLocaleDateString(\r\n\t\t\t\t\t\t\t\t\t'en-US',\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tyear: 'numeric',\r\n\t\t\t\t\t\t\t\t\t\tmonth: 'long',\r\n\t\t\t\t\t\t\t\t\t\tday: 'numeric',\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t • {product.supplier}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<div />\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ReviewHeaderUserBlurb from './ReviewHeaderUserBlurb';\r\nimport ReviewHeaderTitleBlurb from './ReviewHeaderTitleBlurb';\r\nimport CustomShowMoreText from '../UI/CustomShowMoreText/CustomShowMoreText';\r\n\r\nexport default class TitleReview extends React.Component {\r\n\tstatic propTypes = {\r\n\t\treview: PropTypes.object,\r\n\t\tchildren: PropTypes.element,\r\n\t};\r\n\r\n\trenderHeader() {\r\n\t\tconst { review, source, communityId } = this.props;\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tflexGrow: '1',\r\n\t\t\t\t\tmarginLeft: '10px',\r\n\t\t\t\t}}>\r\n\t\t\t\t{source !== 'titleDetail' ? (\r\n\t\t\t\t\tsource !== 'user' ? (\r\n\t\t\t\t\t\t<ReviewHeaderUserBlurb review={review} />\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<ReviewHeaderTitleBlurb\r\n\t\t\t\t\t\t\treview={review}\r\n\t\t\t\t\t\t\tcommunityId={communityId}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<React.Fragment />\r\n\t\t\t\t)}\r\n\t\t\t\t{review.text && review.text !== '' ? (\r\n\t\t\t\t\t<React.Fragment></React.Fragment>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<div>{this.renderCreated(review)}</div>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\trenderReviewText() {\r\n\t\tconst { review } = this.props;\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tfontSize: '14px',\r\n\t\t\t\t}}>\r\n\t\t\t\t<CustomShowMoreText text={review.text} lines={3} />\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\tgetReviewAndFooterText = review => {\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t{review.text && review.text !== '' && this.renderReviewText()}\r\n\t\t\t\t{review.text &&\r\n\t\t\t\t\treview.text !== '' &&\r\n\t\t\t\t\tthis.renderCreated(review)}\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\trenderCreated(review) {\r\n\t\tconst rating = review.rating ? review.rating : review.overallAssessment;\r\n\t\tconst createdDate = review.createdDate\r\n\t\t\t? review.createdDate\r\n\t\t\t: review.updatedDate;\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tfontStyle: 'italic',\r\n\t\t\t\t\tfontSize: '10px',\r\n\t\t\t\t}}>\r\n\t\t\t\t{review.text && review.text !== ''\r\n\t\t\t\t\t? 'Rated ' + rating + ' out of 10, Written'\r\n\t\t\t\t\t: 'Rated ' + rating + ' out of 10'}{' '}\r\n\t\t\t\ton{' '}\r\n\t\t\t\t{new Date(createdDate).toLocaleDateString('en-US', {\r\n\t\t\t\t\tweekday: 'long',\r\n\t\t\t\t\tyear: 'numeric',\r\n\t\t\t\t\tmonth: 'long',\r\n\t\t\t\t\tday: 'numeric',\r\n\t\t\t\t})}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { review } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"round-background\">\r\n\t\t\t\t<div style={{ padding: '0.5rem 10px 0.5rem 10px' }}>\r\n\t\t\t\t\t<div style={{ display: 'flex' }}>\r\n\t\t\t\t\t\t<div style={{ marginTop: '3px' }}>\r\n\t\t\t\t\t\t\t{this.props.children}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{this.renderHeader()}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t{this.getReviewAndFooterText(review)}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport StackScrollerHorizontal from '../UI/StackScrollerHorizontal';\r\nimport handlePlural from '../../../util/handlePlural';\r\nimport { connectToShelves } from '../containers/ShelvesDataStore';\r\nimport { connectToTitle } from '../../Title/containers/TitleDataStore';\r\nimport combineConnectors from '../../util/combineConnectors';\r\nimport ShelfType from '../ShelfType';\r\nimport { connectToCollections } from '../../Collections/containers/CollectionsDataStore';\r\nimport api from '../../../Api';\r\nimport { message } from 'antd';\r\nimport { connectToCollectionTitles } from '../../Collections/containers/CollectionTitlesDataStore';\r\nimport AddEditCollection from '../../Collections/AddEditCollection';\r\n\r\nexport class ShelfSelect extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.processStackClick = this.processStackClick.bind(this);\r\n\t\tthis.state = {\r\n\t\t\tselectedStacks: [],\r\n\t\t\tchangeState: 0,\r\n\t\t};\r\n\t}\r\n\r\n\tstatic propTypes = {\r\n\t\tskus: PropTypes.string,\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),\r\n\t\tparentStyle: PropTypes.string,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { skus, sku } = this.props;\r\n\t\tconst { selectedStacks } = this.state;\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tpadding: '15px',\r\n\t\t\t\t\tmargin: '15px',\r\n\t\t\t\t\tbackgroundColor: '#ffffff',\r\n\t\t\t\t}}>\r\n\t\t\t\t<div>\r\n\t\t\t\t\t{skus ? (\r\n\t\t\t\t\t\t<div className=\"column\" style={{ fontSize: '18px' }}>\r\n\t\t\t\t\t\t\tSelect 1 or more Stacks below to add the{' '}\r\n\t\t\t\t\t\t\t{handlePlural('selected title', skus.length, false)}{' '}\r\n\t\t\t\t\t\t\tto...\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<div className=\"column\" style={{ fontSize: '18px' }}>\r\n\t\t\t\t\t\t\tSelect 1 or more Stacks below to add the title to...\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<div className=\"column-spaced-right\">\r\n\t\t\t\t\t\t<AddEditCollection sku={sku} skus={skus} />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className=\"clear\" />\r\n\t\t\t\t</div>\r\n\t\t\t\t<div>\r\n\t\t\t\t\t<StackScrollerHorizontal\r\n\t\t\t\t\t\tprocessStackClick={this.processStackClick}\r\n\t\t\t\t\t\tselectedStacks={selectedStacks}\r\n\t\t\t\t\t\tallowMultipleSelections={true}\r\n\t\t\t\t\t\tsku={sku}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\tprocessStackClick = (selectedStacks, thisStack, action) => {\r\n\t\tthis.setState({ selectedStacks, changeState: 1 });\r\n\t\tif (thisStack.stackType === 'shelf') {\r\n\t\t\tif (action === 'add') {\r\n\t\t\t\tthis.toggleShelf(thisStack.key);\r\n\t\t\t} else {\r\n\t\t\t\tthis.toggleShelf(ShelfType.Clear.key);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (action === 'add') {\r\n\t\t\t\tthis.addToCollection(thisStack.key);\r\n\t\t\t} else {\r\n\t\t\t\tthis.removeFromCollection(thisStack.key);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\ttoggleShelf = thisShelf => {\r\n\t\tconst { skus, sku } = this.props;\r\n\t\tvar theseSkus = [];\r\n\t\t!skus ? theseSkus.push(sku) : (theseSkus = skus);\r\n\t\tthis.props.shelvesDataStore.setShelves(theseSkus, thisShelf);\r\n\t};\r\n\r\n\taddToCollection = catalogId => {\r\n\t\tconst { skus, sku } = this.props;\r\n\t\tvar theseSkus = [];\r\n\t\t!skus ? theseSkus.push(sku) : (theseSkus = skus);\r\n\t\tapi.post(`/api/v1/me/collections/${catalogId}`, theseSkus).then(() => {\r\n\t\t\tthis.props.collectionsDataStore.refresh();\r\n\t\t\tthis.props.titleDataStore &&\r\n\t\t\t\tthis.props.titleDataStore.refreshCollectionData();\r\n\t\t\tmessage.success(\r\n\t\t\t\t<span>\r\n\t\t\t\t\tYou've added{' '}\r\n\t\t\t\t\t{skus && skus.length > 1 ? 'these titles' : 'this title'} to\r\n\t\t\t\t\tthe collection\r\n\t\t\t\t</span>,\r\n\t\t\t);\r\n\t\t});\r\n\t};\r\n\r\n\tremoveFromCollection = catalogId => {\r\n\t\tconst { sku } = this.props;\r\n\t\tapi.del(`/api/v1/me/collections/${catalogId}/${sku}`).then(() => {\r\n\t\t\tthis.props.collectionsDataStore.refresh();\r\n\t\t\tthis.props.titleDataStore &&\r\n\t\t\t\tthis.props.titleDataStore.refreshCollectionData();\r\n\t\t\tthis.props.collectionTitlesDataStore &&\r\n\t\t\t\tthis.props.collectionTitlesDataStore.refresh();\r\n\t\t\tmessage.success(\r\n\t\t\t\t<span>You've removed this title from the collection</span>,\r\n\t\t\t);\r\n\t\t});\r\n\t};\r\n}\r\n\r\nconst connectors = [\r\n\tconnectToShelves,\r\n\tconnectToTitle,\r\n\tconnectToCollections,\r\n\tconnectToCollectionTitles,\r\n];\r\n\r\nexport default combineConnectors(connectors)(ShelfSelect);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport DrawerAnchor from '../../UI/DrawerAnchor';\r\nimport ShelfSelect from './ShelfSelect';\r\n\r\nexport default class ShelfSelectDrawer extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tsku: PropTypes.string,\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),\r\n\t\tparentStyle: PropTypes.string,\r\n\t\t// Mapped to props\r\n\t\tisMobile: PropTypes.func,\r\n\t};\r\n\r\n\tstatic defaultProps = {\r\n\t\tparentStyle: 'clickable dotDot',\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { parentStyle } = this.props;\r\n\t\treturn (\r\n\t\t\t<DrawerAnchor\r\n\t\t\t\tclosable={true}\r\n\t\t\t\tplacement=\"top\"\r\n\t\t\t\theight=\"280\"\r\n\t\t\t\tparentStyle={parentStyle}\r\n\t\t\t\trenderDrawerContent={this.renderDrawerContent}>\r\n\t\t\t\t{this.props.children}\r\n\t\t\t</DrawerAnchor>\r\n\t\t);\r\n\t}\r\n\r\n\trenderDrawerContent = drawer => {\r\n\t\treturn drawer.isVisible && this.renderShelfSelect();\r\n\t};\r\n\r\n\trenderShelfSelect = () => {\r\n\t\tconst { skus, sku } = this.props;\r\n\t\treturn <ShelfSelect skus={skus} sku={sku} />;\r\n\t};\r\n}\r\n","export enum MyEventsFilteringEnum {\r\n\tUpcoming = 'upcoming',\r\n\tPast = 'past',\r\n}\r\n","const PubDateFromOptions = {\r\n\t'NOW-1YEAR/DAY': '12 Months Ago',\r\n\t'NOW-6MONTH/DAY': '6 Months Ago',\r\n\t'NOW-3MONTH/DAY': '3 Months Ago',\r\n\t'NOW-1MONTH/DAY': '1 Month Ago',\r\n\t'NOW/DAY': 'Today',\r\n\t'NOW+1MONTH/DAY': 'In 1 Month',\r\n\t'NOW+2MONTH/DAY': 'In 2 Months',\r\n\t'NOW+3MONTH/DAY': 'In 3 Months',\r\n\t'NOW+6MONTH/DAY': 'In 6 Months',\r\n};\r\n\r\nexport default PubDateFromOptions;\r\n","const PubDateToOptions = {\r\n\t'+7DAY]': '1 Week',\r\n\t'+14DAY]': '2 Weeks',\r\n\t'+21DAY]': '3 Weeks',\r\n\t'+1MONTH]': '1 Month',\r\n\t'+2MONTH]': '2 Months',\r\n\t'+3MONTH]': '3 Months',\r\n\t'+4MONTH]': '4 Months',\r\n\t'+6MONTH]': '6 Months',\r\n\t'+9MONTH]': '9 Months',\r\n\t'+12MONTH]': '12 Months',\r\n\t'+18MONTH]': '18 Months',\r\n};\r\n\r\nexport default PubDateToOptions;\r\n","import TitleSortAttribute from './Sort/TitleSortAttribute';\r\n\r\nconst TitleListType = {\r\n\tCatalog: {\r\n\t\tkey: 'catalog',\r\n\t\tlabel: 'Catalog',\r\n\t\tdefaultSortAttribute: TitleSortAttribute.Sequence,\r\n\t\tisSortDirectionAsc: true,\r\n\t},\r\n\tSavedFilter: {\r\n\t\tkey: 'savedFilter',\r\n\t\tlabel: 'SavedFilter',\r\n\t\tdefaultSortAttribute: TitleSortAttribute.OnSaleDate,\r\n\t\tisSortDirectionAsc: false,\r\n\t},\r\n\tShelf: {\r\n\t\tkey: 'shelf',\r\n\t\tlabel: 'Shelf',\r\n\t\tdefaultSortAttribute: TitleSortAttribute.Sequence,\r\n\t\tisSortDirectionAsc: true,\r\n\t},\r\n\tReviewCopies: {\r\n\t\tkey: 'reviewCopies',\r\n\t\tlabel: 'Review Copies',\r\n\t\tdefaultSortAttribute: TitleSortAttribute.DigitalUpdatedDate,\r\n\t\tisSortDirectionAsc: false,\r\n\t},\r\n\tCollaborativeList: {\r\n\t\tkey: 'collaborativeList',\r\n\t\tlabel: 'Net Votes',\r\n\t\tdefaultSortAttribute: TitleSortAttribute.NetVotes,\r\n\t\tisSortDirectionAsc: false,\r\n\t},\r\n\tBuzz: {\r\n\t\tkey: 'buzz',\r\n\t\tlabel: 'Buzz',\r\n\t\tdefaultSortAttribute: TitleSortAttribute.CommunityReviews,\r\n\t\tisSortDirectionAsc: false,\r\n\t},\r\n};\r\n\r\nexport default TitleListType;\r\n","export const ShareTargetType = {\r\n\tall: 'all',\r\n\tfriends: 'friends',\r\n\tpublisher: 'publisher',\r\n\tcolleagues: 'colleagues',\r\n\tgeneralCommunity: 'generalCommunity',\r\n\tnomination: 'nomination',\r\n\tgenreCommunity: 'genreCommunity',\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport { connectToCollaborativeList } from '../../CollaborativeLists/containers/CollaborativeListDataStore';\r\nimport { connectToCollaborativeLists } from '../../CollaborativeLists/containers/CollaborativeListsDataStore';\r\nimport combineConnectors from '../../util/combineConnectors';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\n\r\nconst TitleContext = React.createContext();\r\n\r\nconst name = 'titleDataStore';\r\n\r\nexport const useTitle = () => React.useContext(TitleContext);\r\n\r\nexport const connectToTitle = makeConnectTo(TitleContext, name);\r\n\r\nclass TitleDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\ttitle: {},\r\n\t\tisProductDataLoading: true,\r\n\t\tcollaborativeLists: {},\r\n\t\tisCollaborativeListDataLoading: true,\r\n\t\tcollections: [],\r\n\t\tisCollectionDataLoading: true,\r\n\t\treview: {},\r\n\t\tisReviewDataLoading: true,\r\n\t\tareReviewsLoading: true,\r\n\t\tcommunityReviews: [],\r\n\t\tareConversationsLoading: true,\r\n\t\tconversations: [],\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst titleDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<TitleContext.Provider value={titleDataStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(titleDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</TitleContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst {\r\n\t\t\tdoNotLoad,\r\n\t\t\tuserDataStore: { isAnonymous },\r\n\t\t} = this.props;\r\n\r\n\t\tif (!doNotLoad) {\r\n\t\t\tthis.fetchTitle();\r\n\t\t\tthis.fetchCollaborativeListData();\r\n\t\t\tthis.fetchCommunityReviews();\r\n\t\t\tthis.fetchConversations();\r\n\t\t}\r\n\r\n\t\tif (!isAnonymous()) {\r\n\t\t\tthis.fetchCollectionData();\r\n\t\t\tthis.fetchReview();\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tisCollectionDataLoading: false,\r\n\t\t\t\tisReviewDataLoading: false,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.titleFetch && this.titleFetch.cancel) {\r\n\t\t\tthis.titleFetch.cancel();\r\n\t\t}\r\n\t\tif (this.collaborativeListFetch && this.collaborativeListFetch.cancel) {\r\n\t\t\tthis.collaborativeListFetch.cancel();\r\n\t\t}\r\n\t\tif (this.reviewFetch && this.reviewFetch.cancel) {\r\n\t\t\tthis.reviewFetch.cancel();\r\n\t\t}\r\n\t\tif (this.collectionFetch && this.collectionFetch.cancel) {\r\n\t\t\tthis.collectionFetch.cancel();\r\n\t\t}\r\n\t\tif (this.communityReviewsFetch && this.communityReviewsFetch.cancel) {\r\n\t\t\tthis.communityReviewsFetch.cancel();\r\n\t\t}\r\n\t\tif (this.conversationsFetch && this.conversationsFetch.cancel) {\r\n\t\t\tthis.conversationsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\tgetSku: () => state.title.sku,\r\n\t\trefresh: () => this.refreshTitle(),\r\n\t\trefreshReview: () => this.refreshReview(),\r\n\t\trefreshCollaborativeListData: () => this.refreshCollaborativeListData(),\r\n\t\trefreshCollectionData: () => this.refreshCollectionData(),\r\n\t\trefreshCommunityReviews: () => this.refreshCommunityReviews(),\r\n\t\trefreshConversations: () => this.refreshConversations(),\r\n\t\taddTitles: listId => this.addTitles(listId),\r\n\t\tgetName: () => this.getName(state),\r\n\t});\r\n\r\n\trefreshTitle = () => {\r\n\t\tthis.setState({\r\n\t\t\tisProductDataLoading: true,\r\n\t\t});\r\n\t\tthis.fetchTitle();\r\n\t\treturn this.titleFetch.promise;\r\n\t};\r\n\r\n\trefreshReview = () => {\r\n\t\tthis.fetchReview();\r\n\t};\r\n\r\n\tfetchTitle = () => {\r\n\t\tconst { sku } = this.props;\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/products/${sku}/images,links,descriptions`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheApiResponse).catch(err => {\r\n\t\t\tconsole.error(err);\r\n\t\t\tthis.setState({ isProductDataLoading: false });\r\n\t\t});\r\n\t\tthis.titleFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = title => {\r\n\t\tthis.setState({ title, isProductDataLoading: false });\r\n\t};\r\n\r\n\trefreshCollaborativeListData = () => {\r\n\t\tthis.setState({\r\n\t\t\tisCollaborativeListDataLoading: true,\r\n\t\t});\r\n\t\tthis.fetchCollaborativeListData();\r\n\t\treturn this.collaborativeListFetch.promise;\r\n\t};\r\n\r\n\tfetchCollaborativeListData = () => {\r\n\t\tconst { sku } = this.props;\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/collaborativeTitleLists/titles/${sku}`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheCollaborativeListApiResponse);\r\n\t\tthis.collaborativeListFetch = request;\r\n\t};\r\n\r\n\tcacheCollaborativeListApiResponse = collaborativeLists => {\r\n\t\tthis.setState({\r\n\t\t\tcollaborativeLists,\r\n\t\t\tisCollaborativeListDataLoading: false,\r\n\t\t});\r\n\t};\r\n\r\n\trefreshCollectionData = () => {\r\n\t\tthis.setState({\r\n\t\t\tisCollectionDataLoading: true,\r\n\t\t});\r\n\t\tthis.fetchCollectionData();\r\n\t\treturn this.collectionFetch.promise;\r\n\t};\r\n\r\n\tfetchCollectionData = () => {\r\n\t\tconst { sku } = this.props;\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/me/collections/title/${sku}`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheCollectionApiResponse);\r\n\t\tthis.collectionFetch = request;\r\n\t};\r\n\r\n\tcacheCollectionApiResponse = collections => {\r\n\t\tthis.setState({ collections, isCollectionDataLoading: false });\r\n\t};\r\n\r\n\trefreshCommunityReviews = () => {\r\n\t\tthis.setState({\r\n\t\t\tareReviewsLoading: true,\r\n\t\t});\r\n\t\tthis.fetchCommunityReviews();\r\n\t\treturn this.communityReviewsFetch.promise;\r\n\t};\r\n\r\n\tfetchCommunityReviews = () => {\r\n\t\tconst { sku, communityId } = this.props;\r\n\r\n\t\tif (!sku) return;\r\n\r\n\t\tconst request = api.cancelableGet(\r\n\t\t\t`/api/v1/affiliations/${communityId ?? 0}/${sku}/reviews`,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheCommunityReviewsApiResponse);\r\n\t\tthis.communityReviewsFetch = request;\r\n\t};\r\n\r\n\tcacheCommunityReviewsApiResponse = res => {\r\n\t\tconst results = res.reviews.filter(rev => rev.rating);\r\n\t\tvar reviews = [];\r\n\t\tresults.forEach((review, index) => {\r\n\t\t\tconst user =\r\n\t\t\t\treview.appUserId in res.usersById &&\r\n\t\t\t\tres.usersById[review.appUserId];\r\n\t\t\tconst orgId = user?.orgID?.toLowerCase();\r\n\r\n\t\t\treviews.push({\r\n\t\t\t\tsku: review.sku,\r\n\t\t\t\tcreatedDate: review.createdDate,\r\n\t\t\t\thasReviewText: review.hasReviewText,\r\n\t\t\t\trating: review.rating,\r\n\t\t\t\ttext: review.text,\r\n\t\t\t\tuserAvatar:\r\n\t\t\t\t\treview.appUserId in res.userAvatarsByAppUserId &&\r\n\t\t\t\t\tres.userAvatarsByAppUserId[review.appUserId],\r\n\t\t\t\tuser: user,\r\n\t\t\t\torganization:\r\n\t\t\t\t\torgId &&\r\n\t\t\t\t\torgId in res.organizationsById &&\r\n\t\t\t\t\tres.organizationsById[orgId],\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treviews = reviews.sort((a, b) => b.reviews - a.reviews);\r\n\r\n\t\tthis.setState({\r\n\t\t\treviews: reviews,\r\n\t\t\tareReviewsLoading: false,\r\n\t\t});\r\n\t};\r\n\r\n\taddTitles(listId) {\r\n\t\tvar listItems = [];\r\n\t\tlistItems.push({\r\n\t\t\tlistId: listId,\r\n\t\t\tsku: this.props.sku,\r\n\t\t});\r\n\t\tapi.post(\r\n\t\t\t`/api/v1/collaborativeTitleLists/${listId}/items/add`,\r\n\t\t\tlistItems,\r\n\t\t).then(() => {\r\n\t\t\tthis.refreshCollaborativeListData();\r\n\t\t\tthis.props.collaborativeListDataStore &&\r\n\t\t\t\tthis.props.collaborativeListDataStore.refresh();\r\n\t\t\tthis.props.collaborativeListsDataStore &&\r\n\t\t\t\tthis.props.collaborativeListsDataStore.refresh();\r\n\t\t});\r\n\t}\r\n\r\n\tfetchReview = () => {\r\n\t\tconst { sku } = this.props;\r\n\t\tconst request = api.cancelableGet(`/api/v1/me/reviews/${sku}/review`);\r\n\t\trequest.promise.then(this.cacheApiReviewResponse);\r\n\t\tthis.reviewFetch = request;\r\n\t};\r\n\r\n\tcacheApiReviewResponse = review => {\r\n\t\tthis.setState({ review, isReviewDataLoading: false });\r\n\t};\r\n\r\n\trefreshConversations = () => {\r\n\t\tthis.setState({\r\n\t\t\tareConversationsLoading: true,\r\n\t\t});\r\n\t\tthis.fetchConversations();\r\n\t\treturn this.conversationsFetch.promise;\r\n\t};\r\n\r\n\tfetchConversations = () => {\r\n\t\tconst { sku } = this.props;\r\n\t\tconst request = api.cancelableGet(`/api/v1/conversations/title/${sku}`);\r\n\t\trequest.promise.then(this.cacheConversationsApiResponse);\r\n\t\tthis.conversationsFetch = request;\r\n\t};\r\n\r\n\tcacheConversationsApiResponse = conversations => {\r\n\t\tthis.setState({ conversations, areConversationsLoading: false });\r\n\t};\r\n\r\n\tgetName = (state = this.state) => {\r\n\t\treturn state.title.name;\r\n\t};\r\n}\r\n\r\nconst connectors = [\r\n\tconnectToCollaborativeLists,\r\n\tconnectToCollaborativeList,\r\n\tconnectToUser,\r\n];\r\n\r\nexport default combineConnectors(connectors)(TitleDataStore);\r\n","import { getLabelAndInputRow } from '../../Form/Form';\r\nimport { InputType } from '../../Form/InputType';\r\n\r\nexport const getInitialFormValuesById = (user, organization) => {\r\n\tconst initialFormValuesById = {\r\n\t\tfirstName: user.firstName,\r\n\t\tlastName: user.lastName,\r\n\t\taccount: organization && organization.displayName,\r\n\t\ttitle: user.title,\r\n\t\tphone: user.phone,\r\n\t\temail: user.email,\r\n\t\tpassword: '••••••••••',\r\n\t};\r\n\r\n\treturn initialFormValuesById;\r\n};\r\n\r\nexport const getRowOptionsList = () => {\r\n\tconst rowOptionsList = [\r\n\t\tgetLabelAndInputRow('First Name', 'firstName', true),\r\n\t\tgetLabelAndInputRow('Last Name', 'lastName', true),\r\n\t\tgetLabelAndInputRow('Title', 'title'),\r\n\t\tgetLabelAndInputRow('Phone', 'phone'),\r\n\t\tgetLabelAndInputRow('Email', 'email', false, InputType.UneditableInput),\r\n\t\tgetLabelAndInputRow(\r\n\t\t\t'Password',\r\n\t\t\t'password',\r\n\t\t\tfalse,\r\n\t\t\tInputType.UneditableInput,\r\n\t\t),\r\n\t];\r\n\r\n\treturn rowOptionsList;\r\n};\r\n","import * as React from 'react';\r\nimport eventsApi from '../../../../apiFetcher/eventsApiFetcher';\r\nimport { useEventsDataStore } from '../EventsDataStoreContext';\r\nimport {\r\n\tEvent as InitialState,\r\n\tEventSku,\r\n\tEventAction,\r\n\tOfInterestTo,\r\n\tEventCommunity,\r\n} from './types';\r\n\r\nexport const initialState = {\r\n\tcommunities: [],\r\n\tdescription: '',\r\n\ttitle: '',\r\n\timages: {},\r\n\tofInterestToList: [],\r\n\torganization: {},\r\n\tskus: [],\r\n\tlinks: {},\r\n\tvenue: {},\r\n\townerAppUserId: null,\r\n\tsessionParentEventId: null,\r\n\ttime: {\r\n\t\tstartTime: '',\r\n\t\tendTime: '',\r\n\t},\r\n};\r\n\r\nexport enum EventActionType {\r\n\tAddOrUpdateEvent = 'ADD_OR_UPDATE_EVENT',\r\n\tResetState = 'RESET_STATE',\r\n\tAddSkuToEvent = 'ADD_SKU_TO_EVENT',\r\n\tRemoveSkuFromEvent = 'REMOVE_SKU_FROM_EVENT',\r\n}\r\n\r\ninterface IEventDataStoreContext {\r\n\tstate: InitialState;\r\n\tdispatch: React.Dispatch<any>;\r\n\teventId: number | null;\r\n\tgetSkusAsList: () => string[];\r\n\tgetCommunitiesAsList: () => number[];\r\n\tformatOfInterestToList: (interestKeys: string[]) => OfInterestTo[];\r\n\tresetState: () => void;\r\n}\r\n\r\nconst EventDataStoreContext = React.createContext<IEventDataStoreContext>({\r\n\tstate: initialState,\r\n\tdispatch: () => null,\r\n\tgetSkusAsList: () => [],\r\n\tgetCommunitiesAsList: () => [],\r\n\tformatOfInterestToList: ([]) => [],\r\n\tresetState: () => {},\r\n\teventId: null,\r\n});\r\n\r\nconst reducer = (state: InitialState, action: EventAction) => {\r\n\tswitch (action.type) {\r\n\t\tcase EventActionType.AddOrUpdateEvent:\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\t...action.payload,\r\n\t\t\t};\r\n\t\tcase EventActionType.AddSkuToEvent:\r\n\t\t\tconst isSkuUnique = !state.skus.find(\r\n\t\t\t\ttitle => title.sku === action.payload,\r\n\t\t\t);\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tskus: isSkuUnique\r\n\t\t\t\t\t? [...state.skus, { sku: action.payload }]\r\n\t\t\t\t\t: state.skus,\r\n\t\t\t};\r\n\t\tcase EventActionType.RemoveSkuFromEvent:\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tskus: state.skus.filter(s => s.sku !== action.payload),\r\n\t\t\t};\r\n\t\tcase EventActionType.ResetState:\r\n\t\t\treturn {\r\n\t\t\t\t...initialState,\r\n\t\t\t};\r\n\t\tdefault:\r\n\t\t\tconsole.error('Unhandled action type');\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t};\r\n\t}\r\n};\r\n\r\ntype EventDataStoreProviderProps = {\r\n\teventId: number | null;\r\n\tchildren: React.ReactNode;\r\n};\r\n\r\nconst eventRequestInitialValue = {\r\n\tpromise: initialState,\r\n\tcancel: () => {},\r\n};\r\n\r\nexport const EventDataStoreProvider = ({\r\n\teventId,\r\n\tchildren,\r\n}: EventDataStoreProviderProps) => {\r\n\tconst [state, dispatch] = React.useReducer(reducer, initialState);\r\n\tconst { buildEvent } = useEventsDataStore();\r\n\tconst request = React.useRef(eventRequestInitialValue);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tresetState();\r\n\r\n\t\treturn () => {\r\n\t\t\teventsApi.revoke(request.current);\r\n\t\t};\r\n\t}, [eventId]);\r\n\r\n\tconst fetchEvent = async () => {\r\n\t\ttry {\r\n\t\t\trequest.current = eventsApi.cancelableGet(`/api/events/${eventId}`);\r\n\t\t\tconst event = await request.current.promise;\r\n\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: EventActionType.AddOrUpdateEvent,\r\n\t\t\t\tpayload: buildEvent(event),\r\n\t\t\t});\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error(e);\r\n\t\t}\r\n\t};\r\n\r\n\tconst getSkusAsList = () => {\r\n\t\treturn state.skus.map((title: EventSku) => title.sku);\r\n\t};\r\n\r\n\tconst getCommunitiesAsList = () => {\r\n\t\treturn state.communities.map(\r\n\t\t\t(community: EventCommunity) => community.communityId,\r\n\t\t);\r\n\t};\r\n\r\n\tconst formatOfInterestToList = (interestKeys: string[]) => {\r\n\t\treturn interestKeys.map(interestKey => ({ interestKey }));\r\n\t};\r\n\r\n\tconst resetState = () => {\r\n\t\tconst isEditingEvent = eventId !== null;\r\n\t\treturn isEditingEvent\r\n\t\t\t? fetchEvent()\r\n\t\t\t: dispatch({ type: EventActionType.ResetState });\r\n\t};\r\n\r\n\tconst getStore = () => ({\r\n\t\tstate,\r\n\t\tdispatch,\r\n\t\teventId,\r\n\t\tgetSkusAsList,\r\n\t\tgetCommunitiesAsList,\r\n\t\tformatOfInterestToList,\r\n\t\tresetState,\r\n\t});\r\n\r\n\treturn (\r\n\t\t<EventDataStoreContext.Provider value={getStore()}>\r\n\t\t\t{typeof children === 'function' ? children(resetState) : children}\r\n\t\t</EventDataStoreContext.Provider>\r\n\t);\r\n};\r\n\r\nexport const useEventDataStore = () => React.useContext(EventDataStoreContext);\r\n","import React from 'react';\r\n\r\nexport default function ConversationTime({ timeStamp }) {\r\n\tconst dateNowEST = new Date(\r\n\t\tnew Date().toLocaleString('en-US', {\r\n\t\t\ttimeZone: 'America/New_York',\r\n\t\t}),\r\n\t);\r\n\r\n\tconst diff_hours = (dt2, dt1) => {\r\n\t\tvar diff = (dt2.getTime() - dt1.getTime()) / 1000;\r\n\t\tdiff /= 60 * 60;\r\n\t\treturn Math.abs(Math.round(diff));\r\n\t};\r\n\r\n\tconst convertToLocalTime = () => {\r\n\t\tconst hourDifference = diff_hours(dateNowEST, new Date());\r\n\t\tconst activityTime = new Date(timeStamp);\r\n\t\tconst localTime = activityTime.setHours(\r\n\t\t\tactivityTime.getHours() - hourDifference,\r\n\t\t);\r\n\t\treturn new Date(localTime);\r\n\t};\r\n\r\n\tfunction formatDate(localizedTimeStamp) {\r\n\t\tvar dt = (dt = localizedTimeStamp),\r\n\t\t\ttoday = new Date(Date.now()),\r\n\t\t\tyesterday = new Date(today),\r\n\t\t\tdiffYears = new Date().getFullYear() - dt.getFullYear();\r\n\r\n\t\tyesterday.setDate(yesterday.getDate() - 1);\r\n\r\n\t\tconst ltsDayStamp =\r\n\t\t\tlocalizedTimeStamp.getDate() +\r\n\t\t\t'-' +\r\n\t\t\tlocalizedTimeStamp.getMonth() +\r\n\t\t\t'-' +\r\n\t\t\tlocalizedTimeStamp.getFullYear;\r\n\r\n\t\tvar dateString = '';\r\n\t\tif (\r\n\t\t\ttoday.getDate() +\r\n\t\t\t\t'-' +\r\n\t\t\t\ttoday.getMonth() +\r\n\t\t\t\t'-' +\r\n\t\t\t\ttoday.getFullYear ==\r\n\t\t\tltsDayStamp\r\n\t\t) {\r\n\t\t\tdateString = 'Today';\r\n\t\t} else if (\r\n\t\t\tyesterday.getDate() +\r\n\t\t\t\t'-' +\r\n\t\t\t\tyesterday.getMonth() +\r\n\t\t\t\t'-' +\r\n\t\t\t\tyesterday.getFullYear ==\r\n\t\t\tltsDayStamp\r\n\t\t) {\r\n\t\t\tdateString = 'Yesterday';\r\n\t\t} else if (diffYears < 1) {\r\n\t\t\tdateString = getDateAndMonth(localizedTimeStamp);\r\n\t\t} else if (diffYears >= 1) {\r\n\t\t\tdateString = localizedTimeStamp.toLocaleDateString('en-US');\r\n\t\t}\r\n\t\treturn (\r\n\t\t\tdateString +\r\n\t\t\t' ' +\r\n\t\t\tlocalizedTimeStamp.toLocaleTimeString('en-US', {\r\n\t\t\t\thour: 'numeric',\r\n\t\t\t\tminute: '2-digit',\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tconst getDateAndMonth = localizedTimeStamp => {\r\n\t\treturn (\r\n\t\t\tlocalizedTimeStamp.getMonth() +\r\n\t\t\t1 +\r\n\t\t\t'/' +\r\n\t\t\tlocalizedTimeStamp.getDate()\r\n\t\t);\r\n\t};\r\n\r\n\treturn <span>{formatDate(convertToLocalTime())}</span>;\r\n}\r\n","import LoadingSpinner, { LoadingSpinnerSize } from '../LoadingSpinner';\r\nimport { Spin } from 'antd';\r\nimport './loadingWrapper.less';\r\n\r\ntype LoadingWrapper = {\r\n\tisLoading: boolean;\r\n\tsize?: LoadingSpinnerSize;\r\n\tchildren: React.ReactNode;\r\n};\r\n\r\nconst LoadingWrapper = ({\r\n\tisLoading,\r\n\tsize = LoadingSpinnerSize.small,\r\n\tchildren,\r\n}): JSX.Element => {\r\n\treturn (\r\n\t\t<Spin\r\n\t\t\twrapperClassName=\"loading-wrapper\"\r\n\t\t\tspinning={isLoading}\r\n\t\t\tindicator={<LoadingSpinner size={size} />}>\r\n\t\t\t{children}\r\n\t\t</Spin>\r\n\t);\r\n};\r\n\r\nexport default LoadingWrapper;\r\n","const VoteType = {\r\n\tnotSet: 'notSet',\r\n\tdownVote: 'downVote',\r\n\tupVote: 'upVote',\r\n};\r\n\r\nexport default VoteType;\r\n","import { useRouteMatch } from 'react-router-dom';\r\nimport paths from '../../paths';\r\n\r\ninterface IUseCommunityPageParams {\r\n\tcommunityId: number | null;\r\n\tisCommunityHubPage: boolean;\r\n}\r\n\r\nexport default function useCommunityPageParams(): IUseCommunityPageParams {\r\n\tconst { params, path } = useRouteMatch();\r\n\tconst communityId = params.communityId\r\n\t\t? parseCommunityId(params.communityId)\r\n\t\t: null;\r\n\tconst isCommunityHubPage = path.includes(paths.community());\r\n\r\n\tfunction parseCommunityId(string: string) {\r\n\t\tconst int = Number(string);\r\n\t\treturn isNaN(int) ? null : int;\r\n\t}\r\n\r\n\treturn {\r\n\t\tcommunityId,\r\n\t\tisCommunityHubPage,\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Input } from 'antd';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport { useTranslate } from '@above-the-treeline/localization';\r\n\r\nCommunitiesSearch.propTypes = {\r\n\tisMobile: PropTypes.func,\r\n\tonChange: PropTypes.func,\r\n\tmobileWidth: PropTypes.string,\r\n\tdesktopWidth: PropTypes.string,\r\n\tcommunitiesCount: PropTypes.number,\r\n};\r\n\r\nCommunitiesSearch.defaultProps = {\r\n\tdesktopWidth: '50%',\r\n\tmobileWidth: '100%',\r\n};\r\n\r\nconst CommunitiesQtyForDisplayingSearch = 5;\r\n\r\nfunction CommunitiesSearch({\r\n\tonChange,\r\n\tisMobile,\r\n\tmobileWidth,\r\n\tdesktopWidth,\r\n\tcommunitiesCount,\r\n}) {\r\n\tconst [value, setValue] = React.useState('');\r\n\tconst { translate } = useTranslate();\r\n\tconst isMobileSize = isMobile();\r\n\tconst isVisible = communitiesCount\r\n\t\t? communitiesCount >= CommunitiesQtyForDisplayingSearch\r\n\t\t: true;\r\n\r\n\tconst handleOnChange = e => {\r\n\t\tif (typeof onChange === 'function') onChange(e.target.value);\r\n\t\tsetValue(e.target.value);\r\n\t};\r\n\r\n\treturn isVisible ? (\r\n\t\t<div className=\"communities-search\">\r\n\t\t\t<Input\r\n\t\t\t\tplaceholder={translate('find_a_community')}\r\n\t\t\t\tvalue={value}\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\twidth: isMobileSize ? mobileWidth : desktopWidth,\r\n\t\t\t\t}}\r\n\t\t\t\tonChange={handleOnChange}\r\n\t\t\t\tallowClear\r\n\t\t\t/>\r\n\t\t</div>\r\n\t) : null;\r\n}\r\n\r\nexport default withIsMobile(CommunitiesSearch);\r\n","import React from 'react';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nfunction NoMatchesFoundMessage() {\r\n\treturn (\r\n\t\t<p className=\"no-matches-found-message\">\r\n\t\t\t<Translate id=\"no_matches_found_no_punctuation\" />\r\n\t\t</p>\r\n\t);\r\n}\r\n\r\nexport default NoMatchesFoundMessage;\r\n","import './loadingSpinner.less';\r\n\r\ntype LoadingSpinnerProps = {\r\n\tsize?: LoadingSpinnerSize;\r\n};\r\n\r\nexport enum LoadingSpinnerSize {\r\n\txlarge = 100,\r\n\tlarge = 75,\r\n\tmedium = 50,\r\n\tsmall = 30,\r\n\txssmall = 18,\r\n}\r\n\r\nexport default function LoadingSpinner({\r\n\tsize = LoadingSpinnerSize.xssmall,\r\n}: LoadingSpinnerProps) {\r\n\treturn (\r\n\t\t<div className=\"loading-spinner\" style={{ width: size, height: size }}>\r\n\t\t\t<div className=\"icon-community\" style={{ fontSize: size }} />\r\n\t\t</div>\r\n\t);\r\n}\r\n","import * as Util from '../../../util';\r\nimport { useQuery } from 'react-query';\r\nimport api from '../../../Api';\r\nimport Title from '../../../types/Title';\r\nimport CacheKeysEnum from '../../../CacheKeysEnum';\r\n\r\ntype ReviewCopiesDataType = {\r\n\ttitles: Title[];\r\n\tskus: string[];\r\n};\r\n\r\ntype UseReviewCopiesType = {\r\n\trefetch: () => void;\r\n\tdata: ReviewCopiesDataType;\r\n\tisLoading: boolean;\r\n\tisFetching: boolean;\r\n};\r\n\r\nconst initialReviewCopiesData = {\r\n\ttitles: [],\r\n\tskus: [],\r\n};\r\n\r\nexport default function useReviewCopies(\r\n\tcommunityId: number,\r\n\tnumberOfRows: number,\r\n): UseReviewCopiesType {\r\n\tconst { data, refetch, isLoading, isFetching } = useQuery(\r\n\t\tCacheKeysEnum.NewReviewCopies,\r\n\t\tfetchReviewCopyData,\r\n\t\t{\r\n\t\t\trefetchOnMount: 'always',\r\n\t\t},\r\n\t);\r\n\r\n\tasync function fetchReviewCopyData(): Promise<ReviewCopiesDataType> {\r\n\t\tconst reviewCopiesResponse = await fetchReviewCopies();\r\n\t\tconst reviewCopies = transformReviewCopiesData(reviewCopiesResponse);\r\n\t\treturn reviewCopies;\r\n\t}\r\n\r\n\tfunction fetchReviewCopies(): Promise<any> {\r\n\t\treturn api.get(\r\n\t\t\t`/api/v1/affiliations/${communityId}/reviewCopies/${numberOfRows}`,\r\n\t\t);\r\n\t}\r\n\r\n\tfunction transformReviewCopiesData(data: {}): {\r\n\t\ttitles: Title[];\r\n\t\tskus: string[];\r\n\t} {\r\n\t\tconst titles = data && Util.createTitleObject(data);\r\n\t\treturn {\r\n\t\t\ttitles,\r\n\t\t\tskus: getSkus(titles),\r\n\t\t};\r\n\t}\r\n\r\n\tfunction getSkus(titles: Title[]) {\r\n\t\tif (Array.isArray(titles)) {\r\n\t\t\treturn titles.map(item => item.sku);\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\treturn {\r\n\t\trefetch,\r\n\t\tdata: data ?? initialReviewCopiesData,\r\n\t\tisLoading,\r\n\t\tisFetching,\r\n\t};\r\n}\r\n","import * as React from 'react';\r\nimport { useQuery } from 'react-query';\r\nimport api from '../../../Api';\r\n\r\ntype TitleConversationStatusesType = {\r\n\tconversationType: string;\r\n\tconversationId: string;\r\n\tcommunityId: number;\r\n\tstatus: string;\r\n};\r\n\r\ntype UseTitleConversationStatusesType = {\r\n\trefetch: () => void;\r\n\tdata: TitleConversationStatusesType[];\r\n\tisLoading: boolean;\r\n};\r\n\r\nconst useTitleConversationStatuses = (\r\n\tcommunityId: number,\r\n\tskus: string[],\r\n\tcacheKey: string,\r\n): UseTitleConversationStatusesType => {\r\n\tconst { data, refetch, isLoading } = useQuery(cacheKey, fetchConvoStatuses);\r\n\r\n\tReact.useEffect(() => {\r\n\t\trefetch();\r\n\t}, [skus.length]);\r\n\r\n\tfunction fetchConvoStatuses():\r\n\t\t| Promise<TitleConversationStatusesType[]>\r\n\t\t| [] {\r\n\t\tif (!skus.length) return [];\r\n\t\treturn api.post(`/api/v1/conversations/${communityId}/titles`, skus);\r\n\t}\r\n\r\n\treturn {\r\n\t\tdata: data ?? [],\r\n\t\trefetch,\r\n\t\tisLoading,\r\n\t};\r\n};\r\n\r\nexport default useTitleConversationStatuses;\r\n","const SubscriptionFrequencyOption = {\r\n daily: 'Daily',\r\n weekly: 'Weekly',\r\n monthly: 'Monthly',\r\n never: 'Never',\r\n};\r\n\r\nexport default SubscriptionFrequencyOption;\r\n","export const TitleListSort = {\r\n\tSequence: 'sequence',\r\n\tVotes: 'votes',\r\n};\r\n","export const AllowAddTitleGroup = {\r\n\tAll: 'all',\r\n\tAdmins: 'admins',\r\n\tNone: 'none',\r\n};\r\n","import React from 'react';\r\nimport { Button, Tooltip } from 'antd';\r\nimport { Translate } from '@above-the-treeline/localization';\r\n\r\nexport default class BrowseFilterDisplay extends React.Component {\r\n\trender() {\r\n\t\tconst {\r\n\t\t\tvalue,\r\n\t\t\tlabel,\r\n\t\t\tisExclusion,\r\n\t\t\tidx,\r\n\t\t\tincludeBullet,\r\n\t\t\tisEditable,\r\n\t\t} = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t{idx > 0 && includeBullet ? (\r\n\t\t\t\t\t<div className=\"column-spaced\">•</div>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t''\r\n\t\t\t\t)}\r\n\t\t\t\t<Tooltip\r\n\t\t\t\t\tplacement=\"bottomRight\"\r\n\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t<Translate\r\n\t\t\t\t\t\t\tid={\r\n\t\t\t\t\t\t\t\tisExclusion\r\n\t\t\t\t\t\t\t\t\t? 'filter_excluded'\r\n\t\t\t\t\t\t\t\t\t: 'filter_included'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName={`column-narrow icon-${\r\n\t\t\t\t\t\t\tisExclusion\r\n\t\t\t\t\t\t\t\t? 'minus-circle category-exclusion'\r\n\t\t\t\t\t\t\t\t: 'plus-circle category-inclusion'\r\n\t\t\t\t\t\t}`}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Tooltip>\r\n\t\t\t\t<div className=\"column-narrow\">{label}</div>\r\n\t\t\t\t{isEditable && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"column-right\">\r\n\t\t\t\t\t\t\t<Tooltip title={<Translate id=\"remove\" />}>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\t\t\t\t\tthis.props.removeFilter(value)\r\n\t\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t<div className=\"icon-trash remove-filter-trash\" />\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div className=\"column-spaced-right\">\r\n\t\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t\t\t\t<Translate\r\n\t\t\t\t\t\t\t\t\t\tid={\r\n\t\t\t\t\t\t\t\t\t\t\tisExclusion\r\n\t\t\t\t\t\t\t\t\t\t\t\t? 'include_in_filter'\r\n\t\t\t\t\t\t\t\t\t\t\t\t: 'exclude_from_filter'\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\t\t\t\t\tthis.props.changeExclusion(value)\r\n\t\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclassName={`icon-${\r\n\t\t\t\t\t\t\t\t\t\t\tisExclusion ? 'plus' : 'minus'\r\n\t\t\t\t\t\t\t\t\t\t}-circle remove-filter-trash`}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t<div className=\"clear\" />\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t}\r\n}\r\n","import { isIsbn } from '../../../../../util/validate';\r\n\r\nexport const titleTagRegExGlobal = /@\\[.*?\\]\\(.*?\\)/g;\r\nexport const titleTagRegExGrouped = /(@\\[(.*?)]\\((.*?)\\))/;\r\n\r\n// titleTag format: @[Title](ISBN)\r\n\r\nexport const parseAndValidateTitleTag = titleTag => {\r\n\tconst parsedTitle = titleTag.match(titleTagRegExGrouped)[2];\r\n\tconst parsedIsbn = titleTag.match(titleTagRegExGrouped)[3];\r\n\tconst isValidIsbn = isIsbn(parsedIsbn);\r\n\treturn { parsedTitle, parsedIsbn, isValidIsbn };\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport useTitle from '../../../Title/hooks/useTitle';\r\nimport { Popover } from 'antd';\r\nimport './titleMentionPopover.less';\r\nimport LoadingSpinner from '../../../UI/LoadingSpinner';\r\n\r\nTitleMentionPopover.propTypes = {\r\n\tparsedIsbn: PropTypes.string,\r\n\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\tplacement: PropTypes.string,\r\n};\r\n\r\nTitleMentionPopover.defaultProps = {\r\n\tplacement: 'top',\r\n};\r\n\r\nexport default function TitleMentionPopover({\r\n\tchildren,\r\n\tparsedIsbn,\r\n\tplacement,\r\n}) {\r\n\tconst { title, isLoading, getJacketCoverImage } = useTitle(\r\n\t\tparsedIsbn,\r\n\t\ttrue,\r\n\t);\r\n\tconst jacketCoverImage = getJacketCoverImage();\r\n\tconst jacketCoverImageUri =\r\n\t\tjacketCoverImage && `${jacketCoverImage.uri}?height=200`;\r\n\r\n\tconst renderPopoverContent = () => {\r\n\t\tconst productDetailKeys = ['name', 'author', 'supplier', 'sku'];\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{jacketCoverImageUri && (\r\n\t\t\t\t\t<img\r\n\t\t\t\t\t\talt=\"Title jacket cover\"\r\n\t\t\t\t\t\tclassName=\"jacket-cover-image\"\r\n\t\t\t\t\t\tsrc={jacketCoverImageUri}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t\t<div className=\"title-details\">\r\n\t\t\t\t\t{productDetailKeys.map(\r\n\t\t\t\t\t\tkey =>\r\n\t\t\t\t\t\t\ttitle[key] && (\r\n\t\t\t\t\t\t\t\t<p key={key} className={`category-type ${key}`}>\r\n\t\t\t\t\t\t\t\t\t{title[key]}\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t</>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Popover\r\n\t\t\tplacement={placement}\r\n\t\t\tcontent={isLoading ? <LoadingSpinner /> : renderPopoverContent()}\r\n\t\t\toverlayClassName=\"title-mention-popover\">\r\n\t\t\t{children}\r\n\t\t</Popover>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport TitleDetailDrawer from '../../../Title/TitleDetailDrawer';\r\nimport PropTypes from 'prop-types';\r\nimport { parseAndValidateTitleTag } from '../util/titleTag/regex';\r\nimport withIsMobile from 'treeline-react-core-components/WindowSizeProvider/withIsMobile';\r\nimport TitleMentionPopover from '../TitleMentionPopover/TitleMentionPopover';\r\nimport './titleMentionTag.less';\r\n\r\nTitleMentionTag.propTypes = {\r\n\ttitleTag: PropTypes.string,\r\n\tisMobile: PropTypes.func,\r\n\tpopoverPlacement: PropTypes.string,\r\n};\r\n\r\nTitleMentionTag.defaultProps = {\r\n\tpopoverPlacement: 'top',\r\n};\r\n\r\nfunction TitleMentionTag({ titleTag, isMobile, popoverPlacement }) {\r\n\tconst { parsedTitle, parsedIsbn, isValidIsbn } = parseAndValidateTitleTag(\r\n\t\ttitleTag,\r\n\t);\r\n\tconst isMobileSize = isMobile();\r\n\r\n\tconst titleTagAnchor = <span className=\"acc-font\">{parsedTitle}</span>;\r\n\r\n\tconst titleTagAnchorWithPopover = (\r\n\t\t<TitleMentionPopover\r\n\t\t\tparsedIsbn={parsedIsbn}\r\n\t\t\tplacement={popoverPlacement}>\r\n\t\t\t{titleTagAnchor}\r\n\t\t</TitleMentionPopover>\r\n\t);\r\n\r\n\treturn isValidIsbn ? (\r\n\t\t<div className=\"title-mention-tag-anchor\">\r\n\t\t\t<TitleDetailDrawer\r\n\t\t\t\tsku={parsedIsbn}\r\n\t\t\t\tcommunityId={0}\r\n\t\t\t\tparentStyle=\"clickable drawer-anchor\">\r\n\t\t\t\t{isMobileSize ? titleTagAnchor : titleTagAnchorWithPopover}\r\n\t\t\t</TitleDetailDrawer>\r\n\t\t</div>\r\n\t) : (\r\n\t\t<span>{parsedTitle}</span>\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(TitleMentionTag);\r\n","import TitleMentionTag from '../TitleMentionTag/TitleMentionTag';\r\nimport { titleTagRegExGlobal } from '../util/titleTag/regex';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './parsedComment.less';\r\nimport classNames from 'classnames';\r\nimport Linkify from 'react-linkify';\r\n\r\nParsedComment.propTypes = {\r\n\tcommentText: PropTypes.string,\r\n\tmentionPopoverPlacement: PropTypes.string,\r\n\ttoTruncate: PropTypes.bool,\r\n};\r\n\r\nParsedComment.defaultProps = {\r\n\tmentionPopoverPlacement: 'top',\r\n\ttoTruncate: false,\r\n};\r\n\r\nexport default function ParsedComment({\r\n\tcommentText,\r\n\tmentionPopoverPlacement,\r\n\ttoTruncate,\r\n}) {\r\n\tconst parsedCommentRef = React.useRef(null);\r\n\tconst [displayShowMore, setDisplayShowMore] = React.useState(false);\r\n\tconst [isExpanded, setIsExpanded] = React.useState(false);\r\n\tlet isTruncated =\r\n\t\ttoTruncate &&\r\n\t\tparsedCommentRef &&\r\n\t\tparsedCommentRef.current &&\r\n\t\tparsedCommentRef.current.offsetHeight <\r\n\t\t\tparsedCommentRef.current.scrollHeight;\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetDisplayShowMore(isTruncated);\r\n\t}, [isTruncated]);\r\n\r\n\tconst getTitleTags = () => {\r\n\t\tconst titleTags = commentText && commentText.match(titleTagRegExGlobal);\r\n\t\treturn titleTags;\r\n\t};\r\n\r\n\tconst getCommentSplitAtTag = () => {\r\n\t\tconst commentSplitAtTag =\r\n\t\t\tcommentText && commentText.split(titleTagRegExGlobal);\r\n\t\treturn commentSplitAtTag;\r\n\t};\r\n\r\n\tconst renderTitleTagComponent = titleTag => {\r\n\t\treturn (\r\n\t\t\t<TitleMentionTag\r\n\t\t\t\ttitleTag={titleTag}\r\n\t\t\t\tpopoverPlacement={mentionPopoverPlacement}\r\n\t\t\t/>\r\n\t\t);\r\n\t};\r\n\r\n\tconst titleTags = getTitleTags(commentText);\r\n\r\n\tconst splitComment = getCommentSplitAtTag(commentText);\r\n\r\n\tconst getCommentSubClasses = () =>\r\n\t\tclassNames({ 'truncated-comment': !isExpanded && toTruncate });\r\n\r\n\tconst showMoreButton = (\r\n\t\t<div\r\n\t\t\tclassName=\"clickable show-more-button\"\r\n\t\t\tonClick={() => setIsExpanded(!isExpanded)}>\r\n\t\t\t{isExpanded ? 'show less' : 'show more'}\r\n\t\t</div>\r\n\t);\r\n\r\n\tconst getComponentDecorator = (href, text, key) => (\r\n\t\t<a\r\n\t\t\tclassName=\"acc-font\"\r\n\t\t\thref={href}\r\n\t\t\tkey={key}\r\n\t\t\ttarget=\"_blank\"\r\n\t\t\trel=\"noopener noreferrer\">\r\n\t\t\t{text}\r\n\t\t</a>\r\n\t);\r\n\r\n\treturn (\r\n\t\t<div className=\"parsed-comment\">\r\n\t\t\t<div className={getCommentSubClasses()} ref={parsedCommentRef}>\r\n\t\t\t\t{splitComment &&\r\n\t\t\t\t\tsplitComment.map((subStr, index) => (\r\n\t\t\t\t\t\t<React.Fragment key={index}>\r\n\t\t\t\t\t\t\t<Linkify componentDecorator={getComponentDecorator}>\r\n\t\t\t\t\t\t\t\t{subStr}\r\n\t\t\t\t\t\t\t</Linkify>\r\n\t\t\t\t\t\t\t{titleTags && titleTags[index]\r\n\t\t\t\t\t\t\t\t? renderTitleTagComponent(titleTags[index])\r\n\t\t\t\t\t\t\t\t: null}\r\n\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t))}\r\n\t\t\t</div>\r\n\t\t\t{displayShowMore && showMoreButton}\r\n\t\t</div>\r\n\t);\r\n}\r\n","import { Form, Input, Modal } from 'antd';\r\nimport React from 'react';\r\nimport { connectToAccountOrMembershipRequiredModalContext } from '../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\nimport CommunityButton from '../UI/CommunityButton';\r\nimport { connectToUser } from '../User/containers/UserDataStore';\r\nimport combineConnectors from '../util/combineConnectors';\r\nimport CommentInputWithMentioning from './Comments/CommentInputWithMentioning/CommentInputWithMentioning';\r\nimport { connectToConversations } from './containers/conversationsDataStore';\r\n\r\nconst CollectionCreateForm = Form.create({ name: 'form_in_modal' })(\r\n\t// eslint-disable-next-line\r\n\tclass extends React.Component {\r\n\t\trender() {\r\n\t\t\tconst {\r\n\t\t\t\tvisible,\r\n\t\t\t\tonCancel,\r\n\t\t\t\tonCreate,\r\n\t\t\t\tonChange,\r\n\t\t\t\tform,\r\n\t\t\t\tdefaultValue,\r\n\t\t\t\ttopicId,\r\n\t\t\t\tname,\r\n\t\t\t\tvalue,\r\n\t\t\t} = this.props;\r\n\t\t\tconst { getFieldDecorator } = form;\r\n\t\t\treturn (\r\n\t\t\t\t<Modal\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tdestroyOnClose={true}\r\n\t\t\t\t\tvisible={visible}\r\n\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t!topicId || topicId == 0\r\n\t\t\t\t\t\t\t? 'Start a New Conversation'\r\n\t\t\t\t\t\t\t: 'Edit Conversation'\r\n\t\t\t\t\t}\r\n\t\t\t\t\tokText={!topicId || topicId == 0 ? 'Start' : 'Update'}\r\n\t\t\t\t\tonCancel={onCancel}\r\n\t\t\t\t\tonOk={onCreate}>\r\n\t\t\t\t\t<Form layout=\"vertical\">\r\n\t\t\t\t\t\t<Form.Item label=\"Conversation Topic\">\r\n\t\t\t\t\t\t\t{getFieldDecorator('name', {\r\n\t\t\t\t\t\t\t\trules: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\t\t\t\t\t'Please enter a theme for this conversation or click Cancel',\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\tinitialValue: name,\r\n\t\t\t\t\t\t\t})(<Input placeholder=\"Enter a topic name\" />)}\r\n\t\t\t\t\t\t</Form.Item>\r\n\t\t\t\t\t\t{(!topicId || topicId == 0) && (\r\n\t\t\t\t\t\t\t<Form.Item label=\"Initial Thought\">\r\n\t\t\t\t\t\t\t\t{getFieldDecorator('initialComment', {\r\n\t\t\t\t\t\t\t\t\trules: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\t\t\t\t\t\t'Please enter an initial thought to kick-start the conversations',\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\tinitialValue: value,\r\n\t\t\t\t\t\t\t\t})(\r\n\t\t\t\t\t\t\t\t\t<CommentInputWithMentioning\r\n\t\t\t\t\t\t\t\t\t\tisOnModal={true}\r\n\t\t\t\t\t\t\t\t\t\tonChangeEvent={onChange}\r\n\t\t\t\t\t\t\t\t\t/>,\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Form.Item>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Form>\r\n\t\t\t\t</Modal>\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n);\r\n\r\nexport class AddEditTopic extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\ttopicId: 0,\r\n\t\t\tname: '',\r\n\t\t\tvisible: false,\r\n\t\t\tvalue: '',\r\n\t\t};\r\n\t}\r\n\r\n\tshowModal = (topicId, name) => {\r\n\t\tthis.setState({\r\n\t\t\tvisible: true,\r\n\t\t\ttopicId: topicId ? topicId : 0,\r\n\t\t\tname: name,\r\n\t\t});\r\n\t};\r\n\r\n\thandleCancel = () => {\r\n\t\tthis.resetForm();\r\n\t};\r\n\r\n\tresetForm = () => {\r\n\t\tconst form = this.formRef.props.form;\r\n\t\tform.resetFields();\r\n\t\tthis.setState({ visible: false, value: '' });\r\n\t};\r\n\r\n\thandleCreate = () => {\r\n\t\tconst form = this.formRef.props.form;\r\n\t\tform.validateFields((err, values) => {\r\n\t\t\tif (err) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst { topicId } = this.props;\r\n\t\t\tif (!topicId || Number(topicId) === 0) {\r\n\t\t\t\tthis.props.conversationsDataStore.createNewTopic(values);\r\n\t\t\t} else {\r\n\t\t\t\tthis.props.conversationsDataStore.editExistingTopic(\r\n\t\t\t\t\tthis.props.topicId,\r\n\t\t\t\t\tvalues,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tthis.resetForm();\r\n\t\t});\r\n\t};\r\n\r\n\tsaveFormRef = formRef => {\r\n\t\tthis.formRef = formRef;\r\n\t};\r\n\r\n\thandleChange = value => {\r\n\t\tthis.setState({ value });\r\n\t};\r\n\r\n\thandleStartNewClick = () => {\r\n\t\tconst {\r\n\t\t\taccountOrMembershipRequiredModalContext: {\r\n\t\t\t\tisNonMember,\r\n\t\t\t\tsetIsVisible,\r\n\t\t\t},\r\n\t\t} = this.props;\r\n\t\treturn isNonMember() ? setIsVisible(true) : this.showModal(0);\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { topicId } = this.props;\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t<CollectionCreateForm\r\n\t\t\t\t\twrappedComponentRef={this.saveFormRef}\r\n\t\t\t\t\tvisible={this.state.visible}\r\n\t\t\t\t\tonCancel={this.handleCancel}\r\n\t\t\t\t\tonCreate={this.handleCreate}\r\n\t\t\t\t\tonChange={this.handleChange}\r\n\t\t\t\t\ttopicId={this.state.topicId}\r\n\t\t\t\t\tname={this.state.name}\r\n\t\t\t\t\tvalue={this.state.value}\r\n\t\t\t\t/>\r\n\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t{!topicId || topicId == 0 ? (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"clickable\"\r\n\t\t\t\t\t\t\tonClick={this.handleStartNewClick}>\r\n\t\t\t\t\t\t\t<CommunityButton\r\n\t\t\t\t\t\t\t\ttext=\"Start New\"\r\n\t\t\t\t\t\t\t\ticon=\"icon-plus\"\r\n\t\t\t\t\t\t\t\ticonClass=\"add-new\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"clickable\"\r\n\t\t\t\t\t\t\tonClick={() => this.showModal(topicId, '')}>\r\n\t\t\t\t\t\t\t<div className=\"icon-note-icon edit-icon\" />\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</React.Fragment>\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst connectors = [\r\n\tconnectToUser,\r\n\tconnectToAccountOrMembershipRequiredModalContext,\r\n\tconnectToConversations,\r\n];\r\n\r\nexport default combineConnectors(connectors)(AddEditTopic);\r\n","import React from 'react';\r\nimport { useTranslate } from '@above-the-treeline/localization';\r\nimport UserAvatar from 'treeline-react-core-components/UserAvatar';\r\nimport TitleReview from '../Reviews/TitleReview';\r\n\r\nfunction Review({ review, source, communityId }) {\r\n\tconst { translate } = useTranslate();\r\n\tconst getAltText = () => {\r\n\t\tif (review.product && review.product.name) {\r\n\t\t\treturn translate('review_of_x', {\r\n\t\t\t\ttitleName: review.product.name,\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn translate('title_review');\r\n\t};\r\n\r\n\treturn (\r\n\t\t<TitleReview\r\n\t\t\treview={review}\r\n\t\t\tsource={source}\r\n\t\t\tcommunityId={communityId}\r\n\t\t\tkey={review.appUserId}>\r\n\t\t\t{source === 'user' ? (\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"title-image\"\r\n\t\t\t\t\tstyle={{ marginBottom: '10px', marginRight: '5px' }}>\r\n\t\t\t\t\t<img\r\n\t\t\t\t\t\talt={getAltText()}\r\n\t\t\t\t\t\tsrc={review.productImageUri}\r\n\t\t\t\t\t\tstyle={{ height: '90px' }}\r\n\t\t\t\t\t/>{' '}\r\n\t\t\t\t</div>\r\n\t\t\t) : (\r\n\t\t\t\t<UserAvatar\r\n\t\t\t\t\tdisplayName={review.user.fullName}\r\n\t\t\t\t\tavatarUri={\r\n\t\t\t\t\t\treview.userAvatar.uri ? review.userAvatar.uri : null\r\n\t\t\t\t\t}\r\n\t\t\t\t\tavatarSizeClass={`avatar-medium`}\r\n\t\t\t\t\tuserInitials={review.userAvatar.initials}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</TitleReview>\r\n\t);\r\n}\r\n\r\nexport default Review;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport makeConnectTo from '../../../util/makeConnectTo';\r\nimport api from '../../../../Api';\r\n\r\nconst CatalogFoldersContext = React.createContext();\r\n\r\nconst name = 'catalogFoldersDataStore';\r\n\r\nexport const useCatalogFolders = () => React.useContext(CatalogFoldersContext);\r\n\r\nexport const connectToCatalogFolders = makeConnectTo(\r\n\tCatalogFoldersContext,\r\n\tname,\r\n);\r\n\r\nexport default class CatalogFoldersDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tisLoading: true,\r\n\t\tcatalogFoldersData: {},\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst catalogFoldersDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<CatalogFoldersContext.Provider value={catalogFoldersDataStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(catalogFoldersDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</CatalogFoldersContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchCatalogFolders();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (\r\n\t\t\tthis.catalogFoldersFetch &&\r\n\t\t\ttypeof this.catalogFoldersFetch.cancel === 'function'\r\n\t\t) {\r\n\t\t\tthis.catalogFoldersFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\tisLoading: () => state.isLoading,\r\n\t\trefresh: () => this.refreshCatalogFolders(),\r\n\t\tsaveCatalogFolders: (catalogId, commaSeparatedFolders) =>\r\n\t\t\tthis.saveCatalogFolders(catalogId, commaSeparatedFolders),\r\n\t});\r\n\r\n\trefreshCatalogFolders = () => {\r\n\t\treturn this.fetchCatalogFolders();\r\n\t};\r\n\r\n\tfetchCatalogFolders = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/catalogs/folders`);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.catalogFoldersFetch = request;\r\n\t\treturn this.catalogFoldersFetch.promise;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: false,\r\n\t\t\tcatalogFoldersData: this.createTreeObject(apiResponse),\r\n\t\t});\r\n\t};\r\n\r\n\tcreateTreeObject = res => {\r\n\t\tvar tree = [];\r\n\t\tvar folderMap = [];\r\n\r\n\t\tObject.keys(res.catalogIdsByFolder).forEach((folder, idx) => {\r\n\t\t\tvar primaryNode = {};\r\n\t\t\tprimaryNode.title = folder;\r\n\t\t\tprimaryNode.key = 'pn-' + idx;\r\n\t\t\tvar children = [];\r\n\t\t\tres.catalogIdsByFolder[folder].forEach(catalogId => {\r\n\t\t\t\tconst catalog = res.catalogs.filter(\r\n\t\t\t\t\tc => c.catalogID === catalogId,\r\n\t\t\t\t);\r\n\t\t\t\tvar childNode = {};\r\n\t\t\t\tchildNode.title =\r\n\t\t\t\t\tcatalog.length > 0 ? catalog[0].name : 'Catalog Removed';\r\n\t\t\t\tchildNode.key = catalog.length > 0 ? catalogId : -1;\r\n\t\t\t\tchildren.push(childNode);\r\n\r\n\t\t\t\tif (catalog.length > 0) {\r\n\t\t\t\t\tfolderMap.push({\r\n\t\t\t\t\t\tfolder: folder,\r\n\t\t\t\t\t\tcatalogId: catalogId,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tprimaryNode.children = children;\r\n\t\t\ttree.push(primaryNode);\r\n\t\t});\r\n\r\n\t\tvar catalogFoldersData = {};\r\n\t\tcatalogFoldersData.tree = tree;\r\n\t\tcatalogFoldersData.folderMap = folderMap;\r\n\t\treturn catalogFoldersData;\r\n\t};\r\n\r\n\tsaveCatalogFolders = (catalogId, folders) => {\r\n\t\treturn api\r\n\t\t\t.put(`/api/v1/catalogs/${catalogId}/folders`, folders)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.refreshCatalogFolders();\r\n\t\t\t});\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport { connectToCollections } from '../../Collections/containers/CollectionsDataStore';\r\nimport { connectToTitle } from '../../Title/containers/TitleDataStore';\r\nimport Scroller from '../../UI/Scroller/Scroller';\r\nimport combineConnectors from '../../util/combineConnectors';\r\nimport { connectToShelves } from '../containers/ShelvesDataStore';\r\nimport ShelfType from '../ShelfType';\r\nimport '../stackScroller.css';\r\nimport './shelves.css';\r\n\r\nexport class StackScrollerHorizontal extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { allowMultipleSelections, selectedStack } = this.props;\r\n\t\tconst doHideDivider = !allowMultipleSelections && selectedStack.key;\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"stacks\"\r\n\t\t\t\t\tstyle={{ paddingBottom: '10px', marginTop: '5px' }}>\r\n\t\t\t\t\t<div className=\"shelf-scroller\">\r\n\t\t\t\t\t\t<Scroller>\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t{this.renderShelfBookstop(\r\n\t\t\t\t\t\t\t\t\tShelfType.AnticipatingMild,\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{this.renderShelfBookstop(\r\n\t\t\t\t\t\t\t\t\tShelfType.AnticipatingHigh,\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{this.renderShelfBookstop(\r\n\t\t\t\t\t\t\t\t\tShelfType.CurrentlyReading,\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{this.renderShelfBookstop(\r\n\t\t\t\t\t\t\t\t\tShelfType.FinishedReading,\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{this.renderShelfBookstop(\r\n\t\t\t\t\t\t\t\t\tShelfType.DidntFinish,\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{this.renderShelfBookstop(ShelfType.Favorites)}\r\n\t\t\t\t\t\t\t\t{!doHideDivider && this.renderDivider()}\r\n\t\t\t\t\t\t\t\t{this.renderCollections()}\r\n\t\t\t\t\t\t\t\t{this.props.children}\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t</Scroller>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t}\r\n\r\n\trenderDivider = () => {\r\n\t\treturn (\r\n\t\t\t<div className=\"book-stop-divider\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"icon-chevron-left\"\r\n\t\t\t\t\tstyle={{ marginLeft: '3px' }}\r\n\t\t\t\t/>\r\n\t\t\t\t<div\r\n\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\theight: '105px',\r\n\t\t\t\t\t\toverflow: 'hidden',\r\n\t\t\t\t\t\tmarginTop: '-5px',\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t<div className=\"bookstop-text\">\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"dotDot\"\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\twidth: '100px',\r\n\t\t\t\t\t\t\t\toverflow: 'hidden',\r\n\t\t\t\t\t\t\t\tmarginTop: '10px',\r\n\t\t\t\t\t\t\t\tfontSize: '12px',\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\tSet    •    Custom\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"icon-chevron-right\"\r\n\t\t\t\t\tstyle={{ marginLeft: '3px' }}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\trenderCollections = () => {\r\n\t\tconst { collections } =\r\n\t\t\tthis.props.collectionsDataStore &&\r\n\t\t\tthis.props.collectionsDataStore.state;\r\n\t\treturn (\r\n\t\t\tcollections &&\r\n\t\t\tcollections.length > 0 &&\r\n\t\t\tcollections.map((collection, idx) => (\r\n\t\t\t\t<React.Fragment key={`${collection.catalogID}-${idx}`}>\r\n\t\t\t\t\t{this.renderStack(\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tcollection.name,\r\n\t\t\t\t\t\tcollection.titleCount,\r\n\t\t\t\t\t\t'collection',\r\n\t\t\t\t\t\tcollection.catalogID,\r\n\t\t\t\t\t)}\r\n\t\t\t\t</React.Fragment>\r\n\t\t\t))\r\n\t\t);\r\n\t};\r\n\r\n\trenderShelfBookstop = shelfType => {\r\n\t\tconst { shelves } =\r\n\t\t\tthis.props.shelvesDataStore && this.props.shelvesDataStore.state;\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t{this.renderStack(\r\n\t\t\t\t\tshelfType.icon,\r\n\t\t\t\t\tshelfType.text,\r\n\t\t\t\t\tshelves &&\r\n\t\t\t\t\t\tshelves.filter(sh => sh.shelf === shelfType.key).length,\r\n\t\t\t\t\t'shelf',\r\n\t\t\t\t\tshelfType.key,\r\n\t\t\t\t)}\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\trenderStack = (icon, name, count, stackType, key) => {\r\n\t\tconst { allowMultipleSelections, selectedStack } = this.props;\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\tconst isSelected = this.getIsSelected(stackType, key);\r\n\t\tconst doHideStack =\r\n\t\t\t!allowMultipleSelections && !isSelected && selectedStack.key;\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t{!doHideStack && (\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\t\tthis.clickStack(isSelected, stackType, key)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tclassName={`clickable ${\r\n\t\t\t\t\t\t\t!isMobile\r\n\t\t\t\t\t\t\t\t? 'book-stop-frame'\r\n\t\t\t\t\t\t\t\t: 'book-stop-frame-mobile'\r\n\t\t\t\t\t\t} ${isSelected && 'selected-frame'}`}>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName={`bookstop-area bookstop-${stackType}${\r\n\t\t\t\t\t\t\t\tisSelected ? '-selected' : ''\r\n\t\t\t\t\t\t\t}`}>\r\n\t\t\t\t\t\t\t<div className=\"bookstop-inner\">\r\n\t\t\t\t\t\t\t\t<div className=\"stack-title-count\">\r\n\t\t\t\t\t\t\t\t\t{count ? count : '-'}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t{icon && (\r\n\t\t\t\t\t\t\t\t\t<div className={`${icon} stacks-icon`} />\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\tclassName=\"relative\"\r\n\t\t\t\t\t\t\t\t\tstyle={{ height: '110px' }}>\r\n\t\t\t\t\t\t\t\t\t<div className=\"bookstop-text\">\r\n\t\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"dotDot\"\r\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: `${\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon ? '100px' : '118px'\r\n\t\t\t\t\t\t\t\t\t\t\t\t}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\toverflow: 'hidden',\r\n\t\t\t\t\t\t\t\t\t\t\t\tmarginTop: '10px',\r\n\t\t\t\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t\t\t{name}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t};\r\n\r\n\tgetIsSelected = (stackType, key) => {\r\n\t\tconst { selectedStack, selectedStacks, sku } = this.props;\r\n\t\tif (sku) {\r\n\t\t\tif (stackType === 'shelf') {\r\n\t\t\t\tconst { shelves } = this.props.shelvesDataStore.state;\r\n\t\t\t\treturn (\r\n\t\t\t\t\tshelves &&\r\n\t\t\t\t\tshelves.length > 0 &&\r\n\t\t\t\t\tshelves.filter(sh => sh.sku === sku && sh.shelf === key)\r\n\t\t\t\t\t\t.length > 0\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tconst {\r\n\t\t\t\t\tisCollectionDataLoading,\r\n\t\t\t\t\tcollections,\r\n\t\t\t\t} = this.props.titleDataStore.state;\r\n\t\t\t\treturn (\r\n\t\t\t\t\t!isCollectionDataLoading &&\r\n\t\t\t\t\tcollections &&\r\n\t\t\t\t\tcollections.filter(\r\n\t\t\t\t\t\tcl => cl.hasFlaggedTitle && cl.catalogID === key,\r\n\t\t\t\t\t).length > 0\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t(selectedStacks &&\r\n\t\t\t\t\tselectedStacks.filter(\r\n\t\t\t\t\t\tst => st.stackType === stackType && st.key === key,\r\n\t\t\t\t\t).length > 0) ||\r\n\t\t\t\t(selectedStack &&\r\n\t\t\t\t\tselectedStack.stackType === stackType &&\r\n\t\t\t\t\tselectedStack.key === key)\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tclickStack = (isSelected, stackType, key) => {\r\n\t\tif (isSelected) {\r\n\t\t\tthis.removeStack(stackType, key);\r\n\t\t} else {\r\n\t\t\tthis.addStack(stackType, key);\r\n\t\t}\r\n\t};\r\n\r\n\taddStack = (stackType, key) => {\r\n\t\tconst { allowMultipleSelections } = this.props;\r\n\t\tif (allowMultipleSelections) {\r\n\t\t\tvar selectedStacks = this.props.selectedStacks;\r\n\t\t\tif (stackType === 'shelf') {\r\n\t\t\t\tselectedStacks = selectedStacks.filter(\r\n\t\t\t\t\taf => af.stackType !== stackType,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tvar thisStack = {};\r\n\t\t\tthisStack.stackType = stackType;\r\n\t\t\tthisStack.key = key;\r\n\t\t\tselectedStacks.push({\r\n\t\t\t\tthisStack,\r\n\t\t\t});\r\n\t\t\tthis.props.processStackClick(selectedStacks, thisStack, 'add');\r\n\t\t} else {\r\n\t\t\tvar selectedStack = {};\r\n\t\t\tselectedStack.stackType = stackType;\r\n\t\t\tselectedStack.key = key;\r\n\t\t\tthis.props.processStackClick(selectedStack);\r\n\t\t}\r\n\t};\r\n\r\n\tremoveStack = (stackType, key) => {\r\n\t\tconst { allowMultipleSelections } = this.props;\r\n\t\tif (allowMultipleSelections) {\r\n\t\t\tconst selectedStacks = this.props.selectedStacks;\r\n\t\t\tconst newSelectedStacks = selectedStacks.filter(\r\n\t\t\t\taf =>\r\n\t\t\t\t\taf.stackType != stackType ||\r\n\t\t\t\t\t(af.stackType == stackType && af.key != key),\r\n\t\t\t);\r\n\t\t\tvar thisStack = {};\r\n\t\t\tthisStack.stackType = stackType;\r\n\t\t\tthisStack.key = key;\r\n\t\t\tthis.props.processStackClick(\r\n\t\t\t\tnewSelectedStacks,\r\n\t\t\t\tthisStack,\r\n\t\t\t\t'remove',\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tthis.props.processStackClick();\r\n\t\t}\r\n\t};\r\n\r\n\ttoggleShelfForSingleSku = thisShelf => {\r\n\t\tthis.setState({ selectedShelf: thisShelf });\r\n\t\tvar skus = [];\r\n\t\tskus.push(this.props.sku);\r\n\t\tthis.props.shelvesDataStore.setShelves(skus, thisShelf);\r\n\t};\r\n}\r\n\r\nconst connectors = [connectToShelves, connectToCollections, connectToTitle];\r\n\r\nexport default combineConnectors(connectors)(\r\n\twithIsMobile(StackScrollerHorizontal),\r\n);\r\n","import React, { useContext, createContext } from 'react';\r\nimport paths from '../../../../paths';\r\nimport { useUser } from '../../../User/containers/UserDataStore';\r\nimport makeConnectTo from '../../../util/makeConnectTo';\r\nimport { RegistrationTypes } from '../../AnonymousHeader/RegistrationModal/RegistrationEnums';\r\n\r\nconst RegistrationModal = createContext();\r\n\r\nconst name = 'accountOrMembershipRequiredModalContext';\r\n\r\nexport const useAccountOrMembershipRequiredModalContext = () =>\r\n\tuseContext(RegistrationModal);\r\n\r\nexport const connectToAccountOrMembershipRequiredModalContext = makeConnectTo(\r\n\tRegistrationModal,\r\n\tname,\r\n);\r\n\r\nexport default function AccountOrMembershipRequiredModalContext({ children }) {\r\n\tconst [isVisible, setIsVisible] = React.useState(false);\r\n\tconst [pathForRedirect, setPathForRedirect] = React.useState(\r\n\t\twindow.location.pathname.includes('reset-password')\r\n\t\t\t? paths.home()\r\n\t\t\t: null,\r\n\t);\r\n\tconst [type, setType] = React.useState(RegistrationTypes.SignUp);\r\n\tconst [community, setCommunity] = React.useState({});\r\n\tconst { isAnonymous } = useUser();\r\n\r\n\tconst isNonMember = () =>\r\n\t\tObject.keys(community).length > 0 || isAnonymous();\r\n\r\n\tconst accountOrMembershipRequiredModalContext = () => ({\r\n\t\tisVisible,\r\n\t\tpathForRedirect,\r\n\t\ttype,\r\n\t\tcommunity,\r\n\t\tsetIsVisible,\r\n\t\tsetPathForRedirect,\r\n\t\tsetType,\r\n\t\tsetCommunity,\r\n\t\tisNonMember,\r\n\t});\r\n\r\n\treturn (\r\n\t\t<RegistrationModal.Provider\r\n\t\t\tvalue={accountOrMembershipRequiredModalContext()}>\r\n\t\t\t{children}\r\n\t\t</RegistrationModal.Provider>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport { notification } from 'antd';\r\nimport { connectToCollectionTitles } from './CollectionTitlesDataStore';\r\n\r\nconst CatalogContext = React.createContext();\r\n\r\nconst name = 'catalogStore';\r\n\r\nexport const connectToCatalog = makeConnectTo(CatalogContext, name);\r\n\r\nexport class CatalogDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tcatalogId: PropTypes.string.isRequired,\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\tisLoading: true,\r\n\t\tcatalogData: null,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst catalogStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<CatalogContext.Provider value={catalogStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(catalogStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</CatalogContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchCatalog();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (\r\n\t\t\tthis.catalogFetch &&\r\n\t\t\ttypeof this.catalogFetch.cancel === 'function'\r\n\t\t) {\r\n\t\t\tthis.catalogFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\tisLoading: () => state.isLoading,\r\n\t\tgetCatalog: () => (state.catalogData ? state.catalogData.catalog : {}),\r\n\t\trefresh: () => this.refreshCatalog(),\r\n\t\teditExistingCollection: (fieldName, values) =>\r\n\t\t\tthis.editExistingCollection(fieldName, values),\r\n\t\tdeleteCollection: () => this.deleteCollection(),\r\n\t\tresequenceCollection: skus => this.resequenceCollection(skus),\r\n\t\tremoveTitlesFromCollection: skus =>\r\n\t\t\tthis.removeTitlesFromCollection(skus),\r\n\t\taddTitlesToCollection: skus => this.addTitlesToCollection(skus),\r\n\t});\r\n\r\n\trefreshCatalog = () => {\r\n\t\treturn this.fetchCatalog();\r\n\t};\r\n\r\n\tfetchCatalog = () => {\r\n\t\tconst { catalogId } = this.props;\r\n\t\tconst request = api.cancelableGet(`/api/v1/catalogs/${catalogId}`);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.catalogFetch = request;\r\n\t\treturn this.catalogFetch.promise;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tthis.setState({ isLoading: false, catalogData: apiResponse });\r\n\t};\r\n\r\n\teditExistingCollection = (fieldName, value) => {\r\n\t\treturn api\r\n\t\t\t.put(\r\n\t\t\t\t`/api/v1/catalogs/${this.props.catalogId}/${fieldName}`,\r\n\t\t\t\tencodeURIComponent(value),\r\n\t\t\t)\r\n\t\t\t.then(() => {\r\n\t\t\t\treturn this.refreshCatalog();\r\n\t\t\t});\r\n\t};\r\n\r\n\tdeleteCollection() {\r\n\t\tconst endpoint = `/api/v1/catalogs/${this.props.catalogId}`;\r\n\t\treturn api.call('DELETE', endpoint).then(() => {\r\n\t\t\tnotification.success({\r\n\t\t\t\tmessage: `Successfully deleted this collection`,\r\n\t\t\t});\r\n\t\t\treturn this.refreshCatalog();\r\n\t\t});\r\n\t}\r\n\r\n\tresequenceCollection = skus => {\r\n\t\tconst endpoint = `/api/v1/catalogs/${this.props.catalogId}/titles/resequence`;\r\n\t\treturn api.call('PUT', endpoint, skus).then(() => {\r\n\t\t\tthis.props.collectionTitlesDataStore.refresh();\r\n\t\t\treturn this.refreshCatalog();\r\n\t\t});\r\n\t};\r\n\r\n\tremoveTitlesFromCollection = skus => {\r\n\t\tconst endpoint = `/api/v1/catalogs/${this.props.catalogId}/titles`;\r\n\t\treturn api.call('DELETE', endpoint, skus).then(() => {\r\n\t\t\tthis.props.collectionTitlesDataStore && this.props.collectionTitlesDataStore.refresh();\r\n\t\t\treturn this.refreshCatalog();\r\n\t\t});\r\n\t};\r\n\r\n\taddTitlesToCollection = skus => {\r\n\t\tconst endpoint = `/api/v1/catalogs/${this.props.catalogId}/titles`;\r\n\t\treturn api.call('PUT', endpoint, skus).then(() => {\r\n\t\t\tthis.props.collectionTitlesDataStore && this.props.collectionTitlesDataStore.refresh();\r\n\t\t\treturn this.refreshCatalog();\r\n\t\t});\r\n\t};\r\n}\r\n\r\nexport default connectToCollectionTitles(CatalogDataStore);\r\n","import { Button } from 'antd';\r\nimport paths from './../../../paths';\r\nimport { useTranslate } from '@above-the-treeline/localization';\r\n\r\nexport default function BackToHomeButton({\r\n\tclassName = 'back-to-home-button',\r\n}): JSX.Element {\r\n\tconst { translate } = useTranslate();\r\n\tconst handleClick = (): void => {\r\n\t\twindow.location.href = paths.home();\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Button\r\n\t\t\tonClick={handleClick}\r\n\t\t\ttype=\"primary\"\r\n\t\t\tclassName={`orange-ant-btn ${className}`}>\r\n\t\t\t{translate ? translate('back_to_home') : 'Back to Home'}\r\n\t\t</Button>\r\n\t);\r\n}\r\n","const combineConnectors = connectors => Component => {\r\n\treturn connectors.reduce((WrappedComponent, connect) => {\r\n\t\treturn connect(WrappedComponent);\r\n\t}, Component);\r\n};\r\n\r\nexport default combineConnectors;\r\n","import TitlePubDateType from '../components/Title/TitlePubDateType';\r\n\r\n/**\r\n *\r\n * @param {Number} num\r\n * @param {String} label\r\n * Converts given label into plural if applicable\r\n */\r\nexport const toPlural = (num, label) => {\r\n\tconst n = typeof num === 'number' ? num : Number(num);\r\n\r\n\tconst base = `${n.toLocaleString()} ${label}`;\r\n\r\n\treturn n === 1 ? base : `${base}s`;\r\n};\r\n\r\nexport const formatAsDollarValue = value => {\r\n\tif (!value) return '$ 0';\r\n\tconst val = typeof value === 'number' ? value.toString() : value;\r\n\treturn `$ ${val}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n};\r\n\r\n/**\r\n *\r\n * @param {Array} sourceArray\r\n * @param {String} property\r\n * @returns {Object}\r\n * Creates a map of array items by the found values of the given 'property'\r\n */\r\nexport const groupBy = (sourceArray, property) => {\r\n\treturn sourceArray.reduce((accumulator, nextItemInSourceArray) => {\r\n\t\tconst valueAtProperty = nextItemInSourceArray[property];\r\n\r\n\t\tif (!accumulator[valueAtProperty]) {\r\n\t\t\taccumulator[valueAtProperty] = [];\r\n\t\t}\r\n\r\n\t\taccumulator[valueAtProperty].push(nextItemInSourceArray);\r\n\t\treturn accumulator;\r\n\t}, {});\r\n};\r\n\r\n/**\r\n *\r\n * @param {Object} apiResponse\r\n * @returns {Object}\r\n * Creates a map of array items by the found values of the given 'property'\r\n */\r\nexport const createTitleObject = apiResponse => {\r\n\tconst {\r\n\t\tproducts,\r\n\t\tdigitalCopyInfo,\r\n\t\tdownloadableSkus,\r\n\t\trequestablePrcSkus,\r\n\t\trequestableSkus,\r\n\t\tuserCommunitySummaryReviews,\r\n\t\tsharedMarkupNotes,\r\n\t\treviews,\r\n\t\tdownloads,\r\n\t\trequests,\r\n\t\tshelves,\r\n\t} = apiResponse;\r\n\tif (products) {\r\n\t\treturn products.map((product, idx) => {\r\n\t\t\tconst availableReviewCopyFormats = digitalCopyInfo\r\n\t\t\t\t? digitalCopyInfo.filter(dci => dci.sku === product.sku)\r\n\t\t\t\t: [];\r\n\r\n\t\t\tif (\r\n\t\t\t\tavailableReviewCopyFormats &&\r\n\t\t\t\tavailableReviewCopyFormats.length &&\r\n\t\t\t\tavailableReviewCopyFormats[0]\r\n\t\t\t) {\r\n\t\t\t\tvar availableReviewCopyFormat = availableReviewCopyFormats[0];\r\n\t\t\t\tproduct.digitalCreatedDate =\r\n\t\t\t\t\tavailableReviewCopyFormat.createdDate;\r\n\t\t\t\tproduct.digitalUpdatedDate =\r\n\t\t\t\t\tavailableReviewCopyFormat.updatedDate;\r\n\t\t\t}\r\n\r\n\t\t\tconst isRequestable =\r\n\t\t\t\trequestableSkus &&\r\n\t\t\t\trequestableSkus.filter(rs => rs === product.sku)[0];\r\n\t\t\tconst isDownloadable =\r\n\t\t\t\tdownloadableSkus &&\r\n\t\t\t\tdownloadableSkus.filter(dl => dl === product.sku)[0];\r\n\r\n\t\t\tproduct.reviewCopyAvailability = isDownloadable\r\n\t\t\t\t? 'Available for Download'\r\n\t\t\t\t: isRequestable\r\n\t\t\t\t? 'Available for Request'\r\n\t\t\t\t: 'Review Copy Not Available';\r\n\t\t\tconst isPrcRequestable =\r\n\t\t\t\trequestablePrcSkus &&\r\n\t\t\t\trequestablePrcSkus.filter(sku => sku === product.sku)[0];\r\n\t\t\tconst markupNotes =\r\n\t\t\t\tsharedMarkupNotes &&\r\n\t\t\t\tsharedMarkupNotes.filter(n => n.value && n.sku === product.sku);\r\n\t\t\tconst csr =\r\n\t\t\t\tuserCommunitySummaryReviews &&\r\n\t\t\t\tuserCommunitySummaryReviews.filter(\r\n\t\t\t\t\tcsr => csr.sku === product.sku,\r\n\t\t\t\t);\r\n\t\t\tvar communityReviews = 0;\r\n\t\t\tvar average = 0;\r\n\t\t\tvar pubDatePeriod = '';\r\n\t\t\tif (csr && csr.length > 0) {\r\n\t\t\t\tcommunityReviews = csr[0].count;\r\n\t\t\t\taverage = csr[0].rating && csr[0].rating.toFixed(1);\r\n\t\t\t}\r\n\t\t\tpubDatePeriod = getPubDatePeriod(product.pubDate);\r\n\t\t\tproduct.markupNotes =\r\n\t\t\t\tmarkupNotes && markupNotes.length > 0 && markupNotes;\r\n\t\t\tproduct.markupNoteIndicator =\r\n\t\t\t\tmarkupNotes && markupNotes.length > 0\r\n\t\t\t\t\t? 'Has Markup Note'\r\n\t\t\t\t\t: 'No Markup Note';\r\n\t\t\tproduct.sequence = idx;\r\n\t\t\tproduct.key = product.sku;\r\n\t\t\tproduct.reviews = communityReviews;\r\n\t\t\tproduct.average = average;\r\n\t\t\tproduct.pubDatePeriod = pubDatePeriod;\r\n\t\t\tproduct.pubDatePeriodDisplay = TitlePubDateType[pubDatePeriod]\r\n\t\t\t\t? TitlePubDateType[pubDatePeriod].label\r\n\t\t\t\t: 'Unknown';\r\n\t\t\tconst review =\r\n\t\t\t\treviews && reviews.filter(rev => rev.sku === product.sku)[0];\r\n\t\t\tconst download =\r\n\t\t\t\tdownloads &&\r\n\t\t\t\tdownloads.filter(rev => rev.sku === product.sku)[0];\r\n\t\t\tconst request =\r\n\t\t\t\trequests && requests.filter(rev => rev.sku === product.sku)[0];\r\n\t\t\tconst shelf =\r\n\t\t\t\tshelves && shelves.filter(she => she.sku === product.sku)[0];\r\n\t\t\treturn {\r\n\t\t\t\t...product,\r\n\t\t\t\tproduct,\r\n\t\t\t\t...review,\r\n\t\t\t\t...download,\r\n\t\t\t\t...request,\r\n\t\t\t\t...shelf,\r\n\t\t\t\tisPrcRequestable,\r\n\t\t\t\tisRequestable,\r\n\t\t\t\tisDownloadable,\r\n\t\t\t\tavailableReviewCopyFormats,\r\n\t\t\t\turi:\r\n\t\t\t\t\tproduct &&\r\n\t\t\t\t\tproduct.images &&\r\n\t\t\t\t\tproduct.images.filter(im => im.type === 'jacketCover')\r\n\t\t\t\t\t\t.length > 0 &&\r\n\t\t\t\t\tproduct.images.filter(im => im.type === 'jacketCover')[0]\r\n\t\t\t\t\t\t.uri + '?height=450',\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n};\r\n\r\nconst getPubDatePeriod = pubDate => {\r\n\tvar pubDatePeriod = '';\r\n\tvar titlePubDate = new Date(pubDate);\r\n\tObject.keys(TitlePubDateType).map(listType => {\r\n\t\tvar today = new Date();\r\n\t\tconst lowEnd = new Date(\r\n\t\t\ttoday.setMonth(\r\n\t\t\t\ttoday.getMonth() + TitlePubDateType[listType].monthsFrom,\r\n\t\t\t),\r\n\t\t);\r\n\t\ttoday = new Date();\r\n\t\tconst highEnd = new Date(\r\n\t\t\ttoday.setMonth(\r\n\t\t\t\ttoday.getMonth() + TitlePubDateType[listType].monthsTo,\r\n\t\t\t),\r\n\t\t);\r\n\t\tif (titlePubDate > lowEnd && titlePubDate <= highEnd) {\r\n\t\t\tpubDatePeriod = TitlePubDateType[listType].key;\r\n\t\t}\r\n\t});\r\n\treturn pubDatePeriod;\r\n};\r\n","export const RatingType = {\r\n\twritingQuality: 2,\r\n\timageIllustrationQuality: 3,\r\n\tcharacterDevelopment: 4,\r\n\tcouldntPutItDownness: 5,\r\n\tintellectualDepth: 6,\r\n\toriginality: 7,\r\n\toverall: 9,\r\n\tnone: -1,\r\n};\r\n","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport CustomShowMoreText from './CustomShowMoreText/CustomShowMoreText';\r\nimport './laneContainer.less';\r\n\r\nfunction LaneContainer({\r\n\tmajorHeader,\r\n\tdescription,\r\n\textra,\r\n\ticon,\r\n\tstyle,\r\n\tbackgroundClass,\r\n\trenderIcon,\r\n\textraFooter,\r\n\tisMobile,\r\n\tchildren,\r\n}) {\r\n\tconst isMobileSize = isMobile();\r\n\r\n\tconst getClassNames = () => {\r\n\t\treturn classNames('lane-container', {\r\n\t\t\t[backgroundClass]: backgroundClass,\r\n\t\t});\r\n\t};\r\n\r\n\tconst renderLaneFooterExtra = () => {\r\n\t\treturn extraFooter && <div className=\"extra-footer\">{extraFooter}</div>;\r\n\t};\r\n\r\n\tconst renderLaneHeaders = () => {\r\n\t\tif (majorHeader) {\r\n\t\t\treturn (\r\n\t\t\t\t<div className=\"lane-headers\">\r\n\t\t\t\t\t<div className=\"lane-primary\">\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName={`${\r\n\t\t\t\t\t\t\t\t\t!isMobileSize\r\n\t\t\t\t\t\t\t\t\t\t? 'lane-primary-header'\r\n\t\t\t\t\t\t\t\t\t\t: 'lane-primary-header-mobile'\r\n\t\t\t\t\t\t\t\t}`}>\r\n\t\t\t\t\t\t\t\t{getLanePrimaryHeader(majorHeader, icon)}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{extra && <div className=\"extra\">{extra}</div>}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t{description && (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName={`${\r\n\t\t\t\t\t\t\t\t!isMobileSize\r\n\t\t\t\t\t\t\t\t\t? 'lane-description'\r\n\t\t\t\t\t\t\t\t\t: 'lane-description-mobile'\r\n\t\t\t\t\t\t\t}`}>\r\n\t\t\t\t\t\t\t<CustomShowMoreText lines={1} text={description} />\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn <React.Fragment />;\r\n\t\t}\r\n\t};\r\n\r\n\tconst getLanePrimaryHeader = (headerValue, icon) => {\r\n\t\tif ((!icon && !renderIcon) || isMobileSize) {\r\n\t\t\treturn <span>{headerValue}</span>;\r\n\t\t}\r\n\r\n\t\tconst renderFontasticIcon = () => {\r\n\t\t\treturn <div className={`icon-${icon} major-header-icon-large`} />;\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t{typeof renderIcon === 'function' ? (\r\n\t\t\t\t\t<div className=\"major-header-icon-large\">\r\n\t\t\t\t\t\t{renderIcon()}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t) : (\r\n\t\t\t\t\trenderFontasticIcon()\r\n\t\t\t\t)}\r\n\t\t\t\t<div className=\"column-spaced\">\r\n\t\t\t\t\t<span className=\"major-header\">{headerValue}</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div className=\"clear\" />\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className={getClassNames()} style={style}>\r\n\t\t\t<div className=\"page-container\">\r\n\t\t\t\t<div style={{ padding: '0.5rem 0' }}>\r\n\t\t\t\t\t{renderLaneHeaders()}\r\n\t\t\t\t\t{children}\r\n\t\t\t\t\t{renderLaneFooterExtra()}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(LaneContainer);\r\n","import * as React from 'react';\r\nimport { Modal } from 'antd';\r\nimport WrappedRegistrationForm from './RegistrationForm/RegistrationForm';\r\nimport RegistrationModalLinks from './RegistrationModalLinks/RegistrationModalLinks';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport './registrationModal.less';\r\nimport RegistrationDataStore from '../../../Registration/containers/RegistrationDataStore';\r\n\r\ntype RegistrationModalProps = {\r\n\tmodalTitle: string;\r\n\tisVisible: boolean;\r\n\tsetIsVisible: (isVisible: boolean) => void;\r\n\ttype: string;\r\n\tsetType: (type: string) => void;\r\n};\r\n\r\nexport default function RegistrationModal({\r\n\tmodalTitle,\r\n\tisVisible,\r\n\tsetIsVisible,\r\n\ttype,\r\n\tsetType,\r\n}: RegistrationModalProps) {\r\n\tconst [isLoading, setIsLoading] = React.useState(false);\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\ttitle={<Translate id={modalTitle} />}\r\n\t\t\tdestroyOnClose={true}\r\n\t\t\tvisible={isVisible}\r\n\t\t\tonCancel={() => setIsVisible(false)}\r\n\t\t\tfooter={null}\r\n\t\t\twrapClassName=\"registration-modal\">\r\n\t\t\t<RegistrationDataStore>\r\n\t\t\t\t<WrappedRegistrationForm\r\n\t\t\t\t\ttype={type}\r\n\t\t\t\t\tisLoading={isLoading}\r\n\t\t\t\t\tsetIsLoading={setIsLoading}\r\n\t\t\t\t/>\r\n\t\t\t</RegistrationDataStore>\r\n\t\t\t{!isLoading && (\r\n\t\t\t\t<RegistrationModalLinks setType={setType} type={type} />\r\n\t\t\t)}\r\n\t\t</Modal>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport api from '../../Api';\r\n\r\nconst useCategoryFilters = () => {\r\n\tconst [categoryFilters, setCategoryFilters] = React.useState([]);\r\n\tconst [isLoading, setIsLoading] = React.useState(true);\r\n\tlet request;\r\n\r\n\tconst saveCategoryFilters = data => {\r\n\t\tsetCategoryFilters(data);\r\n\t\tsetIsLoading(false);\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\tconst fetchCategoryFilters = async () => {\r\n\t\t\ttry {\r\n\t\t\t\trequest = api.cancelableGet(\r\n\t\t\t\t\t'/api/v1/affiliations/categoryFilterOptions',\r\n\t\t\t\t);\r\n\t\t\t\tconst categoryFilters = await request.promise;\r\n\t\t\t\tsaveCategoryFilters(categoryFilters);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.error(e);\r\n\t\t\t\tsetIsLoading(false);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfetchCategoryFilters();\r\n\r\n\t\treturn () => {\r\n\t\t\tapi.revoke(request);\r\n\t\t};\r\n\t}, []);\r\n\r\n\treturn { categoryFilters, isLoading };\r\n};\r\n\r\nexport default useCategoryFilters;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './saveAndCancelButtons.less';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport { Button } from 'antd';\r\n\r\nSaveAndCancelButtons.propTypes = {\r\n\tonSave: PropTypes.func,\r\n\tonCancel: PropTypes.func,\r\n};\r\n\r\nfunction SaveAndCancelButtons({ onSave, onCancel }) {\r\n\treturn (\r\n\t\t<div className=\"save-and-cancel-buttons\">\r\n\t\t\t<Button size=\"small\" onClick={onSave}>\r\n\t\t\t\t<Translate id=\"save\" />\r\n\t\t\t</Button>\r\n\t\t\t<Button size=\"small\" onClick={onCancel}>\r\n\t\t\t\t<Translate id=\"cancel\" />\r\n\t\t\t</Button>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default SaveAndCancelButtons;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BrowseFilterDisplay from '../UI/BrowseFilterDisplay';\r\n\r\nActiveFilters.propTypes = {\r\n\tactiveCategories: PropTypes.array,\r\n\tremoveFilter: PropTypes.func,\r\n\tchangeExclusion: PropTypes.func,\r\n};\r\n\r\nfunction ActiveFilters({ activeCategories, removeFilter, changeExclusion }) {\r\n\treturn (\r\n\t\t<div className=\"active-category-filters\">\r\n\t\t\t{activeCategories.map((category, idx) => (\r\n\t\t\t\t<div className=\"tag-root relative\" key={idx}>\r\n\t\t\t\t\t<BrowseFilterDisplay\r\n\t\t\t\t\t\tlabel={category.label}\r\n\t\t\t\t\t\tvalue={category.value}\r\n\t\t\t\t\t\tisExclusion={category.isExclusion}\r\n\t\t\t\t\t\tidx={idx}\r\n\t\t\t\t\t\tisEditable={true}\r\n\t\t\t\t\t\tremoveFilter={removeFilter}\r\n\t\t\t\t\t\tchangeExclusion={changeExclusion}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t))}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default ActiveFilters;\r\n","const PubDateTypes = {\r\n\tall: {\r\n\t\tkey: 0,\r\n\t\tlabel: 'None',\r\n\t},\r\n\tfrontlist: {\r\n\t\tkey: 1,\r\n\t\tlabel: 'Frontlist',\r\n\t},\r\n\tbacklist: {\r\n\t\tkey: 2,\r\n\t\tlabel: 'Backlist',\r\n\t},\r\n\trelativeTimeframe: {\r\n\t\tkey: 3,\r\n\t\tlabel: 'Relative Timeframe',\r\n\t},\r\n\tabsoluteTimeframe: {\r\n\t\tkey: 4,\r\n\t\tlabel: 'Absolute Timeframe',\r\n\t},\r\n};\r\n\r\nexport default PubDateTypes;\r\n","import { Radio, Select, DatePicker } from 'antd';\r\nimport moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport LoadingSpinnerInContainer from '../../UI/LoadingSpinnerInContainer/LoadingSpinnerInContainer';\r\nimport PubDateTypes from '../PubDateTypes';\r\nimport SaveAndCancelButtons from '../../Community/UI/SaveAndCancelButtons/SaveAndCancelButtons';\r\nimport BrowseLaneType from './BrowseLaneType';\r\nimport PubDateFromOptions from '../PubDateFromOptions';\r\nimport PubDateToOptions from '../PubDateToOptions';\r\nimport {\r\n\tgetRelativeTimeframeAttributes,\r\n\tgetBrowseFiltersByType,\r\n} from '../../Community/util';\r\nimport { useSavedFilters } from '../containers/SavedFiltersDataStore';\r\nimport { useSavedFilter } from '../containers/SavedFilterDataStore';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport { LoadingSpinnerSize } from '../../UI/LoadingSpinner';\r\n\r\nconst { Option } = Select;\r\n\r\nconst { RangePicker } = DatePicker;\r\n\r\nconst dateFormat = 'MM/DD/YYYY';\r\n\r\nAddEditPubDateFilter.propTypes = {\r\n\tbrowseRefinements: PropTypes.array,\r\n\tviewId: PropTypes.number,\r\n\tleaveEditMode: PropTypes.func,\r\n\tisMobile: PropTypes.func,\r\n};\r\n\r\nfunction AddEditPubDateFilter({\r\n\tbrowseRefinements,\r\n\tviewId,\r\n\tleaveEditMode,\r\n\tisMobile,\r\n}) {\r\n\tconst isMobileSize = isMobile();\r\n\tconst [selectedPubDateType, setSelectedPubDateType] = React.useState(\r\n\t\tPubDateTypes['all'].key,\r\n\t);\r\n\tconst [isLoading, setIsLoading] = React.useState(true);\r\n\tconst [startingRange, setStartingRange] = React.useState('NOW/DAY');\r\n\tconst [endingRange, setEndingRange] = React.useState('+14DAY]');\r\n\tconst [startingDate, setStartingDate] = React.useState(new Date());\r\n\tconst [endingDate, setEndingDate] = React.useState(\r\n\t\tnew Date(new Date().setMonth(new Date().getMonth() + 1)),\r\n\t);\r\n\r\n\tconst savedFiltersDataStore = useSavedFilters();\r\n\tconst savedFilterDataStore = useSavedFilter();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tgetSavedPubDateType();\r\n\t}, []);\r\n\r\n\tconst onPubDateTypeChange = e => {\r\n\t\tsetSelectedPubDateType(e.target.value);\r\n\t};\r\n\r\n\tconst pubDateFilter =\r\n\t\tbrowseRefinements &&\r\n\t\tbrowseRefinements.find(\r\n\t\t\tbr => br.browseLaneType === BrowseLaneType.PubDate.key,\r\n\t\t);\r\n\r\n\tconst getCodeAttributeToSave = () => {\r\n\t\tswitch (selectedPubDateType) {\r\n\t\t\tcase PubDateTypes['frontlist'].key:\r\n\t\t\t\treturn 'frontlist';\r\n\t\t\tcase PubDateTypes['backlist'].key:\r\n\t\t\t\treturn 'backlist';\r\n\t\t\tcase PubDateTypes['relativeTimeframe'].key:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t'[' +\r\n\t\t\t\t\tstartingRange +\r\n\t\t\t\t\t' TO ' +\r\n\t\t\t\t\tstartingRange +\r\n\t\t\t\t\t'|' +\r\n\t\t\t\t\tendingRange\r\n\t\t\t\t);\r\n\t\t\tcase PubDateTypes['absoluteTimeframe'].key:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t'[' +\r\n\t\t\t\t\tgetFormattedDate(startingDate) +\r\n\t\t\t\t\t' TO ' +\r\n\t\t\t\t\tgetFormattedDate(endingDate) +\r\n\t\t\t\t\t']'\r\n\t\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tconst getFormattedDate = date => {\r\n\t\tdate = new Date(date);\r\n\t\tvar year = date.getFullYear();\r\n\r\n\t\tvar month = (1 + date.getMonth()).toString();\r\n\t\tmonth = month.length > 1 ? month : '0' + month;\r\n\r\n\t\tvar day = date.getDate().toString();\r\n\t\tday = day.length > 1 ? day : '0' + day;\r\n\r\n\t\treturn year + '-' + month + '-' + day + 'T04:00:00.000Z';\r\n\t};\r\n\r\n\tconst saveFilters = () => {\r\n\t\tvar { savedFilters } = savedFiltersDataStore.state;\r\n\t\tvar thisSavedFilter = savedFilters.filter(sf => sf.id === viewId)[0];\r\n\t\tif (selectedPubDateType === PubDateTypes['all'].key) {\r\n\t\t\tthisSavedFilter.browseRefinements = thisSavedFilter.browseRefinements.filter(\r\n\t\t\t\ttsf => tsf.browseLaneType !== BrowseLaneType.PubDate.key,\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tif (pubDateFilter) {\r\n\t\t\t\tvar thisRefinement = thisSavedFilter.browseRefinements.filter(\r\n\t\t\t\t\ttsf => tsf.browseLaneType === BrowseLaneType.PubDate.key,\r\n\t\t\t\t)[0];\r\n\t\t\t\tthisRefinement.code = getCodeAttributeToSave();\r\n\t\t\t} else {\r\n\t\t\t\tvar newRefinement = {\r\n\t\t\t\t\tviewId: viewId,\r\n\t\t\t\t\tbrowseLaneType: BrowseLaneType.PubDate.key,\r\n\t\t\t\t\tcode: getCodeAttributeToSave(),\r\n\t\t\t\t};\r\n\t\t\t\tthisSavedFilter.browseRefinements.push(newRefinement);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthisSavedFilter.filtersByType = getBrowseFiltersByType(thisSavedFilter);\r\n\t\tsavedFilterDataStore.updateFilters(thisSavedFilter);\r\n\t\tleaveEditMode();\r\n\t};\r\n\r\n\tconst getSavedPubDateType = () => {\r\n\t\tif (!pubDateFilter) {\r\n\t\t\tsetSelectedPubDateType(PubDateTypes['all'].key);\r\n\t\t} else if (pubDateFilter.code === 'frontlist') {\r\n\t\t\tsetSelectedPubDateType(PubDateTypes['frontlist'].key);\r\n\t\t} else if (pubDateFilter.code === 'backlist') {\r\n\t\t\tsetSelectedPubDateType(PubDateTypes['frontlist'].key);\r\n\t\t} else if (pubDateFilter.code.substring(0, 4) === '[NOW') {\r\n\t\t\tsetSelectedPubDateType(PubDateTypes['relativeTimeframe'].key);\r\n\t\t\tconst relativeTimeFrameAttributes = getRelativeTimeframeAttributes(\r\n\t\t\t\tpubDateFilter.code,\r\n\t\t\t);\r\n\t\t\tsetStartingRange(relativeTimeFrameAttributes.startingRange);\r\n\t\t\tsetEndingRange(relativeTimeFrameAttributes.endingRange);\r\n\t\t} else {\r\n\t\t\tsetSelectedPubDateType(PubDateTypes['absoluteTimeframe'].key);\r\n\t\t\tconst dateSplit = pubDateFilter.code.split(' TO ');\r\n\t\t\tsetStartingDate(new Date(dateSplit[0].replace('[', '')));\r\n\t\t\tsetEndingDate(new Date(dateSplit[1].replace(']', '')));\r\n\t\t}\r\n\t\tsetIsLoading(false);\r\n\t};\r\n\r\n\tconst onStartingRangeChange = value => {\r\n\t\tsetStartingRange(value);\r\n\t};\r\n\r\n\tconst getStartingRangeFromOptions = () => {\r\n\t\treturn Object.keys(PubDateFromOptions).map(key => {\r\n\t\t\treturn (\r\n\t\t\t\t<Option value={key} key={`pd-${key}`}>\r\n\t\t\t\t\t{PubDateFromOptions[key]}\r\n\t\t\t\t</Option>\r\n\t\t\t);\r\n\t\t});\r\n\t};\r\n\r\n\tconst onEndingRangeChange = value => {\r\n\t\tsetEndingRange(value);\r\n\t};\r\n\r\n\tconst getEndingRangeFromOptions = () => {\r\n\t\treturn Object.keys(PubDateToOptions).map(key => {\r\n\t\t\treturn <Option value={key}>{PubDateToOptions[key]}</Option>;\r\n\t\t});\r\n\t};\r\n\r\n\tconst onChange = (value, dateString) => {\r\n\t\tsetStartingDate(dateString[0]);\r\n\t\tsetEndingDate(dateString[1]);\r\n\t};\r\n\r\n\tconst getSelectionArea = () => {\r\n\t\tswitch (selectedPubDateType) {\r\n\t\t\tcase PubDateTypes['relativeTimeframe'].key:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<div className=\"relative relative-timeframe-selection\">\r\n\t\t\t\t\t\t{!isMobileSize && <div className=\"arrow-down\" />}\r\n\t\t\t\t\t\t<div className=\"pubdate-selection-frame\">\r\n\t\t\t\t\t\t\t<div className=\"column pubdate-selection-text\">\r\n\t\t\t\t\t\t\t\tStarting\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div className=\"column-spaced\">\r\n\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\tonChange={onStartingRangeChange}\r\n\t\t\t\t\t\t\t\t\tdefaultValue={startingRange}\r\n\t\t\t\t\t\t\t\t\tvalue={startingRange}>\r\n\t\t\t\t\t\t\t\t\t{getStartingRangeFromOptions()}\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div className=\"column-spaced pubdate-selection-text\">\r\n\t\t\t\t\t\t\t\tLooking out\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div className=\"column-spaced\">\r\n\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\tonChange={onEndingRangeChange}\r\n\t\t\t\t\t\t\t\t\tdefaultValue={endingRange}\r\n\t\t\t\t\t\t\t\t\tvalue={endingRange}>\r\n\t\t\t\t\t\t\t\t\t{getEndingRangeFromOptions()}\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div className=\"clear\" />\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t);\r\n\t\t\tcase PubDateTypes['absoluteTimeframe'].key:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<div className=\"relative absolute-timeframe-selection\">\r\n\t\t\t\t\t\t{!isMobileSize && <div className=\"arrow-down\" />}\r\n\t\t\t\t\t\t<div className=\"pubdate-selection-frame\">\r\n\t\t\t\t\t\t\t<RangePicker\r\n\t\t\t\t\t\t\t\tdefaultValue={[\r\n\t\t\t\t\t\t\t\t\tmoment(startingDate, dateFormat),\r\n\t\t\t\t\t\t\t\t\tmoment(endingDate, dateFormat),\r\n\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\tformat={dateFormat}\r\n\t\t\t\t\t\t\t\tonChange={onChange}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t);\r\n\t\t\tdefault:\r\n\t\t\t\treturn <></>;\r\n\t\t}\r\n\t};\r\n\r\n\treturn !isLoading ? (\r\n\t\t<div className=\"add-edit-category-filters\">\r\n\t\t\t<Radio.Group size=\"small\" value={selectedPubDateType}>\r\n\t\t\t\t{Object.keys(PubDateTypes).map(pubDateType => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<Radio.Button\r\n\t\t\t\t\t\t\tvalue={PubDateTypes[pubDateType].key}\r\n\t\t\t\t\t\t\tkey={PubDateTypes[pubDateType].key}\r\n\t\t\t\t\t\t\tonChange={onPubDateTypeChange}>\r\n\t\t\t\t\t\t\t{PubDateTypes[pubDateType].label}\r\n\t\t\t\t\t\t</Radio.Button>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</Radio.Group>\r\n\t\t\t{getSelectionArea()}\r\n\t\t\t<SaveAndCancelButtons\r\n\t\t\t\tonSave={saveFilters}\r\n\t\t\t\tonCancel={leaveEditMode}\r\n\t\t\t/>\r\n\t\t</div>\r\n\t) : (\r\n\t\t<LoadingSpinnerInContainer size={LoadingSpinnerSize.small} />\r\n\t);\r\n}\r\n\r\nexport default withIsMobile(AddEditPubDateFilter);\r\n","import { List, Select } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport ActiveFilters from '../../../Community/Administer/ActiveFilters';\r\nimport { useSavedCommunityFilters } from '../../../Community/containers/SavedCommunityFiltersDataStore';\r\nimport SaveAndCancelButtons from '../../../Community/UI/SaveAndCancelButtons/SaveAndCancelButtons';\r\nimport { replaceExclusion } from '../../../Community/util';\r\nimport LoadingSpinner from '../../../UI/LoadingSpinner';\r\nimport { useFilterOptions } from '../../containers/FilterOptionsDataStore';\r\nimport { useSavedFilter } from '../../containers/SavedFilterDataStore';\r\nimport SavedFilterTypes from '../../SavedFilterTypes';\r\nimport OptionSelectionTypes from '../OptionSelectionTypes';\r\nimport './addEditStandardFilters.less';\r\n\r\nconst { Option } = Select;\r\n\r\nAddEditStandardFilters.propTypes = {\r\n\tbrowseRefinements: PropTypes.array,\r\n\tbrowseLaneType: PropTypes.object,\r\n\tleaveEditMode: PropTypes.func,\r\n\tsavedFilterType: PropTypes.string,\r\n};\r\n\r\nfunction AddEditStandardFilters({\r\n\tbrowseRefinements,\r\n\tbrowseLaneType,\r\n\tleaveEditMode,\r\n\tsavedFilterType,\r\n}) {\r\n\tconst [value, setValue] = React.useState(undefined);\r\n\r\n\tconst filterOptionsDataStore = useFilterOptions();\r\n\tconst { filterOptions, isLoading, filters } = filterOptionsDataStore.state;\r\n\r\n\tconst [filterKeyToDisplay, setFilterKeyToDisplay] = React.useState('A');\r\n\tconst [activeCategories, setActiveCategories] = React.useState([]);\r\n\tconst filterSortButtons =\r\n\t\t!isLoading &&\r\n\t\tbrowseLaneType.optionSelectionType === OptionSelectionTypes.alpha &&\r\n\t\tObject.keys(filterOptions[browseLaneType.type]).sort();\r\n\r\n\tconst savedFilterDataStore = useSavedFilter();\r\n\r\n\tconst savedCommunityFiltersDataStore = useSavedCommunityFilters();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tconst allSavedFilters = setSavedFilters(browseRefinements);\r\n\t\tsetActiveCategories(allSavedFilters);\r\n\t}, []);\r\n\r\n\tconst setSavedFilters = savedFilters => {\r\n\t\tconst allSavedFilters =\r\n\t\t\tArray.isArray(savedFilters) &&\r\n\t\t\tsavedFilters.map(filter => ({\r\n\t\t\t\tvalue: filter.code,\r\n\t\t\t\tlabel:\r\n\t\t\t\t\tfilters.find(\r\n\t\t\t\t\t\tff =>\r\n\t\t\t\t\t\t\tff.type === browseLaneType.type &&\r\n\t\t\t\t\t\t\tff.id === filter.code,\r\n\t\t\t\t\t) &&\r\n\t\t\t\t\tfilters.find(\r\n\t\t\t\t\t\tff =>\r\n\t\t\t\t\t\t\tff.type === browseLaneType.type &&\r\n\t\t\t\t\t\t\tff.id === filter.code,\r\n\t\t\t\t\t).displayName,\r\n\t\t\t\tisExclusion: filter.isExclusion,\r\n\t\t\t}));\r\n\t\treturn allSavedFilters || [];\r\n\t};\r\n\r\n\tconst removeFilter = value => {\r\n\t\tvar newActiveCategories = activeCategories.filter(\r\n\t\t\tsec => sec.value !== value,\r\n\t\t);\r\n\t\tsetActiveCategories(newActiveCategories);\r\n\t};\r\n\r\n\tconst sortFilters = e => {\r\n\t\tsetFilterKeyToDisplay(e.target.dataset.id);\r\n\t};\r\n\r\n\tconst onClick = filter => {\r\n\t\tconst filterToAdd = {\r\n\t\t\tvalue: filter.id,\r\n\t\t\tlabel: filter.displayName,\r\n\t\t};\r\n\t\tsetActiveCategories([...activeCategories, filterToAdd]);\r\n\t};\r\n\r\n\tconst saveFilters = () => {\r\n\t\tswitch (savedFilterType) {\r\n\t\t\tcase SavedFilterTypes.group:\r\n\t\t\t\tsavedCommunityFiltersDataStore.saveFilters(\r\n\t\t\t\t\tactiveCategories,\r\n\t\t\t\t\tbrowseLaneType,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase SavedFilterTypes.user:\r\n\t\t\t\tsavedFilterDataStore.saveFilters(\r\n\t\t\t\t\tactiveCategories,\r\n\t\t\t\t\tbrowseLaneType,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tleaveEditMode();\r\n\t};\r\n\r\n\tconst onChange = value => {\r\n\t\tconst ageRangeToAdd = {\r\n\t\t\tvalue: value,\r\n\t\t\tlabel: filters.find(\r\n\t\t\t\tff => ff.type === browseLaneType.type && ff.id === value,\r\n\t\t\t).displayName,\r\n\t\t};\r\n\t\tsetValue(value);\r\n\t\tsetActiveCategories([...activeCategories, ageRangeToAdd]);\r\n\t};\r\n\r\n\tconst changeExclusion = value => {\r\n\t\tconst newActiveCategories = replaceExclusion(activeCategories, value);\r\n\t\tsetActiveCategories(newActiveCategories);\r\n\t};\r\n\r\n\tconst isNotUsed = key => {\r\n\t\treturn activeCategories.filter(ac => ac.value === key).length === 0;\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"add-edit-standard-filters\">\r\n\t\t\t{!isLoading && (\r\n\t\t\t\t<div className=\"bordered-container\">\r\n\t\t\t\t\t{browseLaneType.optionSelectionType ===\r\n\t\t\t\t\t\tOptionSelectionTypes.select && (\r\n\t\t\t\t\t\t<div style={{ paddingBottom: 10 }}>\r\n\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\tstyle={{ width: '100%' }}\r\n\t\t\t\t\t\t\t\tonChange={onChange}\r\n\t\t\t\t\t\t\t\tplaceholder={<Translate id=\"please_select\" />}\r\n\t\t\t\t\t\t\t\tvalue={value}>\r\n\t\t\t\t\t\t\t\t{filters\r\n\t\t\t\t\t\t\t\t\t.filter(\r\n\t\t\t\t\t\t\t\t\t\tff => ff.type === browseLaneType.type,\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t.map(key => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\tisNotUsed(key.id) && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Option value={key.id}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{key.displayName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Option>\r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<ActiveFilters\r\n\t\t\t\t\t\tactiveCategories={activeCategories}\r\n\t\t\t\t\t\tremoveFilter={removeFilter}\r\n\t\t\t\t\t\tchangeExclusion={changeExclusion}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<SaveAndCancelButtons\r\n\t\t\t\t\t\tonSave={saveFilters}\r\n\t\t\t\t\t\tonCancel={leaveEditMode}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t{browseLaneType.optionSelectionType ===\r\n\t\t\t\tOptionSelectionTypes.alpha && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<div className=\"sort-buttons\">\r\n\t\t\t\t\t\t{filterSortButtons &&\r\n\t\t\t\t\t\t\tfilterSortButtons.map(buttonText => (\r\n\t\t\t\t\t\t\t\t<p\r\n\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\tkey={buttonText}\r\n\t\t\t\t\t\t\t\t\tonClick={sortFilters}\r\n\t\t\t\t\t\t\t\t\tdata-id={buttonText}\r\n\t\t\t\t\t\t\t\t\tclassName=\"acc-font sort-button\">\r\n\t\t\t\t\t\t\t\t\t{buttonText}\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className=\"standard-filter-selection\">\r\n\t\t\t\t\t\t<List\r\n\t\t\t\t\t\t\tloading={{\r\n\t\t\t\t\t\t\t\tspinning: isLoading,\r\n\t\t\t\t\t\t\t\tindicator: <LoadingSpinner />,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tpagination={{\r\n\t\t\t\t\t\t\t\tpageSize: 15,\r\n\t\t\t\t\t\t\t\thideOnSinglePage: true,\r\n\t\t\t\t\t\t\t\tsimple: true,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tdataSource={\r\n\t\t\t\t\t\t\t\tisLoading\r\n\t\t\t\t\t\t\t\t\t? []\r\n\t\t\t\t\t\t\t\t\t: filterOptions[browseLaneType.type][\r\n\t\t\t\t\t\t\t\t\t\t\tfilterKeyToDisplay\r\n\t\t\t\t\t\t\t\t\t ]\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\trenderItem={filter => (\r\n\t\t\t\t\t\t\t\t<List.Item>\r\n\t\t\t\t\t\t\t\t\t<p\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"standard-filter-name\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => onClick(filter)}>\r\n\t\t\t\t\t\t\t\t\t\t{filter.name} (\r\n\t\t\t\t\t\t\t\t\t\t{filter.count.toLocaleString()})\r\n\t\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t</List.Item>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default AddEditStandardFilters;\r\n","import AddEditCategoryFilters from '../../Community/Administer/AddEditCategoryFilters';\r\nimport AddEditPubDateFilter from './AddEditPubDateFilter';\r\nimport AddEditStandardFilters from './StandardFilters/AddEditStandardFilters';\r\nimport AddEditDrcAvailabilityFilter from './AddEditDrcAvailabilityFilter';\r\nimport OptionSelectionTypes from './OptionSelectionTypes';\r\n\r\nconst BrowseLaneType = {\r\n\tPubDate: {\r\n\t\tkey: 'pubDate',\r\n\t\theaderLocalizationId: 'pubdate',\r\n\t\taddEditFiltersComponent: AddEditPubDateFilter,\r\n\t},\r\n\tCategory: {\r\n\t\tkey: 'category',\r\n\t\theaderLocalizationId: 'category',\r\n\t\taddEditFiltersComponent: AddEditCategoryFilters,\r\n\t},\r\n\tPublisher: {\r\n\t\ttypeKey: 1611,\r\n\t\ttype: 'titleAudienceSpecificVendorName',\r\n\t\tkey: 'vendor',\r\n\t\theaderLocalizationId: 'publisher',\r\n\t\taddEditFiltersComponent: AddEditStandardFilters,\r\n\t\toptionSelectionType: OptionSelectionTypes.alpha,\r\n\t},\r\n\tImprint: {\r\n\t\ttypeKey: 1612,\r\n\t\ttype: 'titleAudienceSpecificImprintName',\r\n\t\tkey: 'imprint',\r\n\t\theaderLocalizationId: 'imprint',\r\n\t\taddEditFiltersComponent: AddEditStandardFilters,\r\n\t\toptionSelectionType: OptionSelectionTypes.alpha,\r\n\t},\r\n\tAgeRange: {\r\n\t\ttypeKey: 700,\r\n\t\ttype: 'titleAgeGradeRange',\r\n\t\tkey: 'ageRange',\r\n\t\theaderLocalizationId: 'age_range',\r\n\t\taddEditFiltersComponent: AddEditStandardFilters,\r\n\t\toptionSelectionType: OptionSelectionTypes.select,\r\n\t},\r\n\tFormat: {\r\n\t\ttypeKey: 1613,\r\n\t\ttype: 'titleAudienceSpecificFormat',\r\n\t\tkey: 'format',\r\n\t\theaderLocalizationId: 'format',\r\n\t\taddEditFiltersComponent: AddEditStandardFilters,\r\n\t\toptionSelectionType: OptionSelectionTypes.alpha,\r\n\t},\r\n\tDrcAvailability: {\r\n\t\tkey: 'drcAvailability',\r\n\t\theaderLocalizationId: 'drc_availability',\r\n\t\taddEditFiltersComponent: AddEditDrcAvailabilityFilter,\r\n\t},\r\n\tLexile: {\r\n\t\ttypeKey: 1509,\r\n\t\ttype: 'titleLexile',\r\n\t\tkey: 'lexile',\r\n\t\theaderLocalizationId: 'lexile',\r\n\t\taddEditFiltersComponent: AddEditStandardFilters,\r\n\t\toptionSelectionType: OptionSelectionTypes.select,\r\n\t},\r\n\tDewey: {\r\n\t\ttypeKey: 1506,\r\n\t\ttype: 'titleDeweyClass',\r\n\t\tkey: 'dewey',\r\n\t\theaderLocalizationId: 'dewey',\r\n\t\taddEditFiltersComponent: AddEditStandardFilters,\r\n\t\toptionSelectionType: OptionSelectionTypes.select,\r\n\t},\r\n\tSubrights: {\r\n\t\ttypeKey: 800,\r\n\t\ttype: 'titleSubright',\r\n\t\tkey: 'subrights',\r\n\t\theaderLocalizationId: 'subrights',\r\n\t\taddEditFiltersComponent: AddEditStandardFilters,\r\n\t\toptionSelectionType: OptionSelectionTypes.select,\r\n\t},\r\n\tEdition: {\r\n\t\ttypeKey: 1600,\r\n\t\ttype: 'titleEditionType',\r\n\t\tkey: 'edition',\r\n\t\theaderLocalizationId: 'edition',\r\n\t\taddEditFiltersComponent: AddEditStandardFilters,\r\n\t\toptionSelectionType: OptionSelectionTypes.select,\r\n\t},\r\n\tPos: {\r\n\t\tkey: 'pos',\r\n\t\theaderLocalizationId: 'pos_categories',\r\n\t\tdoHide: true,\r\n\t},\r\n};\r\n\r\nexport default BrowseLaneType;\r\n","import { TreeSelect } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport useCategoryFilters from '../../hooks/useCategoryFilters';\r\nimport BrowseLaneType from '../../SavedFilters/Administer/BrowseLaneType';\r\nimport { useSavedFilter } from '../../SavedFilters/containers/SavedFilterDataStore';\r\nimport SavedFilterTypes from '../../SavedFilters/SavedFilterTypes';\r\nimport { LoadingSpinnerSize } from '../../UI/LoadingSpinner';\r\nimport LoadingSpinnerInContainer from '../../UI/LoadingSpinnerInContainer';\r\nimport { useSavedCommunityFilters } from '../containers/SavedCommunityFiltersDataStore';\r\nimport SaveAndCancelButtons from '../UI/SaveAndCancelButtons/SaveAndCancelButtons';\r\nimport { replaceExclusion, setSavedFilters } from '../util';\r\nimport ActiveFilters from './ActiveFilters';\r\n\r\nAddEditCategoryFilters.propTypes = {\r\n\tbrowseRefinements: PropTypes.array,\r\n\tleaveEditMode: PropTypes.func,\r\n\tsavedFilterType: PropTypes.string,\r\n};\r\n\r\nexport default function AddEditCategoryFilters({\r\n\tbrowseRefinements,\r\n\tleaveEditMode,\r\n\tsavedFilterType,\r\n}) {\r\n\tconst [activeCategories, setActiveCategories] = React.useState([]);\r\n\tconst [value, setValue] = React.useState(null);\r\n\tconst { categoryFilters, isLoading } = useCategoryFilters();\r\n\r\n\tconst savedFilterDataStore = useSavedFilter();\r\n\r\n\tconst savedCommunityFiltersDataStore = useSavedCommunityFilters();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tconst allSavedFilters = setSavedFilters(browseRefinements);\r\n\t\tsetActiveCategories(allSavedFilters);\r\n\t}, []);\r\n\r\n\tconst saveFilters = () => {\r\n\t\tswitch (savedFilterType) {\r\n\t\t\tcase SavedFilterTypes.group:\r\n\t\t\t\tsavedCommunityFiltersDataStore.saveFilters(\r\n\t\t\t\t\tactiveCategories,\r\n\t\t\t\t\tBrowseLaneType.Category,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase SavedFilterTypes.user:\r\n\t\t\t\tsavedFilterDataStore.saveFilters(\r\n\t\t\t\t\tactiveCategories,\r\n\t\t\t\t\tBrowseLaneType.Category,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tleaveEditMode();\r\n\t};\r\n\r\n\tconst onChange = value => {\r\n\t\tsetValue(value);\r\n\t\tsetActiveCategories([...activeCategories, value]);\r\n\t};\r\n\r\n\tconst removeFilter = value => {\r\n\t\tvar newActiveCategories = activeCategories.filter(\r\n\t\t\tsec => sec.value !== value,\r\n\t\t);\r\n\t\tsetActiveCategories(newActiveCategories);\r\n\t};\r\n\r\n\tconst changeExclusion = value => {\r\n\t\tconst newActiveCategories = replaceExclusion(activeCategories, value);\r\n\t\tsetActiveCategories(newActiveCategories);\r\n\t};\r\n\r\n\treturn !isLoading ? (\r\n\t\t<div className=\"add-edit-category-filters\">\r\n\t\t\t<TreeSelect\r\n\t\t\t\tlabelInValue\r\n\t\t\t\tstyle={{ width: '100%' }}\r\n\t\t\t\tvalue={value}\r\n\t\t\t\tdropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\r\n\t\t\t\ttreeData={categoryFilters}\r\n\t\t\t\tplaceholder={<Translate id=\"please_select\" />}\r\n\t\t\t\ttreeDataSimpleMode\r\n\t\t\t\tonChange={onChange}\r\n\t\t\t/>\r\n\t\t\t<ActiveFilters\r\n\t\t\t\tactiveCategories={activeCategories}\r\n\t\t\t\tremoveFilter={removeFilter}\r\n\t\t\t\tchangeExclusion={changeExclusion}\r\n\t\t\t/>\r\n\t\t\t<SaveAndCancelButtons\r\n\t\t\t\tonSave={saveFilters}\r\n\t\t\t\tonCancel={leaveEditMode}\r\n\t\t\t/>\r\n\t\t</div>\r\n\t) : (\r\n\t\t<LoadingSpinnerInContainer size={LoadingSpinnerSize.small} />\r\n\t);\r\n}\r\n","import { Radio } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport SaveAndCancelButtons from '../../Community/UI/SaveAndCancelButtons/SaveAndCancelButtons';\r\nimport { getBrowseFiltersByType } from '../../Community/util';\r\nimport { LoadingSpinnerSize } from '../../UI/LoadingSpinner';\r\nimport LoadingSpinnerInContainer from '../../UI/LoadingSpinnerInContainer';\r\nimport { useSavedFilter } from '../containers/SavedFilterDataStore';\r\nimport { useSavedFilters } from '../containers/SavedFiltersDataStore';\r\nimport DrcAvailabilityTypes from '../DrcAvailabilityTypes';\r\nimport BrowseLaneType from './BrowseLaneType';\r\n\r\nAddEditDrcAvailabilityFilter.propTypes = {\r\n\tbrowseRefinements: PropTypes.array,\r\n\tviewId: PropTypes.number,\r\n\tleaveEditMode: PropTypes.func,\r\n};\r\n\r\nexport default function AddEditDrcAvailabilityFilter({\r\n\tbrowseRefinements,\r\n\tviewId,\r\n\tleaveEditMode,\r\n}) {\r\n\tconst [\r\n\t\tselectedDrcAvailabilityType,\r\n\t\tsetSelectedDrcAvailabilityType,\r\n\t] = React.useState(DrcAvailabilityTypes['notSet'].key);\r\n\tconst [isLoading, setIsLoading] = React.useState(true);\r\n\r\n\tconst savedFiltersDataStore = useSavedFilters();\r\n\tconst savedFilterDataStore = useSavedFilter();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tgetSavedDrcAvailabilityType();\r\n\t}, []);\r\n\r\n\tconst onDrcAvailabilityTypeChange = e => {\r\n\t\tsetSelectedDrcAvailabilityType(e.target.value);\r\n\t};\r\n\r\n\tconst drcAvailabilityFilter =\r\n\t\tbrowseRefinements &&\r\n\t\tbrowseRefinements.find(\r\n\t\t\tbr => br.browseLaneType === BrowseLaneType.DrcAvailability.key,\r\n\t\t);\r\n\r\n\tconst saveFilters = () => {\r\n\t\tvar { savedFilters } = savedFiltersDataStore.state;\r\n\t\tvar thisSavedFilter = savedFilters.filter(sf => sf.id == viewId)[0];\r\n\t\tif (\r\n\t\t\tselectedDrcAvailabilityType === DrcAvailabilityTypes['notSet'].key\r\n\t\t) {\r\n\t\t\tthisSavedFilter.browseRefinements = thisSavedFilter.browseRefinements.filter(\r\n\t\t\t\ttsf =>\r\n\t\t\t\t\ttsf.browseLaneType !== BrowseLaneType.DrcAvailability.key,\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tif (drcAvailabilityFilter) {\r\n\t\t\t\tvar thisRefinement = thisSavedFilter.browseRefinements.filter(\r\n\t\t\t\t\ttsf =>\r\n\t\t\t\t\t\ttsf.browseLaneType ===\r\n\t\t\t\t\t\tBrowseLaneType.DrcAvailability.key,\r\n\t\t\t\t)[0];\r\n\t\t\t\tthisRefinement.code = selectedDrcAvailabilityType;\r\n\t\t\t} else {\r\n\t\t\t\tvar newRefinement = {\r\n\t\t\t\t\tviewId: viewId,\r\n\t\t\t\t\tbrowseLaneType: BrowseLaneType.DrcAvailability.key,\r\n\t\t\t\t\tcode: selectedDrcAvailabilityType,\r\n\t\t\t\t};\r\n\t\t\t\tthisSavedFilter.browseRefinements.push(newRefinement);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthisSavedFilter.filtersByType = getBrowseFiltersByType(thisSavedFilter);\r\n\t\tsavedFilterDataStore.updateFilters(thisSavedFilter);\r\n\t\tleaveEditMode();\r\n\t};\r\n\r\n\tconst getSavedDrcAvailabilityType = () => {\r\n\t\tif (!drcAvailabilityFilter) {\r\n\t\t\tsetSelectedDrcAvailabilityType(DrcAvailabilityTypes['notSet'].key);\r\n\t\t} else {\r\n\t\t\tsetSelectedDrcAvailabilityType(\r\n\t\t\t\tDrcAvailabilityTypes[drcAvailabilityFilter.code].key,\r\n\t\t\t);\r\n\t\t}\r\n\t\tsetIsLoading(false);\r\n\t};\r\n\r\n\treturn !isLoading ? (\r\n\t\t<div className=\"add-edit-category-filters\">\r\n\t\t\t<Radio.Group size=\"small\" value={selectedDrcAvailabilityType}>\r\n\t\t\t\t{Object.keys(DrcAvailabilityTypes).map(drcAvailabilityType => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<Radio.Button\r\n\t\t\t\t\t\t\tvalue={\r\n\t\t\t\t\t\t\t\tDrcAvailabilityTypes[drcAvailabilityType].key\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tkey={`drc-availability-option-${DrcAvailabilityTypes[drcAvailabilityType].key}`}\r\n\t\t\t\t\t\t\tonChange={onDrcAvailabilityTypeChange}>\r\n\t\t\t\t\t\t\t{DrcAvailabilityTypes[drcAvailabilityType].label}\r\n\t\t\t\t\t\t</Radio.Button>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</Radio.Group>\r\n\t\t\t<SaveAndCancelButtons\r\n\t\t\t\tonSave={saveFilters}\r\n\t\t\t\tonCancel={leaveEditMode}\r\n\t\t\t/>\r\n\t\t</div>\r\n\t) : (\r\n\t\t<LoadingSpinnerInContainer size={LoadingSpinnerSize.small} />\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { connectToCollections } from './containers/CollectionsDataStore';\r\nimport { Modal, Form, Input } from 'antd';\r\nimport combineConnectors from '../util/combineConnectors';\r\nimport { connectToTitle } from '../Title/containers/TitleDataStore';\r\nimport CommunityButton from '../UI/CommunityButton';\r\nimport { connectToCatalog } from './containers/CatalogDataStore';\r\n\r\nconst CollectionCreateForm = Form.create({ name: 'form_in_modal' })(\r\n\t// eslint-disable-next-line\r\n\tclass extends React.Component {\r\n\t\trender() {\r\n\t\t\tconst {\r\n\t\t\t\tvisible,\r\n\t\t\t\tonCancel,\r\n\t\t\t\tonCreate,\r\n\t\t\t\tform,\r\n\t\t\t\tdefaultValue,\r\n\t\t\t\tcatalogId,\r\n\t\t\t\tname,\r\n\t\t\t\tsku,\r\n\t\t\t\tskus,\r\n\t\t\t} = this.props;\r\n\t\t\tconst { getFieldDecorator } = form;\r\n\t\t\treturn (\r\n\t\t\t\t<Modal\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tvisible={visible}\r\n\t\t\t\t\ttitle={\r\n\t\t\t\t\t\tcatalogId == 0\r\n\t\t\t\t\t\t\t? 'Create New Stack / Collection'\r\n\t\t\t\t\t\t\t: 'Edit Stack / Collection Name'\r\n\t\t\t\t\t}\r\n\t\t\t\t\tokText={catalogId == 0 ? 'Create' : 'Update'}\r\n\t\t\t\t\tonCancel={onCancel}\r\n\t\t\t\t\tzIndex={10000}\r\n\t\t\t\t\tonOk={onCreate}>\r\n\t\t\t\t\t<Form layout=\"vertical\">\r\n\t\t\t\t\t\t<Form.Item label=\"Collection Name\">\r\n\t\t\t\t\t\t\t{getFieldDecorator('name', {\r\n\t\t\t\t\t\t\t\trules: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\t\t\t\t\tmessage: 'Please enter a name',\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\tinitialValue: name,\r\n\t\t\t\t\t\t\t})(<Input />)}\r\n\t\t\t\t\t\t</Form.Item>\r\n\t\t\t\t\t</Form>\r\n\t\t\t\t\t{(sku || skus) &&\r\n\t\t\t\t\t\t\"The title(s) you've selected will automatically be added to this collection once it's created\"}\r\n\t\t\t\t</Modal>\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n);\r\n\r\nexport class AddEditCollection extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tcatalogId: 0,\r\n\t\t\tname: '',\r\n\t\t\tvisible: false,\r\n\t\t};\r\n\t}\r\n\r\n\tshowModal = (catalogId, name) => {\r\n\t\tthis.setState({\r\n\t\t\tvisible: true,\r\n\t\t\tcatalogId: catalogId,\r\n\t\t\tname: name,\r\n\t\t});\r\n\t};\r\n\r\n\thandleCancel = () => {\r\n\t\tthis.setState({ visible: false });\r\n\t};\r\n\r\n\thandleCreate = () => {\r\n\t\tconst form = this.formRef.props.form;\r\n\t\tform.validateFields((err, values) => {\r\n\t\t\tif (err) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.state.catalogId === 0) {\r\n\t\t\t\tthis.createNewCollection(values);\r\n\t\t\t} else {\r\n\t\t\t\tthis.editExistingCollection(values);\r\n\t\t\t}\r\n\t\t\tform.resetFields();\r\n\t\t\tthis.setState({ visible: false });\r\n\t\t});\r\n\t};\r\n\r\n\tcreateNewCollection = values => {\r\n\t\tvar skus = [];\r\n\t\tif (this.props.sku) {\r\n\t\t\tskus.push(this.props.sku);\r\n\t\t} else if (this.props.skus) {\r\n\t\t\tskus = this.props.skus;\r\n\t\t}\r\n\t\tif (!this.props.sku && !this.props.skus) {\r\n\t\t\tthis.props.collectionsDataStore.createNewCollection(\r\n\t\t\t\tvalues.name,\r\n\t\t\t\tskus,\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tthis.props.collectionsDataStore\r\n\t\t\t\t.createNewCollection(values.name, skus)\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tthis.props.titleDataStore &&\r\n\t\t\t\t\t\tthis.props.titleDataStore.refreshCollectionData();\r\n\t\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\teditExistingCollection = values => {\r\n\t\tthis.props.collectionsDataStore\r\n\t\t\t.editExistingCollection(this.props.catalogId, 'Name', values.name)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.props.catalogStore && this.props.catalogStore.refresh();\r\n\t\t\t});\r\n\t};\r\n\r\n\tsaveFormRef = formRef => {\r\n\t\tthis.formRef = formRef;\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { catalogId, name, sku, skus } = this.props;\r\n\t\treturn (\r\n\t\t\t<React.Fragment>\r\n\t\t\t\t<CollectionCreateForm\r\n\t\t\t\t\twrappedComponentRef={this.saveFormRef}\r\n\t\t\t\t\tvisible={this.state.visible}\r\n\t\t\t\t\tonCancel={this.handleCancel}\r\n\t\t\t\t\tonCreate={this.handleCreate}\r\n\t\t\t\t\tcatalogId={this.state.catalogId}\r\n\t\t\t\t\tname={this.state.name}\r\n\t\t\t\t\tsku={sku}\r\n\t\t\t\t\tskus={skus}\r\n\t\t\t\t/>\r\n\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t{!catalogId || catalogId == 0 ? (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"clickable\"\r\n\t\t\t\t\t\t\tonClick={() => this.showModal(0)}>\r\n\t\t\t\t\t\t\t<CommunityButton\r\n\t\t\t\t\t\t\t\ttext=\"Create New Stack / Collection\"\r\n\t\t\t\t\t\t\t\ticon=\"icon-books\"\r\n\t\t\t\t\t\t\t\ticonClass=\"small-save\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"clickable\"\r\n\t\t\t\t\t\t\tonClick={() => this.showModal(catalogId, name)}>\r\n\t\t\t\t\t\t\t<CommunityButton\r\n\t\t\t\t\t\t\t\ttext=\"Edit Name\"\r\n\t\t\t\t\t\t\t\ticon=\"icon-note-icon\"\r\n\t\t\t\t\t\t\t\ticonClass=\"small-save\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</React.Fragment>\r\n\t\t\t</React.Fragment>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst connectors = [connectToCollections, connectToTitle, connectToCatalog];\r\n\r\nexport default combineConnectors(connectors)(AddEditCollection);\r\n","import { Drawer } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport TitleAutocomplete from '../Title/TitleAutocomplete';\r\nimport TitleDetail from '../Title/TitleDetail';\r\nimport './headerTitleSearchAutocomplete.less';\r\n\r\nexport class HeaderTitleSearchAutocomplete extends React.Component {\r\n\tstatic propTypes = {\r\n\t\ttitleLanesStore: PropTypes.object,\r\n\t};\r\n\r\n\tstate = {\r\n\t\tsku: '',\r\n\t\tdrawerVisible: false,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst isMobile = this.props.isMobile();\r\n\t\tconst { drawerVisible } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"header-title-search-autocomplete\">\r\n\t\t\t\t<TitleAutocomplete onSelectOption={this.openTitleDrawer}>\r\n\t\t\t\t\t<Drawer\r\n\t\t\t\t\t\twidth={isMobile ? '100%' : '90%'}\r\n\t\t\t\t\t\tplacement={isMobile ? 'bottom' : 'left'}\r\n\t\t\t\t\t\theight={isMobile ? '90%' : '100%'}\r\n\t\t\t\t\t\tclosable={false}\r\n\t\t\t\t\t\theadStyle={{\r\n\t\t\t\t\t\t\tbackgroundColor: '#e9ebec',\r\n\t\t\t\t\t\t\tborder: 0,\r\n\t\t\t\t\t\t\theight: '100%',\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tbodyStyle={{\r\n\t\t\t\t\t\t\tbackgroundColor: '#e9ebec',\r\n\t\t\t\t\t\t\tborder: 0,\r\n\t\t\t\t\t\t\theight: '100%',\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonClose={this.onClose}\r\n\t\t\t\t\t\tvisible={drawerVisible}>\r\n\t\t\t\t\t\t{drawerVisible && (\r\n\t\t\t\t\t\t\t<TitleDetail sku={this.state.sku} communityId={0} />\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Drawer>\r\n\t\t\t\t</TitleAutocomplete>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\tonClose = () => {\r\n\t\tthis.setState({ drawerVisible: false });\r\n\t};\r\n\r\n\topenTitleDrawer = sku => {\r\n\t\tthis.setState({ sku, drawerVisible: true });\r\n\t};\r\n}\r\n\r\nexport default withIsMobile(HeaderTitleSearchAutocomplete);\r\n","const AlertCandidate = {\r\n\tAll: {\r\n\t\tkey: 'all',\r\n\t\tlabelId: 'all_titles',\r\n\t},\r\n\tJustThoseUserHasTouched: {\r\n\t\tkey: 'justThoseUserHasTouched',\r\n\t\tlabelId: 'titles_you_edited',\r\n\t},\r\n};\r\n\r\nexport default AlertCandidate;\r\n","const AlertMethod = {\r\n\tNotification: {\r\n\t\tkey: 'notification',\r\n\t\tlabelId: 'x_notification',\r\n\t},\r\n\tEmail: {\r\n\t\tkey: 'email',\r\n\t\tlabelId: 'immediate_email',\r\n\t},\r\n\tText: {\r\n\t\tkey: 'text',\r\n\t\tlabelId: 'immediate_text',\r\n\t},\r\n};\r\n\r\nexport default AlertMethod;\r\n","const AlertType = {\r\n\tAddOrRemoved: {\r\n\t\tkey: 'addOrRemoved',\r\n\t\tlabelId: 'titles_added_removed',\r\n\t},\r\n\tVoted: {\r\n\t\tkey: 'voted',\r\n\t\tdoOfferCandidate: true,\r\n\t\tlabelId: 'votes',\r\n\t},\r\n\tCommented: {\r\n\t\tkey: 'commented',\r\n\t\tdoOfferCandidate: true,\r\n\t\tlabelId: 'comments',\r\n\t},\r\n};\r\n\r\nexport default AlertType;\r\n","import { Select, Switch } from 'antd';\r\nimport React from 'react';\r\nimport { useCollaborativeList } from '../containers/CollaborativeListDataStore';\r\nimport AlertCandidate from './AlertCandidate';\r\nimport AlertMethod from './AlertMethod';\r\nimport AlertType from './AlertType';\r\nimport './manageListNotifications.less';\r\nimport { withLocalize } from '../../Localization/withLocalize';\r\n\r\nconst { Option } = Select;\r\n\r\nfunction ManageListNotifications({ listId, isVerticalView, translate }) {\r\n\tconst collaborativeListDataStore = useCollaborativeList();\r\n\r\n\tconst getActiveSwitch = (alertType, alert) => (\r\n\t\t<Switch\r\n\t\t\tloading={collaborativeListDataStore.state.areAlertsLoading}\r\n\t\t\tcheckedChildren={translate('yes')}\r\n\t\t\tunCheckedChildren={translate('no')}\r\n\t\t\tdefaultChecked={alert ? true : false}\r\n\t\t\tchecked={alert ? true : false}\r\n\t\t\tonChange={e => toggleAlert(e, alertType, alert)}\r\n\t\t/>\r\n\t);\r\n\r\n\tconst getNotificationTypeSelect = (alertType, alert) => {\r\n\t\tconst selectValue = alert\r\n\t\t\t? alert.alertMethod\r\n\t\t\t: AlertMethod.Notification.key;\r\n\t\treturn (\r\n\t\t\t<div className=\"notification-type-select\">\r\n\t\t\t\t<Select\r\n\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\thandleSelectChange(e, alert, 'method', alertType)\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdefaultValue={selectValue}\r\n\t\t\t\t\tvalue={selectValue}>\r\n\t\t\t\t\t<Option value={AlertMethod.Notification.key}>\r\n\t\t\t\t\t\t{translate(AlertMethod.Notification.labelId, {\r\n\t\t\t\t\t\t\tcompanyName: 'Edelweiss',\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</Option>\r\n\t\t\t\t\t<Option value={AlertMethod.Email.key}>\r\n\t\t\t\t\t\t{translate(AlertMethod.Email.labelId)}\r\n\t\t\t\t\t</Option>\r\n\t\t\t\t\t<Option value={AlertMethod.Text.key}>\r\n\t\t\t\t\t\t{translate(AlertMethod.Text.labelId)}\r\n\t\t\t\t\t</Option>\r\n\t\t\t\t</Select>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst getQualifierSelect = (alertType, alert) => {\r\n\t\tconst selectValue = alert\r\n\t\t\t? alert.alertCandidate\r\n\t\t\t: AlertCandidate.All.key;\r\n\t\treturn (\r\n\t\t\t<div className=\"qualifier-select\">\r\n\t\t\t\t<Select\r\n\t\t\t\t\tonChange={e =>\r\n\t\t\t\t\t\thandleSelectChange(e, alert, 'candidate', alertType)\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdefaultValue={selectValue}\r\n\t\t\t\t\tvalue={selectValue}>\r\n\t\t\t\t\t<Option value={AlertCandidate.All.key}>\r\n\t\t\t\t\t\t{translate(AlertCandidate.All.labelId)}\r\n\t\t\t\t\t</Option>\r\n\t\t\t\t\t<Option value={AlertCandidate.JustThoseUserHasTouched.key}>\r\n\t\t\t\t\t\t{translate(\r\n\t\t\t\t\t\t\tAlertCandidate.JustThoseUserHasTouched.labelId,\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Option>\r\n\t\t\t\t</Select>\r\n\t\t\t</div>\r\n\t\t);\r\n\t};\r\n\r\n\tconst getVerticalViewAlertTypeRow = (alertType, alert) => (\r\n\t\t<div className=\"notification-type-row\">\r\n\t\t\t<div className=\"header\">\r\n\t\t\t\t<span className=\"title\">{translate(alertType.labelId)}</span>\r\n\t\t\t\t{getActiveSwitch(alertType, alert)}\r\n\t\t\t</div>\r\n\t\t\t<div className=\"alert-type-section\">\r\n\t\t\t\t{translate('alert_type')}:\r\n\t\t\t\t{getNotificationTypeSelect(alertType, alert)}\r\n\t\t\t</div>\r\n\t\t\t{alertType.doOfferCandidate && (\r\n\t\t\t\t<div className=\"qualifier-section\">\r\n\t\t\t\t\t{translate('qualifier')}:\r\n\t\t\t\t\t{getQualifierSelect(alertType, alert)}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n\r\n\tconst getHorizontalViewAlertTypeRow = (alertType, alert) => (\r\n\t\t<tr>\r\n\t\t\t<td>\r\n\t\t\t\t<span className=\"alert-type-label\">\r\n\t\t\t\t\t{translate(alertType.labelId)}\r\n\t\t\t\t</span>\r\n\t\t\t</td>\r\n\t\t\t<td>{getActiveSwitch(alertType, alert)}</td>\r\n\t\t\t<td>{getNotificationTypeSelect(alertType, alert)}</td>\r\n\t\t\t{alertType.doOfferCandidate && (\r\n\t\t\t\t<td>{getQualifierSelect(alertType, alert)}</td>\r\n\t\t\t)}\r\n\t\t</tr>\r\n\t);\r\n\r\n\tconst getAlertByType = alertType => {\r\n\t\tconst { alerts } = collaborativeListDataStore.state;\r\n\t\tconst alert =\r\n\t\t\tArray.isArray(alerts) &&\r\n\t\t\talerts.find(al => al.alertType === alertType.key);\r\n\t\treturn alert;\r\n\t};\r\n\r\n\tconst getAlertTypeRow = alertType => {\r\n\t\tconst alert = getAlertByType(alertType);\r\n\t\treturn isVerticalView\r\n\t\t\t? getVerticalViewAlertTypeRow(alertType, alert)\r\n\t\t\t: getHorizontalViewAlertTypeRow(alertType, alert);\r\n\t};\r\n\r\n\tconst handleSelectChange = (value, alert, alertAttribute, alertType) => {\r\n\t\tif (alert) {\r\n\t\t\tif (alertAttribute === 'method') {\r\n\t\t\t\talert.alertMethod = value;\r\n\t\t\t} else {\r\n\t\t\t\talert.alertCandidate = value;\r\n\t\t\t}\r\n\t\t\tcollaborativeListDataStore.updateAlert(alert, alertAttribute);\r\n\t\t} else {\r\n\t\t\tvar newAlert = {};\r\n\t\t\tnewAlert.listId = listId;\r\n\t\t\tnewAlert.alertType = alertType.key;\r\n\t\t\tnewAlert.alertMethod =\r\n\t\t\t\talertAttribute === 'method'\r\n\t\t\t\t\t? value\r\n\t\t\t\t\t: AlertMethod.Notification.key;\r\n\t\t\tnewAlert.alertCandidate =\r\n\t\t\t\talertAttribute === 'candidate' ? value : AlertCandidate.All.key;\r\n\t\t\tcollaborativeListDataStore.createNewAlert(newAlert);\r\n\t\t}\r\n\t};\r\n\r\n\tconst toggleAlert = (e, alertType, alert) => {\r\n\t\tif (e === true) {\r\n\t\t\tvar newAlert = {};\r\n\t\t\tnewAlert.listId = listId;\r\n\t\t\tnewAlert.alertType = alertType.key;\r\n\t\t\tnewAlert.alertMethod = AlertMethod.Notification.key;\r\n\t\t\tnewAlert.alertCandidate = AlertCandidate.All.key;\r\n\t\t\tcollaborativeListDataStore.createNewAlert(newAlert);\r\n\t\t} else {\r\n\t\t\tcollaborativeListDataStore.deleteAlert(alert.id);\r\n\t\t}\r\n\t};\r\n\r\n\tconst getAlertTypeRows = () => (\r\n\t\t<>\r\n\t\t\t{getAlertTypeRow(AlertType.AddOrRemoved)}\r\n\t\t\t{getAlertTypeRow(AlertType.Voted)}\r\n\t\t\t{getAlertTypeRow(AlertType.Commented)}\r\n\t\t</>\r\n\t);\r\n\r\n\tconst getHorizontalView = () => (\r\n\t\t<>\r\n\t\t\t<div className=\"main-header\">\r\n\t\t\t\t{translate('manage_list_notifications')}\r\n\t\t\t</div>\r\n\t\t\t<table className=\"notifications-table\">\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<th className=\"table-header\">\r\n\t\t\t\t\t\t{translate('type_of_activity')}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t\t<th className=\"table-header\">{translate('active')}?</th>\r\n\t\t\t\t\t<th className=\"table-header\">{translate('mechanism')}</th>\r\n\t\t\t\t\t<th className=\"table-header\">{translate('qualifier')}</th>\r\n\t\t\t\t</tr>\r\n\t\t\t\t{getAlertTypeRows()}\r\n\t\t\t</table>\r\n\t\t</>\r\n\t);\r\n\r\n\tconst getVerticalView = () => getAlertTypeRows();\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName={`manage-list-notifications ${\r\n\t\t\t\tisVerticalView ? 'vertical-view' : 'horizontal-view'\r\n\t\t\t}`}>\r\n\t\t\t{isVerticalView ? getVerticalView() : getHorizontalView()}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default withLocalize(ManageListNotifications);\r\n","import React from 'react';\r\nimport { Button, Tooltip } from 'antd';\r\n\r\nexport default class ArchiveRequest extends React.Component {\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t<Tooltip title=\"Archive Request\">\r\n\t\t\t\t<Button shape=\"circle\" onClick={this.archiveRequest}>\r\n\t\t\t\t\t<div className=\"icon-archive archive-request\" />\r\n\t\t\t\t</Button>\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t}\r\n\r\n\tarchiveRequest = () => {\r\n\t\talert('Not yet operational');\r\n\t};\r\n}\r\n","import React from 'react';\r\nimport { Button, Tooltip } from 'antd';\r\nimport { useTitle } from '../../Title/containers/TitleDataStore';\r\nimport ReviewEditorAnchor from '../../Reviews/ReviewEditor/ReviewEditorAnchor';\r\nimport { useReviews } from '../../Reviews/containers/ReviewsDataStore';\r\nimport PropTypes from 'prop-types';\r\nimport { useUser } from '../../User/containers/UserDataStore';\r\nimport { useAccountOrMembershipRequiredModalContext } from '../../Anonymous/AccountOrMembershipRequiredModal/contexts/AccountOrMembershipRequiredModalContext';\r\n\r\nReviewTitle.propTypes = {\r\n\tsku: PropTypes.string,\r\n};\r\n\r\nexport default function ReviewTitle({ sku }) {\r\n\tconst { refreshReview } = useTitle();\r\n\tconst { refresh } = useReviews();\r\n\tconst { isAnonymous } = useUser();\r\n\tconst { setIsVisible } = useAccountOrMembershipRequiredModalContext();\r\n\r\n\tconst refreshReviewInfo = () => {\r\n\t\trefreshReview();\r\n\t\trefresh();\r\n\t};\r\n\r\n\tconst renderReviewTitleButton = () => {\r\n\t\treturn (\r\n\t\t\t<Tooltip title=\"Review Title\">\r\n\t\t\t\t<Button shape=\"circle\">\r\n\t\t\t\t\t<div className=\"icon-review-icon review-title\" />\r\n\t\t\t\t</Button>\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t};\r\n\r\n\treturn isAnonymous() ? (\r\n\t\t<div onClick={() => setIsVisible(true)}>\r\n\t\t\t{renderReviewTitleButton()}\r\n\t\t</div>\r\n\t) : (\r\n\t\t<ReviewEditorAnchor sku={sku} onUpdate={refreshReviewInfo}>\r\n\t\t\t{renderReviewTitleButton()}\r\n\t\t</ReviewEditorAnchor>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport { Button, Tooltip, Modal } from 'antd';\r\nimport { withRouter } from 'react-router-dom';\r\nimport combineConnectors from '../../../util/combineConnectors';\r\nimport { connectToCollaborativeList } from '../../../CollaborativeLists/containers/CollaborativeListDataStore';\r\n\r\nconst confirm = Modal.confirm;\r\n\r\nexport class RemoveTitleFromList extends React.Component {\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t<Tooltip title=\"Remove Title from List\">\r\n\t\t\t\t<Button shape=\"circle\" onClick={this.removeFromList}>\r\n\t\t\t\t\t<div className=\"icon-notes-cancel archive-request\" />\r\n\t\t\t\t</Button>\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t}\r\n\r\n\tremoveFromList = () => {\r\n\t\tconst _this = this;\r\n\t\tconst { sku } = this.props;\r\n\t\tconfirm({\r\n\t\t\ttitle: 'Are you sure you want to remove this title from the list?',\r\n\t\t\tonOk() {\r\n\t\t\t\t_this.props.collaborativeListDataStore.removeTitle(\r\n\t\t\t\t\t\tsku\r\n\t\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tonCancel() {\r\n\t\t\t\tconsole.log('Cancel');\r\n\t\t\t},\r\n\t\t});\r\n\t};\r\n}\r\n\r\nconst connectors = [withRouter, connectToCollaborativeList];\r\n\r\nexport default combineConnectors(connectors)(RemoveTitleFromList);\r\n","import { Button, Tooltip } from 'antd';\r\nimport React, { useState } from 'react';\r\nimport ReviewCopyDownloadModalAnchor from '../ReviewCopy/ReviewCopyDownloadModalAnchor';\r\nimport ReviewCopyRequestModalAnchor from '../ReviewCopy/ReviewCopyRequestModalAnchor';\r\nimport ArchiveRequest from '../UI/Actions/ArchiveRequest';\r\nimport CancelRequest from '../UI/Actions/CancelRequest';\r\nimport ReviewTitle from '../UI/Actions/ReviewTitle';\r\nimport RemoveTitleFromList from '../UI/Actions/Titles/RemoveTitleFromList';\r\nimport './titleActivityTile.css';\r\nimport TitleDataStore from './containers/TitleDataStore';\r\nimport { withIsMobile } from 'treeline-react-core-components/WindowSizeProvider';\r\nimport PropTypes from 'prop-types';\r\nimport EdelweissReaderLink from '../ReviewCopy/EdelweissReaderLink';\r\nimport { useWebReaderGalleyAccess } from '../hooks/useWebReaderGalleyAccess';\r\n\r\nexport const TitleActions = ({\r\n\trequest,\r\n\tdownload,\r\n\treview,\r\n\ttitle,\r\n\tdoNotShowSelect,\r\n\tremoveFromCollaborativeList,\r\n\tisMobile,\r\n\tisSelected,\r\n\tselectTitle,\r\n\tpositionBottomRight = false,\r\n}) => {\r\n\tconst [valueChanged, setValueChanged] = useState(false);\r\n\tconst [isChangedSelected, setIsChangeSelected] = useState(false);\r\n\tconst isMobileSize = isMobile();\r\n\tconst { sku } = title;\r\n\tconst { hasWebReaderGalleyAccess } = useWebReaderGalleyAccess();\r\n\r\n\tconst renderSelect = sku => {\r\n\t\tvar displaySelected = valueChanged ? isChangedSelected : isSelected;\r\n\t\tdisplaySelected =\r\n\t\t\tdisplaySelected !== isSelected ? isSelected : displaySelected;\r\n\t\tconst icon = !displaySelected ? 'icon-mark-icon' : 'icon-undo';\r\n\t\tconst changeTo = displaySelected ? 1 : 0;\r\n\t\treturn (\r\n\t\t\t<Tooltip\r\n\t\t\t\ttitle={`${!displaySelected ? 'Select' : 'Unselect'}`}\r\n\t\t\t\tplacement=\"topRight\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"clickable\"\r\n\t\t\t\t\tonClick={() => changeStatus(sku, changeTo)}>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tshape=\"circle\"\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\tbackgroundColor: `${\r\n\t\t\t\t\t\t\t\t!displaySelected\r\n\t\t\t\t\t\t\t\t\t? 'rgb(245, 245, 245)'\r\n\t\t\t\t\t\t\t\t\t: '#ffc321'\r\n\t\t\t\t\t\t\t}`,\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName={icon}\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\tfontSize: '15px',\r\n\t\t\t\t\t\t\t\tmarginTop: '2px',\r\n\t\t\t\t\t\t\t\tcolor: `${\r\n\t\t\t\t\t\t\t\t\t!displaySelected ? '#545454' : '#ffffff'\r\n\t\t\t\t\t\t\t\t}`,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</div>\r\n\t\t\t</Tooltip>\r\n\t\t);\r\n\t};\r\n\r\n\tconst changeStatus = (sku, isSelected) => {\r\n\t\tconst isChangedSelected = isSelected ? false : true;\r\n\t\tsetValueChanged(true);\r\n\t\tsetIsChangeSelected(isChangedSelected);\r\n\t\tselectTitle(sku, isChangedSelected);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName={\r\n\t\t\t\tisMobileSize && positionBottomRight\r\n\t\t\t\t\t? 'list-action-frame-mobile'\r\n\t\t\t\t\t: 'list-action-frame'\r\n\t\t\t}>\r\n\t\t\t{!doNotShowSelect && (\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName={`${\r\n\t\t\t\t\t\tisMobileSize ? 'margin-top-5 ' : ''\r\n\t\t\t\t\t}column-right pad-left-10`}>\r\n\t\t\t\t\t{renderSelect(title.sku)}\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t{removeFromCollaborativeList && (\r\n\t\t\t\t<div className=\"column-right pad-left-10\">\r\n\t\t\t\t\t<RemoveTitleFromList sku={title.sku} />\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t{hasWebReaderGalleyAccess(sku) && (\r\n\t\t\t\t<div className=\"column-right pad-left-5\">\r\n\t\t\t\t\t<EdelweissReaderLink title={title} buttonType=\"round\" />\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t{request && !request.status && (\r\n\t\t\t\t<div className=\"column-right pad-left-10\">\r\n\t\t\t\t\t<CancelRequest\r\n\t\t\t\t\t\tid={request.id}\r\n\t\t\t\t\t\tsubmittedDate={request.submittedDate}\r\n\t\t\t\t\t\tsku={title.sku}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t\t{download ? (\r\n\t\t\t\t<div className=\"column-right\">\r\n\t\t\t\t\t<ReviewCopyDownloadModalAnchor\r\n\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\tdownloadDate={download.downloadDate}\r\n\t\t\t\t\t\tdigitalCreatedDate={title.digitalCreatedDate}\r\n\t\t\t\t\t\tdigitalUpdatedDate={title.digitalUpdatedDate}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t) : (\r\n\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t{title.isDownloadable ? (\r\n\t\t\t\t\t\t<div className=\"column-right\">\r\n\t\t\t\t\t\t\t<ReviewCopyDownloadModalAnchor\r\n\t\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t\t\tdigitalCreatedDate={title.digitalCreatedDate}\r\n\t\t\t\t\t\t\t\tdigitalUpdatedDate={title.digitalUpdatedDate}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<React.Fragment>\r\n\t\t\t\t\t\t\t{title.isRequestable && !request && (\r\n\t\t\t\t\t\t\t\t<div className=\"column-right pad-left-10\">\r\n\t\t\t\t\t\t\t\t\t<ReviewCopyRequestModalAnchor\r\n\t\t\t\t\t\t\t\t\t\ttitle={title}\r\n\t\t\t\t\t\t\t\t\t\tdigitalCreatedDate={\r\n\t\t\t\t\t\t\t\t\t\t\ttitle.digitalCreatedDate\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tdigitalUpdatedDate={\r\n\t\t\t\t\t\t\t\t\t\t\ttitle.digitalUpdatedDate\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</React.Fragment>\r\n\t\t\t)}\r\n\t\t\t{download && !review && (\r\n\t\t\t\t<TitleDataStore sku={title.sku} doNotLoad={true}>\r\n\t\t\t\t\t<div className=\"column-right\">\r\n\t\t\t\t\t\t<ReviewTitle sku={title.sku} />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</TitleDataStore>\r\n\t\t\t)}\r\n\t\t\t{request && request.status === 'approved' && !download && (\r\n\t\t\t\t<div className=\"column-right pad-left-10\">\r\n\t\t\t\t\t<ArchiveRequest request={request.id} />\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default withIsMobile(TitleActions);\r\n\r\nTitleActions.propTypes = {\r\n\tdownload: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\r\n\treview: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\r\n\tisMobile: PropTypes.func,\r\n\tisSelected: PropTypes.bool,\r\n\tselectTitle: PropTypes.func,\r\n\ttitle: PropTypes.object,\r\n\tdoNotShowSelect: PropTypes.bool,\r\n\tremoveFromCollaborativeList: PropTypes.bool,\r\n\trequest: PropTypes.object,\r\n\tpositionBottomRight: PropTypes.bool,\r\n};\r\n","import React from 'react';\r\nimport { InputType } from '../../Form/InputType';\r\nimport { RowType } from '../../Form/RowType';\r\nimport { Translate } from '@above-the-treeline/localization';\r\nimport {\r\n\tgetLabelAndInputRow as getLabelAndInputRowOptions,\r\n\tgetLabelAndSelectInputRow as getLabelAndSelectInputRowOptions,\r\n} from '../../Form/Form';\r\n\r\nexport const getInitialFormValuesById = (org, accountInfoForm) => {\r\n\tconst initialFormValuesById = {\r\n\t\taccountType: accountInfoForm.selectedAccountType,\r\n\t\taccountName: org.displayName,\r\n\t\tcountry: org.address.country,\r\n\t\taddress1: org.address.streetAddress1,\r\n\t\taddress2: org.address.streetAddress2,\r\n\t\tcity: org.address.city,\r\n\t\tstateCA: org.address.stateId.toString(),\r\n\t\tstateUS: org.address.stateId.toString(),\r\n\t\tzip: org.address.postalCode,\r\n\t\tphone: org.primaryPhone,\r\n\t\tisAccountSearchable: accountInfoForm.isSearchable,\r\n\t\torgID: org.orgID,\r\n\t\torgType: org.orgType,\r\n\t};\r\n\r\n\treturn initialFormValuesById;\r\n};\r\n\r\nexport const getRowOptionsList = accountInfoForm => {\r\n\tconst rowOptionsList = [\r\n\t\tgetLabelAndSelectInputRowOptions(\r\n\t\t\t<Translate id=\"account_type\" />,\r\n\t\t\t'accountType',\r\n\t\t\taccountInfoForm.accountTypes,\r\n\t\t),\r\n\t\tgetLabelAndInputRowOptions(\r\n\t\t\t<Translate id=\"account_name\" />,\r\n\t\t\t'accountName',\r\n\t\t),\r\n\t\tgetLabelAndSelectInputRowOptions(\r\n\t\t\t<Translate id=\"country\" />,\r\n\t\t\t'country',\r\n\t\t\taccountInfoForm.countries,\r\n\t\t\ttrue,\r\n\t\t),\r\n\t\tgetLabelAndInputRowOptions(\r\n\t\t\t<>\r\n\t\t\t\t<Translate id=\"address\" /> 1\r\n\t\t\t</>,\r\n\t\t\t'address1',\r\n\t\t),\r\n\t\tgetLabelAndInputRowOptions(\r\n\t\t\t<>\r\n\t\t\t\t<Translate id=\"address\" /> 2\r\n\t\t\t</>,\r\n\t\t\t'address2',\r\n\t\t),\r\n\t\tgetLabelAndInputRowOptions(<Translate id=\"city\" />, 'city'),\r\n\t\tgetStatesSelectRowOptions(accountInfoForm),\r\n\t\tgetPostalCodeAndPhoneRowOptions(),\r\n\t\tgetIsAccountSearchableRowOptions(),\r\n\t];\r\n\r\n\treturn rowOptionsList;\r\n};\r\n\r\nconst getStatesSelectRowOptions = accountInfoForm => {\r\n\treturn {\r\n\t\trowType: RowType.LabelAndInput,\r\n\t\trowTypeData: {\r\n\t\t\tlabel: <Translate id=\"state\" />,\r\n\t\t\tinputType: InputType.StatesSelect,\r\n\t\t\toptionsCA: {\r\n\t\t\t\tinputId: 'stateCA',\r\n\t\t\t\tselectOptions: accountInfoForm.states_CA,\r\n\t\t\t},\r\n\t\t\toptionsUS: {\r\n\t\t\t\tinputId: 'stateUS',\r\n\t\t\t\tselectOptions: accountInfoForm.states_US,\r\n\t\t\t},\r\n\t\t\tdoShowRow: formValuesById => {\r\n\t\t\t\tconst validCountries = ['US', 'CA'];\r\n\t\t\t\treturn validCountries.includes(formValuesById['country']);\r\n\t\t\t},\r\n\t\t},\r\n\t};\r\n};\r\n\r\nconst getPostalCodeAndPhoneRowOptions = () => {\r\n\treturn {\r\n\t\trowType: RowType.PostalCodeAndPhone,\r\n\t\trowTypeData: {},\r\n\t};\r\n};\r\n\r\nconst getIsAccountSearchableRowOptions = () => {\r\n\treturn {\r\n\t\trowType: RowType.IsAccountSearchableForNewUsers,\r\n\t\trowTypeData: {},\r\n\t};\r\n};\r\n","import React, { useState } from 'react';\r\nimport { Modal, message } from 'antd';\r\nimport { Translate, useTranslate } from '@above-the-treeline/localization';\r\nimport { useUser } from '../../../../User/containers/UserDataStore';\r\nimport {\r\n\tgetInitialFormValuesById,\r\n\tgetRowOptionsList,\r\n} from './AccountInfoModalInitializer';\r\nimport { getRowByType } from '../../Form/Form';\r\nimport { FormId } from '../../Form/FormId';\r\n\r\ninterface IAccountInfoModalProps {\r\n\tisVisible: boolean;\r\n\tsetIsVisible: (boolean) => void;\r\n}\r\n\r\nfunction AccountInfoModal({\r\n\tisVisible,\r\n\tsetIsVisible,\r\n}: IAccountInfoModalProps): JSX.Element {\r\n\tconst { translate } = useTranslate();\r\n\tconst userDataStore = useUser();\r\n\tconst { organization: org, accountInfoForm } = userDataStore.state.user;\r\n\r\n\tconst rowOptionsList = getRowOptionsList(accountInfoForm);\r\n\tconst initialFormValuesById = getInitialFormValuesById(\r\n\t\torg,\r\n\t\taccountInfoForm,\r\n\t);\r\n\r\n\tconst [formValuesById, setFormValuesById] = useState(initialFormValuesById);\r\n\r\n\tconst handleSave = async () => {\r\n\t\tif (!formValuesById['country']) {\r\n\t\t\tModal.warning({\r\n\t\t\t\ttitle: translate('please_select_a_country'),\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tsetIsVisible(false);\r\n\t\t\tconst didSucceed = await userDataStore.saveOrganization(\r\n\t\t\t\tformValuesById,\r\n\t\t\t);\r\n\t\t\treturn didSucceed\r\n\t\t\t\t? message.success(translate('account_information_saved'))\r\n\t\t\t\t: message.error(translate('error_saving_account_information'));\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleCancel = () => setIsVisible(false);\r\n\r\n\tconst getAccountInfoModalRowByType = (rowOptions: {}, i: number) => (\r\n\t\t<React.Fragment key={i}>\r\n\t\t\t{getRowByType(\r\n\t\t\t\trowOptions,\r\n\t\t\t\tformValuesById,\r\n\t\t\t\tsetFormValuesById,\r\n\t\t\t\tFormId.AccountInfo,\r\n\t\t\t\taccountInfoForm,\r\n\t\t\t)}\r\n\t\t</React.Fragment>\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\tvisible={isVisible}\r\n\t\t\ttitle={\r\n\t\t\t\t<b>\r\n\t\t\t\t\t<Translate id=\"edit_account_info\" />\r\n\t\t\t\t</b>\r\n\t\t\t}\r\n\t\t\tonOk={handleSave}\r\n\t\t\tonCancel={handleCancel}\r\n\t\t\tokText={<Translate id=\"save\" />}\r\n\t\t\tdestroyOnClose={true}>\r\n\t\t\t<div className=\"account-info-modal-contents\">\r\n\t\t\t\t{rowOptionsList.map(getAccountInfoModalRowByType)}\r\n\t\t\t</div>\r\n\t\t</Modal>\r\n\t);\r\n}\r\n\r\nexport default AccountInfoModal;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport api from '../../../Api';\r\nimport makeConnectTo from '../../util/makeConnectTo';\r\nimport * as Util from '../../../util';\r\nimport RequestType from '../RequestType';\r\nimport { connectToUser } from '../../User/containers/UserDataStore';\r\n\r\nconst RequestsContext = React.createContext();\r\n\r\nexport const useRequests = () => React.useContext(RequestsContext);\r\n\r\nconst name = 'requestsDataStore';\r\n\r\nexport const connectToRequests = makeConnectTo(RequestsContext, name);\r\n\r\nclass RequestsDataStore extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tchildren: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\r\n\t};\r\n\r\n\tstate = {\r\n\t\trequests: [],\r\n\t\tselectedMenuOption: RequestType.All.key,\r\n\t\tisLoading: true,\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst requestsDataStore = this.getStore();\r\n\t\treturn (\r\n\t\t\t<RequestsContext.Provider value={requestsDataStore}>\r\n\t\t\t\t{typeof this.props.children === 'function'\r\n\t\t\t\t\t? this.props.children(requestsDataStore)\r\n\t\t\t\t\t: this.props.children}\r\n\t\t\t</RequestsContext.Provider>\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { isAnonymous } = this.props.userDataStore;\r\n\t\tif (!isAnonymous()) {\r\n\t\t\tthis.fetchRequests();\r\n\t\t} else {\r\n\t\t\tthis.setState({ isLoading: false });\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.requestsFetch && this.requestsFetch.cancel) {\r\n\t\t\tthis.requestsFetch.cancel();\r\n\t\t}\r\n\t\tif (this.conversationsFetch && this.conversationsFetch.cancel) {\r\n\t\t\tthis.conversationsFetch.cancel();\r\n\t\t}\r\n\t}\r\n\r\n\tgetStore = (state = this.state) => ({\r\n\t\tstate,\r\n\t\trefresh: () => this.refreshRequests(),\r\n\t\tfetchConversationStatus: () => this.fetchConversationStatus(),\r\n\t\tsetSelectedMenuOption: selectedMenuOption =>\r\n\t\t\tthis.setSelectedMenuOption(selectedMenuOption),\r\n\t});\r\n\r\n\trefreshRequests = () => {\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t});\r\n\t\tthis.fetchRequests();\r\n\t\treturn this.requestsFetch.promise;\r\n\t};\r\n\r\n\tfetchRequests = () => {\r\n\t\tconst request = api.cancelableGet(`/api/v1/me/requests`);\r\n\t\trequest.promise.then(this.cacheApiResponse);\r\n\t\tthis.requestsFetch = request;\r\n\t};\r\n\r\n\tcacheApiResponse = apiResponse => {\r\n\t\tconst requests = apiResponse && Util.createTitleObject(apiResponse);\r\n\t\tthis.setState({\r\n\t\t\trequests,\r\n\t\t\tisLoading: false,\r\n\t\t\tskus: this.getSkus(requests),\r\n\t\t});\r\n\t\tthis.fetchConversationStatus();\r\n\t};\r\n\r\n\tgetSkus = titles => {\r\n\t\treturn titles && titles.map(item => item.sku);\r\n\t};\r\n\r\n\tfetchConversationStatus = () => {\r\n\t\tconst { skus } = this.state;\r\n\t\tconst communityId = 0;\r\n\r\n\t\tconst request = api.cancelablePost(\r\n\t\t\t`/api/v1/conversations/${communityId}/titles`,\r\n\t\t\tskus,\r\n\t\t);\r\n\t\trequest.promise.then(this.cacheConversationApiResponse);\r\n\t\tthis.conversationsFetch = request;\r\n\t};\r\n\r\n\tcacheConversationApiResponse = apiResponse => {\r\n\t\tthis.setState({\r\n\t\t\tconversations: apiResponse,\r\n\t\t\tareConversationsLoading: false,\r\n\t\t});\r\n\t};\r\n\r\n\tsetSelectedMenuOption = selectedMenuOption => {\r\n\t\tthis.setState({ selectedMenuOption });\r\n\t};\r\n}\r\n\r\nexport default connectToUser(RequestsDataStore);\r\n"],"sourceRoot":""}