{"version":3,"sources":["components/DateInputFormat/DateInputFormat.tsx","components/EditBookCard/DateInput/DateInput.tsx","requests/getUserInfo.ts","components/Pages/Login/SocialButton/SocialButton.tsx","components/Button/Button.tsx","utils.ts","components/Input/Input.tsx","components/BookCalendar/BooksSidebar/BooksSidebar.tsx","store/user/actions.ts","store/user/redux.ts","store/calendar/actions.ts","store/collections/actions.ts","store/collections/reducers.ts","store/reducers.ts","store/calendar/reducers.ts","store/index.ts","store/user/selectors.ts","requests/saveEmail.ts","components/Pages/SuccessAuth/RequestMail/RequestMail.tsx","components/Pages/SuccessAuth/SuccessAuth.tsx","requests/getBook.ts","requests/getLibraryCard.ts","components/EditBookCard/Select/Select.tsx","components/EditBookCard/DatesWrapper/DatesWrapper.tsx","components/Feed/Card/Card.tsx","components/EditBookCard/EditBookCard.tsx","components/BookDialogPreview/Inner/Inner.tsx","components/BookDialogPreview/BookDialogPreview.tsx","components/BookPage/UserList/PopupUserList/PopupUserList.tsx","components/BookPage/UserList/UserList.tsx","components/Feed/Card/CardDetails/Inner/BookShop/BookShop.tsx","components/Feed/Card/CardDetails/Inner/Inner.tsx","components/CollectionCard/CollectionCard.tsx","components/Feed/FeedList/FeedList.tsx","components/BookPage/OtherBooks/OtherBooks.tsx","components/AdBlock/AdBlock.tsx","components/BookPage/BookPage.tsx","components/Pages/Profile/Settings/Settings.tsx","requests/getCategoriesCard.ts","components/CatrgoriesCardComponent/Category/Category.tsx","components/CatrgoriesCardComponent/Component.tsx","requests/getProfile.ts","components/Pages/Profile/ProfileMenu/ProfileMenu.tsx","components/Pages/Profile/PublicProfile/MobileSlideMenu/MobileSlideMenu.tsx","components/Pages/Profile/UserHistory/UserHistoryItem/UserHistoryItem.tsx","components/Pages/Profile/UserHistory/UserHistory.tsx","components/Pages/Profile/PublicProfile/PublicProfile.tsx","components/Pages/Profile/Profile.tsx","requests/calendar.ts","store/calendar/selectors.ts","requests/saveCard.ts","requests/saveCardProperties.ts","requests/deleteCard.tsx","components/CardsManager/CardsManager.tsx","components/BookCalendar/BooksSidebar/BookChip/BookChip.tsx","components/Calendar/HeightControl/HeightControl.tsx","components/BookCalendar/BookCard/QuickButton/QuickButton.tsx","components/BookCalendar/BooksSidebar/BookFind/BookFind.tsx","requests/findBook.ts","components/Book/Book.tsx","components/Header/FindBook/Initial/Initial.tsx","requests/getAutocomplete.ts","components/Header/FindBook/FindBook.tsx","components/WelcomeBook/WelcomeBook.tsx","components/Header/FindBook/Categroies/Categories.tsx","components/BookCalendar/BooksSidebar/BookSection/CategoriesWrapper/CaategoriesWrapper.tsx","components/BookCalendar/BooksSidebar/BookSection/BookSection.tsx","components/ReviewPopup/ReviewPopup.tsx","requests/getNotes.ts","components/Notes/NotesInner/Note/Note.tsx","components/Notes/NotesInner/NotesInner.tsx","requests/addNote.ts","requests/editNote.ts","requests/deleteNote.ts","components/Notes/Notes.tsx","components/PeekCategory/PeekCategory.tsx","store/collections/selectors.ts","components/BookCalendar/MobileCalendar/MobileBookCard/MobileBookHeader/MobileBookPeekCategory/MobileBookPeekCategory.tsx","components/BookCalendar/MobileCalendar/MobileBookCard/MobileBookHeader/MobileBookHeader.tsx","components/CardHistory/CardHistoryItem/CardHistoryItem.tsx","requests/hideHistory.ts","components/PopupEditBookCard/PopupEditBookCard.tsx","requests/editHistory.ts","components/CardHistory/CardHistory.tsx","components/ReviewPopup/Inner/ReviewSlider/ReviewSlider.tsx","components/ReviewPopup/Inner/ReviewText/ReviewText.tsx","components/ReviewPopup/Inner/Inner.tsx","requests/addReview.ts","components/MobileCalendar/utils.ts","components/BookCalendar/BookCard/ReviewCard/ReviewCard.tsx","components/BookCalendar/MobileCalendar/MobileBookCard/MobileBookCard.tsx","components/BookCalendar/MobileCalendar/MobileCalendar.tsx","components/BookCalendar/BookCalendar.tsx","components/BookCalendar/BookCard/Cancel/Cancel.tsx","components/BookCalendar/BookCard/BookCard.tsx","components/BookCalendar/BookCardWrapper/BookCardWrapper.tsx","components/Calendar/Week/Month/MonthModal/MonthModal.tsx","components/Calendar/Week/Month/Month.tsx","components/Calendar/Week/GroupOfMonth.tsx","components/Calendar/Header/Header.tsx","components/Calendar/Welcome/WelcomeCalendar.tsx","components/Calendar/Calendar.tsx","components/MobileBooks/MobileBookSection/MobileBookSection.tsx","components/MobileCalendar/Month/CardsGroup/CardInner/CardPopup/CardPopup.tsx","components/MobileCalendar/Month/CardsGroup/CardInner/CardInner.tsx","components/MobileCalendar/Month/CardsGroup/CardsGroup.tsx","components/MobileCalendar/Month/Month.tsx","components/MobileCalendar/MobileCalendar.tsx","components/Calendar/CalendarWrapper.tsx","components/Pages/Calendar/CalendarPage.tsx","components/Pages/Login/LoginPage.tsx","components/BookCalendar/BookCalendarWrapper.tsx","components/Pages/BookForm/BookForm.tsx","components/MobileBooks/components/BooksSection/BooksSection.tsx","components/MobileBooks/MobileBooks.tsx","components/Pages/MyBooks/MyBooks.tsx","components/Footer/MobileFooter/MobileFooter.tsx","components/Footer/Footer.tsx","requests/getCollection.ts","components/CollectionCard/Collection/Control/Control.tsx","components/CollectionCard/Collection/Collection.tsx","components/Collections/AddCollection/BooksList/BookItem/EditDetails/EditDetails.tsx","components/Collections/AddCollection/BooksList/BookItem/BookItem.tsx","components/Collections/AddCollection/BooksList/BooksList.tsx","requests/addCollection.ts","components/Collections/AddCollection/AddCollection.tsx","components/Collections/Collections.tsx","components/Feed/FeedHeader/FeedHeader.tsx","components/Feed/Feed.tsx","components/Pages/List/List.tsx","components/Component.tsx","components/AddBookFloat/AddBookFloat.tsx","components/SearchModule/SearchModule.tsx","components/UserModule/UserModule.tsx","App.tsx","serviceWorker.ts","index.tsx","types/LibraryCard.ts","components/Select/Select.tsx","components/SettingsForm/Field/Field.tsx"],"names":["DateInputFormat","props","inputRef","React","localedFormat","parseISO","date","setValid","isMobile","useMediaQuery","maxWidth","MOBILE_MAX_WIDTH","getDate","day","setDay","getMonth","month","setMonth","getFullYear","year","setYear","months","dayItems","days","push","value","name","i","label","toString","monthItems","yearItems","years","start","minYear","Date","finish","resultStr","parseInt","parsed","parse","isValid","hideDay","onChange","className","Select","items","e","target","formClassName","native","disableDelete","onClick","ref","type","DateInput","openDate","setDate","toISOString","selected","dateFormat","openToDate","defaultDate","locale","ru","customInput","Input","event","onBlur","error","InputProps","endAdornment","InputAdornment","position","IconButton","withPortal","popperPlacement","showMonthYearPicker","a","Headers","fetch","API_URL","credentials","json","result","SocialButton","text","Button","cn","isLoading","children","TABLET_MAX_WIDTH","MARK_LABELS","getReadableCardType","cardType","CardType","AlreadyRead","ReadNow","WantRead","getDatePeriod","startRead","finishRead","begin","to","_startRead","_finishRead","startFormat","isSameYear","isSameMonth","formatStr","format","variant","fullWidth","InputLabelProps","classes","root","shrink","focused","disableUnderline","Sections","setCurrentUserAction","createAction","initialUserState","sessionToken","userId","user","userRedux","handleAction","state","payload","pushBooksAction","setBooksAction","setBookProperties","deleteBookAction","removeHistoryItem","editHistoryItem","addCollectionsAction","initialStateCollection","collections","rootReducer","combineReducers","currentUser","calendarBooks","action","cards","forEach","card","eId","newState","cardId","properties","history","filter","id","historyId","map","startDate","finishDate","end","createAppStore","store","createStore","getCachedState","applyMiddleware","subscribe","localStorage","setItem","JSON","stringify","getState","cache","getItem","cachedState","getUserState","getUserProfile","createSelector","userState","email","request","jsonRequest","EMAIL_REGEX","RequestMail","setError","loading","setLoading","Dialog","open","onClose","hiddenLabel","helperText","current","test","saveEmail","then","connect","URLSearchParams","useLocation","search","get","canRedirect","setRedirect","suggestEmail","setSuggestEmail","userProfile","useHistory","useSelector","window","location","href","success","query","internalId","data","SelectType","field","useField","input","disabled","DatesWrapper","setHasErrors","startReading","dateBeginNameField","validate","allValues","withEndDate","hasOwnProperty","dateEndNameField","isAfter","forHistory","differenceInMonths","finishReading","isBefore","meta","Card","book","dummy","moreText","toBookPage","flatCategory","hiddenCheckIcon","link","woo_id","style","backgroundImage","image","dangerouslySetInnerHTML","__html","description","collection","author","EditBookCard","errors","setErrors","isSaving","setSaving","getInitialValues","today","onlyHistoryAdd","periodEdit","start_reading","finish_reading","forcedSection","forcedStartRead","libraryCard","hideBookCard","onSubmit","form","CardPropertyType","CardHistoryStart","CardHistoryEnd","Type","DateBegin","DateFinish","onHistoryEdit","saveProperties","onSaved","saveCard","ym","bookId","externalId","bookName","initialValues","mutators","setStartDate","arg","tools","changeValue","selectedType","values","readOnly","setFastDate","addDays","addMonths","handleSubmit","FormControl","display","Inner","setBook","libraryInfo","setLibraryInfo","bookWooId","getBook","bookExternalId","getLibraryCard","library","CircularProgress","BookDialogPreview","fullScreen","scroll","paper","PopupUserList","users","src","imageURL","primary","UserList","initialLabel","setUsers","setOpen","length","usersLabel","startUser","otherUsers","slice","BookShop","shop","item","icon","url","context","callbacks","show","setShow","descWrapperRef","showMoreRef","classList","remove","height","offsetHeight","childHeight","firstChild","console","log","add","shops","addCard","saveCardProperties","CollectionCard","cardRender","card_selected","isSelected","header","FeedList","books","limit","onMoreLoad","page","filteredBooks","key","Array","OtherBooks","related","setBooks","AdBlock","BookPage","editBookOpen","setEditBookOpen","useParams","scrollTo","top","Helmet","back","marginTop","reload","Settings","SettingsPage","fallback","Category","category","width","percent","Component","categories","setCategories","categoryVisible","setCategoriesVisible","isCancelled","getCategoriesCard","visibleCategories","hiddenCategories","hiddenCategoriesPercent","total","disable","Collapse","in","index","lastId","ProfileMenu","MenuList","MenuItem","MobileSlideMenu","anchor","UserHistoryItemComponent","UserHistoryComponent","PublicProfile","params","publicProfile","setPublicProfile","historyItems","setHistoryItems","getProfile","readNow","alreadyRead","userHistory","canBeEditable","keys","profilePage__header_loading","ProfilePage","path","strict","queries","queriesArray","join","sortByDate","b","aDateBegin","bDateBegin","getCardsArray","array","sort","getAlreadyReadBooks","getReadNowBooks","getWantReadBooks","getCardsByDateNew","cardsByYears","addedBooksMap","Map","parsedDate","getYear","checkKey","has","endDate","set","bookDates","getDatePeroid","peroid","monthCount","differenceInCalendarMonths","currentMonth","pushToState","getStateYearState","getStateMonth","variables","headers","append","method","body","pushBooks","deleteBook","calendarState","getCardsRequest","currentDate","startOfYear","endOfYear","calendar","byTypeRequest","wantRead","iId","saveCardPropertiesCallback","deleteCardRequest","deleteCard","withoutInitial","BookChip","customPeriod","datePeriod","color","minWidth","HeightControl","wrapperRef","innerRef","showMore","setShowMore","updateHeight","wrapperHeight","childNodes","firstElementChild","firstChildHeight","childsCount","minCount","Math","round","child","addEventListener","removeEventListener","flexDirection","flex","onClickMore","buttonText","BookFind","inputVisible","setInputVisible","htmlColor","TextField","onInputChanged","autoFocus","placeholder","Book","clickable","FindBook","fullMode","setFullMode","addedBooks","setAddedBooks","selectedBookId","setSelectedBookId","autocomplete","setAutocomplete","setSearch","disableFullMode","onFocus","getResults","bookSearch","findBook","getAutocomplete","onBookClick","onBookSelect","enableFullMode","setTimeout","focus","filteredBook","dummyRender","onOutsideClick","spellCheck","autoComplete","fontSize","LinearProgress","onClickCard","WelcomeBook","suggestedBooks","selectedBook","setSelectedBook","Categories","Chip","onDelete","selectedCategory","removeCategory","setCategory","CategoriesWrapper","categoriesArray","categoriesCardMap","count","setCollection","selectedCollection","BookSection","setFilteredBook","toLowerCase","indexOf","onSearchChange","onSearchClose","CallbacksContext","sectionName","onChangeSection","All","onCardSelect","ReviewPopupStatus","BooksSidebar","sections","emptyText","section","find","onlySection","Note","editMode","setEditMode","setDelete","menuOpen","setMenuOpen","actionRef","note","defaultValue","multiline","onEdit","aria-controls","aria-haspopup","anchorEl","NotesInner","buttonsVisible","setButtonsVisible","textField","notes","inputProps","addNote","Notes","setNotes","updateNotesList","getNotes","addNoteRequest","editNoteRequest","noteId","editNote","deleteNoteRequest","deleteNote","PeekCategory","setSelected","categoriesList","getCollections","cationIcon","viewBox","fill","xmlns","cx","cy","r","stroke","stroke-width","d","MobileBookPeekCategory","MobileBookHeader","hideEditBookOpen","CardHistoryItem","period","goToCalendar","edit","editHistory","controlsVisible","setControls","isDesktop","PopupEditBookCard","editBookProps","removeHistory","editHistoryRedux","addBookDate","setBookDate","editBook","setEditBook","setHistory","popupClose","datesArray","tmp","differenceInDays","removeFromHistory","hideHistory","iso","onEditHistoryHandler","editHistoryRequest","ReviewSlider","min","max","marks","step","ReviewText","setSymbols","defaultText","symbolsLeft","onSend","isSuccess","isError","review","mark","setMark","setText","isRecommend","recommend","setRecomment","control","checked","MonthType","ReviewPopup","Ready","status","setStatus","Sending","addReview","onPublished","Success","Error","ReviewCard","dialogOpen","setDialog","openPopup","MobileBookCard","MobileCalendar","defaultSection","selectedSection","setSection","setCard","BookCalendar","Provider","setCardId","Cancel","onClickHandler","BookCard","setforcedSection","BookCardWrapper","MonthModal","setSelectedCard","readed","getTime","future","isFuture","startOfMonth","past","isPast","Month","selectedCard","openedMonth","setOpenMonth","month_empty","day_fromOtherMonth","day_current","GroupOfMonths","CalendarHeader","onDateChange","dir","changeDate","addYears","forceToOld","headerText","WelcomeCalendar","isOpened","setClose","content","MAX_MONTHS_IN_GROUP","booksByYears","calendarProps","monthGroup","monthIndex","monthNumber","Object","GroupOfMonth","MobileBookSectionEnum","findIntersection","sortedCards","newGroups","wantedReadBooksGroup","startedFromPrevMonth","startNextMonth","lastGroupCard","endNextMonth","areIntervalsOverlapping","newNewGroup","group","CardPopup","CardInner","startInOtherMonth","hidePeriod","data-card-id","CardsGroup","cardsGroup","isEmpty","short","monthHeaderRef","monthHeaderWrapperRef","onScroll","divHeight","offsetTop","scrollY","changeFocusedMonth","startMonth","endMonth","endOfMonth","month_winter","month_spring","month_summer","month_autumn","zIndex","cardGroup","setOpenDate","monthWrapperRef","calendarRef","highlightedCardId","div","querySelector","behavior","cardByDates","booksOfMonth","getMonths","divAnchor","document","getElementById","focusMonth","CalendarWrapper","setCurrentDate","welcomeType","enableWelcomeBook","CalendarPage","exact","googleAuth","vkAuth","facebookAuth","facebookEndpoint","LoginPage","BookCalendarWrapper","goBack","Status","MobileBookSection","MobileBook","readNowBooks","wantReadBooks","alreadyReadBooks","addBookButton","bookShowType","MyBooks","MobileFooter","isUser","pathname","includes","Footer","Link","Control","Collection","collectionId","Request","getCollection","firstName","lastName","EditDetails","nameRef","descRef","onSave","BookItem","setEdit","nameField","descField","bookDesc","desc","updateValue","bookReducer","row","BooksList","bookState","dispatch","fields","update","bookType","AddCollection","addCollection","arrayMutator","Field","Collections","FeedHeader","backgroundUrl","onBack","Feed","setCollections","setPage","opened","route","collectionsArray","bigImage","List","BookForm","undefined","bookAuthor","submitSucceeded","submitFailed","submitting","addCollections","setUser","getUserInfo","indexPage","useRouteMatch","isExact","AddBookFloat","SearchModule","UserModule","App","config","ReactDOM","createPortal","Boolean","hostname","match","rootDiv","render","StrictMode","navigator","serviceWorker","ready","registration","unregister","catch","message","CardColor","rootClassName","selectProps","labelId","option","options"],"mappings":"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","file":"static/js/main.2cdf0ca4.chunk.js","sourcesContent":["import * as React from \"react\";\r\nimport { localedFormat, MOBILE_MAX_WIDTH } from \"../../utils\";\r\nimport parseISO from \"date-fns/parseISO\";\r\nimport { parse, isValid } from \"date-fns\";\r\nimport MaskedInput from \"react-text-mask\";\r\nimport Select from \"../Select/Select\";\r\nimport \"./DateInputFormat.css\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\n\r\ninterface Props {\r\n\tdate: string;\r\n\tname: string;\r\n\tonChange: (value: Date) => void;\r\n\tlabel: string;\r\n\tminYear?: number;\r\n\tdisableDelete?: boolean;\r\n\thideDay?: boolean;\r\n}\r\n\r\nconst InputType: React.FC = (props) => {\r\n\tconst { inputRef, ...otherProps } = props as any;\r\n\r\n\treturn (\r\n\t\t {\r\n\t\t\t\tinputRef(ref ? ref.inputElement : null);\r\n\t\t\t}}\r\n\t\t\tmask={[/\\d/, /\\d/, \".\", /\\d/, /\\d/, \".\", /\\d/, /\\d/, /\\d/, /\\d/]}\r\n\t\t\tshowMask={true}\r\n\t\t\tinputMode=\"numeric\"\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nconst DateInputFormat: React.FC = (props) => {\r\n\tconst inputRef = React.useRef(null);\r\n\tconst formattedDate = localedFormat(parseISO(props.date), \"dd.MM.yyyy\");\r\n\tconst [valid, setValid] = React.useState(true);\r\n\r\n\tconst date = props.date ? parseISO(props.date) : null;\r\n\r\n\tconst isMobile = useMediaQuery({ maxWidth: MOBILE_MAX_WIDTH });\r\n\r\n\tconst [day, setDay] = React.useState(date?.getDate() || \"\");\r\n\tconst [month, setMonth] = React.useState(date?.getMonth() || \"\");\r\n\tconst [year, setYear] = React.useState(date?.getFullYear() || \"\");\r\n\r\n\tconst months = [\r\n\t\t\"января\",\r\n\t\t\"февраля\",\r\n\t\t\"марта\",\r\n\t\t\"апреля\",\r\n\t\t\"мая\",\r\n\t\t\"июня\",\r\n\t\t\"июля\",\r\n\t\t\"августа\",\r\n\t\t\"сентября\",\r\n\t\t\"октября\",\r\n\t\t\"ноября\",\r\n\t\t\"декабря\",\r\n\t];\r\n\r\n\tconst dayItems = React.useMemo(() => {\r\n\t\tconst days = [];\r\n\r\n\t\tif (isMobile) {\r\n\t\t\tdays.push({\r\n\t\t\t\tvalue: '',\r\n\t\t\t\tname: ''\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tfor (let i = 1; i < 32; i++) {\r\n\t\t\tdays.push({\r\n\t\t\t\tvalue: i,\r\n\t\t\t\tlabel: i.toString(),\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn days;\r\n\t}, []);\r\n\r\n\tconst monthItems = React.useMemo(() => {\r\n\t\tconst month = [];\r\n\r\n\t\tif (isMobile) {\r\n\t\t\tmonth.push({\r\n\t\t\t\tvalue: '',\r\n\t\t\t\tname: ''\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < 12; i++) {\r\n\t\t\tmonth.push({\r\n\t\t\t\tvalue: i,\r\n\t\t\t\tlabel: months[i],\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn month;\r\n\t}, []);\r\n\r\n\tconst yearItems = React.useMemo(() => {\r\n\t\tconst years = [];\r\n\t\tconst start = props.minYear ? props.minYear : new Date().getFullYear() - 10;\r\n\t\tconst finish = new Date().getFullYear() + 10;\r\n\r\n\t\tif (isMobile) {\r\n\t\t\tyears.push({\r\n\t\t\t\tvalue: \"\",\r\n\t\t\t\tlabel: \"\"\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tfor (let i = start; i < finish; i++) {\r\n\t\t\tyears.push({\r\n\t\t\t\tvalue: i,\r\n\t\t\t\tlabel: i.toString(),\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn years;\r\n\t}, []);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (day && (month || month === 0) && year) {\r\n\t\t\tconst resultStr = `${day}-${\r\n\t\t\t\tparseInt(month ? (month as any) : 0) + 1\r\n\t\t\t}-${year}`;\r\n\r\n\t\t\tconst parsed = parse(resultStr, \"d-M-yyyy\", new Date());\r\n\r\n\t\t\tif (isValid(parsed)) {\r\n\t\t\t\tif (props.hideDay) {\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\r\n\t\t\t\tprops.onChange(parsed ? parsed : null);\r\n\t\t\t} else {\r\n\t\t\t\tsetValid(false);\r\n\t\t\t}\r\n\t\t}\r\n\t}, [day, month, year, props.hideDay]);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tconst date = props.date ? parseISO(props.date) : null;\r\n\r\n\t\tsetDay(date?.getDate());\r\n\t\tsetMonth(date?.getMonth());\r\n\t\tsetYear(date?.getFullYear());\r\n\t}, [props.date]);\r\n\r\n\tconst onClear = () => {\r\n\t\tprops.onChange(null);\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{!props.hideDay && setDay(e.target.value as any)}\r\n\t\t\t\t\t\tformClassName=\"dates__Select__select\"\r\n\t\t\t\t\t\tnative={isMobile}\r\n\t\t\t\t\t/>}\r\n\t\t\t\t\t setMonth(e.target.value as any)}\r\n\t\t\t\t\t\tformClassName=\"dates__Select__select\"\r\n\t\t\t\t\t\tnative={isMobile}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t setYear(e.target.value as any)}\r\n\t\t\t\t\t\tformClassName=\"dates__Select__select\"\r\n\t\t\t\t\t\tnative={isMobile}\r\n\t\t\t\t\t/>\r\n\t\t\t\t
\r\n\r\n\t\t\t\t{!props.disableDelete && props.date &&
очистить
}\r\n\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default DateInputFormat;\r\n","import * as React from 'react';\r\nimport DatePicker from 'react-datepicker';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport Input from '../../Input/Input';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport ru from 'date-fns/locale/ru';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport DateInputFormat from '../../DateInputFormat/DateInputFormat';\r\nimport InputAdornment from '@material-ui/core/InputAdornment';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\ninterface Props {\r\n\tname: string;\r\n\tlabel: string;\r\n\terror?: boolean;\r\n\tonChange?: (event: any) => void;\r\n\tonBlur?: (event: any) => void;\r\n\tdefaultDate?: Date;\r\n\topenDate?: Date;\r\n\tvalue?: string;\r\n\tminYear?: number;\r\n\tdisableDelete?: boolean;\r\n\thideDay?: boolean;\r\n}\r\n\r\nconst CalendarContainer: React.FC = props => {\r\n\treturn \r\n\t\t{props.children}\r\n\t\r\n};\r\n\r\n\r\nconst DateInput: React.FunctionComponent = props => {\r\n\tconst [date, setDate] = React.useState(props.openDate || new Date());\r\n\tconst isMobile = useMediaQuery({ maxWidth: \"600px\" });\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetDate(props.openDate);\r\n\t}, [props.openDate]);\r\n\r\n\tconst onChange = (date: Date) => {\r\n\t\tsetDate(date);\r\n\r\n\t\tprops.onChange(date?.toISOString());\r\n\t}\r\n\r\n\tconst onClear = () => {\r\n\t\tsetDate(null);\r\n\t\tprops.onChange('');\r\n\t};\r\n\r\n\treturn <>\r\n\t\t{!isMobile && {\r\n\t\t\t\t\t\tprops.onChange(event)\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tonBlur={event => {\r\n\t\t\t\t\t\tprops.onBlur(event)\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tname={props.name}\r\n\t\t\t\t\terror={props.error}\r\n\t\t\t\t\tlabel={props.label}\r\n\t\t\t\t\tInputProps={{\r\n\t\t\t\t\t\tendAdornment: date && !props.disableDelete && \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/>\r\n\t\t\t}\r\n\t\t\twithPortal={isMobile}\r\n\t\t\tpopperPlacement=\"top-center\"\r\n\t\t\tshowMonthYearPicker={props.hideDay}\r\n\t\t/>}\r\n\r\n\t\t{isMobile && }\r\n\t;\r\n};\r\n\r\nexport default DateInput;","import { User } from \"../types/User\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\tconst result: User = await (await fetch(`${API_URL}/userProfile`, {\r\n\t\tcredentials: 'include'\r\n\t})).json();\r\n\r\n\treturn result;\r\n}\r\n","import * as React from 'react';\r\nimport Button from '../../../Button/Button';\r\nimport './SocialButton.css';\r\n\r\ninterface Props {\r\n\ttype: 'google' | 'vk' | 'facebook';\r\n\tonClick: () => void;\r\n\ttext: string;\r\n}\r\n\r\nconst SocialButton: React.FunctionComponent = props => {\r\n\treturn ;\r\n};\r\n\r\nexport default SocialButton;\r\n","import * as React from 'react';\r\nimport './Button.css';\r\nimport cn from 'classnames';\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n\tonClick?: () => void;\r\n\tref?: any;\r\n\ttype?: 'primary' | 'secondary';\r\n\tisLoading?: boolean;\r\n}\r\n\r\nconst Button: React.FunctionComponent = props => {\r\n\treturn {}}\r\n\t\tref={props.ref}\r\n\t>\r\n\t\t{props.isLoading ? '...' : props.children}\r\n\t;\r\n};\r\n\r\nexport default Button;\r\n","import { User } from \"./types/User\";\r\nimport getUserInfo from \"./requests/getUserInfo\";\r\nimport { CardType } from \"./types/LibraryCard\";\r\nimport { format, isSameYear, isSameMonth, isValid, parseISO } from \"date-fns\";\r\nimport { ru } from 'date-fns/locale';\r\n\r\nexport const API_URL = process.env.NODE_ENV === 'development' ? 'http://localhost:3001' : 'https://api.readed.me';\r\nexport const TABLET_MAX_WIDTH = 820;\r\nexport const MOBILE_MAX_WIDTH = 600;\r\n\r\nexport const MARK_LABELS = [\r\n\t\"Самое худшее, что я читал(а)\",\r\n\t\"Очень плохо\",\r\n\t\"Плохо\",\r\n\t\"Посредственно\",\r\n\t\"Удовлетворительно\",\r\n\t\"Средне\",\r\n\t\"Выше среднего\",\r\n\t\"Хорошо\",\r\n\t\"Очень хорошо\",\r\n\t\"Отлично\",\r\n];\r\n\r\nlet userProfile: User;\r\n\r\nconst getUserProfileRequest = async () => {\r\n\tif (!!localStorage.getItem('session_token')) {\r\n\t\tconst profile = await getUserInfo();\r\n\r\n\t\tuserProfile = profile;\r\n\r\n\t\tlocalStorage.setItem('userProfile', JSON.stringify(userProfile));\r\n\t}\r\n}\r\n\r\nexport const useProfile = async () => {\r\n\tif (!userProfile) {\r\n\t\tawait getUserProfileRequest();\r\n\t}\r\n\r\n\treturn userProfile;\r\n};\r\n\r\nexport const getReadableCardType = (cardType: CardType) => {\r\n\tswitch (cardType) {\r\n\t\tcase CardType.AlreadyRead:\r\n\t\t\treturn 'Прочитано';\r\n\t\t\r\n\t\tcase CardType.ReadNow:\r\n\t\t\treturn 'Читаю';\r\n\t\t\r\n\t\tcase CardType.WantRead:\r\n\t\t\treturn 'Хочу прочитать';\r\n\t}\r\n}\r\n\r\n\r\nexport const getDatePeriod = (startRead: Date | string, finishRead?: Date | string, begin: string = '', to: string = ' - ', hideDay?: boolean): string => {\r\n\tconst _startRead = startRead instanceof Date ? startRead : parseISO(startRead as string);\r\n\tconst _finishRead = finishRead instanceof Date || !finishRead ? finishRead as Date : parseISO(finishRead as string);\r\n\r\n\tconst startFormat = hideDay ? 'MMMM' : 'd MMMM';\r\n\r\n\tif (!isValid(_startRead)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (!_finishRead) {\r\n\t\treturn `с ${localedFormat(\r\n\t\t\t_startRead,\r\n\t\t\t`${startFormat}${isSameYear(_startRead, new Date()) ? \"\" : \" yyyy\"}`\r\n\t\t)}`;\r\n\t}\r\n\r\n\tif (isSameYear(_startRead, _finishRead)) {\r\n\t\tif (isSameMonth(_startRead, _finishRead)) {\r\n\t\t\treturn `${begin}${localedFormat(_startRead, 'd')} ${to} ${localedFormat(_finishRead, startFormat)}`;\r\n\t\t}\r\n\r\n\t\treturn `${begin}${localedFormat(_startRead, startFormat)} ${to} ${localedFormat(_finishRead, startFormat)}`;\r\n\t}\r\n\r\n\treturn `${begin}${localedFormat(_startRead, `${startFormat}, yyyy`)} ${to} ${localedFormat(_finishRead, `${startFormat}, yyyy`)}`\r\n};\r\n\r\nexport const localedFormat = (date: Date, formatStr: string): string => {\r\n\tif (!isValid(date)) {\r\n\t\treturn;\r\n\t}\r\n\r\n\treturn format(date, formatStr, {\r\n\t\tlocale: ru\r\n\t});\r\n};\r\n","import * as React from 'react';\r\nimport TextField, { TextFieldProps } from '@material-ui/core/TextField';\r\nimport './Input.css';\r\n\r\nconst Input: React.FunctionComponent = props => {\r\n\treturn ;\r\n};\r\n\r\nexport default Input;\r\n","import * as React from \"react\";\r\nimport \"./BooksSidebar.css\";\r\nimport { LibraryCard } from \"../../../types/LibraryCard\";\r\nimport BookSection from \"./BookSection/BookSection\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\n\r\nexport enum Sections {\r\n\tWantRead = \"WantRead\",\r\n\tAlreadyRead = \"AlreadyRead\",\r\n\tReadNow = \"ReadNow\",\r\n\tAll = \"All\",\r\n}\r\n\r\ninterface Props {\r\n\twantRead: LibraryCard[];\r\n\talreadyRead: LibraryCard[];\r\n\treadNow: LibraryCard[];\r\n\tonCardSelect?: (bookId: number) => void;\r\n\tonlySection?: Sections;\r\n\tselectedBookId?: number;\r\n\tonChangeSection?: (type: Sections) => void;\r\n}\r\n\r\ninterface Section {\r\n\tname: string;\r\n\ttype: Sections;\r\n\tcards: LibraryCard[];\r\n\temptyText: string;\r\n}\r\n\r\nexport const BooksSidebar: React.FunctionComponent = (props) => {\r\n\tconst isMobile = useMediaQuery({ maxWidth: 600 });\r\n\r\n\tconst sections: Section[] = React.useMemo(() => {\r\n\t\treturn [\r\n\t\t\t{\r\n\t\t\t\tname: \"📆 Этот месяц\",\r\n\t\t\t\ttype: Sections.ReadNow,\r\n\t\t\t\tcards: props.readNow,\r\n\t\t\t\temptyText: \"Нет книг, запланированных для чтения в этом месяце\",\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: \"🕑 Хочу прочитать\",\r\n\t\t\t\ttype: Sections.WantRead,\r\n\t\t\t\tcards: props.wantRead,\r\n\t\t\t\temptyText: \"Добавьте книги, которые вы планируете прочитать\",\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: \"✅ Вы прочли ранее\",\r\n\t\t\t\ttype: Sections.AlreadyRead,\r\n\t\t\t\tcards: props.alreadyRead,\r\n\t\t\t\temptyText: \"Добавьте книги, которые вы прочитали\",\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: \"Все\",\r\n\t\t\t\ttype: Sections.All,\r\n\t\t\t\tcards: [...props.readNow, ...props.wantRead, ...props.alreadyRead],\r\n\t\t\t\temptyText: \"\"\r\n\t\t\t}\r\n\t\t];\r\n\t}, [props.alreadyRead, props.wantRead]);\r\n\r\n\tif (isMobile) {\r\n\t\tconst section = sections.find(\r\n\t\t\t(section) => section.type === props.onlySection\r\n\t\t);\r\n\r\n\t\treturn (\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{sections.filter(section => section.type !== Sections.All).map((section) => {\r\n\t\t\t\treturn (\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 BooksSidebar;\r\n","import { createAction } from \"redux-actions\";\r\nimport { UserState } from \"./redux\";\r\n\r\nexport const SET_CURRENT_USER = \"SET_CURRENT_USER\";\r\n\r\nexport const setCurrentUserAction = createAction(SET_CURRENT_USER);\r\n\r\n","import { User } from \"../../types/User\";\r\nimport { handleAction, Action } from \"redux-actions\";\r\nimport { SET_CURRENT_USER } from \"./actions\";\r\n\r\nexport interface UserState {\r\n\tsessionToken?: string;\r\n\tuserId?: number;\r\n\tuser?: User;\r\n}\r\n\r\nexport const initialUserState: UserState = {\r\n\tsessionToken: \"\",\r\n\tuserId: -1,\r\n\tuser: null\r\n};\r\n\r\nexport const userRedux = handleAction(SET_CURRENT_USER, (state, payload) => {\r\n\treturn payload.payload;\r\n}, initialUserState);\r\n","import { createAction } from \"redux-actions\";\r\nimport { LibraryCard, CardProperties, CardType } from \"../../types/LibraryCard\";\r\n\r\nexport const SET_BOOKS = 'SET_BOOKS';\r\nexport const PUSH_BOOKS = 'PUSH_BOOKS';\r\nexport const SET_BOOK_PROPERTIES = \"SET_BOOK_PROPERTIES\";\r\nexport const DELETE_BOOKS = 'DELETE_BOOKS';\r\nexport const REMOVE_HISTORY_ITEM = \"REMOVE_HISTORY_ITEM\";\r\nexport const EDIT_HISTORY_ITEM = \"EDIT_HISTORY_ITEM\";\r\n\r\nexport interface SetBookPropertiesPayload {\r\n\tproperties: CardProperties;\r\n\tcardId: number;\r\n\tcardType?: CardType;\r\n}\r\n\r\nexport interface RemoveHistoryPayload {\r\n\tcardId: number;\r\n\thistoryId: number;\r\n}\r\n\r\nexport interface EditHistoryItemPayload {\r\n\tcardId: number;\r\n\thistoryId: number;\r\n\tstart: string;\r\n\tend: string;\r\n}\r\n\r\nexport const pushBooksAction = createAction(PUSH_BOOKS);\r\nexport const setBooksAction = createAction(SET_BOOKS);\r\nexport const setBookProperties = createAction(SET_BOOK_PROPERTIES);\r\nexport const deleteBookAction = createAction(DELETE_BOOKS);\r\nexport const removeHistoryItem = createAction(REMOVE_HISTORY_ITEM);\r\nexport const editHistoryItem = createAction(EDIT_HISTORY_ITEM);","import { createAction } from \"redux-actions\";\r\nimport { CollectionShort } from \"../../types/Collection\";\r\n\r\nexport const ADD_COLLECTIONS = 'ADD_COLLECTIONS';\r\n\r\nexport const addCollectionsAction = createAction(ADD_COLLECTIONS);\r\n","import { CollectionShort } from \"../../types/Collection\";\r\nimport { Action } from \"redux-actions\";\r\nimport { ADD_COLLECTIONS } from \"./actions\";\r\n\r\nexport interface CollectionsState {\r\n\tcollections: CollectionShort[];\r\n}\r\n\r\nexport const initialStateCollection: CollectionsState = {\r\n\tcollections: []\r\n}\r\n\r\nexport const collectionReducer = (state: CollectionsState = initialStateCollection, action: Action): CollectionsState => {\r\n\tif (action.type === ADD_COLLECTIONS) {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tcollections: action.payload\r\n\t\t};\r\n\t}\r\n\r\n\treturn state;\r\n};\r\n","import { UserState, userRedux } from \"./user/redux\";\r\nimport { combineReducers } from \"redux\";\r\nimport { calendarReducer, CalendarState } from \"./calendar/reducers\";\r\nimport { CollectionsState, collectionReducer } from \"./collections/reducers\";\r\n\r\nexport interface AppState {\r\n\tcurrentUser?: UserState;\r\n\tcalendarBooks: CalendarState;\r\n\tcollections: CollectionsState;\r\n}\r\n\r\nexport const rootReducer = combineReducers({\r\n\tcurrentUser: userRedux,\r\n\tcalendarBooks: calendarReducer,\r\n\tcollections: collectionReducer\r\n});\r\n","import { Action } from \"redux-actions\";\r\nimport { PUSH_BOOKS, SET_BOOK_PROPERTIES, SetBookPropertiesPayload, DELETE_BOOKS, REMOVE_HISTORY_ITEM, RemoveHistoryPayload, SET_BOOKS, EDIT_HISTORY_ITEM, EditHistoryItemPayload } from \"./actions\";\r\nimport { LibraryCard } from \"../../types/LibraryCard\";\r\nimport { parseISO } from \"date-fns\";\r\n\r\nexport interface CalendarState {\r\n\t[bookId: number]: LibraryCard;\r\n}\r\n\r\nexport const calendarReducer = (state: CalendarState = {}, action: Action) => {\r\n\tif (action.type === SET_BOOKS) {\r\n\t\tconst state: CalendarState = {};\r\n\r\n\t\tconst cards = action.payload as LibraryCard[];\r\n\r\n\t\tcards.forEach(card => {\r\n\t\t\tstate[card.eId] = card;\r\n\t\t});\r\n\r\n\t\treturn state;\r\n\t}\r\n\telse if (action.type === PUSH_BOOKS) {\r\n\t\tconst newState = {\r\n\t\t\t...state\r\n\t\t};\r\n\r\n\t\tconst cards = action.payload as LibraryCard[];\r\n\r\n\t\tcards.forEach(card => {\r\n\t\t\tnewState[card.eId] = card;\r\n\t\t});\r\n\r\n\t\treturn newState;\r\n\t}\r\n\telse if (action.type === SET_BOOK_PROPERTIES) {\r\n\t\tconst payload = action.payload as SetBookPropertiesPayload;\r\n\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\t[payload.cardId]: {\r\n\t\t\t\t...state[payload.cardId],\r\n\t\t\t\tcardType: payload.cardType || state[payload.cardId].cardType,\r\n\t\t\t\tproperties: {\r\n\t\t\t\t\t...state[payload.cardId].properties,\r\n\t\t\t\t\t...payload.properties\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse if (action.type === DELETE_BOOKS) {\r\n\t\tconst payload = action.payload as number;\r\n\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\t[payload]: null\r\n\t\t}\r\n\t}\r\n\telse if (action.type === REMOVE_HISTORY_ITEM) {\r\n\t\tconst payload = action.payload as RemoveHistoryPayload;\r\n\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\t[payload.cardId]: {\r\n\t\t\t\t...state[payload.cardId],\r\n\t\t\t\thistory: state[payload.cardId].history.filter(history => history.id !== payload.historyId)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse if (action.type === EDIT_HISTORY_ITEM) {\r\n\t\tconst payload = action.payload as EditHistoryItemPayload;\r\n\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\t[payload.cardId]: {\r\n\t\t\t\t...state[payload.cardId],\r\n\t\t\t\thistory: state[payload.cardId].history.map(\r\n\t\t\t\t\t(history) => {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t...history,\r\n\t\t\t\t\t\t\tstartDate: history.id === payload.historyId ? parseISO(payload.start) : history.startDate,\r\n\t\t\t\t\t\t\tfinishDate: history.id === payload.historyId ? parseISO(payload.end): history.finishDate\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\t\t\r\n\treturn state;\r\n}\r\n","import { createStore, applyMiddleware, Middleware } from \"redux\";\r\nimport { rootReducer, AppState } from \"./reducers\";\r\nimport { initialUserState } from \"./user/redux\";\r\nimport { initialStateCollection } from \"./collections/reducers\";\r\n\r\nexport const createAppStore = () => {\r\n\tconst middlewares: Middleware[] = [];\r\n\r\n\tif (process.env.NODE_ENV === 'development') {\r\n\t\tmiddlewares.push(require(\"redux-logger\").default);\r\n\t}\r\n\r\n\tconst store = createStore(rootReducer, getCachedState(), applyMiddleware(\r\n\t\t...middlewares\r\n\t));\r\n\r\n\tstore.subscribe(() => {\r\n\t\tlocalStorage.setItem(\"cached\", JSON.stringify(store.getState()));\r\n\t});\r\n\r\n\treturn store;\r\n}\r\n\r\nconst getCachedState = (): AppState => {\r\n\tconst cache = localStorage.getItem(\"cached\");\r\n\tlet state: AppState = {\r\n\t\tcurrentUser: initialUserState,\r\n\t\tcalendarBooks: {},\r\n\t\tcollections: initialStateCollection\r\n\t}\r\n\r\n\tif (cache) {\r\n\t\tconst cachedState: AppState = JSON.parse(cache);\r\n\r\n\t\tif (cachedState.currentUser) {\r\n\t\t\tstate = {\r\n\t\t\t\t...state,\r\n\t\t\t\tcurrentUser: {\r\n\t\t\t\t\t...state.currentUser,\r\n\t\t\t\t\t...cachedState.currentUser\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (cachedState.calendarBooks) {\r\n\t\t\tstate = {\r\n\t\t\t\t...state,\r\n\t\t\t\tcalendarBooks: cachedState.calendarBooks\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (cachedState.collections) {\r\n\t\t\tstate = {\r\n\t\t\t\t...state,\r\n\t\t\t\tcollections: cachedState.collections\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn state;\r\n};","import { createSelector } from 'reselect';\r\nimport { UserState } from './redux';\r\nimport { AppState } from '../reducers';\r\n\r\nexport const getUserState = (state: AppState) => state.currentUser;\r\n\r\nexport const getUserProfile = createSelector([getUserState], (userState: UserState) => {\r\n\treturn userState ? userState.user : null;\r\n});\r\n","import { API_URL } from \"../utils\";\r\n\r\nexport default async (email: string): Promise => {\r\n\tconst request = await fetch(`${API_URL}/settings/email?set=${email}`, {\r\n\t\tcredentials: 'include'\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\treturn jsonRequest;\r\n}\r\n","import * as React from 'react';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Input from '../../../Input/Input';\r\nimport './RequestMail.css';\r\nimport Button from '../../../Button/Button';\r\nimport saveEmail from '../../../../requests/saveEmail';\r\n\r\nconst EMAIL_REGEX = /^([a-zA-z\\.\\-\\d])+@([a-zA-Z\\-\\.\\d])+$/;\r\n\r\ninterface Props {\r\n\tonClose: (success?: boolean) => void;\r\n}\r\n\r\nconst RequestMail: React.FC = props => {\r\n\tconst inputRef = React.useRef(null);\r\n\tconst [error, setError] = React.useState('');\r\n\tconst [loading, setLoading] = React.useState(false);\r\n\r\n\tconst onSave = () => {\r\n\t\tif (inputRef.current) {\r\n\t\t\tconst value = inputRef.current.value;\r\n\r\n\t\t\tif (EMAIL_REGEX.test(value)) {\r\n\t\t\t\tsetError('');\r\n\t\t\t\tsetLoading(true);\r\n\r\n\t\t\t\tsaveEmail(value).then(result => {\r\n\t\t\t\t\tprops.onClose(true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsetError('Некорректный Email');\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
Укажите email адрес
\r\n\r\n\t\t\t
\r\n\t\t\t\tМы будем напоминать вам о запланированных книгах и отправлять ежемесячную статистику вашей библиотеки\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t
\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n};\r\n\r\nexport default RequestMail;","import * as React from 'react';\r\nimport { Redirect, useLocation, useHistory } from 'react-router-dom';\r\nimport { setCurrentUserAction } from '../../../store/user/actions';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { getUserState } from '../../../store/user/selectors';\r\nimport RequestMail from './RequestMail/RequestMail';\r\n\r\ninterface DispathProps {\r\n\tsetCurrentUserAction: typeof setCurrentUserAction;\r\n}\r\n\r\nconst SuccessAuth: React.FunctionComponent = props => {\r\n\tconst token = new URLSearchParams(useLocation().search).get('token') || '',\r\n\t\t[canRedirect, setRedirect] = React.useState(false),\r\n\t\t[suggestEmail, setSuggestEmail] = React.useState(false);\r\n\t\r\n\tconst history = useHistory();\r\n\t\r\n\tconst userProfile = useSelector(getUserState);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (userProfile.userId > 0) {\r\n\t\t\tif (userProfile.userId > 0 && userProfile.user.id > 0 && !userProfile.user.email) {\r\n\t\t\t\tconst skipEmail = localStorage.getItem(\"skipEmail\");\r\n\r\n\t\t\t\tif (!skipEmail) {\r\n\t\t\t\t\tsetSuggestEmail(true);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\twindow.location.href = \"/books\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\twindow.location.href = \"/books\";\r\n\t\t\t}\r\n\t\t}\r\n\t}, [userProfile]);\r\n\r\n\tconst onClose = (success?: boolean) => {\r\n\t\tif (!success) {\r\n\t\t\tlocalStorage.setItem(\"skipEmail\", \"true\");\r\n\t\t}\r\n\r\n\t\tsetSuggestEmail(false);\r\n\t\tsetRedirect(true);\r\n\t};\r\n\r\n\treturn <>\r\n\t\t{canRedirect && }\r\n\r\n\t\t{suggestEmail && }\r\n\t;\r\n};\r\n\r\nexport default connect(null, {\r\n\tsetCurrentUserAction\r\n})(SuccessAuth);\r\n","import { Book } from \"../types/Book\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (query: string, internalId?: boolean): Promise => {\r\n\tconst result: Book = await (await fetch(`${API_URL}/books/book?${internalId ? 'id' : 'eId'}=${query}`, {\r\n\t\tcredentials: 'include'\r\n\t})).json();\r\n\r\n\treturn result;\r\n};\r\n","import { LibraryCard } from \"../types/LibraryCard\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (cardId: number): Promise => {\r\n\tconst request = await fetch(`${API_URL}/cards/card?id=${cardId}`, {\r\n\t\tcredentials: 'include'\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\tif (jsonRequest.data) {\r\n\t\treturn jsonRequest.data;\r\n\t}\r\n\r\n\treturn null;\r\n};\r\n","import * as React from 'react';\r\nimport { useField } from 'react-final-form';\r\nimport Select from '../../Select/Select';\r\n\r\ninterface Props {\r\n\tdisabled?: boolean;\r\n}\r\n\r\nconst SelectType: React.FunctionComponent = props => {\r\n\tconst field = useField('type', {\r\n\t\ttype: 'select'\r\n\t})\r\n\r\n\treturn {\r\n\t\t\tfield.input.onChange(event);\r\n\t\t}}\r\n\t\tonBlur={(event) => {\r\n\t\t\tfield.input.onBlur(event);\r\n\t\t}}\r\n\t\tdisabled={props.disabled}\r\n\t\titems={[\r\n\t\t\t{\r\n\t\t\t\tvalue: 'read_now',\r\n\t\t\t\tlabel: 'Читаю сейчас'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tvalue: 'already_read',\r\n\t\t\t\tlabel: 'Прочитано'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tvalue: 'want_read',\r\n\t\t\t\tlabel: 'Хочу прочитать'\r\n\t\t\t}\r\n\t\t]}\r\n\t/>;\r\n};\r\n\r\nexport default SelectType;","import * as React from \"react\";\r\nimport DateInput from \"../DateInput/DateInput\";\r\nimport { useField } from \"react-final-form\";\r\nimport { isBefore, isAfter, parseISO, isToday, isSameMonth, differenceInMonths } from \"date-fns\";\r\nimport { CardType } from \"../../../types/LibraryCard\";\r\n\r\ninterface Props {\r\n\twithEndDate?: boolean;\r\n\tforHistory?: boolean;\r\n\tdateBeginNameField: string;\r\n\tdateEndNameField: string;\r\n\thideDay?: boolean;\r\n}\r\n\r\nconst DatesWrapper: React.FunctionComponent = (props) => {\r\n\tconst [hasErrors, setHasErrors] = React.useState(false);\r\n\r\n\tconst startReading = useField(props.dateBeginNameField, {\r\n\t\ttype: \"input\",\r\n\t\tvalidate: (value, allValues: any) => {\r\n\t\t\tif (\r\n\t\t\t\tvalue && \r\n\t\t\t\tprops.withEndDate &&\r\n\t\t\t\tallValues.hasOwnProperty(props.dateEndNameField)\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tisAfter(parseISO(value), parseISO(allValues[props.dateEndNameField]))\r\n\t\t\t\t) {\r\n\t\t\t\t\tsetHasErrors(true);\r\n\r\n\t\t\t\t\treturn \"Даты должны идти по порядку\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!props.forHistory && value) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tallValues[\"type\"] === CardType.WantRead &&\r\n\t\t\t\t\t\tdifferenceInMonths(parseISO(value), new Date()) < 0\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn \"Не получится запланировать в прошлом\"\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\t(allValues[\"type\"] === CardType.AlreadyRead ||\r\n\t\t\t\t\t\tallValues[\"type\"] === CardType.ReadNow) &&\r\n\t\t\t\t\tisAfter(parseISO(value), new Date())\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn \"Дата должна быть в прошлом\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsetHasErrors(false);\r\n\t\t},\r\n\t});\r\n\r\n\tconst finishReading = useField(props.dateEndNameField, {\r\n\t\ttype: \"input\",\r\n\t\tvalidate: (value, allValues: any) => {\r\n\t\t\tif (\r\n\t\t\t\tvalue && \r\n\t\t\t\tprops.withEndDate &&\r\n\t\t\t\tallValues.hasOwnProperty(props.dateBeginNameField)\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tisBefore(\r\n\t\t\t\t\t\tparseISO(value),\r\n\t\t\t\t\t\tparseISO(allValues[props.dateBeginNameField])\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tsetHasErrors(true);\r\n\r\n\t\t\t\t\treturn \"Даты должны идти по порядку\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsetHasErrors(false);\r\n\t\t},\r\n\t});\r\n\r\n\tconst error = startReading.meta.error || finishReading.meta.error;\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
Начало чтения
\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t{(props.withEndDate || props.forHistory) && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
Окончание чтения
\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\r\n\t\t\t{error && (\r\n\t\t\t\t
\r\n\t\t\t\t\t{error}\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 DatesWrapper;\r\n","import * as React from \"react\";\r\nimport { Book } from \"../../../types/Book\";\r\nimport \"./Card.css\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport CheckIcon from \"@material-ui/icons/Done\";\r\nimport TimeIcon from \"@material-ui/icons/Schedule\";\r\nimport cn from \"classnames\";\r\n\r\ninterface Props {\r\n\tbook: Book;\r\n\tdummy?: boolean;\r\n\tmoreText?: string;\r\n\ttoBookPage?: boolean;\r\n\tfullWidth?: boolean;\r\n\tdate?: string;\r\n\tflatCategory?: boolean;\r\n\thiddenCheckIcon?: boolean;\r\n}\r\n\r\nconst Card: React.FC = ({\r\n\tbook,\r\n\tdummy,\r\n\tmoreText,\r\n\ttoBookPage,\r\n\tfullWidth,\r\n\tdate,\r\n\tflatCategory,\r\n\thiddenCheckIcon,\r\n}) => {\r\n\t/*const link = book.card?.id && !toBookPage\r\n\t\t\t? `/books/#/${book.card.id}`\r\n\t\t\t: book.woo_id\r\n\t\t\t? `/book/${book.woo_id}/`\r\n\t\t\t: null;*/\r\n\r\n\tconst link = `/book/${book.woo_id}/`;\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{book.collection && (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{book.collection.name}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t{date && (\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{date}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{book.card?.id ? moreText ? moreText : : }\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
{book.author}
\r\n\r\n\t\t\t\t\t
{book.name}
\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 Card;\r\n","import * as React from \"react\";\r\nimport { Book } from \"../../types/Book\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport ExpansionPanelSummary from \"@material-ui/core/ExpansionPanelSummary\";\r\nimport ExpansionPanelDetails from \"@material-ui/core/ExpansionPanelDetails\";\r\nimport ExpansionPanel from \"@material-ui/core/ExpansionPanel\";\r\nimport \"./EditBookCard.css\";\r\nimport Button from \"../Button/Button\";\r\nimport { Form, FormSpy } from \"react-final-form\";\r\nimport SelectType from \"./Select/Select\";\r\nimport DatesWrapper from \"./DatesWrapper/DatesWrapper\";\r\nimport { FormApi } from \"final-form\";\r\nimport {\r\n\tLibraryCard,\r\n\tCardPropertyType,\r\n\tCardType,\r\n\tCardProperties,\r\n} from \"../../types/LibraryCard\";\r\nimport Notes from \"./Notes/Notes\";\r\nimport ExpandIcon from \"@material-ui/icons/ExpandMore\";\r\nimport HistoryIcon from \"@material-ui/icons/History\";\r\nimport Description from \"@material-ui/icons/Description\";\r\nimport { addDays, addMonths } from \"date-fns\";\r\nimport Card from \"../Feed/Card/Card\";\r\nimport { DatePeriod } from \"../CardHistory/CardHistory\";\r\n\r\nexport interface EditCardProps {\r\n\tbook: Book;\r\n\tonSaved?: () => void;\r\n\tlibraryCard?: LibraryCard;\r\n\tforcedSection?: CardType;\r\n\tforcedStartRead?: string;\r\n\tonlyHistoryAdd?: boolean;\r\n\tsaveCard: (card: LibraryCard) => Promise;\r\n\tsaveProperties: (\r\n\t\tcardId: number,\r\n\t\tproperties: CardProperties\r\n\t) => Promise;\r\n\tonClose?: () => void;\r\n\thideBookCard?: boolean;\r\n\tperiodEdit?: DatePeriod;\r\n\tonHistoryEdit?: (updatedPeriod: DatePeriod) => Promise;\r\n}\r\n\r\nconst EditBookCard: React.FunctionComponent = (props) => {\r\n\tconst [errors, setErrors] = React.useState(false);\r\n\tconst [isSaving, setSaving] = React.useState(false);\r\n\r\n\tconst onSubmitHandler = (data: any, form: FormApi) => {\r\n\t\tsetSaving(true);\r\n\r\n\t\tconst properties: CardProperties = {};\r\n\r\n\t\tif (props.onlyHistoryAdd || data[\"type\"] === CardType.AlreadyRead) {\r\n\t\t\tproperties[CardPropertyType.CardHistoryStart] = data[\"start_reading\"];\r\n\t\t\tproperties[CardPropertyType.CardHistoryEnd] = data[\"finish_reading\"];\r\n\r\n\t\t\tif (!props.onlyHistoryAdd) {\r\n\t\t\t\tproperties[CardPropertyType.Type] = data[\"type\"];\r\n\t\t\t\tproperties[CardPropertyType.DateBegin] = \"\";\r\n\t\t\t\tproperties[CardPropertyType.DateFinish] = \"\";\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tproperties[CardPropertyType.Type] = data[\"type\"];\r\n\t\t\tproperties[CardPropertyType.DateBegin] = data[\"start_reading\"] || \"\";\r\n\t\t}\r\n\r\n\t\tif (props.periodEdit) {\r\n\t\t\tprops\r\n\t\t\t\t.onHistoryEdit({\r\n\t\t\t\t\tid: props.periodEdit.id,\r\n\t\t\t\t\tstart: data[\"start_reading\"],\r\n\t\t\t\t\tend: data[\"finish_reading\"],\r\n\t\t\t\t\ttype: CardType.AlreadyRead,\r\n\t\t\t\t})\r\n\t\t\t\t.then((result) => {\r\n\t\t\t\t\tsetSaving(false);\r\n\r\n\t\t\t\t\tprops.onClose();\r\n\t\t\t\t});\r\n\t\t} else if (props.libraryCard) {\r\n\t\t\tprops.saveProperties(props.libraryCard.eId, properties).then((result) => {\r\n\t\t\t\tsetSaving(false);\r\n\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tprops.onSaved();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetErrors(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tprops\r\n\t\t\t\t.saveCard({\r\n\t\t\t\t\tcardType: data[\"type\"],\r\n\t\t\t\t\tbook: props.book,\r\n\t\t\t\t\tproperties,\r\n\t\t\t\t})\r\n\t\t\t\t.then((result) => {\r\n\t\t\t\t\tsetSaving(false);\r\n\r\n\t\t\t\t\tif (result) {\r\n\t\t\t\t\t\tprops.onSaved();\r\n\r\n\t\t\t\t\t\twindow.location.href = `/books/#/${result}`;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsetErrors(false);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\tif ((window as any)[\"ym\"]) {\r\n\t\t\t\t(window as any).ym(63827389, \"reachGoal\", \"book_search_addBook\", {\r\n\t\t\t\t\tbookId: props.book.externalId,\r\n\t\t\t\t\tbookName: props.book.name,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst getInitialValues = React.useMemo((): any => {\r\n\t\tconst today = new Date().toISOString();\r\n\r\n\t\tif (props.onlyHistoryAdd || props.periodEdit) {\r\n\t\t\treturn {\r\n\t\t\t\ttype: CardType.AlreadyRead,\r\n\t\t\t\tstart_reading: props.periodEdit ? props.periodEdit.start : null,\r\n\t\t\t\tfinish_reading: props.periodEdit ? props.periodEdit.end : null,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (props.forcedSection) {\r\n\t\t\treturn {\r\n\t\t\t\ttype: props.forcedSection,\r\n\t\t\t\tstart_reading: props.forcedStartRead,\r\n\t\t\t\tfinish_reading: null,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (props.libraryCard) {\r\n\t\t\treturn {\r\n\t\t\t\ttype: props.libraryCard.cardType,\r\n\t\t\t\tstart_reading: props.libraryCard.properties?.[\"date_begin\"]\r\n\t\t\t\t\t? props.libraryCard.properties[\"date_begin\"]\r\n\t\t\t\t\t: today,\r\n\t\t\t\tfinish_reading: props.libraryCard.properties?.[\"date_finish\"]\r\n\t\t\t\t\t? props.libraryCard.properties[\"date_finish\"]\r\n\t\t\t\t\t: today,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttype: \"read_now\",\r\n\t\t\tstart_reading: today,\r\n\t\t\tfinish_reading: today,\r\n\t\t};\r\n\t}, [props.book, props.libraryCard]);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{!props.hideBookCard && (\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\r\n\t\t\t
\r\n\t\t\t\t {\r\n\t\t\t\t\t\t\ttools.changeValue(state, \"start_reading\", (value) => arg[0]);\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{(form) => {\r\n\t\t\t\t\t\tconst selectedType = (form.values as any)[\"type\"];\r\n\t\t\t\t\t\tconst readOnly =\r\n\t\t\t\t\t\t\tprops.libraryCard?.cardType === CardType.AlreadyRead &&\r\n\t\t\t\t\t\t\t!props.onlyHistoryAdd &&\r\n\t\t\t\t\t\t\tselectedType === CardType.AlreadyRead &&\r\n\t\t\t\t\t\t\t!props.periodEdit;\r\n\r\n\t\t\t\t\t\tconst setFastDate = (\r\n\t\t\t\t\t\t\ttype: \"tomorrow\" | \"next_week\" | \"next_month\"\r\n\t\t\t\t\t\t) => {\r\n\t\t\t\t\t\t\tconst date =\r\n\t\t\t\t\t\t\t\ttype !== \"next_month\"\r\n\t\t\t\t\t\t\t\t\t? addDays(new Date(), type === \"tomorrow\" ? 1 : 7)\r\n\t\t\t\t\t\t\t\t\t: addMonths(new Date(), 1);\r\n\r\n\t\t\t\t\t\t\tform.form.mutators.setStartDate(date.toISOString());\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{props.libraryCard ? \"Изменить\" : \"Добавить в библиотеку\"}\r\n\t\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\t\t{!props.forcedSection && !props.periodEdit && (\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
\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{selectedType === CardType.WantRead && (\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 setFastDate(\"tomorrow\")}\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
\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t setFastDate(\"next_week\")}\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
\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t setFastDate(\"next_month\")}\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
\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{!readOnly && (\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
\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t{selectedType === \"want_read\" &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Укажите дату, с которой вы планируете начать читать книгу\"}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t{selectedType === \"read_now\" &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Укажите дату, с которой вы начали читать книгу\"}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t{selectedType === \"already_read\" &&\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
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{readOnly && (\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
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t{errors && (\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попытку через некоторое время\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{props.onClose && (\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\r\n\t\t\t\t\t\t\t\t\t\t !readOnly && form.handleSubmit()}\r\n\t\t\t\t\t\t\t\t\t\t\tisLoading={isSaving}\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\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\r\nexport default EditBookCard;\r\n","import * as React from 'react';\r\nimport { LibraryCard, CardProperties } from '../../../types/LibraryCard';\r\nimport EditBookCard from '../../EditBookCard/EditBookCard';\r\nimport { Book } from '../../../types/Book';\r\nimport getBook from '../../../requests/getBook';\r\nimport getLibraryCard from '../../../requests/getLibraryCard';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\ninterface Props {\r\n\tbookExternalId?: string;\r\n\tbookWooId?: number;\r\n\tonSaved?: () => void;\r\n\tsaveCard: (card: LibraryCard) => Promise;\r\n\tsaveProperties: (cardId: number, properties: CardProperties) => Promise;\r\n\tonClose?: () => void;\r\n}\r\n\r\nexport const Inner: React.FunctionComponent = props => {\r\n\tconst [isLoading, setLoading] = React.useState(false);\r\n\tconst [book, setBook] = React.useState();\r\n\tconst [libraryInfo, setLibraryInfo] = React.useState(null);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetLoading(true);\r\n\r\n\t\tconst request = async () => {\r\n\t\t\tconst data = props.bookWooId ? await getBook(props.bookWooId as any, true) : await getBook(props.bookExternalId);\r\n\r\n\t\t\tif (data && data.externalId) {\r\n\t\t\t\tsetBook(data);\r\n\r\n\t\t\t\tif (data.cardId) {\r\n\t\t\t\t\tconst library = await getLibraryCard(data.cardId);\r\n\r\n\t\t\t\t\tif (library) {\r\n\t\t\t\t\t\tsetLibraryInfo(library);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\trequest();\r\n\t}, [props.bookExternalId]);\r\n\r\n\treturn
\r\n\t\t{isLoading &&
\r\n\t\t\t\r\n\t\t
}\r\n\r\n\t\t{!isLoading && book && }\r\n\t
;\r\n};\r\n\r\nexport default Inner;\r\n","import * as React from 'react';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Inner from './Inner/Inner';\r\nimport { LibraryCard, CardProperties } from '../../types/LibraryCard';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\n\r\ninterface Props {\r\n\tbookExternalId?: string;\r\n\tbookWooId?: number;\r\n\tonClose: () => void;\r\n\tonSaved?: () => void;\r\n\tsaveCard?: (card: LibraryCard) => Promise;\r\n\tsaveProperties?: (cardId: number, properties: CardProperties) => Promise;\r\n}\r\n\r\nconst BookDialogPreview: React.FunctionComponent = props => {\r\n\tconst isMobile = useMediaQuery({maxWidth: '600px'});\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{isMobile && (\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\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\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default BookDialogPreview;\r\n","import * as React from 'react';\r\nimport { User } from '../../../../types/User';\r\nimport Dialog from '@material-ui/core/Dialog/Dialog';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { MOBILE_MAX_WIDTH } from '../../../../utils';\r\nimport List from '@material-ui/core/List/List';\r\nimport ListItem from '@material-ui/core/ListItem/ListItem';\r\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar/ListItemAvatar';\r\nimport Avatar from '@material-ui/core/Avatar/Avatar';\r\nimport ListItemText from '@material-ui/core/ListItemText/ListItemText';\r\n\r\ninterface Props {\r\n\tusers: User[];\r\n\tonClose: () => void;\r\n}\r\n\r\nconst PopupUserList: React.FC = props => {\r\n\tconst isMobile = useMediaQuery({ maxWidth: MOBILE_MAX_WIDTH });\r\n\r\n\treturn \r\n\t\t\r\n\t\t\t{props.users.map(user => {\r\n\t\t\t\treturn window.location.href = `/profile/#/${user.id}`}>\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\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 PopupUserList;\r\n","import * as React from \"react\";\r\nimport { User } from \"../../../types/User\";\r\nimport { Book } from \"../../../types/Book\";\r\nimport { API_URL } from \"../../../utils\";\r\nimport Avatar from \"@material-ui/core/Avatar/Avatar\";\r\nimport \"./UserList.css\";\r\nimport PopupUserList from \"./PopupUserList/PopupUserList\";\r\nimport Link from \"@material-ui/core/Link/Link\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { getUserProfile } from \"../../../store/user/selectors\";\r\n\r\ninterface Props {\r\n\tbook: Book;\r\n\tinitialLabel?: string;\r\n}\r\n\r\ninterface LabelUser {\r\n\tstartUser: User;\r\n\totherUsers?: User[];\r\n}\r\n\r\nconst UserList: React.FC = ({ book, initialLabel }) => {\r\n\tconst [users, setUsers] = React.useState([]);\r\n\tconst [open, setOpen] = React.useState(false);\r\n\tconst currentUser = useSelector(getUserProfile);\r\n\r\n\tconst request = async () => {\r\n\t\tconst data = await fetch(`${API_URL}/books/users?id=${book.woo_id}`, {\r\n\t\t\tcredentials: \"include\",\r\n\t\t});\r\n\r\n\t\treturn await data.json();\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\trequest().then((data) => {\r\n\t\t\tconst users: User[] = data;\r\n\r\n\t\t\tif (users.length > 0 && currentUser.id > 0) {\r\n\t\t\t\tsetUsers(users.filter(user => user.id !== currentUser.id))\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsetUsers(data);\r\n\t\t\t}\r\n\t\t});\r\n\t}, [book]);\r\n\r\n\tconst usersLabel: LabelUser = React.useMemo(() => {\r\n\t\tif (users.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst label: LabelUser = {\r\n\t\t\tstartUser: users[0],\r\n\t\t\totherUsers: users.length > 1 ? users.slice(1) : [],\r\n\t\t};\r\n\r\n\t\treturn label;\r\n\t}, [users]);\r\n\r\n\treturn usersLabel ? (\r\n\t\t
\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t{initialLabel ? initialLabel : 'В библиотеке у '}\r\n\t\t\t\t\r\n\t\t\t\t\t{usersLabel.startUser.name}\r\n\t\t\t\t\r\n\t\t\t\t{usersLabel.otherUsers.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 setOpen(true)} className=\"userList__more\">\r\n\t\t\t\t\t\t\tеще {usersLabel.otherUsers.length}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t\r\n\r\n\t\t\t{open && setOpen(false)} users={users} />}\r\n\t\t
\r\n\t) : (\r\n\t\t<>\r\n\t);\r\n};\r\n\r\nexport default UserList;\r\n","import * as React from 'react';\r\nimport { BookShop as BookShopType } from '../../../../../../types/Book';\r\nimport './BookShop.css';\r\n\r\ninterface Props {\r\n\tshop: BookShopType[];\r\n}\r\n\r\nconst BookShop: React.FC = ({ shop }) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t
Наличие в магазинах:
\r\n\r\n\t\t\t{shop.map((item) => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t
{item.name}
\r\n\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 BookShop;\r\n","import * as React from \"react\";\r\nimport { Book } from \"../../../../../types/Book\";\r\nimport Button from \"../../../../Button/Button\";\r\nimport \"./Inner.css\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport Close from \"@material-ui/icons/Close\";\r\nimport { FeedCallbacksContext } from \"../../../Feed\";\r\nimport BookDialogPreview from \"../../../../BookDialogPreview/BookDialogPreview\";\r\nimport cn from \"classnames\";\r\nimport { CardsManagerCallbacks } from \"../../../../CardsManager/CardsManager\";\r\nimport UserList from \"../../../../BookPage/UserList/UserList\";\r\nimport BookShop from \"./BookShop/BookShop\";\r\nimport { MOBILE_MAX_WIDTH } from \"../../../../../utils\";\r\n\r\ninterface Props {\r\n\tbook: Book;\r\n\tonClose?: () => void;\r\n\tclassName?: string;\r\n\tcallbacks?: CardsManagerCallbacks;\r\n}\r\n\r\nconst Inner: React.FC = ({\r\n\tbook,\r\n\tonClose,\r\n\tclassName,\r\n\tcallbacks: context,\r\n}) => {\r\n\t// const context = React.useContext(FeedCallbacksContext);\r\n\r\n\tconst [show, setShow] = React.useState(false);\r\n\r\n\tconst onClick = () => {\r\n\t\tif (book.card) {\r\n\t\t\twindow.location.href = `/books/#/${book.card.id}`;\r\n\t\t} else {\r\n\t\t\tsetShow(true);\r\n\t\t}\r\n\t};\r\n\r\n\tconst descWrapperRef = React.useRef();\r\n\tconst showMoreRef = React.useRef();\r\n\r\n\tconst showDesc = (e: any) => {\r\n\t\tif (descWrapperRef) {\r\n\t\t\tdescWrapperRef.current.classList.add(\r\n\t\t\t\t\"feed-dialog-inner-book-header__description__wrapper_full\"\r\n\t\t\t);\r\n\r\n\t\t\tshowMoreRef.current.style.display = \"none\";\r\n\t\t}\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (descWrapperRef) {\r\n\t\t\tdescWrapperRef.current.classList.remove(\r\n\t\t\t\t\"feed-dialog-inner-book-header__description__wrapper_full\"\r\n\t\t\t);\r\n\r\n\t\t\tconst height = descWrapperRef.current.offsetHeight;\r\n\t\t\tconst childHeight = (descWrapperRef.current.firstChild as HTMLDivElement)\r\n\t\t\t\t.offsetHeight;\r\n\r\n\t\t\tconsole.log(childHeight, height);\r\n\r\n\t\t\tif (childHeight > height) {\r\n\t\t\t\tshowMoreRef.current.style.display = \"block\";\r\n\t\t\t} else {\r\n\t\t\t\tdescWrapperRef.current.classList.add(\r\n\t\t\t\t\t\"feed-dialog-inner-book-header__description__wrapper_full\"\r\n\t\t\t\t);\r\n\r\n\t\t\t\tshowMoreRef.current.style.display = \"none\";\r\n\t\t\t}\r\n\t\t}\r\n\t}, [book]);\r\n\r\n\tconst isMobile = useMediaQuery({ maxWidth: MOBILE_MAX_WIDTH });\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{true && (\r\n\t\t\t\t
\r\n\t\t\t\t\tО книге\r\n\t\t\t\t\t{onClose && (\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\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\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t{book.shops?.length > 0 && !isMobile && }\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{book.author}\r\n\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{book.name}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{book.card ? \"Открыть карточку\" : \"Сохранить в моей библиотеке\"}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\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\r\n\t\t\t\t\t{book.shops?.length > 0 && isMobile && }\r\n\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t{book.collection && (\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{book.collection.image && (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{book.collection.name}\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\r\n\t\t\t{show && (\r\n\t\t\t\t setShow(false)}\r\n\t\t\t\t\tonSaved={() => setShow(false)}\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 Inner;\r\n","import * as React from \"react\";\r\nimport \"./CollectionCard.css\";\r\nimport cn from \"classnames\";\r\n\r\ninterface Props {\r\n\theader: string;\r\n\timageURL?: string;\r\n\taction: (() => void) | string;\r\n\tisSelected?: boolean;\r\n}\r\n\r\nconst CollectionCard: React.FunctionComponent = (props) => {\r\n\tconst cardRender = () => {\r\n\t\treturn {}}\r\n\t\t\tstyle={{\r\n\t\t\t\tbackgroundImage: `url(${props.imageURL})`,\r\n\t\t\t}}\r\n\t\t>\r\n\t\t\t
{props.header}
\r\n\t\t;\r\n\t};\r\n\r\n\treturn typeof props.action === \"string\" ? \r\n\t\t{cardRender()}\r\n\t :
{cardRender()}
;\r\n};\r\n\r\nexport default CollectionCard;\r\n","import * as React from 'react';\r\nimport { Book } from '../../../types/Book';\r\nimport '../Feed.css';\r\nimport Card from '../Card/Card';\r\nimport CollectionCard from '../../CollectionCard/CollectionCard';\r\nimport AdBlock from '../../AdBlock/AdBlock';\r\n\r\ninterface Props {\r\n\tbooks: Book[];\r\n\tloading?: boolean;\r\n\tlimit?: number;\r\n\tonMoreLoad?: () => void;\r\n\tpage?: number;\r\n}\r\n\r\nconst FeedList: React.FC = ({ books, loading, limit, onMoreLoad, page }) => {\r\n\tconst filteredBooks = React.useMemo(() => {\r\n\t\tif (books) {\r\n\t\t\tif (limit > 0) {\r\n\t\t\t\treturn books.slice(0, limit);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn books;\r\n\t\t}\r\n\r\n\t\treturn [];\r\n\t}, [limit, books]);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{(!loading || page >= 1) &&\r\n\t\t\t\t\tfilteredBooks.map((book, key) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\r\n\t\t\t\t{loading &&\r\n\t\t\t\t\t[...new Array(8)].map((item) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\t\t\t
\r\n\r\n\t\t\t{!loading && page >= 0 && }\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default FeedList;\r\n","import * as React from \"react\";\r\nimport { CollectionShort } from \"../../../types/Collection\";\r\nimport { Book } from \"../../../types/Book\";\r\nimport getCollection from \"../../../requests/getCollection\";\r\nimport FeedList from \"../../Feed/FeedList/FeedList\";\r\nimport { API_URL } from \"../../../utils\";\r\n\r\ninterface Props {\r\n\tbookId: number;\r\n}\r\n\r\nconst OtherBooks: React.FC = ({ bookId }) => {\r\n\tconst [books, setBooks] = React.useState<{\r\n\t\trelated: Book[],\r\n\t\tcollection: Book[]\r\n\t}>({\r\n\t\trelated: [],\r\n\t\tcollection: []\r\n\t});\r\n\tconst [loading, setLoading] = React.useState(false);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetLoading(true);\r\n\r\n\t\tfetch(`${API_URL}/collections/relatedForBook?id=${bookId}`, {\r\n\t\t\tcredentials: 'include'\r\n\t\t}).then(data => data.json()).then(data => {\r\n\t\t\tsetBooks(data);\r\n\t\t\tsetLoading(false);\r\n\t\t});\r\n\t}, [bookId]);\r\n\r\n\treturn <>\r\n\t\t{books.related.length > 0 &&
\r\n\t\t\tПохожие\r\n\t\t
\r\n\r\n\t\t
}\r\n\r\n\t\t\r\n\t;\r\n};\r\n\r\nexport default OtherBooks;\r\n","import * as React from 'react';\r\nimport cn from 'classnames';\r\nimport './AdBlock.css';\r\n\r\ninterface Props {\r\n\tsize?: 'small' | 'medium';\r\n}\r\n\r\nconst AdBlock: React.FC = props => {\r\n\t/*React.useEffect(() => {\r\n\t\tconst installGoogleAds = () => {\r\n\t\t\tconst elem = document.createElement(\"script\");\r\n\t\t\telem.src = \"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\";\r\n\t\t\telem.async = true;\r\n\t\t\telem.defer = true;\r\n\t\t\tdocument.body.insertBefore(elem, document.body.firstChild);\r\n\t\t};\r\n\t\tinstallGoogleAds();\r\n\r\n\t\t((window as any).adsbygoogle = (window as any).adsbygoogle || []).push({});\r\n\t}, []);*/\r\n\r\n\treturn <>;\r\n\r\n\t/*return (\r\n\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t);*/\r\n};\r\n\r\nexport default AdBlock;\r\n","import * as React from \"react\";\r\nimport { Book } from \"../../types/Book\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport getBook from \"../../requests/getBook\";\r\nimport \"./BookPage.css\";\r\nimport { LibraryCard } from \"../../types/LibraryCard\";\r\nimport getLibraryCard from \"../../requests/getLibraryCard\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport EditBookCard from \"../EditBookCard/EditBookCard\";\r\nimport Inner from \"../Feed/Card/CardDetails/Inner/Inner\";\r\nimport { CardsManagerCallbacks } from \"../CardsManager/CardsManager\";\r\nimport OtherBooks from \"./OtherBooks/OtherBooks\";\r\nimport { Helmet } from 'react-helmet';\r\nimport AdBlock from \"../AdBlock/AdBlock\";\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n}\r\n\r\nconst BookPage: React.FunctionComponent = (props) => {\r\n\tconst [isLoading, setLoading] = React.useState(false);\r\n\tconst [book, setBook] = React.useState();\r\n\tconst [libraryInfo, setLibraryInfo] = React.useState(null);\r\n\tconst [editBookOpen, setEditBookOpen] = React.useState(false);\r\n\r\n\tconst showEditBookPopup = () => setEditBookOpen(true);\r\n\tconst hideEditBookPopup = () => setEditBookOpen(false);\r\n\r\n\tconst { id } = useParams<{ id: string }>();\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetLoading(true);\r\n\r\n\t\twindow.scrollTo({\r\n\t\t\ttop: 0\r\n\t\t});\r\n\r\n\t\tconst request = async () => {\r\n\t\t\tconst data = await getBook(id, true);\r\n\r\n\t\t\tsetLoading(false);\r\n\r\n\t\t\tif (data && data.externalId) {\r\n\t\t\t\tsetBook(data);\r\n\r\n\t\t\t\tif (data.cardId) {\r\n\t\t\t\t\tconst library = await getLibraryCard(data.cardId);\r\n\r\n\t\t\t\t\tif (library) {\r\n\t\t\t\t\t\tsetLibraryInfo(library);\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\trequest();\r\n\t}, [id]);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{book && (\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{book.author}. {book.name} - Readed.me\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t window.history.back()}\r\n\t\t\t\t\t\t\t\t\tclassName=\"bookPage__inner\"\r\n\t\t\t\t\t\t\t\t\tcallbacks={props.callbacks}\r\n\t\t\t\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{isLoading &&
Загрузка...
}\r\n\r\n\t\t\t\t{!isLoading && !book && (\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
\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t {\r\n\t\t\t\t\t\twindow.location.reload();\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tlibraryCard={libraryInfo}\r\n\t\t\t\t\tsaveCard={props.callbacks.addCard}\r\n\t\t\t\t\tsaveProperties={props.callbacks.saveCardProperties}\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 BookPage;\r\n","import * as React from 'react';\r\n\r\nconst Settings = React.lazy(() => import('../../Settings/Settings'))\r\n\r\nconst SettingsPage: React.FC = props => {\r\n\treturn Загрузка...}>\r\n\t\t\r\n\t;\r\n};\r\n\r\nexport default SettingsPage;\r\n","import { CollectionShort } from \"../types/Collection\";\r\nimport { API_URL } from \"../utils\";\r\nimport { CategoryCard } from \"../types/CategoriesCard\";\r\n\r\nexport default async (id?: number): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\tconst result: CategoryCard[] = await (\r\n\t\tawait fetch(`${API_URL}/userProfile/categoriesMap${id > 0 ? `?id=${id}` : ''}`, {\r\n\t\t\tcredentials: \"include\",\r\n\t\t})\r\n\t).json();\r\n\r\n\treturn result;\r\n};\r\n","import * as React from \"react\";\r\nimport { CategoryCard } from \"../../../types/CategoriesCard\";\r\nimport \"../Component.css\";\r\n\r\ninterface Props {\r\n\tcategory: CategoryCard;\r\n\tonClick: (id: number) => void;\r\n}\r\n\r\nconst Category: React.FC = ({ category, onClick }) => {\r\n\treturn (\r\n\t\t
onClick(category.category.id)}>\r\n\t\t\t
\r\n\t\t\t\t{category.category.name}\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t
{category.percent}%
\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default Category;\r\n","import * as React from \"react\";\r\nimport { CategoryCard } from \"../../types/CategoriesCard\";\r\nimport getCategoriesCard from \"../../requests/getCategoriesCard\";\r\nimport Category from \"./Category/Category\";\r\nimport \"./Component.css\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport Arrow from \"@material-ui/icons/KeyboardArrowDown\";\r\nimport cn from \"classnames\";\r\n\r\nconst MAX_VISIBLE_CATEGORIES = 2;\r\n\r\ninterface Props {\r\n\tdisable?: boolean;\r\n\tuserId?: number;\r\n}\r\n\r\nconst Component: React.FC = (props) => {\r\n\tconst [categories, setCategories] = React.useState([]);\r\n\tconst [loading, setLoading] = React.useState(false);\r\n\tconst [categoryVisible, setCategoriesVisible] = React.useState(false);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tlet isCancelled = false;\r\n\r\n\t\tsetLoading(true);\r\n\r\n\t\tgetCategoriesCard(props.userId).then((data) => {\r\n\t\t\tif (!isCancelled) {\r\n\t\t\t\tsetCategories(data);\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tisCancelled = true;\r\n\t\t};\r\n\t}, [props.userId]);\r\n\r\n\tconst visibleCategories = React.useMemo(\r\n\t\t() => categories.slice(0, MAX_VISIBLE_CATEGORIES),\r\n\t\t[categories]\r\n\t);\r\n\tconst hiddenCategories = React.useMemo(\r\n\t\t() => categories.slice(MAX_VISIBLE_CATEGORIES),\r\n\t\t[categories]\r\n\t);\r\n\tconst hiddenCategoriesPercent = React.useMemo(() => {\r\n\t\tlet total = 0;\r\n\r\n\t\thiddenCategories.forEach((category) => (total += category.percent));\r\n\r\n\t\treturn total;\r\n\t}, [hiddenCategories]);\r\n\r\n\tconst onClick = (id: number) => {\r\n\t\tif (!props.disable) {\r\n\t\t\twindow.location.href = `/books#/all/${id}`;\r\n\t\t}\r\n\t};\r\n\r\n\tif (visibleCategories.length === 0) {\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
\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\tvisibleCategories.length > 0 && (\r\n\t\t\t
\r\n\t\t\t\t{visibleCategories.map((category) => {\r\n\t\t\t\t\treturn ;\r\n\t\t\t\t})}\r\n\r\n\t\t\t\t{hiddenCategories.length > 0 && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t setCategoriesVisible(!categoryVisible)}\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Остальные категории\r\n\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{hiddenCategoriesPercent}%\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{hiddenCategories.map((category, index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t);\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 Component;\r\n","import { Profile } from \"../types/Profile\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (userId: number, lastId: number = 0): Promise => {\r\n\tconst result: { data: Profile } = await (await fetch(`${API_URL}/users/user?id=${userId}&lastId=${lastId}`, {\r\n\t\tcredentials: 'include'\r\n\t})).json();\r\n\r\n\treturn result.data;\r\n}","import * as React from 'react';\r\nimport MenuList from '@material-ui/core/MenuList';\r\nimport { MenuItem } from '@material-ui/core';\r\nimport './ProfileMenu.css';\r\nimport SocialButton from '../../Login/SocialButton/SocialButton';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { API_URL } from '../../../../utils';\r\nimport SettingIcon from '@material-ui/icons/SettingsOutlined';\r\nimport DraftIcon from '@material-ui/icons/DraftsOutlined';\r\nimport WebIcon from '@material-ui/icons/WebOutlined';\r\nimport ExitIcon from '@material-ui/icons/ExitToAppOutlined';\r\n\r\nconst ProfileMenu: React.FC = props => {\r\n\tconst history = useHistory();\r\n\r\n\tconst toSettings = () => {\r\n\t\thistory.push('/settings');\r\n\t}\r\n\r\n\tconst logout = () => {\r\n\t\twindow.location.href = `${API_URL}/logout`;\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\r\n\t\t\t\tНастройки профиля\r\n\t\t\t\r\n\r\n\t\t\t {\r\n\t\t\t\twindow.location.href = \"https://readed.me/contact/\";\r\n\t\t\t}}>\r\n\t\t\t\t\r\n\r\n\t\t\t\tНаписать нам\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\tВыйти из аккаунта\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t{/* {\r\n\t\t\twindow.location.href = \"https://vk.com/readed_me\";\r\n\t\t}} type=\"vk\" text=\"Сообщество ВКонтакте\" />*/}\r\n\t
;\r\n};\r\n\r\nexport default ProfileMenu;\r\n","import * as React from 'react';\r\nimport SettingsIcon from \"@material-ui/icons/Settings\";\r\nimport IconButton from \"@material-ui/core/IconButton/IconButton\";\r\nimport Drawer from '@material-ui/core/Drawer/Drawer';\r\n\r\ninterface Props {\r\n\tclassName?: string;\r\n}\r\n\r\nconst MobileSlideMenu: React.FC = props => {\r\n\tconst [open, setOpen] = React.useState(false);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t setOpen(true)}>\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t setOpen(false)}>\r\n\t\t\t\t{props.children}\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default MobileSlideMenu;","import * as React from 'react';\r\nimport { UserHistoryItem } from '../../../../../types/UserHistory';\r\nimport { localedFormat, getReadableCardType } from '../../../../../utils';\r\nimport Card from '../../../../Feed/Card/Card';\r\nimport { parseISO } from 'date-fns';\r\nimport './UserHistoryItem.css';\r\n\r\ninterface Props {\r\n\titem: UserHistoryItem;\r\n}\r\n\r\nconst UserHistoryItemComponent: React.FC = ({ item }) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{localedFormat(parseISO(item.date as any), \"d MMMM yyyy, HH:mm\")}\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\tКнига {item.book.name}{\" \"}\r\n\t\t\t\tдобавлена в список \"{getReadableCardType(item.payload.value as any)}\"\r\n\t\t\t
\r\n\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\r\nexport default UserHistoryItemComponent;\r\n","import * as React from 'react';\r\nimport { UserHistoryItem } from '../../../../types/UserHistory';\r\nimport UserHistoryItemComponent from './UserHistoryItem/UserHistoryItem';\r\nimport './UserHistory.css';\r\nimport Button from '../../../Button/Button';\r\n\r\ninterface Props {\r\n\titems: UserHistoryItem[];\r\n\tpage?: number;\r\n\tonMoreLoad?: (lastId: number) => void;\r\n}\r\n\r\nconst UserHistoryComponent: React.FC = ({ items, page, onMoreLoad }) => {\r\n\tconst more = () => {\r\n\t\tonMoreLoad(items[items.length - 1].id);\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{items\r\n\t\t\t\t\t.filter((item) => item.book)\r\n\t\t\t\t\t.map((item) => {\r\n\t\t\t\t\t\treturn ;\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\r\nexport default UserHistoryComponent;\r\n","import * as React from \"react\";\r\nimport CategoriesCard from \"../../../CatrgoriesCardComponent/Component\";\r\nimport \"./PublicProfile.css\";\r\nimport getProfile from \"../../../../requests/getProfile\";\r\nimport { Book } from \"../../../../types/Book\";\r\nimport Card from \"../../../Feed/Card/Card\";\r\nimport ProfileMenu from \"../ProfileMenu/ProfileMenu\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { getUserState } from \"../../../../store/user/selectors\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { User } from \"../../../../types/User\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport { MOBILE_MAX_WIDTH } from \"../../../../utils\";\r\nimport MobileSlideMenu from \"./MobileSlideMenu/MobileSlideMenu\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport cn from 'classnames';\r\nimport UserHistoryComponent from \"../UserHistory/UserHistory\";\r\nimport { UserHistoryItem } from \"../../../../types/UserHistory\";\r\n\r\nconst PublicProfile: React.FC = (props) => {\r\n\tconst userProfile = useSelector(getUserState);\r\n\tconst [books, setBooks] = React.useState([]);\r\n\tconst params = useParams<{ id: string }>();\r\n\tconst [publicProfile, setPublicProfile] = React.useState(null);\r\n\tconst isMobile = useMediaQuery({ maxWidth: MOBILE_MAX_WIDTH });\r\n\tconst [historyItems, setHistoryItems] = React.useState([]);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tgetProfile(parseInt(params.id)).then((data) => {\r\n\t\t\tsetBooks([...data.library.readNow, ...data.library.alreadyRead]);\r\n\r\n\t\t\tsetPublicProfile(data.user);\r\n\r\n\t\t\tsetHistoryItems(data.userHistory);\r\n\t\t});\r\n\t}, [params.id]);\r\n\r\n\tconst onMoreLoad = (lastId: number) => {\r\n\t\tgetProfile(parseInt(params.id), lastId).then((data) => {\r\n\t\t\tsetHistoryItems([...historyItems, ...data.userHistory]);\r\n\t\t});\r\n\t}\r\n\r\n\tconst canBeEditable = React.useMemo(() => {\r\n\t\treturn parseInt(params?.id) === userProfile?.user?.id;\r\n\t}, [params, userProfile]);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
Последние действия
\r\n\r\n\t\t\t\t{!publicProfile && books.length === 0 && (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{[...new Array(7).keys()].map((item) => {\r\n\t\t\t\t\t\t\t\treturn ;\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t{publicProfile && books.length === 0 && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{canBeEditable\r\n\t\t\t\t\t\t\t? \"В вашей библиотеке пока нет книг\"\r\n\t\t\t\t\t\t\t: \"У пользователя пока нет книг в библиотеке\"}\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\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\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{publicProfile && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{publicProfile.name} - Readed.me \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{publicProfile?.imageURL && }\r\n\r\n\t\t\t\t\t\t{isMobile && canBeEditable && (\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\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
{publicProfile?.name}
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t{!isMobile && canBeEditable && }\r\n\r\n\t\t\t\t{publicProfile && (\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\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 PublicProfile;\r\n","import * as React from 'react';\r\nimport { Redirect, Route, Switch } from 'react-router-dom';\r\nimport './Profile.css';\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserState } from '../../../store/user/selectors';\r\nimport SettingsPage from './Settings/Settings';\r\nimport PublicProfile from './PublicProfile/PublicProfile';\r\n\r\nconst ProfilePage: React.FunctionComponent = props => {\r\n\tconst userProfile = useSelector(getUserState);\r\n\r\n\tif (!userProfile) {\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\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{userProfile.userId !== -2 ? : }\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\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 ProfilePage;\r\n","import { API_URL } from \"../utils\";\r\nimport { CalendarResponse } from \"../types/requests\"; \r\n\r\nexport default async (queries?: Map): Promise => {\r\n\tlet queriesArray: string[] = [];\r\n\t\r\n\tif (queries) {\r\n\t\tqueries.forEach((value, key) => {\r\n\t\t\tqueriesArray.push(`${key}=${value}`);\r\n\t\t})\r\n\t}\r\n\r\n\tconst request = await fetch(`${API_URL}/calendar?${queriesArray.join('&')}`, {\r\n\t\tcredentials: 'include',\r\n\t\tcache: 'no-cache'\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\treturn jsonRequest;\r\n};\r\n","import { AppState } from \"../reducers\";\r\nimport { createSelector } from \"reselect\";\r\nimport { LibraryCard, CardType, CardPropertyType } from \"../../types/LibraryCard\";\r\nimport { parseISO, getYear, getMonth, isAfter, addMonths, differenceInCalendarMonths } from \"date-fns\";\r\n\r\nexport interface CardWithDate {\r\n\tstartDate: Date;\r\n\tendDate?: Date;\r\n\tcard: LibraryCard;\r\n\ttype: CardType;\r\n}\r\n\r\nexport interface CardsByMonths {\r\n\t[month: number]: CardWithDate[];\r\n}\r\n\r\nexport interface CardsByYears {\r\n\t[year: number]: CardsByMonths;\r\n}\r\n\r\nexport const getState = (state: AppState) => state.calendarBooks;\r\n\r\nconst sortByDate = (a: LibraryCard, b: LibraryCard) => {\r\n\tconst aDateBegin = a.properties[CardPropertyType.DateBegin] ? parseISO(a.properties[CardPropertyType.DateBegin]) : null;\r\n\tconst bDateBegin = b.properties[CardPropertyType.DateBegin] ? parseISO(b.properties[CardPropertyType.DateBegin]) : null;\r\n\r\n\tif (aDateBegin && bDateBegin) {\r\n\t\treturn isAfter(aDateBegin, bDateBegin) ? -1 : 1;\r\n\t}\r\n\r\n\t// Книга без дат идет первой\r\n\tif (aDateBegin && !bDateBegin) {\r\n\t\tif (b.history.length > 0 && b.history[0].startDate) {\r\n\t\t\treturn isAfter(aDateBegin, parseISO(b.history[0].startDate as any)) ? -1 : 1;\r\n\t\t}\r\n\r\n\t\treturn 1;\r\n\t}\r\n\r\n\tif (bDateBegin && !aDateBegin) {\r\n\t\tif (a.history.length > 0 && a.history[0].startDate) {\r\n\t\t\treturn isAfter(parseISO(a.history[0].startDate as any), bDateBegin) ? -1 : 1;\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n}\r\n\r\nexport const getCardsArray = createSelector([getState], (state) => {\r\n\tconst array: LibraryCard[] = [];\r\n\r\n\tfor (const book in state) {\r\n\t\tif (state.hasOwnProperty(book) && state[book]) {\r\n\t\t\tarray.push(state[book]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn array.sort(sortByDate);\r\n});\r\n\r\nexport const getAlreadyReadBooks = createSelector([getCardsArray], (cards) => {\r\n\treturn cards.filter(card => card.cardType === CardType.AlreadyRead);\r\n});\r\n\r\nexport const getReadNowBooks = createSelector([getCardsArray], (cards) => {\r\n\treturn cards.filter(card => card.cardType === CardType.ReadNow);\r\n});\r\n\r\nexport const getWantReadBooks = createSelector([getCardsArray], (cards) => {\r\n\treturn cards.filter(card => card.cardType === CardType.WantRead);\r\n});\r\n\r\n/**\r\n * @deprecated\r\n */\r\nexport const getCardsByDate = createSelector([getState], (cards) => {\r\n\tlet cardsByYears: CardsByYears = {};\r\n\tconst addedBooksMap = new Map(); // чтобы не добавлять в один месяц несколько раз одну книгу\r\n\r\n\tfor (const book in cards) {\r\n\t\tif (\r\n\t\t\tcards.hasOwnProperty(book) && cards[book] &&\r\n\t\t\t(\r\n\t\t\t\tcards[book].properties[CardPropertyType.DateBegin] ||\r\n\t\t\t\t(\r\n\t\t\t\t\tcards[book].history && cards[book].history.length > 0\r\n\t\t\t\t)\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\tconst card = cards[book];\r\n\r\n\t\t\tif (card.properties[CardPropertyType.DateBegin]) {\r\n\t\t\t\tconst parsedDate = parseISO(card.properties[CardPropertyType.DateBegin]),\r\n\t\t\t\t\tyear = getYear(parsedDate),\r\n\t\t\t\t\tmonth = getMonth(parsedDate),\r\n\t\t\t\t\tcheckKey = `${year}-${month}-${card.eId}`;\r\n\t\t\t\t\r\n\t\t\t\tif (!addedBooksMap.has(checkKey)) {\r\n\t\t\t\t\tconst startDate = parsedDate;\r\n\t\t\t\t\tconst endDate = card.properties[CardPropertyType.DateFinish] && parseISO(card.properties[CardPropertyType.DateBegin]);\r\n\r\n\t\t\t\t\tcardsByYears = {\r\n\t\t\t\t\t\t...cardsByYears,\r\n\t\t\t\t\t\t[year]: {\r\n\t\t\t\t\t\t\t...cardsByYears[year],\r\n\t\t\t\t\t\t\t[month]: cardsByYears[year] && cardsByYears[year][month] ? [\r\n\t\t\t\t\t\t\t\t...cardsByYears[year][month],\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tcard,\r\n\t\t\t\t\t\t\t\t\tstartDate,\r\n\t\t\t\t\t\t\t\t\tendDate,\r\n\t\t\t\t\t\t\t\t\ttype: card.cardType\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\t{\r\n\t\t\t\t\t\t\t\t\t\tcard,\r\n\t\t\t\t\t\t\t\t\t\tstartDate,\r\n\t\t\t\t\t\t\t\t\t\tendDate,\r\n\t\t\t\t\t\t\t\t\t\ttype: card.cardType\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}\r\n\r\n\t\t\t\t\taddedBooksMap.set(checkKey, card.eId.toString());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (card.history && card.history.length > 0) {\r\n\t\t\t\tcard.history.forEach(history => {\r\n\t\t\t\t\tconst parsedDate = parseISO(history.startDate as any),\r\n\t\t\t\t\t\tyear = getYear(parsedDate),\r\n\t\t\t\t\t\tmonth = getMonth(parsedDate),\r\n\t\t\t\t\t\tcheckKey = `${year}-${month}-${card.eId}`;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (!addedBooksMap.has(checkKey)) {\r\n\t\t\t\t\t\tconst startDate = parsedDate;\r\n\t\t\t\t\t\tconst endDate = history.finishDate && parseISO(history.finishDate as any);\r\n\r\n\t\t\t\t\t\tcardsByYears = {\r\n\t\t\t\t\t\t\t...cardsByYears,\r\n\t\t\t\t\t\t\t[year]: {\r\n\t\t\t\t\t\t\t\t...cardsByYears[year],\r\n\t\t\t\t\t\t\t\t[month]: cardsByYears[year] && cardsByYears[year][month] ? [\r\n\t\t\t\t\t\t\t\t\t...cardsByYears[year][month],\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tcard,\r\n\t\t\t\t\t\t\t\t\t\tstartDate,\r\n\t\t\t\t\t\t\t\t\t\tendDate,\r\n\t\t\t\t\t\t\t\t\t\ttype: CardType.AlreadyRead\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\tcard,\r\n\t\t\t\t\t\t\t\t\tstartDate,\r\n\t\t\t\t\t\t\t\t\tendDate,\r\n\t\t\t\t\t\t\t\t\ttype: CardType.AlreadyRead\r\n\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\taddedBooksMap.set(checkKey, card.eId.toString());\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 cardsByYears;\r\n});\r\n\r\ninterface DatePeriod {\r\n\tstart: Date;\r\n\tend?: Date;\r\n\ttype?: CardType;\r\n}\r\n\r\nexport const getCardsByDateNew = createSelector([getState], (cards) => {\r\n\tlet cardsByYears: CardsByYears = {};\r\n\tconst addedBooksMap = new Map(); // чтобы не добавлять в один месяц несколько раз одну книгу\r\n\r\n\tfor (const cardId in cards) {\r\n\t\tif (cards.hasOwnProperty(cardId)) {\r\n\t\t\tconst card = cards[cardId];\r\n\t\t\tconst bookDates: DatePeriod[] = [];\r\n\r\n\t\t\t// Получаем все даты из карточки\r\n\t\t\tif (card.properties[CardPropertyType.DateBegin]) {\r\n\t\t\t\tbookDates.push({\r\n\t\t\t\t\t...getDatePeroid(\r\n\t\t\t\t\t\tcard.properties[CardPropertyType.DateBegin],\r\n\t\t\t\t\t\tcard.properties[CardPropertyType.DateFinish]\r\n\t\t\t\t\t),\r\n\t\t\t\t\ttype: card.cardType\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (card.history.length) {\r\n\t\t\t\tcard.history.forEach(history => {\r\n\t\t\t\t\tbookDates.push({\r\n\t\t\t\t\t\t...getDatePeroid(\r\n\t\t\t\t\t\t\thistory.startDate as any,\r\n\t\t\t\t\t\t\thistory.finishDate as any\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\ttype: CardType.AlreadyRead\r\n\t\t\t\t\t})\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Начинаем обрабатывать все собранные даты\r\n\t\t\tbookDates.forEach(peroid => {\r\n\t\t\t\tconst monthCount = peroid.end ? differenceInCalendarMonths(peroid.end, peroid.start) : 0;\r\n\t\t\t\tlet currentMonth = peroid.start;\r\n\r\n\t\t\t\tfor (let i = 0; i <= monthCount; i++) {\r\n\t\t\t\t\t// const checkKey = `${currentMonth.getFullYear()}-${currentMonth.getMonth()}-${card.eId}`;\r\n\r\n\t\t\t\t\t// if (!addedBooksMap.has(checkKey)) {\r\n\t\t\t\t\t\tcardsByYears = pushToState(\r\n\t\t\t\t\t\t\tcardsByYears,\r\n\t\t\t\t\t\t\tcard,\r\n\t\t\t\t\t\t\tcurrentMonth,\r\n\t\t\t\t\t\t\tperoid.start,\r\n\t\t\t\t\t\t\tperoid.end,\r\n\t\t\t\t\t\t\tperoid.type\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t//\taddedBooksMap.set(checkKey, checkKey);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tcurrentMonth = addMonths(currentMonth, 1);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\treturn cardsByYears;\r\n});\r\n\r\nconst getDatePeroid = (start: string, end?: string): DatePeriod => {\r\n\treturn {\r\n\t\tstart: parseISO(start),\r\n\t\tend: end ? parseISO(end) : null\r\n\t}\r\n};\r\n\r\nconst pushToState = (state: CardsByYears, card: LibraryCard, current: Date, start: Date, end?: Date, type?: CardType): CardsByYears => {\r\n\tconst year = current.getFullYear(),\r\n\t\tmonth = current.getMonth();\r\n\r\n\treturn {\r\n\t\t...state,\r\n\t\t[year]: {\r\n\t\t\t...getStateYearState(state, year),\r\n\t\t\t[month]: [\r\n\t\t\t\t...getStateMonth(state, year, month),\r\n\t\t\t\t{\r\n\t\t\t\t\tcard,\r\n\t\t\t\t\tstartDate: start,\r\n\t\t\t\t\tendDate: end,\r\n\t\t\t\t\ttype\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst getStateYearState = (state: CardsByYears, year: number) => {\r\n\treturn state[year] || {};\r\n}\r\n\r\nconst getStateMonth = (state: CardsByYears, year: number, month: number) => {\r\n\treturn state[year]?.[month] || [];\r\n}","import { SaveCardRequest, SaveCardResponse } from \"../types/requests\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (variables: SaveCardRequest): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\theaders.append('Content-Type', 'application/json;charset=utf-8');\r\n\r\n\tconst request = await fetch(`${API_URL}/cards/add`, {\r\n\t\theaders,\r\n\t\tmethod: 'POST',\r\n\t\tbody: JSON.stringify(variables),\r\n\t\tcredentials: 'include'\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\treturn jsonRequest;\r\n}\r\n","import { SaveCardPropertiesRequest, SaveCardPropertiesResponse } from \"../types/requests\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (variables: SaveCardPropertiesRequest): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\theaders.append('Content-Type', 'application/json;charset=utf-8');\r\n\r\n\tconst request = await fetch(`${API_URL}/cards/saveProperties`, {\r\n\t\theaders,\r\n\t\tmethod: 'POST',\r\n\t\tbody: JSON.stringify(variables),\r\n\t\tcredentials: 'include'\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\treturn jsonRequest;\r\n}\r\n","import { API_URL } from \"../utils\";\r\nimport { DeleteCardRequest } from \"../types/requests\";\r\n\r\nexport default async (request: DeleteCardRequest): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\tconst result: { data: boolean, errors?: string } = await (await fetch(`${API_URL}/cards/delete?id=${request.cardId}`, {\r\n\t\theaders,\r\n\t\tcredentials: 'include'\r\n\t})).json();\r\n\r\n\treturn result.data;\r\n};\r\n","import * as React from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport calendar from '../../requests/calendar';\r\nimport { CalendarByTypes, CalendarCards } from '../../types/requests';\r\nimport { pushBooksAction, setBookProperties, deleteBookAction, setBooksAction } from '../../store/calendar/actions';\r\nimport { getCardsArray, getState, CardsByYears } from '../../store/calendar/selectors';\r\nimport { LibraryCard, CardProperties, CardPropertyType } from '../../types/LibraryCard';\r\nimport saveCard from '../../requests/saveCard';\r\nimport saveCardProperties from '../../requests/saveCardProperties';\r\nimport { CalendarState } from '../../store/calendar/reducers';\r\nimport getLibraryCard from '../../requests/getLibraryCard';\r\nimport deleteCard from '../../requests/deleteCard';\r\nimport { getUserState } from '../../store/user/selectors';\r\nimport { endOfYear, startOfYear } from 'date-fns';\r\n\r\nexport type CardsManagerCallbacks = {\r\n\tcards: LibraryCard[],\r\n\tcalendar: CalendarState;\r\n\taddCard: (card: LibraryCard) => Promise,\r\n\tsaveCardProperties: (cardId: number, properties: CardProperties) => Promise;\r\n\tdeleteCard: (cardId: number) => Promise;\r\n\tcardsByDate?: CardsByYears;\r\n\tloading?: boolean;\r\n}\r\n\r\ninterface DispatchProps {\r\n\tsetBooks: typeof setBooksAction;\r\n\tpushBooks: typeof pushBooksAction;\r\n\tsaveProperties: typeof setBookProperties;\r\n\tdeleteBook: typeof deleteBookAction;\r\n}\r\n\r\ninterface Props {\r\n\ttype?: 'list' | 'calendar';\r\n\tchildren: (callbacks: CardsManagerCallbacks) => React.ReactNode;\r\n\tenableWelcomeBook?: boolean;\r\n\twelcomeType?: 'common' | 'calendar';\r\n\twithoutInitial?: boolean;\r\n\tcurrentDate?: Date;\r\n}\r\n\r\nconst CardsManager: React.FC = props => {\r\n\tconst [loading, setLoading] = React.useState(false);\r\n\r\n\tconst cards = useSelector(getCardsArray);\r\n\tconst calendarState = useSelector(getState);\r\n\tconst userProfile = useSelector(getUserState);\r\n\t\r\n\tconst getCardsRequest = async () => {\r\n\t\tconst queries = new Map();\r\n\r\n\t\tsetLoading(true);\r\n\r\n\t\tif (props.type === 'calendar') {\r\n\t\t\tqueries.set(\"join\", \"true\");\r\n\t\t}\r\n\r\n\t\tif (props.currentDate) {\r\n\t\t\tqueries.set(\"startDate\", startOfYear(props.currentDate).toISOString());\r\n\t\t\tqueries.set(\"finishDate\", endOfYear(props.currentDate).toISOString());\r\n\t\t}\r\n\r\n\t\tconst request = await calendar(queries);\r\n\r\n\t\tif (request) {\r\n\t\t\tif (props.type !== 'calendar') {\r\n\t\t\t\tconst byTypeRequest = request as CalendarByTypes;\r\n\r\n\t\t\t\tconst array = [\r\n\t\t\t\t\t...byTypeRequest.alreadyRead,\r\n\t\t\t\t\t...byTypeRequest.readNow,\r\n\t\t\t\t\t...byTypeRequest.wantRead,\r\n\t\t\t\t]\r\n\r\n\t\t\t\tprops.setBooks(array);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tprops.setBooks([...(request as CalendarCards)]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsetLoading(false);\r\n\t};\r\n\r\n\tconst addCard = async (card: LibraryCard): Promise => {\r\n\t\tif (!(userProfile.userId > 0)) {\r\n\t\t\twindow.location.href = '/login';\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst request = await saveCard({\r\n\t\t\tcards: {\r\n\t\t\t\tcards: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tiId: 1,\r\n\t\t\t\t\t\tcardType: card.cardType,\r\n\t\t\t\t\t\tbook: card.book,\r\n\t\t\t\t\t\tproperties: card.properties\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\tif (request.data && request.data[1]) {\r\n\t\t\tgetCardsRequest();\r\n\r\n\t\t\treturn request.data[1];\r\n\t\t}\r\n\t\t\r\n\t\treturn null;\r\n\t};\r\n\r\n\tconst getCardById = async (cardId: number) => {\r\n\t\tconst request = await getLibraryCard(cardId);\r\n\r\n\t\tif (request) {\r\n\t\t\tprops.pushBooks([\r\n\t\t\t\trequest\r\n\t\t\t]);\r\n\t\t}\r\n\t};\r\n\r\n\tconst saveCardPropertiesCallback = async (cardId: number, properties: CardProperties): Promise => {\r\n\t\tconst request = await saveCardProperties({\r\n\t\t\tcardId,\r\n\t\t\tproperties\r\n\t\t});\r\n\r\n\t\tif (request.data) {\r\n\t\t\tgetCardsRequest();\r\n\r\n\t\t\tprops.saveProperties({\r\n\t\t\t\tcardId,\r\n\t\t\t\tproperties,\r\n\t\t\t\tcardType: properties[CardPropertyType.Type] as any\r\n\t\t\t})\r\n\r\n\t\t\treturn request.data;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t};\r\n\r\n\tconst deleteCardRequest = async (cardId: number) => {\r\n\t\tconst request = await deleteCard({\r\n\t\t\tcardId\r\n\t\t});\r\n\r\n\t\tif (request) {\r\n\t\t\tprops.deleteBook(cardId);\r\n\t\t}\r\n\t\r\n\t\treturn true;\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (!props.withoutInitial) {\r\n\t\t\tgetCardsRequest();\r\n\t\t}\r\n\t}, [props.type, props.currentDate]);\r\n\r\n\tconst callbacks: CardsManagerCallbacks = {\r\n\t\tcards,\r\n\t\tcalendar: calendarState,\r\n\t\taddCard,\r\n\t\tdeleteCard: deleteCardRequest,\r\n\t\tsaveCardProperties: saveCardPropertiesCallback,\r\n\t\tloading\r\n\t};\r\n\r\n\treturn <>\r\n\t\t{props.children(callbacks)}\r\n\t;\r\n};\r\n\r\nexport default connect(() => { },\r\n\t{\r\n\t\tsetBooks: setBooksAction,\r\n\t\tpushBooks: pushBooksAction,\r\n\t\tsaveProperties: setBookProperties,\r\n\t\tdeleteBook: deleteBookAction\r\n\t}\r\n)(CardsManager);","import * as React from 'react';\r\nimport CalendarBook from '../../../../types/CalendarBook';\r\nimport { getDatePeriod, MOBILE_MAX_WIDTH } from '../../../../utils';\r\nimport './BookChip.css';\r\nimport { parseISO } from 'date-fns';\r\nimport { LibraryCard, CardPropertyType, CardType } from '../../../../types/LibraryCard';\r\nimport MediaQuery from 'react-responsive';\r\nimport cn from 'classnames';\r\n\r\ninterface Props {\r\n\tcard: LibraryCard;\r\n\tisSelected?: boolean\r\n\tonClick?: () => void;\r\n\tclassName?: string;\r\n\tcustomPeriod?: string;\r\n}\r\n\r\nconst BookChip: React.FunctionComponent = ({ card, onClick, isSelected, className, customPeriod }) => {\r\n\tconst datePeriod = React.useMemo(() => {\r\n\t\tif (customPeriod) {\r\n\t\t\treturn customPeriod\r\n\t\t}\r\n\r\n\t\tif (card.cardType === CardType.AlreadyRead && card.history.length > 0) {\r\n\t\t\treturn getDatePeriod(card.history[0].startDate, card.history[0].finishDate)\r\n\t\t}\r\n\r\n\t\treturn getDatePeriod(\r\n\t\t\tparseISO(card.properties[CardPropertyType.DateBegin]),\r\n\t\t\tcard.properties[CardPropertyType.DateFinish] ? parseISO(card.properties[CardPropertyType.DateFinish]) : null,\r\n\t\t\tnull,\r\n\t\t\tnull,\r\n\t\t\tcard.cardType === CardType.WantRead\r\n\t\t)\r\n\t}, [card.properties[CardPropertyType.DateBegin], card.properties[CardPropertyType.DateFinish], customPeriod]);\r\n\r\n\treturn (\r\n\t\t onClick()}\r\n\t\t>\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t
{card.book.name}
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{datePeriod ? `📆 ${datePeriod}` : \"\"}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{card.cardType === CardType.ReadNow && \"▶ \"}\r\n\t\t\t\t\t\t\t{card.book.name}\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t
{card.book.author}
\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{datePeriod ? `📆 ${datePeriod}` : \"\"}\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 BookChip;\r\n","import * as React from 'react';\r\nimport './HeightControl.css';\r\n\r\ninterface Props {\r\n\telements?: React.ReactNode;\r\n\tshowMore?: React.ReactNode;\r\n\theader?: string;\r\n\tonClickMore?: () => void;\r\n}\r\n\r\nconst HeightControl: React.FunctionComponent = props => {\r\n\tconst wrapperRef = React.useRef(null);\r\n\tconst innerRef = React.useRef(null);\r\n\tconst [showMore, setShowMore] = React.useState(false);\r\n\tconst [open, setOpen] = React.useState(false);\r\n\r\n\tconst updateHeight = () => {\r\n\t\tconst wrapperHeight = wrapperRef.current.offsetHeight,\r\n\t\t\tfirstChild = innerRef.current.childNodes.length > 0 ? innerRef.current.firstElementChild as HTMLDivElement : null;\r\n\t\t\r\n\t\tif (firstChild) {\r\n\t\t\tconst firstChildHeight = firstChild.offsetHeight,\r\n\t\t\t\tchildsCount = innerRef.current.childNodes.length;\r\n\t\t\t\t\t\r\n\t\t\tif (firstChildHeight * childsCount > (wrapperHeight - 50) && childsCount > 1) {\r\n\t\t\t\tconst minCount = Math.round(wrapperHeight * 1.0 / firstChildHeight - 1);\r\n\t\t\t\twrapperRef.current.classList.add('height-control_withHidden');\r\n\r\n\t\t\t\tsetShowMore(true);\r\n\r\n\t\t\t\tinnerRef.current.childNodes.forEach((child, key) => {\r\n\t\t\t\t\tif (key > minCount) {\r\n\t\t\t\t\t\t(child as HTMLDivElement).classList.add('hidden_element');// = 'none';\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t(child as HTMLDivElement).classList.remove('hidden_element'); //= 'flex';\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsetShowMore(false);\r\n\t\t\t\twrapperRef.current.classList.remove(\"height-control_withHidden\");\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\twindow.addEventListener(\"resize\", updateHeight);\r\n\r\n\t\tif (wrapperRef.current) {\r\n\t\t\tupdateHeight();\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\treturn window.removeEventListener('resize', updateHeight);\r\n\t\t}\r\n\t}, [wrapperRef]);\r\n\r\n\treturn
\r\n\t\t
\r\n\t\t\t{props.children}\r\n\t\t
\r\n\r\n\t\t{showMore &&
\r\n\t\t\t{props.showMore}\r\n\t\t
}\r\n\t
;\r\n};\r\n\r\nexport default HeightControl;","import * as React from 'react';\r\nimport { LibraryCard, CardType, CardPropertyType, CardProperties } from '../../../../types/LibraryCard';\r\nimport Button from '../../../Button/Button';\r\nimport './QuickButton.css';\r\nimport { setBookProperties } from '../../../../store/calendar/actions';\r\nimport { connect } from 'react-redux';\r\nimport saveCardProperties from '../../../../requests/saveCardProperties';\r\n\r\ninterface Props {\r\n\tlibraryCard: LibraryCard;\r\n\tonClick?: (type: CardType) => void;\r\n}\r\n\r\ninterface DispatchProps {\r\n\tsetBookProperties: typeof setBookProperties;\r\n}\r\n\r\nconst QuickButton: React.FunctionComponent = props => {\r\n\tconst [loading, setLoading] = React.useState(false);\r\n\r\n\tconst buttonText = React.useMemo(() => {\r\n\t\tswitch (props.libraryCard.cardType) {\r\n\t\t\tcase CardType.ReadNow:\r\n\t\t\t\treturn \"✅ Прочитано\";\r\n\t\t\t\r\n\t\t\tcase CardType.WantRead:\r\n\t\t\t\treturn \"▶ В список Читаю сейчас\";\r\n\t\t\t\r\n\t\t\tcase CardType.AlreadyRead:\r\n\t\t\t\treturn '🕑 Запланировать к чтению';\r\n\t\t}\r\n\t}, [props.libraryCard]);\r\n\r\n\tconst onClick = () => {\r\n\t\tif (props.libraryCard.cardType === CardType.WantRead) {\r\n\t\t\tprops.onClick(CardType.ReadNow);\r\n\t\t}\r\n\t\telse if (props.libraryCard.cardType === CardType.ReadNow) {\r\n\t\t\tprops.onClick(CardType.AlreadyRead)\r\n\t\t}\r\n\t\telse if (props.libraryCard.cardType === CardType.AlreadyRead) {\r\n\t\t\tprops.onClick(CardType.WantRead)\r\n\t\t}\r\n\t};\r\n\r\n\treturn ;\r\n};\r\n\r\nexport default connect(() => { }, {\r\n\tsetBookProperties: setBookProperties\r\n})(QuickButton);\r\n","import * as React from 'react';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SearchIcon from \"@material-ui/icons/Search\";\r\nimport cn from 'classnames';\r\nimport './BookFind.css';\r\nimport Collapse from '@material-ui/core/Collapse';\r\nimport InputAdornment from '@material-ui/core/InputAdornment';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\ninterface Props {\r\n\tonInputChanged?: (value: string) => void;\r\n\tonClose?: () => void;\r\n\tclassName?: string;\r\n\tdisabled?: boolean;\r\n}\r\n\r\nconst BookFind: React.FunctionComponent = props => {\r\n\tconst [inputVisible, setInputVisible] = React.useState(false);\r\n\tconst inputRef = React.useRef(null);\r\n\r\n\tconst onClose = () => {\r\n\t\tprops.onClose();\r\n\t\tinputRef.current.value = \"\";\r\n\t\tsetInputVisible(false);\r\n\t}\r\n\r\n\tconst onInputChange = (e: any) => {\r\n\t\tprops.onInputChanged(e.target.value);\r\n\t}\r\n\r\n\treturn
\r\n\t\t{props.children}\r\n\r\n\t\t
\r\n\t\t\t{!props.disabled && setInputVisible(true)}>\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t
\r\n\r\n\t\t\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}}/>\r\n\t\t\r\n\t
;\r\n};\r\n\r\nexport default BookFind;\r\n","import { Book } from \"../types/Book\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (query: string): Promise => {\r\n\tconst result: Book[] = await (await fetch(`${API_URL}/books?query=${query}`, {\r\n\t\tcredentials: 'include'\r\n\t})).json();\r\n\r\n\treturn result;\r\n};\r\n","import * as React from 'react';\r\nimport { Book as BookType } from '../../types/Book';\r\nimport cn from 'classnames';\r\nimport './Book.css';\r\n\r\ninterface Props {\r\n\tbook: BookType;\r\n\tdisabled?: boolean;\r\n\tonClick?: (book: BookType) => void;\r\n\ttype?: 'row' | 'standart' | 'mini';\r\n\tpayload?: React.ReactNode;\r\n\tclassName?: string;\r\n\tclickable?: boolean;\r\n}\r\n\r\nconst Book: React.FunctionComponent = ({ book, className, type, onClick, disabled, payload, clickable }) => {\r\n\treturn onClick(book) : () => { \r\n\t\t\twindow.location.href = `book/${book.externalId}`;\r\n\t\t} : null}\r\n\t>\r\n\t\t
\r\n\t\t\t\r\n\t\t
\r\n\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{clickable ? \r\n\t\t\t\t\t{book.name}\r\n\t\t\t\t : book.name}\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t{book.author}\r\n\t\t\t
\r\n\r\n\t\t\t{payload &&
\r\n\t\t\t\t{payload}\t\r\n\t\t\t
}\r\n\t\t
\r\n\t\r\n};\r\n\r\nexport default Book;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './Initial.css';\r\nimport { MOBILE_MAX_WIDTH } from '../../../../utils';\r\nimport MediaQuery from 'react-responsive';\r\n\r\ninterface Props {\r\n\tonClickCard: () => void;\r\n}\r\n\r\nconst Initial: React.FunctionComponent = props => {\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
\r\n\t
\r\n};\r\n\r\nexport default connect()(Initial);\r\n","import { API_URL } from \"../utils\";\r\n\r\nexport default async (query: string): Promise => {\r\n\tconst result: string[] = await (await fetch(`${API_URL}/books/complete?q=${query}`, {\r\n\t\tcredentials: 'include'\r\n\t})).json();\r\n\r\n\treturn result;\r\n};\r\n","import * as React from \"react\";\r\nimport { Book as BookType } from \"../../../types/Book\";\r\nimport findBook from \"../../../requests/findBook\";\r\nimport \"./FindBook.css\";\r\nimport Book from \"../../Book/Book\";\r\nimport cn from \"classnames\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport BookDialogPreview from \"../../BookDialogPreview/BookDialogPreview\";\r\nimport OutsideClickHandler from \"react-outside-click-handler\";\r\nimport Initial from \"./Initial/Initial\";\r\nimport { CardsManagerCallbacks } from \"../../CardsManager/CardsManager\";\r\nimport SearchIcon from \"@material-ui/icons/Search\";\r\nimport getAutocomplete from \"../../../requests/getAutocomplete\";\r\nimport MediaQuery from \"react-responsive\";\r\nimport { MOBILE_MAX_WIDTH } from \"../../../utils\";\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n\twithoutInitial?: boolean;\r\n\tdummyRender?: (onClick: () => void) => React.ReactNode;\r\n\tonBookSelect?: (book: BookType) => void;\r\n}\r\n\r\nconst FindBook: React.FunctionComponent = (props) => {\r\n\tconst inputRef = React.useRef(null);\r\n\r\n\tconst [fullMode, setFullMode] = React.useState(false);\r\n\tconst [addedBooks, setAddedBooks] = React.useState([]);\r\n\tconst [selectedBookId, setSelectedBookId] = React.useState(null);\r\n\tconst [isLoading, setLoading] = React.useState(false);\r\n\tconst [autocomplete, setAutocomplete] = React.useState([]);\r\n\r\n\tconst [search, setSearch] = React.useState(\"\");\r\n\r\n\tconst disableFullMode = () => {\r\n\t\tinputRef.current.value = \"\";\r\n\t\tsetFullMode(false);\r\n\t\tsetAddedBooks([]);\r\n\t};\r\n\r\n\tconst onFocus = () => {\r\n\t\tsetFullMode(true);\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\tinputRef.current?.addEventListener(\"focus\", onFocus);\r\n\r\n\t\treturn () => {\r\n\t\t\tinputRef.current?.removeEventListener(\"focus\", onFocus);\r\n\t\t};\r\n\t}, []);\r\n\r\n\tconst getResults = (query: string) => {\r\n\t\tconst addedBooksTmp: BookType[] = [],\r\n\t\t\totherBooksTmp: BookType[] = [];\r\n\r\n\t\tif ((window as any)[\"ym\"]) {\r\n\t\t\t(window as any).ym(63827389, \"reachGoal\", \"book_search_begin\", {\r\n\t\t\t\tbookSearch: query,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tinputRef.current.value = query;\r\n\t\tsetAutocomplete([]);\r\n\t\tsetSearch(\"\");\r\n\r\n\t\tsetLoading(true);\r\n\r\n\t\tfindBook(query).then((data) => {\r\n\t\t\tconst categoriesMap = new Map();\r\n\r\n\t\t\tsetAddedBooks(data);\r\n\r\n\t\t\t/*categoriesMap.forEach((count, key) => {\r\n\t\t\t\tcategories.push({\r\n\t\t\t\t\tname: key,\r\n\t\t\t\t\tcount\r\n\t\t\t\t})\r\n\t\t\t})*/\r\n\r\n\t\t\tsetLoading(false);\r\n\t\t});\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (search.length > 1) {\r\n\t\t\tgetAutocomplete(search).then((data) => {\r\n\t\t\t\tsetAutocomplete(data);\r\n\t\t\t});\r\n\t\t}\r\n\t}, [search]);\r\n\r\n\tconst onBookClick = (book: BookType) => {\r\n\t\tdisableFullMode();\r\n\r\n\t\tif (props.onBookSelect) {\r\n\t\t\tprops.onBookSelect(book);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (book.woo_id) {\r\n\t\t\twindow.location.href = `/book/${book.woo_id}/`;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telse {\r\n\t\t\twindow.location.href = `/book/t${book.externalId}/`;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ((window as any)[\"ym\"]) {\r\n\t\t\t(window as any).ym(63827389, \"reachGoal\", \"book_search_bookClick\", {\r\n\t\t\t\tbookSearch: inputRef.current?.value,\r\n\t\t\t\tbookName: book.image,\r\n\t\t\t\tbookId: book.externalId,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsetSelectedBookId(book);\r\n\t};\r\n\r\n\tconst enableFullMode = () => {\r\n\t\tsetFullMode(true);\r\n\r\n\t\tsetTimeout(() => inputRef.current?.focus(), 300);\r\n\r\n\t\tif ((window as any)[\"ym\"]) {\r\n\t\t\t(window as any).ym(63827389, \"reachGoal\", \"book_search_start\");\r\n\t\t}\r\n\t};\r\n\r\n\tconst filteredBook = React.useMemo(() => {\r\n\t\treturn addedBooks;\r\n\t}, [addedBooks]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{!fullMode && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t{props.dummyRender ? (\r\n\t\t\t\t\t\tprops.dummyRender(enableFullMode)\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Найдите книгу, которая вас интересует\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\t\t\t)}\r\n\r\n\t\t\t
\r\n\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\r\n\t\t\t\t\t\t\t{fullMode && (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t{fullMode && search && (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t getResults(search)}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tИскать {search}\r\n\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\t{autocomplete.length > 0 &&\r\n\t\t\t\t\t\t\t\t\tautocomplete.map((value) => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t getResults(value)}\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={value}\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{value}\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\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{fullMode && autocomplete.length === 0 && (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{isLoading && }\r\n\r\n\t\t\t\t\t\t\t\t{!inputRef.current.value && !props.withoutInitial && (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{inputRef.current.value && !isLoading && addedBooks.length > 0 && (\r\n\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t{addedBooks.length > 0 && (\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{filteredBook.map((book, index) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\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\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\r\n\r\n\t\t\t\t setSelectedBookId(null)}\r\n\t\t\t\t\tonSaved={() => setSelectedBookId(null)}\r\n\t\t\t\t\tsaveCard={props.callbacks.addCard}\r\n\t\t\t\t\tsaveProperties={props.callbacks.saveCardProperties}\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 FindBook;\r\n","import * as React from 'react';\r\nimport CardsManager, { CardsManagerCallbacks } from '../CardsManager/CardsManager';\r\nimport FindBook from '../Header/FindBook/FindBook';\r\nimport './WelcomeBook.css';\r\nimport { Book as BookType } from '../../types/Book';\r\nimport getSuggestedBooks from '../../requests/getSuggestedBooks';\r\nimport Book from '../Book/Book';\r\nimport BookDialogPreview from '../BookDialogPreview/BookDialogPreview';\r\nimport Button from '../Button/Button';\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n}\r\n\r\nconst WelcomeBook: React.FC = props => {\r\n\tconst [suggestedBooks, setSuggestedBooks] = React.useState([]);\r\n\tconst [selectedBook, setSelectedBook] = React.useState('');\r\n\r\n\t/*React.useEffect(() => {\r\n\t\tgetSuggestedBooks().then(result => {\r\n\t\t\tsetSuggestedBooks(result);\r\n\t\t})\r\n\t}, []);*/\r\n\r\n\treturn <>\r\n\t\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\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\r\n\t\t\t\t{suggestedBooks.length > 0 &&
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\tЧто читают\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{suggestedBooks.map(book => (\r\n\t\t\t\t\t\t\t setSelectedBook(book.externalId)}/>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t setSelectedBook('')}\r\n\t\t\t\t\t\tonSaved={() => setSelectedBook('')}\r\n\t\t\t\t\t\tsaveCard={props.callbacks.addCard}\r\n\t\t\t\t\t\tsaveProperties={props.callbacks.saveCardProperties}\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\nexport default WelcomeBook;\r\n","import * as React from \"react\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\nimport \"./Categories.css\";\r\n\r\ninterface Props {\r\n\tcategories: {\r\n\t\tid: string | number;\r\n\t\tname: string;\r\n\t\tcount: number;\r\n\t}[];\r\n\tselectedCategory?: string | number;\r\n\tsetCategory: (categoryId: string | number) => void;\r\n\tremoveCategory: () => void;\r\n}\r\n\r\nconst Categories: React.FC = (props) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{props.categories.map((category, index) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t props.removeCategory() : null}\r\n\t\t\t\t\t\t\t\tonClick={() => props.setCategory(category.id)}\r\n\t\t\t\t\t\t\t\tclasses={{\r\n\t\t\t\t\t\t\t\t\troot: \"categories-chip\",\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\r\nexport default Categories;\r\n","import * as React from 'react';\r\nimport { LibraryCard } from '../../../../../types/LibraryCard';\r\nimport { CategoryCard } from '../../../../../types/CategoriesCard';\r\nimport Categories from '../../../../Header/FindBook/Categroies/Categories';\r\n\r\ninterface Props {\r\n\tcards: LibraryCard[];\r\n\tsetCollection: (id: number) => void;\r\n\tselectedCollection?: number;\r\n}\r\n\r\nconst CategoriesWrapper: React.FC = props => {\r\n\tconst categories = React.useMemo(() => {\r\n\t\tconst categoriesArray: {\r\n\t\t\tid: number,\r\n\t\t\tname: string,\r\n\t\t\tcount: number\r\n\t\t}[] = [];\r\n\t\tconst categoriesCardMap: Map = new Map();\r\n\r\n\t\tprops.cards.forEach(card => {\r\n\t\t\tif (categoriesCardMap.has(card.book.collection.id)) {\r\n\t\t\t\tconst category = categoriesCardMap.get(card.book.collection.id);\r\n\r\n\t\t\t\tcategoriesCardMap.set(\r\n\t\t\t\t\tcard.book.collection.id,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t...category,\r\n\t\t\t\t\t\tcount: category.count + 1\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcategoriesCardMap.set(card.book.collection.id, {\r\n\t\t\t\t\tcount: 1,\r\n\t\t\t\t\tcategory: card.book.collection as any,\r\n\t\t\t\t\tpercent: 0\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcategoriesCardMap.forEach(value => {\r\n\t\t\tcategoriesArray.push({\r\n\t\t\t\tid: value.category.id,\r\n\t\t\t\tname: value.category.name,\r\n\t\t\t\tcount: value.count\r\n\t\t\t})\r\n\t\t});\r\n\r\n\t\treturn categoriesArray;\r\n\t}, [props.cards]);\r\n\r\n\treturn props.setCollection(id as any)}\r\n\t\tremoveCategory={() => props.setCollection(null)}\r\n\t\tselectedCategory={props.selectedCollection}\r\n\t/>;\r\n};\r\n\r\nexport default CategoriesWrapper;","import * as React from \"react\";\r\nimport \"../BooksSidebar.css\";\r\nimport cn from \"classnames\";\r\nimport { MOBILE_MAX_WIDTH } from \"../../../../utils\";\r\nimport MediaQuery from \"react-responsive\";\r\nimport BookFind from \"../BookFind/BookFind\";\r\nimport BookChip from \"../BookChip/BookChip\";\r\nimport { LibraryCard } from \"../../../../types/LibraryCard\";\r\nimport Select from \"@material-ui/core/Select/Select\";\r\nimport MenuItem from \"@material-ui/core/MenuItem/MenuItem\";\r\nimport { Sections } from \"../BooksSidebar\";\r\nimport WelcomeBook from \"../../../WelcomeBook/WelcomeBook\";\r\nimport { CallbacksContext } from \"../../BookCalendar\";\r\nimport CategoriesWrapper from \"./CategoriesWrapper/CaategoriesWrapper\";\r\nimport { useParams } from \"react-router-dom\";\r\n\r\ninterface Props {\r\n\tsectionName: string;\r\n\tbooks: LibraryCard[];\r\n\tselectedBookId?: number;\r\n\tonCardSelect: (bookId: number) => void;\r\n\temptyText: string;\r\n\ttype?: Sections;\r\n\tonChangeSection?: (type: Sections) => void;\r\n}\r\n\r\nconst BookSection: React.FunctionComponent = (props) => {\r\n\tconst params = useParams<{\r\n\t\tcategory: string\r\n\t}>();\r\n\r\n\tconst [filteredBook, setFilteredBook] = React.useState(null);\r\n\tconst [selectedCollection, setCollection] = React.useState(params?.category ? parseInt(params.category) : null);\r\n\r\n\tconst filteredBooks = React.useMemo(() => {\r\n\t\tlet cards = props.books;\r\n\r\n\t\tif (filteredBook) {\r\n\t\t\tcards = cards.filter(\r\n\t\t\t\t(card) => card.book.name.toLowerCase().indexOf(filteredBook) >= 0\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (selectedCollection) {\r\n\t\t\tcards = cards.filter(\r\n\t\t\t\t(card) => card.book?.collection?.id === selectedCollection\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn cards;\r\n\t}, [props.books, filteredBook, selectedCollection]);\r\n\r\n\tconst onSearchChange = (value: string) => {\r\n\t\tsetFilteredBook(value.toLowerCase());\r\n\t};\r\n\r\n\tconst onSearchClose = () => {\r\n\t\tsetFilteredBook(null);\r\n\t};\r\n\r\n\tconst callbacks = React.useContext(CallbacksContext);\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
{props.sectionName}
\r\n\t\t\t\t\r\n\t\t\t
\r\n\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\tprops.onChangeSection(e.target.value as Sections);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tdisableUnderline={true}\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Хочу прочитать\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\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\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t{filteredBooks.length > 0 && (\r\n\t\t\t\t
\r\n\t\t\t\t\t{filteredBooks.map((card) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\tprops.onCardSelect(card.eId);\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\r\n\t\t\t{filteredBooks.length === 0 && (\r\n\t\t\t\t
\r\n\t\t\t\t\t{filteredBook ? (\r\n\t\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\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 BookSection;\r\n","import * as React from \"react\";\r\nimport Inner from \"./Inner/Inner\";\r\nimport Dialog from \"@material-ui/core/Dialog/Dialog\";\r\nimport { LibraryCard } from \"../../types/LibraryCard\";\r\nimport addReview from \"../../requests/addReview\";\r\nimport { Review } from \"../../types/Review\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport { MOBILE_MAX_WIDTH } from \"../../utils\";\r\n\r\ninterface Props {\r\n\tcard: LibraryCard;\r\n\treview?: Review;\r\n\tonClose: () => void;\r\n\tonPublished?: (id: number) => void;\r\n}\r\n\r\nexport enum ReviewPopupStatus {\r\n\tReady,\r\n\tSending,\r\n\tSuccess,\r\n\tError,\r\n}\r\n\r\nconst ReviewPopup: React.FC = (props) => {\r\n\tconst [status, setStatus] = React.useState(ReviewPopupStatus.Ready);\r\n\r\n\tconst isMobile = useMediaQuery({ maxWidth: MOBILE_MAX_WIDTH })\r\n\r\n\tconst publishReview = (mark: number, review: string, recommend?: boolean) => {\r\n\t\tsetStatus(ReviewPopupStatus.Sending);\r\n\r\n\t\tconst request = async () => {\r\n\t\t\tconst result = await addReview({\r\n\t\t\t\treview: {\r\n\t\t\t\t\tmark,\r\n\t\t\t\t\treview,\r\n\t\t\t\t\tbookId: props.card.book.id,\r\n\t\t\t\t\tisRecommend: recommend,\r\n\t\t\t\t\tid: props.review?.id,\r\n\t\t\t\t},\r\n\t\t\t});\r\n\r\n\t\t\tif (result && !(result as any)[\"errors\"]) {\r\n\t\t\t\tprops.onPublished(result);\r\n\r\n\t\t\t\tsetStatus(ReviewPopupStatus.Success);\r\n\t\t\t} else {\r\n\t\t\t\tsetStatus(ReviewPopupStatus.Error);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\trequest();\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 default ReviewPopup;\r\n","import { Note } from \"../types/Note\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (cardId: number): Promise => {\r\n\tconst result: Note[] = await (await fetch(`${API_URL}/cards/notes?cardId=${cardId}`, {\r\n\t\tcredentials: 'include'\r\n\t})).json();\r\n\r\n\treturn result;\r\n};\r\n","import * as React from 'react';\r\nimport { Note as NoteType } from '../../../../types/Note';\r\nimport { localedFormat } from '../../../../utils';\r\nimport './Note.css';\r\nimport { parseISO } from 'date-fns';\r\nimport Button from '../../../Button/Button';\r\nimport Input from '../../../Input/Input';\r\nimport Collapse from '@material-ui/core/Collapse';\r\nimport IconButton from '@material-ui/core/IconButton/IconButton';\r\nimport MoreIcon from '@material-ui/icons/MoreVert';\r\nimport Menu from '@material-ui/core/Menu/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem/MenuItem';\r\n\r\ninterface Props {\r\n\tnote: NoteType;\r\n\tonEdit: (noteId: number, note: string) => Promise;\r\n\tonDelete: (noteId: number) => Promise;\r\n}\r\n\r\nconst Note: React.FunctionComponent = props => {\r\n\tconst [editMode, setEditMode] = React.useState(false);\r\n\tconst inputRef = React.useRef(null);\r\n\tconst [loading, setLoading] = React.useState(false);\r\n\tconst [isDeleting, setDelete] = React.useState(false);\r\n\tconst [menuOpen, setMenuOpen] = React.useState(false);\r\n\r\n\tconst onEdit = () => {\r\n\t\tsetLoading(true);\r\n\r\n\t\tprops.onEdit(props.note.id, inputRef.current.value).then(result => {\r\n\t\t\tsetLoading(false);\r\n\t\t\tsetEditMode(false);\r\n\t\t})\r\n\t}\r\n\t\r\n\tconst onDelete = () => {\r\n\t\tsetDelete(true);\r\n\t\tsetMenuOpen(false);\r\n\r\n\t\tprops.onDelete(props.note.id);\r\n\t}\r\n\r\n\tconst onEditHandler = () => {\r\n\t\tsetEditMode(true);\r\n\t\tsetMenuOpen(false);\r\n\t}\r\n\r\n\tconst actionRef = React.useRef(null);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{!editMode && props.note.note}\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t setMenuOpen(true)}\r\n\t\t\t\t>\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t setMenuOpen(false)}\r\n\t\t\t\t>\r\n\t\t\t\t\tРедактировать\r\n\r\n\t\t\t\t\tУдалить\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{localedFormat(parseISO(props.note.date as any), \"dd MMMM yyyy\")}\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 Note;\r\n","import * as React from \"react\";\r\nimport { Note } from \"../../../types/Note\";\r\nimport Button from \"../../Button/Button\";\r\nimport \"./NotesInner.css\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport NoteComponent from \"./Note/Note\";\r\nimport LockIcon from \"@material-ui/icons/Lock\";\r\nimport DiscriptionIcon from \"@material-ui/icons/DescriptionOutlined\";\r\nimport Input from \"../../Input/Input\";\r\nimport CommentIcon from \"@material-ui/icons/Comment\";\r\n\r\ninterface Props {\r\n\tnotes: Note[];\r\n\tisLoading?: boolean;\r\n\taddNote: (text: string) => void;\r\n\tonEdit: (noteId: number, note: string) => Promise;\r\n\tonDelete: (nodeId: number) => Promise;\r\n}\r\n\r\nconst NotesInner: React.FunctionComponent = (props) => {\r\n\tconst [buttonsVisible, setButtonsVisible] = React.useState(false);\r\n\r\n\tconst textField = React.useRef(null);\r\n\r\n\tconst textListener = (e: any) => {\r\n\t\tif (e.target.value.length >= 1) {\r\n\t\t\tsetButtonsVisible(true);\r\n\t\t} else {\r\n\t\t\tsetButtonsVisible(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst addNote = () => {\r\n\t\tprops.addNote(textField.current.value);\r\n\t\tsetButtonsVisible(false);\r\n\r\n\t\ttextField.current.value = \"\";\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 Заметки к книге\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\tЗаметки видны только вам\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{props.notes.length === 0 && (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t
К этой книге вы пока не оставляли заметки
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{props.notes.map((note) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t {\r\n\t\t\t\t\t\t\tsetButtonsVisible(false);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonFocus={() => {\r\n\t\t\t\t\t\t\tsetButtonsVisible(true);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tinputProps={{ ref: textField }}\r\n\t\t\t\t\t\tplaceholder=\"Добавить заметку к книге\"\r\n\t\t\t\t\t\tclasses={{\r\n\t\t\t\t\t\t\troot: \"notes__input\"\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\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\r\nexport default NotesInner;\r\n","import { AddNodeRequest } from \"../types/requests\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (variables: AddNodeRequest): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\theaders.append('Content-Type', 'application/json;charset=utf-8');\r\n\r\n\tconst request = await fetch(`${API_URL}/cards/notes/add`, {\r\n\t\theaders,\r\n\t\tmethod: 'POST',\r\n\t\tbody: JSON.stringify(variables),\r\n\t\tcredentials: 'include'\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\treturn jsonRequest;\r\n}\r\n","import { API_URL } from \"../utils\";\r\nimport { EditNoteRequest } from \"../types/requests\";\r\n\r\nexport default async (variables: EditNoteRequest): Promise => {\r\n const headers = new Headers();\r\n\r\n headers.append(\"Content-Type\", \"application/json;charset=utf-8\");\r\n\r\n const request = await fetch(`${API_URL}/cards/notes/edit`, {\r\n\theaders,\r\n\tmethod: \"POST\",\r\n\t body: JSON.stringify(variables),\r\n\tcredentials: 'include'\r\n });\r\n\r\n const jsonRequest = await request.json();\r\n\r\n return jsonRequest;\r\n};\r\n","import { API_URL } from \"../utils\";\r\nimport { DeleteNoteRequest } from \"../types/requests\";\r\n\r\nexport default async (variables: DeleteNoteRequest): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\theaders.append(\"Content-Type\", \"application/json;charset=utf-8\");\r\n\r\n\tconst request = await fetch(`${API_URL}/cards/notes/delete`, {\r\n\t\theaders,\r\n\t\tmethod: \"POST\",\r\n\t\tbody: JSON.stringify(variables),\r\n\t\tcredentials: 'include'\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\treturn jsonRequest;\r\n};\r\n","import * as React from 'react';\r\nimport { Note } from '../../types/Note';\r\nimport getNotes from '../../requests/getNotes';\r\nimport NotesInner from './NotesInner/NotesInner';\r\nimport addNote from '../../requests/addNote';\r\nimport editNote from '../../requests/editNote';\r\nimport deleteNote from '../../requests/deleteNote';\r\n\r\ninterface Props {\r\n\tcardId: number;\r\n}\r\n\r\nconst Notes: React.FunctionComponent = props => {\r\n\tconst [notes, setNotes] = React.useState([]);\r\n\tconst [loading, setLoading] = React.useState(false);\r\n\r\n\tconst updateNotesList = async () => {\r\n\t\tsetLoading(true);\r\n\r\n\t\tconst result = await getNotes(props.cardId);\r\n\r\n\t\tsetNotes(result);\r\n\r\n\t\tsetLoading(false);\r\n\t};\r\n\r\n\tconst addNoteRequest = async (text: string) => {\r\n\t\tsetLoading(true);\r\n\r\n\t\tconst request = await addNote({\r\n\t\t\tcardId: props.cardId,\r\n\t\t\tnote: text\r\n\t\t});\r\n\r\n\t\tif (request) {\r\n\t\t\tupdateNotesList();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst editNoteRequest = async (noteId: number, note: string) => {\r\n\t\tsetLoading(true);\r\n\r\n\t\tconst request = await editNote({\r\n\t\t\tnoteId,\r\n\t\t\tnote\r\n\t\t});\r\n\r\n\t\tif (request) {\r\n\t\t\tupdateNotesList();\r\n\t\t}\r\n\r\n\t\tsetLoading(false);\r\n\r\n\t\treturn true;\r\n\t};\r\n\r\n\tconst deleteNoteRequest = async (noteId: number) => {\r\n\t\tconst request = await deleteNote({\r\n\t\t\tnoteId\r\n\t\t});\r\n\r\n\t\tif (request) {\r\n\t\t\tupdateNotesList();\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tReact.useEffect(() => {\r\n\t\tupdateNotesList();\r\n\t}, [props.cardId]);\r\n\r\n\treturn ;\r\n};\r\n\r\nexport default Notes;\r\n","import * as React from 'react';\r\nimport { Book } from '../../types/Book';\r\nimport { CollectionShort } from '../../types/Collection';\r\nimport Select, { Item } from '../Select/Select';\r\nimport './PeekCategory.css';\r\nimport Button from '../Button/Button';\r\nimport { API_URL } from '../../utils';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\ninterface Props {\r\n\tbook: Book;\r\n\tcategories: CollectionShort[];\r\n}\r\n\r\nconst PeekCategory: React.FC = ({ book, categories }) => {\r\n\tconst [selected, setSelected] = React.useState(null);\r\n\tconst [loading, setLoading] = React.useState(false);\r\n\r\n\tconst request = async () => {\r\n\t\tconst data = await fetch(`${API_URL}/books/peekCategory?bookId=${book.woo_id}&categoryId=${selected}`, {\r\n\t\t\tcredentials: 'include'\r\n\t\t});\r\n\r\n\t\treturn await data.json();\r\n\t};\r\n\r\n\tconst onSave = () => {\r\n\t\tsetLoading(true);\r\n\r\n\t\trequest().then(data => {\r\n\t\t\tif (data) {\r\n\t\t\t\twindow.location.reload();\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tconst categoriesList: Item[] = React.useMemo(() => {\r\n\t\treturn categories.map(item => {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: item.id.toString(),\r\n\t\t\t\tlabel: item.name\r\n\t\t\t}\r\n\t\t})\r\n\t}, [categories]);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{loading && (\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\r\n\t\t\t{!loading && (\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\r\n\t\t\t\t\t setSelected(e.target.value)}\r\n\t\t\t\t\t\tlabel=\"Выберите категорию\"\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{selected && (\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 PeekCategory;\r\n","import { AppState } from \"../reducers\";\r\nimport { createSelector } from \"reselect\";\r\n\r\nexport const getState = (state: AppState) => state.collections;\r\n\r\nexport const getCollections = createSelector([getState], (state) => state.collections.filter(collection => collection.id !== 20));\r\n","import * as React from \"react\";\r\nimport Button from \"../../../../../Button/Button\";\r\nimport \"./MobileBookPeekCategory.css\";\r\nimport Dialog from \"@material-ui/core/Dialog/Dialog\";\r\nimport PeekCategory from \"../../../../../PeekCategory/PeekCategory\";\r\nimport { getCollections } from \"../../../../../../store/collections/selectors\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { Book } from \"../../../../../../types/Book\";\r\nimport IconButton from \"@material-ui/core/IconButton/IconButton\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\n\r\nconst cationIcon = (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n);\r\n\r\ninterface Props {\r\n\tbook: Book;\r\n}\r\n\r\nconst MobileBookPeekCategory: React.FC = (props) => {\r\n\tconst [open, setOpen] = React.useState(false);\r\n\tconst categories = useSelector(getCollections);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{cationIcon}\r\n\r\n\t\t\t
\r\n\t\t\t\t
У этой книги не указана категория
\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t setOpen(false)}>\r\n\t\t\t\t
\r\n\t\t\t\t\t
Выберите категорию
\r\n\r\n\t\t\t\t\t setOpen(false)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\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 MobileBookPeekCategory;\r\n","import * as React from 'react';\r\nimport { LibraryCard, CardType, CardPropertyType } from '../../../../../types/LibraryCard';\r\nimport Card from '../../../../Feed/Card/Card';\r\nimport './MobileBookHeader.css';\r\nimport { getDatePeriod } from '../../../../../utils';\r\nimport Arrow from '@material-ui/icons/ArrowDropDown';\r\nimport { CallbacksContext } from '../../../BookCalendar';\r\nimport EditBookCard from '../../../../EditBookCard/EditBookCard';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport MobileBookPeekCategory from './MobileBookPeekCategory/MobileBookPeekCategory';\r\n\r\ninterface Props {\r\n\tcard: LibraryCard;\r\n}\r\n\r\nconst MobileBookHeader: React.FC = ({ card }) => {\r\n\tconst [editBookOpen, setEditBookOpen] = React.useState(false);\r\n\r\n\tconst showEditBookOpen = () => setEditBookOpen(true);\r\n\tconst hideEditBookOpen = () => {\r\n\t\tsetEditBookOpen(false);\r\n\t}\r\n\r\n\tconst callbacks = React.useContext(CallbacksContext);\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\r\n\t\t\t{card.book.collection?.id === 20 && }\r\n\r\n\t\t\t{card.cardType === CardType.AlreadyRead && (\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{card.cardType !== CardType.AlreadyRead &&\r\n\t\t\t\t\t\t\tcard.properties[CardPropertyType.DateBegin] &&\r\n\t\t\t\t\t\t\t` ${getDatePeriod(\r\n\t\t\t\t\t\t\t\tcard.properties[CardPropertyType.DateBegin] as any,\r\n\t\t\t\t\t\t\t\tcard.properties[CardPropertyType.DateFinish] as any\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\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\r\nexport default MobileBookHeader;\r\n","import * as React from 'react';\r\nimport { DatePeriod } from '../CardHistory';\r\nimport { CardType } from '../../../types/LibraryCard';\r\nimport Check from '@material-ui/icons/Check';\r\nimport Schedule from '@material-ui/icons/Schedule';\r\nimport Play from '@material-ui/icons/PlayArrow';\r\nimport { getReadableCardType, getDatePeriod, MOBILE_MAX_WIDTH } from '../../../utils';\r\nimport './CardHistoryItem.css';\r\nimport cn from 'classnames';\r\nimport OutsideClickHandler from 'react-outside-click-handler';\r\nimport { useMediaQuery } from 'react-responsive';\r\n\r\ninterface Props {\r\n\tperiod: DatePeriod;\r\n\tremove: (id: number) => void;\r\n\tgoToCalendar: (start: any) => void;\r\n\tedit: () => void;\r\n\teditHistory: (history: DatePeriod) => void;\r\n}\r\n\r\nconst CardHistoryItem: React.FC = ({ period, remove, goToCalendar, edit, editHistory }) => {\r\n\tconst [controlsVisible, setControls] = React.useState(false);\r\n\tconst isDesktop = useMediaQuery({ minWidth: MOBILE_MAX_WIDTH })\r\n\r\n\tconst datePeriod = getDatePeriod(period.start, period.end, \"с \", \" по \", period.type === CardType.WantRead);\r\n\r\n\tconst onClick = () => {\r\n\t\tsetControls(true);\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t setControls(false)}>\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{period.type === CardType.AlreadyRead ? (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t) : period.type === CardType.WantRead ? (\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\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{getReadableCardType(period.type)}\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t
{datePeriod ? datePeriod : \"дата не указана\"}
\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t{(controlsVisible || isDesktop) && (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{period.start && (\r\n\t\t\t\t\t\t\t\t goToCalendar(period.start)}\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\r\n\t\t\t\t\t\t\t{period.type === CardType.AlreadyRead ? (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t editHistory(period)}\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\r\n\t\t\t\t\t\t\t\t\t remove(period.id)}\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\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\r\nexport default CardHistoryItem;","import { API_URL } from \"../utils\";\r\nimport { CardHistoryHide } from \"../types/requests\";\r\n\r\nexport default async (variables: CardHistoryHide): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\theaders.append(\"Content-Type\", \"application/json;charset=utf-8\");\r\n\r\n\tconst request = await fetch(`${API_URL}/cards/history/hide`, {\r\n\t\theaders,\r\n\t\tmethod: \"POST\",\r\n\t\tbody: JSON.stringify(variables),\r\n\t\tcredentials: 'include'\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\treturn jsonRequest;\r\n};\r\n","import * as React from 'react';\r\nimport EditBookCard, { EditCardProps } from '../EditBookCard/EditBookCard';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\n\r\ntype Props = EditCardProps & {\r\n\topen: boolean;\r\n\tonClose: () => void;\r\n}\r\n\r\nconst PopupEditBookCard: React.FC = props => {\r\n\tconst { open, onClose, ...editBookProps } = props;\r\n\r\n\tconst isMobile = useMediaQuery({ maxWidth: 600 });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{isMobile && (\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\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\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default PopupEditBookCard;\r\n","import {\r\n\tEditHistoryRequest,\r\n} from \"../types/requests\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (\r\n\tvariables: EditHistoryRequest\r\n): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\theaders.append(\"Content-Type\", \"application/json;charset=utf-8\");\r\n\r\n\tconst request = await fetch(`${API_URL}/cards/history/edit`, {\r\n\t\theaders,\r\n\t\tmethod: \"POST\",\r\n\t\tbody: JSON.stringify(variables),\r\n\t\tcredentials: \"include\",\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\treturn jsonRequest;\r\n};\r\n","import * as React from \"react\";\r\nimport {\r\n\tLibraryCard,\r\n\tCardType,\r\n\tCardPropertyType,\r\n} from \"../../types/LibraryCard\";\r\nimport HistoryIcon from \"@material-ui/icons/History\";\r\nimport CardHistoryItem from \"./CardHistoryItem/CardHistoryItem\";\r\nimport { differenceInDays } from \"date-fns\";\r\nimport { parseISO } from \"date-fns/esm\";\r\nimport { CallbacksContext } from \"../BookCalendar/BookCalendar\";\r\nimport {\r\n\teditHistoryItem,\r\n\tremoveHistoryItem,\r\n} from \"../../store/calendar/actions\";\r\nimport hideHistory from \"../../requests/hideHistory\";\r\nimport { connect } from \"react-redux\";\r\nimport \"./CardHistory.css\";\r\nimport Button from \"../Button/Button\";\r\nimport MediaQuery from \"react-responsive\";\r\nimport Drawer from \"@material-ui/core/Drawer/Drawer\";\r\nimport EditBookCard from \"../EditBookCard/EditBookCard\";\r\nimport { MOBILE_MAX_WIDTH } from \"../../utils\";\r\nimport PopupEditBookCard from \"../PopupEditBookCard/PopupEditBookCard\";\r\nimport editHistoryRequest from \"../../requests/editHistory\";\r\n\r\ninterface Props {\r\n\tcard: LibraryCard;\r\n}\r\n\r\nexport interface DatePeriod {\r\n\tid?: number;\r\n\tstart?: any;\r\n\tend?: any;\r\n\ttype: CardType;\r\n}\r\n\r\ninterface DispatchProps {\r\n\tremoveHistory: typeof removeHistoryItem;\r\n\teditHistory: typeof editHistoryItem;\r\n}\r\n\r\nconst CardHistory: React.FC = ({\r\n\tcard,\r\n\tremoveHistory,\r\n\teditHistory: editHistoryRedux,\r\n}) => {\r\n\tconst callbacks = React.useContext(CallbacksContext);\r\n\tconst [addBookDate, setBookDate] = React.useState(false);\r\n\tconst [editBook, setEditBook] = React.useState(false);\r\n\tconst [history, setHistory] = React.useState(null);\r\n\r\n\tconst popupClose = () => {\r\n\t\tsetBookDate(false);\r\n\t\tsetEditBook(false);\r\n\t\tsetHistory(null);\r\n\t};\r\n\r\n\tconst datesArray = React.useMemo(() => {\r\n\t\tconst tmp: DatePeriod[] = [];\r\n\r\n\t\tcard.history.forEach((item) => {\r\n\t\t\ttmp.push({\r\n\t\t\t\tstart: item.startDate,\r\n\t\t\t\tend: item.finishDate,\r\n\t\t\t\ttype: CardType.AlreadyRead,\r\n\t\t\t\tid: item.id,\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tif (card.history.length === 0 || card.cardType !== CardType.AlreadyRead) {\r\n\t\t\ttmp.push({\r\n\t\t\t\tstart: card.properties[CardPropertyType.DateBegin],\r\n\t\t\t\tend: card.properties[CardPropertyType.DateFinish],\r\n\t\t\t\ttype: card.cardType,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn tmp.sort((a, b) => {\r\n\t\t\tif (!a.start) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\r\n\t\t\tif (!b.start) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\r\n\t\t\treturn differenceInDays(parseISO(b.start), parseISO(a.start));\r\n\t\t});\r\n\t}, [card]);\r\n\r\n\tconst removeFromHistory = (id: number) => {\r\n\t\thideHistory({\r\n\t\t\tcardId: card.eId,\r\n\t\t\thistoryId: id,\r\n\t\t});\r\n\r\n\t\tremoveHistory({\r\n\t\t\tcardId: card.eId,\r\n\t\t\thistoryId: id,\r\n\t\t});\r\n\t};\r\n\r\n\tconst goToCalendar = (start: any) => {\r\n\t\tconst iso = parseISO(start);\r\n\r\n\t\twindow.location.href = `/calendar/#/${iso.getFullYear()}/${iso.getMonth()}/${\r\n\t\t\tcard.eId\r\n\t\t}`;\r\n\t};\r\n\r\n\tconst edit = () => {\r\n\t\tsetEditBook(true);\r\n\t};\r\n\r\n\tconst editHistory = (period: DatePeriod) => {\r\n\t\tsetHistory(period);\r\n\t};\r\n\r\n\tconst onEditHistoryHandler = (period: DatePeriod) => {\r\n\t\tconst request = async () => {\r\n\t\t\treturn editHistoryRequest({\r\n\t\t\t\tcardId: card.eId,\r\n\t\t\t\thistoryId: period.id,\r\n\t\t\t\tstartDate: period.start,\r\n\t\t\t\tendDate: period.end,\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\teditHistoryRedux({\r\n\t\t\tcardId: card.eId,\r\n\t\t\thistoryId: period.id,\r\n\t\t\tstart: period.start,\r\n\t\t\tend: period.end,\r\n\t\t});\r\n\r\n\t\treturn request();\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
\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 setBookDate(true)}\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\r\n\t\t\t
\r\n\t\t\t\t{datesArray.map((date, key) => (\r\n\t\t\t\t\t\r\n\t\t\t\t))}\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default connect(() => {}, {\r\n\tremoveHistory: removeHistoryItem,\r\n\teditHistory: editHistoryItem,\r\n})(CardHistory);\r\n","import * as React from 'react';\r\nimport Slider from '@material-ui/core/Slider/Slider';\r\nimport './ReviewSlider.css';\r\nimport { MARK_LABELS } from '../../../../utils';\r\n\r\ninterface Props {\r\n\tvalue: number;\r\n\tonChange: (value: number) => void;\r\n}\r\n\r\nconst ReviewSlider: React.FC = ({ value, onChange }) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
{value}
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t{MARK_LABELS[value - 1]}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t onChange(value as number)}\r\n\t\t\t\tclasses={{\r\n\t\t\t\t\troot: \"review-slider\",\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 ReviewSlider;\r\n","import * as React from 'react';\r\nimport Input from '../../../Input/Input';\r\nimport './ReviewText.css';\r\nimport cn from 'classnames';\r\n\r\ninterface Props {\r\n\tonChange: (text: string) => void;\r\n\tsymbolsLeft: number;\r\n\tdefaultText?: string;\r\n}\r\n\r\nconst ReviewText: React.FC = props => {\r\n\tconst [symbols, setSymbols] = React.useState(2000);\r\n\r\n\tconst onChange = (e: any) => {\r\n\t\tprops.onChange(e.target.value);\r\n\r\n\t\tsetSymbols(e.target.value);\r\n\t};\r\n\r\n\treturn
\r\n\t\t\r\n\r\n\t\t
\r\n\t\t\tОсталось символов {props.symbolsLeft}\r\n\t\t
\r\n\t
;\r\n};\r\n\r\nexport default ReviewText;\r\n","import * as React from 'react';\r\nimport { Book } from '../../../types/Book';\r\nimport ReviewSlider from './ReviewSlider/ReviewSlider';\r\nimport './Inner.css';\r\nimport ReviewText from './ReviewText/ReviewText';\r\nimport Checkbox from '@material-ui/core/Checkbox/Checkbox';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel/FormControlLabel';\r\nimport Button from '../../Button/Button';\r\nimport Public from '@material-ui/icons/Public';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Close from '@material-ui/icons/Close';\r\nimport CheckIcon from '@material-ui/icons/CheckCircleOutline';\r\nimport { Review } from '../../../types/Review';\r\n\r\ninterface Props {\r\n\tbook: Book;\r\n\tonSend: (mark: number, review: string, recommend?: boolean) => void;\r\n\tisLoading?: boolean;\r\n\tisSuccess?: boolean;\r\n\tonClose: () => void;\r\n\tisError?: boolean;\r\n\treview?: Review;\r\n}\r\n\r\nconst MAX_SYMBOLS = 2000;\r\n\r\nconst Inner: React.FC = ({ book, onClose, onSend, isLoading, isSuccess, isError, review }) => {\r\n\tconst [mark, setMark] = React.useState(review?.mark ? review.mark : 7);\r\n\tconst [text, setText] = React.useState(review?.review ? review.review : '');\r\n\tconst [recommend, setRecomment] = React.useState(review?.isRecommend);\r\n\r\n\tconst onSendHandler = () => {\r\n\t\tonSend(mark, text, recommend);\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\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\r\n\t\t\t{isSuccess && (\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t
Ваш отзыв опубликован
\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\r\n\t\t\t{!isSuccess && (\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\tоставьте отзыв о книге {book.name}\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
Оценка
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\tкак бы вы оценили книгу от 1 до 10?\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t
\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\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\tопишите свои впечатления от книги\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t setRecomment(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\tlabel=\"Рекомендую к прочтению\"\r\n\t\t\t\t\t\tclasses={{\r\n\t\t\t\t\t\t\tlabel: \"review__recommend\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{isError &&
\r\n\t\t\t\t\t\tМы не смогли сохранить отзыв. Пожалуйста, попробуйте снова или обратитесь в нашу техническую поддержу\t\r\n\t\t\t\t\t
}\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tВаша оценка будет видна остальным пользователям\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\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 Inner;\r\n","import { AddReviewRequest } from \"../types/requests\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (variables: AddReviewRequest): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\theaders.append(\"Content-Type\", \"application/json;charset=utf-8\");\r\n\r\n\tconst request = await fetch(`${API_URL}/reviews/add`, {\r\n\t\theaders,\r\n\t\tmethod: \"POST\",\r\n\t\tbody: JSON.stringify(variables),\r\n\t\tcredentials: \"include\",\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\treturn jsonRequest;\r\n};\r\n","import { CardsByMonths, CardWithDate } from \"../../store/calendar/selectors\";\r\nimport {\r\n\tstartOfYear,\r\n\taddMonths,\r\n\tareIntervalsOverlapping,\r\n\tisSameMonth,\r\n} from \"date-fns\";\r\nimport { CardType } from \"../../types/LibraryCard\";\r\n\r\nexport interface CardsGroup {\r\n\tstartDate: number;\r\n\tendDate?: number;\r\n\tendNextMonth?: boolean;\r\n\tstartNextMonth?: boolean;\r\n\tcards: CardWithDate[];\r\n}\r\n\r\nexport interface MonthWithCardGroup {\r\n\tmonth: Date;\r\n\tcardsGroup: CardsGroup[];\r\n\tendMonth?: Date;\r\n}\r\n\r\nexport enum MonthType {\r\n\tWinter,\r\n\tSpring,\r\n\tSummer,\r\n\tAutumn,\r\n}\r\n\r\nexport const getMonths = (cardByDates: CardsByMonths, date: Date) => {\r\n\tlet currentMonth = startOfYear(date);\r\n\tconst months: MonthWithCardGroup[] = [];\r\n\tconst year = date.getFullYear();\r\n\r\n\tfor (let monthIndex = 0; monthIndex < 12; monthIndex++) {\r\n\t\tconst booksOfMonth = cardByDates[monthIndex] ? cardByDates[monthIndex] : [];\r\n\r\n\t\tmonths.push({\r\n\t\t\tmonth: currentMonth,\r\n\t\t\tcardsGroup: findIntersection(booksOfMonth, currentMonth),\r\n\t\t});\r\n\r\n\t\tcurrentMonth = addMonths(currentMonth, 1);\r\n\t}\r\n\r\n\treturn months;\r\n};\r\n\r\n// новые индексы месяцы сезонов (зима, т.д.)\r\nconst edgeMonths = [2, 5, 8, 11];\r\n\r\nexport const groupEmptyMonths = (months: MonthWithCardGroup[]) => {\r\n\tconst newMonthsArray: MonthWithCardGroup[] = [];\r\n\r\n\tlet lastEmptyMonths = 0;\r\n\tlet emptyCount = 0;\r\n\r\n\t//newMonthsArray.push(months[0]);\r\n\r\n\tfor (let i = 0; i < months.length; i++) {\r\n\t\tconst month = months[i];\r\n\r\n\t\tif (month.cardsGroup.length === 0) {\r\n\t\t\tif (i == 0 || edgeMonths.indexOf(i) != -1) {\r\n\t\t\t\tnewMonthsArray.push(month);\r\n\t\t\t}\r\n\r\n\t\t\tnewMonthsArray[newMonthsArray.length - 1].endMonth = month.month;\r\n\t\t} else {\r\n\t\t\temptyCount = 0;\r\n\r\n\t\t\tnewMonthsArray.push(month);\r\n\t\t}\r\n\t}\r\n\r\n\treturn newMonthsArray;\r\n};\r\n\r\nconst findIntersection = (cards: CardWithDate[], month: Date): CardsGroup[] => {\r\n\tconst sortedCards = cards.sort((a, b) => {\r\n\t\treturn a.startDate.getTime() - b.startDate.getTime();\r\n\t});\r\n\r\n\tconst newGroups: CardsGroup[] = [];\r\n\r\n\tconst wantedReadBooksGroup: CardsGroup = {\r\n\t\tstartDate: 0,\r\n\t\tcards: []\r\n\t}\r\n\r\n\tconst startedFromPrevMonth: CardsGroup = {\r\n\t\tstartDate: -1,\r\n\t\tcards: [],\r\n\t\tstartNextMonth: true\r\n\t}\r\n\r\n\tsortedCards.forEach((card) => {\r\n\t\t// добавляем запланированные книги в одну группу\r\n\t\tif (card.type === CardType.WantRead) {\r\n\t\t\twantedReadBooksGroup.cards.push(card);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!isSameMonth(card.startDate, month)) {\r\n\t\t\tstartedFromPrevMonth.cards.push(card);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst lastGroupCard =\r\n\t\t\tnewGroups.length > 0\r\n\t\t\t\t? newGroups[newGroups.length - 1].cards[\r\n\t\t\t\t\t\tnewGroups[newGroups.length - 1].cards.length - 1\r\n\t\t\t\t ]\r\n\t\t\t\t: null;\r\n\r\n\t\tif (\r\n\t\t\tlastGroupCard &&\r\n\t\t\tlastGroupCard.endDate &&\r\n\t\t\tcard.endDate &&\r\n\t\t\t!newGroups[newGroups.length - 1].endNextMonth\r\n\t\t) {\r\n\t\t\tif (\r\n\t\t\t\tareIntervalsOverlapping(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstart: lastGroupCard.startDate,\r\n\t\t\t\t\t\tend: lastGroupCard.endDate,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstart: card.startDate,\r\n\t\t\t\t\t\tend: card.endDate,\r\n\t\t\t\t\t}\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tnewGroups[newGroups.length - 1].cards.push(card);\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tnewGroups.push({\r\n\t\t\tcards: [card],\r\n\t\t\tstartDate: card.startDate.getDate(),\r\n\t\t\tendNextMonth: card.endDate ? !isSameMonth(month, card.endDate) : false,\r\n\t\t});\r\n\t});\r\n\r\n\tconst newNewGroup: CardsGroup[] = [];\r\n\r\n\tif (startedFromPrevMonth.cards.length > 0) {\r\n\t\tnewNewGroup.push(startedFromPrevMonth);\r\n\t}\r\n\t\r\n\tif (wantedReadBooksGroup.cards.length > 0) {\r\n\t\tnewNewGroup.push(wantedReadBooksGroup);\r\n\t}\r\n\r\n\tnewGroups.forEach((group) => {\r\n\t\tgroup.cards.forEach((card) => {\r\n\t\t\tnewNewGroup.push({\r\n\t\t\t\tcards: [card],\r\n\t\t\t\tstartDate: card.startDate.getDate(),\r\n\t\t\t\tendDate: group.cards.length === 1 ? card.endDate?.getDate() : null,\r\n\t\t\t\tendNextMonth: card.endDate\r\n\t\t\t\t\t? !isSameMonth(month, card.endDate)\r\n\t\t\t\t\t: false,\r\n\t\t\t});\r\n\t\t});\r\n\t});\r\n\r\n\treturn newNewGroup;\r\n};\r\n","import * as React from 'react';\r\nimport Button from '../../../Button/Button';\r\nimport './ReviewCard.css';\r\nimport { LibraryCard } from '../../../../types/LibraryCard';\r\nimport ReviewPopup from '../../../ReviewPopup/ReviewPopup';\r\nimport { MARK_LABELS, MOBILE_MAX_WIDTH } from '../../../../utils';\r\nimport ThumbUp from '@material-ui/icons/ThumbUpAlt';\r\nimport { useMediaQuery } from 'react-responsive';\r\n\r\ninterface Props {\r\n\tcard: LibraryCard;\r\n}\r\n\r\nconst ReviewCard: React.FC = ({ card }) => {\r\n\tconst [dialogOpen, setDialog] = React.useState(false);\r\n\r\n\tconst closePopup = () => setDialog(false);\r\n\tconst openPopup = () => setDialog(true);\r\n\r\n\tconst onPublished = () => {\r\n\t\tsetTimeout(() => {\r\n\t\t\twindow.location.reload();\r\n\t\t}, 2000);\r\n\t};\r\n\r\n\tconst isMobile = useMediaQuery({ maxWidth: MOBILE_MAX_WIDTH });\r\n\r\n\tconst review = card.review;\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
Мой рейтинг
\r\n\r\n\t\t\t{isMobile && review && (\r\n\t\t\t\t\r\n\t\t\t)}\r\n\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{review?.isRecommend && (\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\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
\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{(!isMobile || !review) && }\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t
{review ? review.mark : \"--\"}
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{review?.mark ? MARK_LABELS[review.mark - 1] : \"нет оценки\"}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t{dialogOpen && (\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 ReviewCard;","import * as React from \"react\";\r\nimport { LibraryCard } from \"../../../../types/LibraryCard\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport Notes from \"../../../Notes/Notes\";\r\nimport MobileBookHeader from \"./MobileBookHeader/MobileBookHeader\";\r\nimport CardHistory from \"../../../CardHistory/CardHistory\";\r\nimport UserList from \"../../../BookPage/UserList/UserList\";\r\nimport ReviewCard from \"../../BookCard/ReviewCard/ReviewCard\";\r\n\r\ninterface Props {\r\n\tonClose: () => void;\r\n\tcard: LibraryCard;\r\n}\r\n\r\nconst MobileBookCard: React.FC = (props) => {\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\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t{props.card.book.name}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\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\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\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\nexport default MobileBookCard;\r\n","import * as React from 'react';\r\nimport BooksSidebar, { Sections } from '../BooksSidebar/BooksSidebar';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport { LibraryCard } from '../../../types/LibraryCard';\r\nimport { CalendarState } from '../../../store/calendar/reducers';\r\nimport '../BookCalendar.css';\r\nimport './MobileCalendar.css';\r\nimport '../../Footer/MobileFooter/MobileFooter.css';\r\nimport MobileBookCard from './MobileBookCard/MobileBookCard';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\ninterface Props {\r\n\treadNow: LibraryCard[];\r\n\talreadyRead: LibraryCard[];\r\n\twantRead: LibraryCard[];\r\n\tbooks: CalendarState;\r\n\tcardId?: number;\r\n\tsetCard: (cardId: number) => void;\r\n\tdefaultSection?: string;\r\n\tloading?: boolean;\r\n}\r\n\r\nconst MobileCalendar: React.FC = props => {\r\n\tconst [selectedSection, setSection] = React.useState(props.defaultSection ? props.defaultSection as any : Sections.All);\r\n\r\n\tconst history = useHistory();\r\n\r\n\tconst onClose = () => {\r\n\t\t// #FIXME\r\n\t\t//window.location.href = '/books'\r\n\t\tprops.setCard(-1);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t props.setCard(bookId)}\r\n\t\t\t\tonlySection={selectedSection}\r\n\t\t\t\tonChangeSection={setSection}\r\n\t\t\t/>\r\n\r\n\t\t\t 0 && !!props.books[props.cardId]}\r\n\t\t\t\tonClose={onClose}\r\n\t\t\t\tclasses={{\r\n\t\t\t\t\troot: \"mobile-book-card\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{props.cardId > 0 && props.books[props.cardId] && (\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 MobileCalendar;","import * as React from 'react';\r\nimport BooksSidebar from './BooksSidebar/BooksSidebar';\r\nimport './BookCalendar.css';\r\nimport BookCard from './BookCard/BookCard';\r\nimport { CardType } from '../../types/LibraryCard';\r\nimport MediaQuery from 'react-responsive';\r\nimport { MOBILE_MAX_WIDTH } from '../../utils';\r\nimport MobileCalendar from './MobileCalendar/MobileCalendar';\r\nimport BookCardWrapper from './BookCardWrapper/BookCardWrapper';\r\nimport { CardsManagerCallbacks } from '../CardsManager/CardsManager';\r\nimport LinearProgress from '@material-ui/core/LinearProgress';\r\n\r\ninterface OwnProps {\r\n\tcallbacks: CardsManagerCallbacks;\r\n\tsetCardId: (cardId: number) => void;\r\n\tcardId?: string;\r\n\tdefaultSection?: string;\r\n\tloading?: boolean;\r\n}\r\n\r\nexport const CallbacksContext = React.createContext(null);\r\n\r\nconst BookCalendar: React.FunctionComponent = props => {\r\n\tconst cardId = props.cardId ? parseInt(props.cardId) : -1;\r\n\r\n\tconst alreadyRead = props.callbacks.cards.filter(cards => cards.cardType === CardType.AlreadyRead);\r\n\tconst wantRead = props.callbacks.cards.filter(cards => cards.cardType === CardType.WantRead);\r\n\tconst readNow = props.callbacks.cards.filter(cards => cards.cardType === CardType.ReadNow);\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 props.setCardId(bookId)}\r\n\t\t\t\t\t\tselectedBookId={cardId}\r\n\t\t\t\t\t/>\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t{props.loading && }\r\n\r\n\t\t\t\t\t{props.cardId && }\r\n\t\t\t\t\t\r\n\t\t\t\t\t{!props.cardId && }\r\n\t\t\t\t
\r\n\t\t\t
\r\n\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\r\nexport default BookCalendar;\r\n","import * as React from 'react';\r\nimport Button from '../../../Button/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport MenuList from '@material-ui/core/MenuList';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport './Cancel.css';\r\nimport { LibraryCard, CardPropertyType, CardProperties, CardType } from '../../../../types/LibraryCard';\r\nimport saveCardProperties from '../../../../requests/saveCardProperties';\r\n\r\ninterface Props {\r\n\tcard: LibraryCard;\r\n\tsaveCardProperties: (cardId: number, properties: CardProperties) => Promise;\r\n\tdeleteCard: (cardId: number) => Promise;\r\n}\r\n\r\nconst Cancel: React.FC = props => {\r\n\tconst [open, setOpen] = React.useState(false);\r\n\tconst [isLoading, setLoading] = React.useState(false);\r\n\r\n\tconst onClickHandler = (type: 'clear_date' | 'move_out' | 'delete') => {\r\n\t\tsetLoading(true);\r\n\r\n\t\tif (type === 'delete') {\r\n\t\t\tprops.deleteCard(props.card.eId);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tconst params: CardProperties = {};\r\n\r\n\t\t\tif (type === 'clear_date') {\r\n\t\t\t\tparams[CardPropertyType.DateBegin] = '';\r\n\t\t\t\tparams[CardPropertyType.DateFinish] = '';\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tparams[CardPropertyType.Type] = CardType.AlreadyRead;\r\n\t\t\t\tparams[CardPropertyType.DateBegin] = \"\";\r\n\t\t\t\tparams[CardPropertyType.DateFinish] = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tprops.saveCardProperties(props.card.eId, params);\r\n\t\t}\r\n\t\tsetOpen(false);\r\n\t\tsetLoading(false);\r\n\t};\r\n\r\n\treturn <>\r\n\t\t\r\n\r\n\t\t setOpen(false)}>\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\r\n\t\t\t\t\r\n\t\t\t\t\t{props.card.properties[CardPropertyType.DateBegin] && onClickHandler(\r\n\t\t\t\t\t\t'clear_date'\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{props.card.history.length > 0 && onClickHandler(\r\n\t\t\t\t\t\t'move_out'\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 onClickHandler('delete')} className=\"cancel-delete\">Удалить книгу из библиотеки\r\n\t\t\t\t\t setOpen(false)}>Ничего\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 Cancel;\r\n","import * as React from \"react\";\r\nimport \"./BookCard.css\";\r\nimport Button from \"../../Button/Button\";\r\nimport {\r\n\tLibraryCard,\r\n\tCardType,\r\n\tCardPropertyType,\r\n} from \"../../../types/LibraryCard\";\r\nimport { getDatePeriod, MOBILE_MAX_WIDTH } from \"../../../utils\";\r\nimport { parseISO } from \"date-fns\";\r\nimport Dialog from \"@material-ui/core/Dialog/Dialog\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport EditBookCard from \"../../EditBookCard/EditBookCard\";\r\nimport QuickButton from \"./QuickButton/QuickButton\";\r\nimport ClockIcon from \"@material-ui/icons/Schedule\";\r\nimport Play from \"@material-ui/icons/VideoLibrary\";\r\nimport Check from \"@material-ui/icons/Beenhere\";\r\nimport MediaQuery, { useMediaQuery } from \"react-responsive\";\r\nimport { CallbacksContext } from \"../BookCalendar\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport Cancel from \"./Cancel/Cancel\";\r\nimport Card from \"../../Feed/Card/Card\";\r\nimport UserList from \"../../BookPage/UserList/UserList\";\r\n\r\ninterface Props {\r\n\tcard?: LibraryCard;\r\n}\r\n\r\nconst BookCard: React.FunctionComponent = ({ card }) => {\r\n\tconst [editBookOpen, setEditBookOpen] = React.useState(false);\r\n\tconst [forcedSection, setforcedSection] = React.useState(null);\r\n\r\n\tconst isMobile = useMediaQuery({ maxWidth: 600 });\r\n\r\n\tconst callbacks = React.useContext(CallbacksContext);\r\n\r\n\tconst showEditBookOpen = () => setEditBookOpen(true);\r\n\tconst hideEditBookOpen = () => {\r\n\t\tsetEditBookOpen(false);\r\n\t\tsetforcedSection(null);\r\n\t};\r\n\r\n\tconst openForcedSection = (type: CardType) => {\r\n\t\tsetforcedSection(type);\r\n\t\tsetEditBookOpen(true);\r\n\t};\r\n\r\n\tconst datePeriod = React.useMemo(() => {\r\n\t\tif (!card) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn getDatePeriod(\r\n\t\t\tparseISO(card.properties[CardPropertyType.DateBegin]),\r\n\t\t\tcard.properties[CardPropertyType.DateFinish]\r\n\t\t\t\t? parseISO(card.properties[CardPropertyType.DateFinish])\r\n\t\t\t\t: null,\r\n\t\t\t'с ',\r\n\t\t\t' по ',\r\n\t\t\tcard.cardType === CardType.WantRead\r\n\t\t);\r\n\t}, [card]);\r\n\r\n\tif (!card) {\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
\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{card && (\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{card.cardType === CardType.WantRead ? (\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) : card.cardType === CardType.ReadNow ? (\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\t<>\r\n\t\t\t\t\t\t\t\t\t Прочитано\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t{datePeriod && card.cardType !== CardType.AlreadyRead\r\n\t\t\t\t\t\t\t\t? ` ${datePeriod}`\r\n\t\t\t\t\t\t\t\t: \"\"}\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\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\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\r\n\t\t\t\t\t\t\t{card.cardType === CardType.WantRead && (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{isMobile && (\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\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\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 BookCard;\r\n","import * as React from \"react\";\r\nimport { LibraryCard } from \"../../../types/LibraryCard\";\r\nimport BookCard from \"../BookCard/BookCard\";\r\nimport \"./BookCardWrapper.css\";\r\n\r\ninterface Props {\r\n\tlibraryCard: LibraryCard;\r\n}\r\n\r\nconst BookCardWrapper: React.FunctionComponent = ({ libraryCard }) => {\r\n\tif (!libraryCard) {\r\n\t\treturn ;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\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\r\nexport default BookCardWrapper;\r\n","import * as React from \"react\";\r\nimport BookChip from \"../../../../BookCalendar/BooksSidebar/BookChip/BookChip\";\r\nimport { LibraryCard, CardType } from \"../../../../../types/LibraryCard\";\r\nimport { Month } from \"../../../Calendar\";\r\nimport { CardWithDate } from \"../../../../../store/calendar/selectors\";\r\nimport { localedFormat, getDatePeriod } from \"../../../../../utils\";\r\nimport { isFuture, isPast } from \"date-fns\";\r\nimport './MonthModal.css';\r\n\r\ninterface Props {\r\n\tmonth: Month;\r\n\tsetSelectedCard: (card: LibraryCard) => void;\r\n}\r\n\r\ninterface BooksType {\r\n\treadNow: CardWithDate[];\r\n\treaded: CardWithDate[];\r\n\twantRead: CardWithDate[];\r\n}\r\n\r\nconst MonthModal: React.FC = ({ month, setSelectedCard }) => {\r\n\tconst books: BooksType = React.useMemo(() => {\r\n\t\tconst tmp: BooksType = {\r\n\t\t\treadNow: [],\r\n\t\t\treaded: [],\r\n\t\t\twantRead: [],\r\n\t\t};\r\n\r\n\t\tconst books = month.cards.sort((a, b) => {\r\n\t\t\treturn b.startDate.getTime() - a.startDate.getTime();\r\n\t\t});\r\n\r\n\t\tbooks.forEach((card) => {\r\n\t\t\tswitch (card.type) {\r\n\t\t\t\tcase CardType.ReadNow:\r\n\t\t\t\t\ttmp.readNow.push(card);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase CardType.WantRead:\r\n\t\t\t\t\ttmp.wantRead.push(card);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase CardType.AlreadyRead:\r\n\t\t\t\t\ttmp.readed.push(card);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn tmp;\r\n\t}, [month.cards]);\r\n\r\n\tconst future = React.useMemo(() => {\r\n\t\treturn isFuture(month.startOfMonth);\r\n\t}, [month.startOfMonth]);\r\n\r\n\tconst past = React.useMemo(() => {\r\n\t\treturn isPast(month.startOfMonth);\r\n\t}, [month.startOfMonth]);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{localedFormat(month.startOfMonth, \"LLLL, yyyy\")}\r\n\t\t\t
\r\n\r\n\t\t\t{books.readNow.length > 0 && (\r\n\t\t\t\t
\r\n\t\t\t\t\t
Читаю сейчас
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{books.readNow.map((card) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\tsetSelectedCard(card.card);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tclassName=\"day__book\"\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\r\n\t\t\t{books.wantRead.length > 0 && (\r\n\t\t\t\t
\r\n\t\t\t\t\t
Запланировано
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{books.wantRead.map((card) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\tsetSelectedCard(card.card);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tclassName=\"day__book\"\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\r\n\t\t\t{books.readed.length > 0 && (\r\n\t\t\t\t
\r\n\t\t\t\t\t
Прочитано
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{books.readed.map((card) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\tsetSelectedCard(card.card);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tclassName=\"day__book\"\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\r\n\t\t\t{books.readed.length === 0 && past && books.readNow.length === 0 && (\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\r\n\t\t\t{books.wantRead.length === 0 && future && (\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\r\nexport default MonthModal;\r\n","import * as React from 'react';\r\nimport '../../Calendar.css';\r\nimport cn from 'classnames';\r\nimport { BooksWithParsedDates } from '../../Calendar';\r\nimport { isWithinInterval, isSameMonth, isSameYear, getMonth } from 'date-fns';\r\nimport { Month as MonthType } from '../../Calendar';\r\nimport { localedFormat, MOBILE_MAX_WIDTH, getDatePeriod } from '../../../../utils';\r\nimport { CardType, LibraryCard } from '../../../../types/LibraryCard';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport BookChip from '../../../BookCalendar/BooksSidebar/BookChip/BookChip';\r\nimport HeightControl from '../../HeightControl/HeightControl';\r\nimport BookCardWrapper from '../../../BookCalendar/BookCardWrapper/BookCardWrapper';\r\nimport MediaQuery from 'react-responsive';\r\nimport MobileBookCard from '../../../BookCalendar/MobileCalendar/MobileBookCard/MobileBookCard';\r\nimport './Month.css';\r\nimport Drawer from '@material-ui/core/Drawer/Drawer';\r\nimport MonthModal from './MonthModal/MonthModal';\r\n\r\ninterface Props {\r\n\tmonth: MonthType;\r\n\tbooks?: BooksWithParsedDates[];\r\n}\r\n\r\nconst Month: React.FunctionComponent = props => {\r\n\tconst [selectedCard, setSelectedCard] = React.useState(null);\r\n\tconst [openedMonth, setOpenMonth] = React.useState(false);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (selectedCard) {\r\n\t\t\tsetSelectedCard(props.month.cards.find(card => selectedCard.eId === card.card.eId)?.card);\r\n\t\t}\r\n\t}, [props.month]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
setOpenMonth(true)}>\r\n\t\t\t\t
\r\n\t\t\t\t\t{localedFormat(props.month.startOfMonth, \"LLLL\")}\r\n\r\n\t\t\t\t\t{props.month.cards.length > 0 && (\r\n\t\t\t\t\t\t
{props.month.cards.length}
\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t{props.month.cards.length > 0 && (\r\n\t\t\t\t
\r\n\t\t\t\t\tПоказать все
}\r\n\t\t\t\t\t\theader={`Книги ${localedFormat(props.month.startOfMonth, \"MMMM\")}`}\r\n\t\t\t\t\t\tonClickMore={() => setOpenMonth(true)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{props.month.cards.map((card) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\tsetSelectedCard(card.card);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tclassName=\"day__book\"\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\r\n\t\t\t setOpenMonth(false)}\r\n\t\t\t>\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t setSelectedCard(null)}\r\n\t\t\t\t\tmaxWidth=\"xl\"\r\n\t\t\t\t\tscroll=\"body\"\r\n\t\t\t\t\tclasses={{\r\n\t\t\t\t\t\tpaper: \"calendar-book__paper\",\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{selectedCard && }\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t setSelectedCard(null)}\r\n\t\t\t\t\tclasses={{\r\n\t\t\t\t\t\troot: \"mobile-book-card\",\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{selectedCard && (\r\n\t\t\t\t\t\t\t setSelectedCard(null)}\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 Month;","import * as React from 'react';\r\nimport '../Calendar.css';\r\nimport { isSameMonth } from 'date-fns';\r\nimport Day from './Month/Month';\r\nimport { BooksWithParsedDates } from '../Calendar';\r\nimport { Month as MonthType } from '../Calendar';\r\nimport Month from './Month/Month';\r\n\r\ninterface Props {\r\n\tmonths: MonthType[];\r\n\topenDate: Date;\r\n}\r\n\r\nconst GroupOfMonths: React.FunctionComponent = props => {\r\n\treturn
\r\n\t\t{props.months.map((month, key) => {\r\n\t\t\treturn \r\n\t\t})}\r\n\t
;\r\n};\r\n\r\nexport default GroupOfMonths;\r\n","import * as React from \"react\";\r\nimport { localedFormat } from \"../../../utils\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport ArrowLeft from \"@material-ui/icons/NavigateBefore\";\r\nimport ArrowRight from \"@material-ui/icons/NavigateNext\";\r\nimport \"./Header.css\";\r\nimport { startOfYear, addYears } from \"date-fns\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport MediaQuery from \"react-responsive\";\r\nimport { Button } from \"@material-ui/core\";\r\n\r\ninterface Props {\r\n\tdate: Date;\r\n\tchangeDate: (date: Date) => void;\r\n\theaderText?: string;\r\n\tisLoading?: boolean;\r\n}\r\n\r\nconst CalendarHeader: React.FunctionComponent = (props) => {\r\n\tconst onDateChange = (dir: \"back\" | \"next\") => {\r\n\t\tconst date = startOfYear(props.date);\r\n\r\n\t\tprops.changeDate(addYears(date, dir === \"back\" ? -1 : 1));\r\n\t};\r\n\r\n\tconst forceToOld = localStorage.getItem(\"calendarForceOld\") === \"true\";\r\n\r\n\tconst onForceToOld = () => {\r\n\t\tlocalStorage.setItem(\"calendarForceOld\", forceToOld ? \"false\" : \"true\");\r\n\r\n\t\twindow.location.reload();\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{props.isLoading && (\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\r\n\t\t\t
\r\n\t\t\t\t onDateChange(\"back\")}>\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t onDateChange(\"next\")}>\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t{props.headerText\r\n\t\t\t\t\t? props.headerText\r\n\t\t\t\t\t: localedFormat(props.date, \"yyyy\")}\r\n\t\t\t
\r\n\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\r\nexport default CalendarHeader;\r\n","import * as React from 'react';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Button from '../../Button/Button';\r\nimport './Welcome.css';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport Drawer from '@material-ui/core/Drawer/Drawer';\r\n\r\nconst WelcomeCalendar: React.FC = props => {\r\n\tconst [show, setShow] = React.useState(true);\r\n\tconst isMobile = useMediaQuery({ maxWidth: 600 });\r\n\r\n\tconst isOpened = localStorage.getItem(\"welcomeCalendar\");\r\n\r\n\tconst setClose = () => {\r\n\t\tlocalStorage.setItem(\"welcomeCalendar\", \"1\");\r\n\t\tsetShow(false);\r\n\t};\r\n\r\n\tconst content = () => {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
Книги по датам
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\tУказывайте даты при добавлении книг в библиотеку, или добавляйте к ним\r\n\t\t\t\t\tисторию прочтений, чтобы книги из вашей библиотеки отобразились в этом\r\n\t\t\t\t\tразделе\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\treturn !isMobile ? \r\n\t\t{content()}\r\n\t : \r\n\t\t\t{content()}\r\n\t\r\n};\r\n\r\nexport default WelcomeCalendar;\r\n","import * as React from 'react';\r\nimport { getYear, getMonth } from 'date-fns';\r\nimport './Calendar.css';\r\nimport { Book } from '../../types/Book';\r\nimport { startOfYear, endOfYear, addMonths } from 'date-fns/esm';\r\nimport GroupOfMonths from './Week/GroupOfMonth';\r\nimport { LibraryCard } from '../../types/LibraryCard';\r\nimport CalendarHeader from './Header/Header';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport LinearProgress from '@material-ui/core/LinearProgress';\r\nimport { CardsManagerCallbacks } from '../CardsManager/CardsManager';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { getCardsByDate, CardWithDate, getCardsByDateNew } from '../../store/calendar/selectors';\r\nimport { CallbacksContext } from '../BookCalendar/BookCalendar';\r\nimport WelcomeCalendar from './Welcome/WelcomeCalendar';\r\n\r\nexport interface BookWithDates {\r\n\tstartReadISO: string;\r\n\tfinishReadISO: string;\r\n\tbook: Book;\r\n}\r\n\r\nexport interface BooksWithParsedDates {\r\n\tstart: Date;\r\n\tfinish: Date;\r\n\tbook: Book;\r\n}\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n\topenDate: Date;\r\n\tsetDate: (date: Date) => void;\r\n}\r\n\r\ninterface StateProps {\r\n\tcards: LibraryCard[];\r\n}\r\n\r\ninterface Week {\r\n\tdays: Date[];\r\n\tbooks: BooksWithParsedDates[];\r\n}\r\n\r\ninterface CalendarProps {\r\n\tstartOfYear: Date;\r\n\tendOfYear: Date;\r\n}\r\n\r\nexport interface Month {\r\n\tstartOfMonth: Date;\r\n\tcards: CardWithDate[];\r\n}\r\n\r\nconst Calendar: React.FunctionComponent = ({ openDate, setDate, callbacks }) => {\r\n\tconst [isLoading, setLoading] = React.useState(false);\r\n\r\n\tconst MAX_MONTHS_IN_GROUP = useMediaQuery({ maxWidth: \"600px\" }) ? 1 : 4;\r\n\r\n\tconst booksByYears = useSelector(getCardsByDateNew);\r\n\r\n\tconst calendarProps: CalendarProps = React.useMemo(() => {\r\n\t\treturn {\r\n\t\t\tstartOfYear: startOfYear(openDate),\r\n\t\t\tendOfYear: endOfYear(openDate)\r\n\t\t}\r\n\t}, [openDate]);\r\n\r\n\tconst monthGroup: Month[][] = [[]];\r\n\r\n\tfor (let monthIndex = 0; monthIndex < 12; monthIndex++) {\r\n\t\tconst month = addMonths(calendarProps.startOfYear, monthIndex);\r\n\r\n\t\tconst year = getYear(month),\r\n\t\t\tmonthNumber = getMonth(month);\r\n\r\n\t\tif (monthGroup[monthGroup.length - 1].length < MAX_MONTHS_IN_GROUP) {\r\n\t\t\tmonthGroup[monthGroup.length - 1].push({\r\n\t\t\t\tstartOfMonth: month,\r\n\t\t\t\tcards: booksByYears[year] && booksByYears[year][monthNumber] ? booksByYears[year][monthNumber] : []\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tmonthGroup.push([\r\n\t\t\t\t{\r\n\t\t\t\t\tstartOfMonth: month,\r\n\t\t\t\t\tcards: booksByYears[year] && booksByYears[year][monthNumber] ? booksByYears[year][monthNumber] : []\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 setDate(date)}\r\n\t\t\t\tisLoading={callbacks.loading}\r\n\t\t\t/>\r\n\r\n\t\t\t{isLoading && }\r\n\t\t\t\r\n\t\t\t{\r\n\t\t\t\t!callbacks.loading && Object.keys(booksByYears).length === 0 && \r\n\t\t\t}\r\n\r\n\t\t\t{\r\n\t\t\t\tmonthGroup.map((months, key) => {\r\n\t\t\t\t\treturn \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 connect()(Calendar);\r\n","import * as React from 'react';\r\nimport './MobileBookSection.css';\r\n\r\nexport enum MobileBookSectionEnum {\r\n\tCollections,\r\n\tReadNow,\r\n\tWantRead,\r\n\tAlreadyRead\r\n}\r\n\r\ninterface Props {\r\n\theader?: string;\r\n\tmoreText?: React.ReactNode;\r\n}\r\n\r\nconst MobileBookSection: React.FC = props => {\r\n\treturn
\r\n\t\t{props.header &&
\r\n\t\t\t{props.header}\r\n\r\n\t\t\t{props.moreText &&
\r\n\t\t\t\t{props.moreText}\r\n\t\t\t
}\r\n\t\t
}\r\n\r\n\t\t
\r\n\t\t\t{props.children}\r\n\t\t
\r\n\t
\r\n};\r\n\r\nexport default MobileBookSection;\r\n","import * as React from \"react\";\r\nimport { CardWithDate } from \"../../../../../../store/calendar/selectors\";\r\nimport Drawer from \"@material-ui/core/Drawer\";\r\nimport Card from \"../../../../../Feed/Card/Card\";\r\nimport \"./CardPopup.css\";\r\nimport { getReadableCardType, getDatePeriod } from \"../../../../../../utils\";\r\nimport Schedule from \"@material-ui/icons/Schedule\";\r\nimport Button from \"../../../../../Button/Button\";\r\nimport { CardType } from \"../../../../../../types/LibraryCard\";\r\n\r\ninterface Props {\r\n\tcard: CardWithDate;\r\n\topen: boolean;\r\n\tonClose: () => void;\r\n}\r\n\r\nconst CardPopup: React.FC = (props) => {\r\n\tconst onClick = () => {\r\n\t\t//window.location.href = `/books/#/${props.card.card.eId}/`;\r\n\r\n\t\twindow.location.href = `/book/${props.card.card.book.woo_id}`;\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t{getReadableCardType(props.card.type)}{\" \"}\r\n\t\t\t\t{getDatePeriod(\r\n\t\t\t\t\tprops.card.startDate,\r\n\t\t\t\t\tprops.card.endDate,\r\n\t\t\t\t\t\"с \",\r\n\t\t\t\t\t\" по \",\r\n\t\t\t\t\tprops.card.type === CardType.WantRead\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\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\r\nexport default CardPopup;\r\n","import * as React from 'react';\r\nimport { CardWithDate } from '../../../../../store/calendar/selectors';\r\nimport { getDatePeriod } from '../../../../../utils';\r\nimport BookChip from '../../../../BookCalendar/BooksSidebar/BookChip/BookChip';\r\nimport CardPopup from './CardPopup/CardPopup';\r\nimport cn from 'classnames';\r\n\r\ninterface Props {\r\n\tcard: CardWithDate;\r\n\tstartInOtherMonth?: boolean;\r\n\thidePeriod?: boolean;\r\n}\r\n\r\nconst CardInner: React.FC = ({ card, startInOtherMonth, hidePeriod }) => {\r\n\tconst [open, setOpen] = React.useState(false);\r\n\r\n\tconst show = () => setOpen(true);\r\n\tconst close = () => setOpen(false);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{!hidePeriod &&
\r\n\t\t\t\t{getDatePeriod(card.startDate, card.endDate)}\r\n\t\t\t
}\r\n\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default CardInner;\r\n","import * as React from \"react\";\r\nimport { CardsGroup as CardsGroupType } from \"../../utils\";\r\nimport \"../Month.css\";\r\nimport { localedFormat } from \"../../../../utils\";\r\nimport cn from \"classnames\";\r\nimport CardInner from \"./CardInner/CardInner\";\r\nimport HistoryIcon from '@material-ui/icons/History';\r\n\r\ninterface Props {\r\n\tcardsGroup: CardsGroupType;\r\n\tisEmpty?: boolean;\r\n}\r\n\r\nconst CardsGroup: React.FC = ({ cardsGroup, isEmpty }) => {\r\n\tconst short =\r\n\t\tcardsGroup.startDate === cardsGroup.endDate ||\r\n\t\t!cardsGroup.endDate ||\r\n\t\tcardsGroup.endNextMonth ||\r\n\t\tcardsGroup.startNextMonth;\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{cardsGroup.startDate >= 1 &&
\r\n\t\t\t\t\t\t{localedFormat(cardsGroup.cards[0].startDate, \"cccccc\")}\r\n\t\t\t\t\t
}\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{cardsGroup.startDate >= 1 ? cardsGroup.startDate : }\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t{cardsGroup.cards[0].endDate && !cardsGroup.endNextMonth && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{localedFormat(cardsGroup.cards[0].endDate, \"cccccc\")}\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{cardsGroup.endDate}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t{!isEmpty && <>\r\n\t\t\t\t\t{!cardsGroup.startDate &&
\r\n\t\t\t\t\t\tЗапланировано\r\n\t\t\t\t\t
}\r\n\r\n\t\t\t\t\t{cardsGroup.cards.map((card) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t{isEmpty &&
Нет книг для отображения в этот период
}\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default CardsGroup;\r\n","import * as React from 'react';\r\nimport { MonthWithCardGroup } from '../utils';\r\nimport { localedFormat } from '../../../utils';\r\nimport CardsGroup from './CardsGroup/CardsGroup';\r\nimport './Month.css';\r\nimport '../../Calendar/Week/Month/Month.css';\r\nimport { getMonth, isSameMonth, startOfMonth, endOfDay, endOfMonth } from 'date-fns';\r\nimport cn from 'classnames';\r\n\r\ninterface Props {\r\n\tmonth: MonthWithCardGroup;\r\n\tchangeFocusedMonth?: (month: Date) => void;\r\n\tfocused?: boolean;\r\n}\r\n\r\nconst Month: React.FC = props => {\r\n\tconst monthHeaderRef = React.useRef(null);\r\n\tconst monthHeaderWrapperRef = React.useRef(null);\r\n\r\n\tconst onScroll = (event: any) => {\r\n\t\tconst divHeight = monthHeaderWrapperRef.current.offsetHeight;\r\n\t\tconst offsetTop = monthHeaderWrapperRef.current.offsetTop;\r\n\r\n\t\tif ((window.scrollY > offsetTop && window.scrollY < divHeight + offsetTop )&& !props.focused) {\r\n\t\t\tprops.changeFocusedMonth(props.month.month);\r\n\t\t}\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\twindow.addEventListener('scroll', onScroll);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener('scroll', onScroll);\r\n\t\t}\r\n\t});\r\n\r\n\tconst monthNumber = getMonth(props.month.month);\r\n\r\n\tconst startMonth = startOfMonth(props.month.month);\r\n\tconst endMonth = endOfMonth(props.month.month);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t= 0 && monthNumber <= 1) || monthNumber == 11,\r\n\t\t\t\t\t\tmonth_spring: monthNumber >= 2 && monthNumber <= 4,\r\n\t\t\t\t\t\tmonth_summer: monthNumber >= 5 && monthNumber <= 7,\r\n\t\t\t\t\t\tmonth_autumn: monthNumber >= 8 && monthNumber <= 10,\r\n\t\t\t\t\t})}\r\n\t\t\t\t\tref={monthHeaderRef}\r\n\t\t\t\t\tstyle={{ zIndex: monthNumber }}\r\n\t\t\t\t>\r\n\t\t\t\t\t{localedFormat(props.month.month, \"LLLL\")}\r\n\r\n\t\t\t\t\t{props.month.endMonth &&\r\n\t\t\t\t\t!isSameMonth(props.month.month, props.month.endMonth)\r\n\t\t\t\t\t\t? ` - ${localedFormat(props.month.endMonth, \"LLLL\")}`\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\t
\r\n\t\t\t\t{props.month.cardsGroup.map((cardGroup, key) => (\r\n\t\t\t\t\t\r\n\t\t\t\t))}\r\n\r\n\t\t\t\t{props.month.cardsGroup.length === 0 && (\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 Month;\r\n","import * as React from \"react\";\r\nimport { CardsManagerCallbacks } from \"../CardsManager/CardsManager\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { getCardsByDateNew } from \"../../store/calendar/selectors\";\r\nimport CalendarHeader from \"../Calendar/Header/Header\";\r\nimport { getMonths, groupEmptyMonths } from \"./utils\";\r\nimport Month from \"./Month/Month\";\r\nimport \"./MobileCalendar.css\";\r\nimport { parse, startOfMonth, isSameMonth, format, addYears, startOfYear } from \"date-fns\";\r\nimport { localedFormat } from \"../../utils\";\r\nimport { ca } from \"date-fns/locale\";\r\nimport WelcomeCalendar from \"../Calendar/Welcome/WelcomeCalendar\";\r\nimport ArrowBack from '@material-ui/icons/ArrowBack';\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n\tyear?: string;\r\n\tmonth?: string;\r\n\tid?: string;\r\n\topenDate: Date;\r\n\tsetDate: (date: Date) => void;\r\n}\r\n\r\nconst MobileCalendar: React.FC = (props) => {\r\n\tconst defaultDate =\r\n\t\tprops.year && props.month\r\n\t\t\t? parse(\r\n\t\t\t\t\t`${parseInt(props.year)}-${parseInt(props.month) + 1}`,\r\n\t\t\t\t\t\"yyyy-M\",\r\n\t\t\t\t\tnew Date()\r\n\t\t\t )\r\n\t\t\t: new Date();\r\n\r\n\tconst [openDate, setOpenDate] = React.useState(defaultDate);\r\n\tconst books = useSelector(getCardsByDateNew);\r\n\tconst monthWrapperRef = React.useRef(null);\r\n\tconst calendarRef = React.useRef(null);\r\n\r\n\tconst highlightedCardId = props.id;\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (highlightedCardId && calendarRef.current) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst div = calendarRef.current.querySelector(\r\n\t\t\t\t\t`#month-${defaultDate.getMonth()} div[data-card-id=\"${highlightedCardId}\"]`\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (div) {\r\n\t\t\t\t\twindow.scrollTo({\r\n\t\t\t\t\t\ttop: (div as any).offsetTop - 5,\r\n\t\t\t\t\t\tbehavior: \"smooth\",\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}, 300);\r\n\t\t}\r\n\t}, [highlightedCardId, calendarRef, props.callbacks.cards]);\r\n\r\n\tconst months = React.useMemo(() => {\r\n\t\treturn getMonths(\r\n\t\t\tbooks[openDate.getFullYear()] ? books[openDate.getFullYear()] : [],\r\n\t\t\topenDate\r\n\t\t);\r\n\t}, [openDate.getFullYear(), books]);\r\n\r\n\tconst changeFocusedMonth = (month: Date) => {\r\n\t\tsetOpenDate(startOfMonth(month));\r\n\t};\r\n\r\n\tconst focusMonth = (date: Date) => {\r\n\t\tconst divAnchor = document.getElementById(`month-${date.getMonth()}`);\r\n\r\n\t\tif (divAnchor) {\r\n\t\t\twindow.scrollTo({\r\n\t\t\t\ttop: (divAnchor as any).offsetTop + 5\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (!highlightedCardId) {\r\n\t\t\tfocusMonth(openDate ? openDate : new Date());\r\n\t\t}\r\n\t}, [openDate.getFullYear()]);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetOpenDate(props.openDate);\r\n\t}, [props.openDate]);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\r\n\t\t\t\r\n\r\n\t\t\t
\r\n\t\t\t\t props.setDate(startOfYear(addYears(openDate, -1)))}\r\n\t\t\t\t>\r\n\t\t\t\t\t\r\n\t\t\t\t\t{addYears(openDate, -1).getFullYear()}\r\n\t\t\t\t
\r\n\r\n\t\t\t\t{months.map((month, key) => (\r\n\t\t\t\t\t\r\n\t\t\t\t))}\r\n\r\n\t\t\t\t props.setDate(startOfYear(addYears(openDate, 1)))}\r\n\t\t\t\t>\r\n\t\t\t\t\t\r\n\t\t\t\t\t{addYears(openDate, 1).getFullYear()}\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 MobileCalendar;\r\n","import * as React from \"react\";\r\nimport CardsManager from \"../CardsManager/CardsManager\";\r\nimport Calendar from \"./Calendar\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport MobileCalendar from \"../MobileCalendar/MobileCalendar\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { parse, startOfYear } from \"date-fns\";\r\n\r\nconst CalendarWrapper: React.FC = (props) => {\r\n\tconst isMobile = useMediaQuery({ maxWidth: 1025 });\r\n\tconst params = useParams<{ year?: string; month?: string; id?: string }>();\r\n\r\n\tconst forceToOld = localStorage.getItem(\"calendarForceOld\") === \"true\";\r\n\r\n\tconst openDate = React.useMemo(() => {\r\n\t\tif (params?.year) {\r\n\t\t\treturn parse(params.year, \"yyyy\", new Date());\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}, [params]);\r\n\r\n\tconst [currentDate, setCurrentDate] = React.useState(\r\n\t\topenDate ? openDate : startOfYear(new Date())\r\n\t);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (openDate) {\r\n\t\t\tsetCurrentDate(openDate);\r\n\t\t}\r\n\t}, [openDate]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{(callbacks) => (\r\n\t\t\t\t<>\r\n\t\t\t\t\t{(!isMobile || forceToOld) && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{isMobile && !forceToOld && (\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 CalendarWrapper;\r\n","import * as React from 'react';\r\nimport './Calendar.css';\r\nimport CalendarWrapper from '../../Calendar/CalendarWrapper';\r\nimport { Switch, Route } from 'react-router-dom';\r\n\r\nconst CalendarPage: React.FunctionComponent = props => {\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\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t
\r\n\t
;\r\n}\r\n\r\nexport default CalendarPage;\r\n","import * as React from 'react';\r\nimport './LoginPage.css';\r\nimport { API_URL } from '../../../utils';\r\nimport SocialButton from './SocialButton/SocialButton';\r\n\r\nexport const googleAuth = () => {\r\n\t\twindow.location.href = `https://accounts.google.com/o/oauth2/v2/auth?scope=https%3A//www.googleapis.com/auth/userinfo.profile https%3A//www.googleapis.com/auth/userinfo.email&access_type=offline&include_granted_scopes=true&response_type=code&redirect_uri=${API_URL}/google/auth&client_id=333763370677-6lj4l5at93lir46kk6bb3jpjpeo0mdpt.apps.googleusercontent.com`;\r\n\t};\r\n\r\nexport const vkAuth = () => {\r\n\twindow.location.href = `https://oauth.vk.com/authorize?client_id=6822046&display=page&redirect_uri=${API_URL}/vk/auth&scope=email&response_type=code&v=5.103`;\r\n}\r\n\r\nexport const facebookAuth = () => {\r\n\tconst FACEBOOK_ID = '347078752921506';\r\n\r\n\tconst facebookEndpoint = `https://www.facebook.com/v7.0/dialog/oauth?client_id=${FACEBOOK_ID}&redirect_uri=${API_URL}/facebook/auth&state=readed&scope=email`;\r\n\r\n\twindow.location.href = facebookEndpoint;\r\n};\r\n\r\nconst LoginPage: React.FunctionComponent = props => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
Войти
\r\n\r\n\t\t\t\t\t
Войдите с помощью одной из соц. сетей.
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
  • Ведите свой читательский календарь
  • \r\n\r\n\t\t\t\t\t\t
  • Находите новые книги по своим предпочтениям
  • \r\n\r\n\t\t\t\t\t\t
  • Смотрите статистику по вашей библиотеке
  • \r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default LoginPage;","import * as React from \"react\";\r\nimport CardsManager, {\r\n\tCardsManagerCallbacks,\r\n} from \"../CardsManager/CardsManager\";\r\nimport BookCalendar from \"./BookCalendar\";\r\nimport { useParams, useHistory } from \"react-router-dom\";\r\n\r\ninterface Props {\r\n\tsection?: string;\r\n\tcallbacks?: CardsManagerCallbacks;\r\n}\r\n\r\nconst BookCalendarWrapper: React.FC = (props) => {\r\n\tconst params = useParams<{ id?: string }>();\r\n\tconst history = useHistory();\r\n\r\n\tconst setCardId = (cardId: number) => {\r\n\t\tif (cardId < 0) {\r\n\t\t\thistory.goBack();\r\n\t\t} else {\r\n\t\t\thistory.push(`/${cardId}`);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default BookCalendarWrapper;\r\n","import * as React from \"react\";\r\nimport { Form } from \"react-final-form\";\r\nimport { FieldArray } from \"react-final-form-arrays\";\r\nimport arrayMutator from \"final-form-arrays\";\r\nimport Field from \"../../SettingsForm/Field/Field\";\r\nimport Button from \"../../Button/Button\";\r\nimport \"./BookForm.css\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { getUserProfile } from \"../../../store/user/selectors\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport { MOBILE_MAX_WIDTH, API_URL } from \"../../../utils\";\r\n\r\nenum Status {\r\n\tReady,\r\n\tWait,\r\n\tDone,\r\n\tError\r\n}\r\n\r\nconst BookForm: React.FC = (props) => {\r\n\tconst user = useSelector(getUserProfile);\r\n\tconst [status, setStatus] = React.useState(Status.Ready);\r\n\r\n\tconst request = async (values: any) => {\r\n\t\tconst headers = new Headers();\r\n\r\n\t\theaders.append(\"Content-Type\", \"application/json;charset=utf-8\");\r\n\r\n\t\ttry {\r\n\t\t\tconst request = await fetch(`${API_URL}/books/form`, {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\tbody: JSON.stringify({\r\n\t\t\t\t\tform: values\r\n\t\t\t\t}),\r\n\t\t\t\tcredentials: 'include',\r\n\t\t\t\theaders\r\n\t\t\t});\r\n\r\n\t\t\tconst data = await request.json();\r\n\r\n\t\t\treturn data === true ? undefined : \"Ошибка при отправке формы\";\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\treturn \"Ошибка при отправке формы\";\r\n\t\t}\r\n\t};\r\n\r\n\tconst initialValues = {\r\n\t\tbooks: [\r\n\t\t\t{\r\n\t\t\t\tbookName: \"\",\r\n\t\t\t\tbookAuthor: \"\",\r\n\t\t\t},\r\n\t\t] as any,\r\n\t\temail: user?.email\r\n\t};\r\n\r\n\tconst submit = (values: any) => {\r\n\t\treturn request(values);\r\n\t}\r\n\r\n\tconst isMobile = useMediaQuery({ maxWidth: MOBILE_MAX_WIDTH });\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{({ form, handleSubmit }) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{({ fields }) => {\r\n\t\t\t\t\t\t\t\t\t\tconst remove = (index: number) => {\r\n\t\t\t\t\t\t\t\t\t\t\tfields.remove(index);\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\treturn fields.map((name, index) => {\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{index > 0 && isMobile && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t remove(index)}\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\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\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{index > 0 && !isMobile && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t remove(index)}\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
\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\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\tform.mutators.push(\"books\", {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbookName: \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tbookAuthor: \"\",\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\t\tДобавить еще книгу\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\tНа этот email мы пришлем вам ссылки на добавленные книги\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\t{form.getState().submitSucceeded &&\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
\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{form.getState().submitFailed && (\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
\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\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\r\nexport default BookForm;\r\n","import * as React from \"react\";\r\nimport {\r\n\tLibraryCard,\r\n\tCardType,\r\n\tCardPropertyType,\r\n} from \"../../../../types/LibraryCard\";\r\nimport MobileBookSection from \"../../MobileBookSection/MobileBookSection\";\r\nimport cn from \"classnames\";\r\nimport \"./BooksSection.css\";\r\nimport Button from \"../../../Button/Button\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Card from \"../../../Feed/Card/Card\";\r\nimport { getDatePeriod } from \"../../../../utils\";\r\n\r\ninterface Props {\r\n\tbooks: LibraryCard[];\r\n\theader: string;\r\n\tbookShowType: \"standart\" | \"mini\";\r\n\temptyText?: React.ReactNode;\r\n\ttype?: string;\r\n}\r\n\r\nconst BookSection: React.FC = (props) => {\r\n\tconst history = useHistory();\r\n\r\n\treturn (\r\n\t\t 0 && (\r\n\t\t\t\t\t\r\n\t\t\t\t)\r\n\t\t\t}\r\n\t\t>\r\n\t\t\t
\r\n\t\t\t\t{props.books.length > 0 && (\r\n\t\t\t\t\t 1,\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{props.books.map((book) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{props.books.length === 0 && props.emptyText && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{props.emptyText}\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 BookSection;\r\n","import * as React from \"react\";\r\nimport \"./MobileBooks.css\";\r\nimport { useSelector } from \"react-redux\";\r\nimport {\r\n\tgetReadNowBooks,\r\n\tgetWantReadBooks,\r\n\tgetAlreadyReadBooks,\r\n} from \"../../store/calendar/selectors\";\r\nimport BookSection from \"./components/BooksSection/BooksSection\";\r\nimport { CardsManagerCallbacks } from \"../CardsManager/CardsManager\";\r\nimport Button from \"../Button/Button\";\r\nimport FindBook from \"../Header/FindBook/FindBook\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport MobileBookSection from \"./MobileBookSection/MobileBookSection\";\r\nimport CategoryCard from \"../CatrgoriesCardComponent/Component\";\r\nimport AdBlock from \"../AdBlock/AdBlock\";\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n}\r\n\r\nconst MobileBook: React.FC = (props) => {\r\n\tconst readNowBooks = useSelector(getReadNowBooks);\r\n\tconst wantReadBooks = useSelector(getWantReadBooks);\r\n\tconst alreadyReadBooks = useSelector(getAlreadyReadBooks);\r\n\r\n\tconst addBookButton = (add: () => void) => {\r\n\t\treturn ;\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{props.callbacks.loading && (\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\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\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
\r\n\t\t\t\t\t
\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\r\n\t\t\t\r\n\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
\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\r\n\t\t\t\r\n\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
\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\r\n\t\t\t\r\n\r\n\t\t\t{/*\r\n\t\t\t\t\r\n\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\nexport default MobileBook;\r\n","import * as React from \"react\";\r\nimport BookCalendarWrapper from \"../../BookCalendar/BookCalendarWrapper\";\r\nimport \"../Calendar/Calendar.css\";\r\nimport \"./MyBooks.css\";\r\nimport { Route, Switch } from \"react-router-dom\";\r\nimport MediaQuery from \"react-responsive\";\r\nimport { MOBILE_MAX_WIDTH } from \"../../../utils\";\r\nimport MobileBook from \"../../MobileBooks/MobileBooks\";\r\nimport { Sections } from \"../../BookCalendar/BooksSidebar/BooksSidebar\";\r\nimport CardsManager from \"../../CardsManager/CardsManager\";\r\n\r\nconst MyBooks: React.FunctionComponent = (props) => {\r\n\treturn (\r\n\t\t\r\n\t\t\t{(callbacks) => {\r\n\t\t\t\treturn (\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\r\n\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\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\r\n\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\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\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\r\n\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\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\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\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\r\nexport default MyBooks;\r\n","import * as React from 'react';\r\nimport './MobileFooter.css';\r\nimport { Link, useLocation } from 'react-router-dom';\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserProfile } from '../../../store/user/selectors';\r\nimport cn from 'classnames';\r\nimport BookIcon from '@material-ui/icons/BookOutlined';\r\nimport DateRange from '@material-ui/icons/DateRange';\r\nimport ProfileIcon from '@material-ui/icons/AccountCircleOutlined';\r\nimport Feed from '@material-ui/icons/Explore';\r\nimport Home from '@material-ui/icons/Home';\r\n\r\nconst MobileFooter: React.FunctionComponent = props => {\r\n\tconst user = useSelector(getUserProfile);\r\n\tconst path = useLocation();\r\n\r\n\tconst isUser = user && user.id >= 0;\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t (window.location.href = \"/\")}\r\n\t\t\t\tclassName={cn(\"mobileFooter__item\", {\r\n\t\t\t\t\tselected: path.pathname === \"/\",\r\n\t\t\t\t})}\r\n\t\t\t>\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t (window.location.href = \"/books\")}\r\n\t\t\t\tclassName={cn(\"mobileFooter__item\", {\r\n\t\t\t\t\tselected: path.pathname.includes(\"/books\"),\r\n\t\t\t\t})}\r\n\t\t\t>\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t{/* (window.location.href = \"/list\")}\r\n\t\t\t\tclassName={cn(\"mobileFooter__item\", {\r\n\t\t\t\t\tselected: path.pathname.includes(\"/list\"),\r\n\t\t\t\t})}\r\n\t\t\t>\r\n\t\t\t\t

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

{\" \"}\r\n\t\t\t\tОбзор\r\n\t\t\t
*/}\r\n\r\n\t\t\t (window.location.href = \"/calendar\")}\r\n\t\t\t\tclassName={cn(\"mobileFooter__item\", {\r\n\t\t\t\t\tselected: path.pathname.includes(\"/calendar\"),\r\n\t\t\t\t})}\r\n\t\t\t>\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t\t(window.location.href = isUser ? `/user/${user.id}` : \"/login\")\r\n\t\t\t\t}\r\n\t\t\t\tclassName={cn(\"mobileFooter__item\", {\r\n\t\t\t\t\tselected: path.pathname.includes(\"/user/\"),\r\n\t\t\t\t})}\r\n\t\t\t>\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t{/*user && user.id >= 0 ? (\r\n\t\t\t\t (window.location.href = `/profile/#/${user.id}`)}\r\n\t\t\t\t\tclassName={cn(\"mobileFooter__item\", {\r\n\t\t\t\t\t\tselected: path.pathname.includes(\"/profile\"),\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\tПрофиль\r\n\t\t\t\t\r\n\t\t\t) : (\r\n\t\t\t\t (window.location.href = \"/login\")}\r\n\t\t\t\t\tclassName={cn(\"mobileFooter__item\", {\r\n\t\t\t\t\t\tselected: path.pathname.includes(\"/login\"),\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\tВойти\r\n\t\t\t\t\r\n\t\t\t\t)*/}\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default MobileFooter;\r\n","import * as React from 'react';\r\nimport './Footer.css';\r\nimport MediaQuery from 'react-responsive';\r\nimport { MOBILE_MAX_WIDTH, TABLET_MAX_WIDTH } from '../../utils';\r\nimport MobileFooter from './MobileFooter/MobileFooter';\r\nimport Link from '@material-ui/core/Link';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nconst Footer: React.FunctionComponent = props => {\r\n\tconst location = useLocation();\r\n\r\n\treturn
\r\n\t\t\r\n\t\t\t
\r\n\t\t\t\t2020. Readed.me - написать нам | Политика конфиденциальности\r\n\t\t\t
\r\n\t\t
\r\n\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 Footer;\r\n","import { CollectionShort } from \"../types/Collection\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (id: number, page: number = 0): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\tconst result: { data: CollectionShort; errors: string } = await(\r\n\t\tawait fetch(`${API_URL}/collections/collection?id=${id}&page=${page}`, {\r\n\t\t\tcredentials: 'include'\r\n\t\t})\r\n\t).json();\r\n\r\n\tif (!result.errors) {\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\treturn null;\r\n};\r\n","import * as React from 'react';\r\nimport { Book } from '../../../../types/Book';\r\nimport { CardsManagerCallbacks } from '../../../CardsManager/CardsManager';\r\nimport Button from '../../../Button/Button';\r\nimport BookDialogPreview from '../../../BookDialogPreview/BookDialogPreview';\r\n\r\ninterface Props {\r\n\tbook: Book;\r\n\tcallbacks: CardsManagerCallbacks;\r\n}\r\n\r\nconst Control: React.FC = ({ book, callbacks }) => {\r\n\tconst [open, setOpen] = React.useState(false);\r\n\r\n\tconst onClick = () => {\r\n\t\tsetOpen(true);\r\n\t}\r\n\r\n\tconst onClose = () => {\r\n\t\tsetOpen(false);\r\n\t}\r\n\r\n\treturn <>\r\n\t\t{book.cardId ? :\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\t{open && }\r\n\t;\r\n};\r\n\r\n\r\nexport default Control;\r\n","import * as React from 'react';\r\nimport { CollectionShort } from '../../../types/Collection';\r\nimport getCollection from '../../../requests/getCollection';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Book from '../../Book/Book';\r\nimport { useParams, useHistory } from 'react-router-dom';\r\nimport './Collection.css';\r\nimport cn from 'classnames';\r\nimport Button from '../../Button/Button';\r\nimport { CardsManagerCallbacks } from '../../CardsManager/CardsManager';\r\nimport Control from './Control/Control';\r\nimport Avatar from '@material-ui/core/Avatar';\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n}\r\n\r\nconst Collection: React.FC = props => {\r\n\tconst params = useParams<{id: string}>(),\r\n\t\tcollectionId = parseInt(params.id);\r\n\t\r\n\tconst history = useHistory();\r\n\r\n\tconst [isLoading, setLoading] = React.useState(false);\r\n\tconst [collection, setCollection] = React.useState(null);\r\n\r\n\tconst Request = async () => {\r\n\t\tconst data = await getCollection(collectionId);\r\n\r\n\t\tsetCollection(data);\r\n\t\tsetLoading(false);\r\n\t};\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetLoading(true);\r\n\r\n\t\tRequest();\r\n\t}, [collectionId]);\r\n\r\n\treturn
\r\n\t\t{isLoading && }\r\n\t\t\r\n\t\t{!isLoading && collection &&
\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{collection.name}\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{collection.description}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t{collection.user &&
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{`${collection.user.firstName} ${collection.user.lastName}`}\r\n\t\t\t\t
}\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t{collection.books.map(book => {\r\n\t\t\t\t\t\treturn \r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{book.description}\r\n\t\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\t\t
\r\n\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\r\nexport default Collection;\r\n","import * as React from 'react';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Input from '../../../../../Input/Input';\r\nimport Button from '../../../../../Button/Button';\r\n\r\ninterface Props {\r\n\tname: string;\r\n\tdescription: string;\r\n\tonSave: (name: string, desc: string) => void;\r\n\topen: boolean;\r\n\tonClose?: () => void;\r\n}\r\n\r\nconst EditDetails: React.FC = props => {\r\n\tconst nameRef = React.useRef(null);\r\n\tconst descRef = React.useRef(null);\r\n\t\r\n\tconst onSave = () => {\r\n\t\tprops.onSave(\r\n\t\t\tnameRef.current.value,\r\n\t\t\tdescRef.current.value\r\n\t\t);\r\n\r\n\t\tprops.onClose();\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\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\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\r\nexport default EditDetails;\r\n","import * as React from 'react';\r\nimport { Book as BookType } from '../../../../../types/Book';\r\nimport { useField } from 'react-final-form';\r\nimport Book from '../../../../Book/Book';\r\nimport Button from '../../../../Button/Button';\r\nimport EditDetails from './EditDetails/EditDetails';\r\n\r\ninterface Props {\r\n\tindex: number;\r\n\tbook: BookType;\r\n\tupdateValue: (index: number, value: any) => void;\r\n\tvalue: any;\r\n\tonDelete: () => void;\r\n}\r\n\r\nconst BookItem: React.FC = props => {\r\n\tconst [edit, setEdit] = React.useState(false);\r\n\r\n\tconst field = useField(`books['${props.index}'].externalId`, {\r\n\t\tvalue: props.book.externalId\r\n\t});\r\n\r\n\tconst nameField = useField(`books[${props.index}].bookName`);\r\n\tconst descField = useField(`books[${props.index}].bookDesc`);\r\n\r\n\tconst onSave = (name: string, desc: string) => {\r\n\t\tprops.updateValue(\r\n\t\t\tprops.index,\r\n\t\t\t{\r\n\t\t\t\t...props.value,\r\n\t\t\t\tbookName: name,\r\n\t\t\t\tbookDesc: desc\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\t\t
\r\n\t\t\t\t\t\t{props.value.bookDesc}\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t props.onDelete()}\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\t\r\n\t\t\t\t\t\t setEdit(true)}\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\r\n\t\t\r\n\r\n\t\t setEdit(false)}\r\n\t\t\tname={nameField.input.value}\r\n\t\t\tdescription={descField.input.value}\r\n\t\t\tonSave={onSave}\r\n\t\t/>\r\n\t;\r\n};\r\n\r\nexport default BookItem;\r\n","import * as React from 'react';\r\nimport { Book as BookType } from '../../../../types/Book';\r\nimport { CardsManagerCallbacks } from '../../../CardsManager/CardsManager';\r\nimport FindBook from '../../../Header/FindBook/FindBook';\r\nimport BookItem from './BookItem/BookItem';\r\nimport { FieldArray } from 'react-final-form-arrays';\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n}\r\n\r\nconst bookReducer: React.Reducer = (state, action) => {\r\n\tswitch (action.type) {\r\n\t\tcase 'add':\r\n\t\t\treturn [...state, action.payload as BookType];\r\n\t\tcase 'remove':\r\n\t\t\treturn state.filter(row => row.externalId !== action.payload);\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n}\r\n\r\nconst BooksList: React.FC = props => {\r\n\tconst [bookState, dispatch] = React.useReducer(bookReducer, []);\r\n\r\n\treturn <>\r\n\t\t\r\n\t\t\t{({ fields }) => <>\r\n\t\t\t\t{\r\n\t\t\t\t\tbookState.map((book, index) => {\r\n\t\t\t\t\t\tconsole.log(fields);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tfields.remove(index);\r\n\r\n\t\t\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\t\t\tpayload: book.externalId,\r\n\t\t\t\t\t\t\t\t\ttype: 'remove'\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\t\t
\r\n\t\t\t\t\t {\r\n\t\t\t\t\t\t\tfields.push({\r\n\t\t\t\t\t\t\t\texternalId: book.externalId,\r\n\t\t\t\t\t\t\t\tbookName: book.name,\r\n\t\t\t\t\t\t\t\tbookDesc: book.description,\r\n\t\t\t\t\t\t\t\tbookType: book\r\n\t\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\t\tpayload: book,\r\n\t\t\t\t\t\t\t\ttype: 'add'\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\t}\r\n\t\t
\r\n\t;\r\n};\r\n\r\nexport default BooksList;\r\n","import { AddCollectionRequest } from \"../types/requests\";\r\nimport { API_URL } from \"../utils\";\r\n\r\nexport default async (variables: AddCollectionRequest): Promise => {\r\n\tconst headers = new Headers();\r\n\r\n\theaders.append('Content-Type', 'application/json;charset=utf-8');\r\n\r\n\tconst request = await fetch(`${API_URL}/collections/add`, {\r\n\t\theaders,\r\n\t\tmethod: 'POST',\r\n\t\tbody: JSON.stringify(variables),\r\n\t\tcredentials: 'include'\r\n\t});\r\n\r\n\tconst jsonRequest = await request.json();\r\n\r\n\treturn jsonRequest;\r\n}\r\n","import * as React from 'react';\r\nimport { Form } from 'react-final-form';\r\nimport Field from '../../SettingsForm/Field/Field';\r\nimport './AddCollection.css';\r\nimport BooksList from './BooksList/BooksList';\r\nimport { CardsManagerCallbacks } from '../../CardsManager/CardsManager';\r\nimport Button from '../../Button/Button';\r\nimport arrayMutator from 'final-form-arrays';\r\nimport { FORM_ERROR } from 'final-form';\r\nimport addCollection from '../../../requests/addCollection';\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n}\r\n\r\nconst AddCollection: React.FC = props => {\r\n\tconst inititalValues = {\r\n\t\tname: '',\r\n\t\tdescription: '',\r\n\t\tbooks: [] as any\r\n\t};\r\n\r\n\tconst onSubmit = async (values: any) => {\r\n\t\tconst request = await addCollection({\r\n\t\t\tdata: values\r\n\t\t});\r\n\r\n\t\tif (request) {\r\n\t\t\twindow.location.href = `/collection/${request}`;\r\n\t\t}\r\n\t};\r\n\r\n\treturn
\r\n\t\t
Создание новой коллекции
\r\n\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\tОсновное\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t{({ form, handleSubmit }) => {\r\n\t\t\t\t\treturn \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\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\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\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\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 AddCollection;\r\n","import * as React from 'react';\r\nimport { CardsManagerCallbacks } from '../CardsManager/CardsManager';\r\nimport { Switch, Route } from 'react-router-dom';\r\nimport Collection from '../CollectionCard/Collection/Collection';\r\nimport AddCollection from './AddCollection/AddCollection';\r\nimport './Collections.css';\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n}\r\n\r\nconst Collections: React.FC = ({ callbacks }) => {\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\r\n\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\nexport default Collections;\r\n","import * as React from 'react';\r\nimport './FeedHeader.css';\r\nimport ArrowLeft from '@material-ui/icons/ArrowBack';\r\n\r\ninterface Props {\r\n\tbackgroundUrl?: string;\r\n\theader: string;\r\n\tonBack?: () => void;\r\n}\r\n\r\nconst FeedHeader: React.FC = props => {\r\n\treturn
\r\n\t\t{props.backgroundUrl &&
}\r\n\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\r\n\t\t\t\t\tНазад\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t{props.header}\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 FeedHeader;\r\n","import * as React from \"react\";\r\nimport Card from \"./Card/Card\";\r\nimport { Book } from \"../../types/Book\";\r\nimport \"./Feed.css\";\r\nimport getCollection from \"../../requests/getCollection\";\r\nimport { CardsManagerCallbacks } from \"../CardsManager/CardsManager\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { getCollections } from \"../../store/collections/selectors\";\r\nimport CollectionCard from \"../CollectionCard/CollectionCard\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport FeedHeader from \"./FeedHeader/FeedHeader\";\r\nimport { CollectionShort } from \"../../types/Collection\";\r\nimport FeedList from \"./FeedList/FeedList\";\r\nimport cn from \"classnames\";\r\nimport { API_URL } from \"../../utils\";\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n\tlimit?: number;\r\n}\r\n\r\nexport const FeedCallbacksContext = React.createContext(\r\n\tnull\r\n);\r\n\r\nconst Feed: React.FC = (props) => {\r\n\tconst [books, setBooks] = React.useState([]);\r\n\tconst [loading, setLoading] = React.useState(false);\r\n\tconst [collection, setCollection] = React.useState(null);\r\n\tconst [collections, setCollections] = React.useState([]);\r\n\tconst [page, setPage] = React.useState(1);\r\n\r\n\tconst [opened, setOpen] = React.useState(false);\r\n\r\n\tconst route = useParams<{ id: string }>();\r\n\tconst history = useHistory();\r\n\r\n\tconst collectionId = React.useMemo(() => {\r\n\t\treturn route?.id || 0;\r\n\t}, [route?.id]);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (collection?.id === 0) {\r\n\t\t\tfetch(`${API_URL}/collections/list`, {\r\n\t\t\t\tcredentials: \"include\",\r\n\t\t\t})\r\n\t\t\t\t.then((data) => {\r\n\t\t\t\t\treturn data.json();\r\n\t\t\t\t})\r\n\t\t\t\t.then((data) => {\r\n\t\t\t\t\tsetCollections(data as any);\r\n\t\t\t\t});\r\n\t\t}\r\n\t}, [collection]);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tsetLoading(true);\r\n\r\n\t\tgetCollection(collectionId as any, page).then((data) => {\r\n\t\t\tsetCollection(data);\r\n\t\t\tsetLoading(false);\r\n\t\t});\r\n\t}, [collectionId]);\r\n\r\n\tconst onMoreLoad = () => {\r\n\t\tsetLoading(true);\r\n\r\n\t\tgetCollection(collectionId as any, page + 1).then((data) => {\r\n\t\t\tif (data.books.length > 0) {\r\n\t\t\t\tsetPage(page + 1);\r\n\r\n\t\t\t\tsetCollection({\r\n\t\t\t\t\t...collection,\r\n\t\t\t\t\tbooks: [...collection.books, ...data.books],\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tsetPage(-1);\r\n\t\t\t}\r\n\r\n\t\t\tsetLoading(false);\r\n\t\t});\r\n\t};\r\n\r\n\tconst collectionsArray = React.useMemo(() => {\r\n\t\tif (!collections.length) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\treturn collections\r\n\t\t\t.filter((collection) => collection.id !== 20)\r\n\t\t\t.slice(0, opened ? collections.length : 5);\r\n\t}, [collections, opened]);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{!loading && collection && collection.id > 0 && (\r\n\t\t\t\t history.goBack()}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t
\r\n\t\t\t\t{!collection || (collection.id as any) === 0\r\n\t\t\t\t\t? \"Популярное\"\r\n\t\t\t\t\t: collection.name}\r\n\t\t\t
\r\n\r\n\t\t\t{(!collection || (collection?.id as any) === 0) && collections.length > 0 && (\r\n\t\t\t\t\r\n\t\t\t\t\t{collectionsArray.map((collection) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\r\n\t\t\t\t\t{!opened && (\r\n\t\t\t\t\t\t setOpen(true)}\r\n\t\t\t\t\t\t\timageURL={null}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\r\n\t\t\t 0 ? page : -1}\r\n\t\t\t/>\r\n\r\n\t\t\t{props.limit > 0 && (\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\nexport default Feed;\r\n","import * as React from \"react\";\r\nimport { CardsManagerCallbacks } from \"../../CardsManager/CardsManager\";\r\nimport Feed from \"../../Feed/Feed\";\r\nimport { Switch, Route } from \"react-router-dom\";\r\nimport \"./List.css\";\r\nimport CollectionCard from \"../../CollectionCard/CollectionCard\";\r\n\r\ninterface Props {\r\n\tcallbacks: CardsManagerCallbacks;\r\n}\r\n\r\nconst List: React.FC = (props) => {\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\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\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 List;\r\n","import * as React from \"react\";\r\nimport {\r\n\tBrowserRouter as Router,\r\n\tSwitch,\r\n\tRoute,\r\n\tuseParams,\r\n\tHashRouter,\r\n\tuseRouteMatch,\r\n} from \"react-router-dom\";\r\nimport SuccessAuth from \"./Pages/SuccessAuth/SuccessAuth\";\r\nimport BookPage from \"./BookPage/BookPage\";\r\nimport ProfilePage from \"./Pages/Profile/Profile\";\r\nimport CalendarPage from \"./Pages/Calendar/CalendarPage\";\r\nimport LoginPage from \"./Pages/Login/LoginPage\";\r\nimport MyBooks from \"./Pages/MyBooks/MyBooks\";\r\nimport getIndex from \"../requests/getIndex\";\r\nimport { connect, useSelector } from \"react-redux\";\r\nimport { addCollectionsAction } from \"../store/collections/actions\";\r\nimport { getUserProfile } from \"../store/user/selectors\";\r\nimport { setCurrentUserAction } from \"../store/user/actions\";\r\nimport CardsManager from \"./CardsManager/CardsManager\";\r\nimport { Config } from \"..\";\r\nimport Footer from \"./Footer/Footer\";\r\nimport MediaQuery from \"react-responsive\";\r\nimport { MOBILE_MAX_WIDTH, TABLET_MAX_WIDTH } from \"../utils\";\r\nimport Collections from \"./Collections/Collections\";\r\nimport Feed from \"./Feed/Feed\";\r\nimport List from \"./Pages/List/List\";\r\nimport BookForm from \"./Pages/BookForm/BookForm\";\r\nimport getUserInfo from \"../requests/getUserInfo\";\r\n\r\ninterface OwnProps {\r\n\tconfig: Config;\r\n}\r\n\r\ninterface DispathProps {\r\n\taddCollections: typeof addCollectionsAction;\r\n\tsetUser: typeof setCurrentUserAction;\r\n}\r\n\r\nconst Component: React.FunctionComponent = (props) => {\r\n\tconst userProfile = useSelector(getUserProfile);\r\n\r\n\t// const firebase = useMessageFirebase(userProfile?.id);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tconst request = async () => {\r\n\t\t\tconst data = await getUserInfo();\r\n\r\n\t\t\tif (data && data.id) {\r\n\t\t\t\tprops.setUser({\r\n\t\t\t\t\tuserId: data.id,\r\n\t\t\t\t\tuser: {\r\n\t\t\t\t\t\t...data,\r\n\t\t\t\t\t},\r\n\t\t\t\t});\r\n\r\n\t\t\t\tlocalStorage.setItem(\r\n\t\t\t\t\t\"userProfile\",\r\n\t\t\t\t\tJSON.stringify({\r\n\t\t\t\t\t\t...data,\r\n\t\t\t\t\t})\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tprops.setUser({\r\n\t\t\t\t\tuserId: -2,\r\n\t\t\t\t\tuser: null,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\trequest();\r\n\t}, []);\r\n\r\n\tconst indexPage = useRouteMatch(\"/\");\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