{"version":3,"file":"booksSelector-00kSY0JK.js","sources":["../../../app/javascript/store/books/booksSelector.ts"],"sourcesContent":["import { RootState } from \"store\";\nimport { useSelector } from \"react-redux\";\nimport { createSelector } from \"reselect\";\nimport { BookSerializersBookByline, ListSerializersListBook, ListSerializersListBookByline, ReadingJournalSerializersJournal, TagSerializersBasicTag, UserBookSerializersUserBook, UserBookSerializersUserBookDate } from \"types/serializers\";\n\nconst getState = (state: RootState) => state;\n\nexport const geBooksChannel = createSelector(\n getState,\n (state) => state.books\n);\n\n// Get the books info\nexport const getBook = (bookId: number) =>\n createSelector(geBooksChannel, ({ books }) => {\n return books[bookId] ? books[bookId].book : null\n });\nexport function useBook(bookId: number): BookSerializersBookByline | null {\n return useSelector(getBook(bookId));\n}\n\n// Get the currently logged in user's book\nexport const getUserBook = (bookId: number) =>\n createSelector(geBooksChannel, ({ books }) => {\n return books[bookId] ? books[bookId].userBook : null\n });\nexport function useUserBook(bookId: number): UserBookSerializersUserBook | null {\n return useSelector(getUserBook(bookId));\n}\n\n// Get all lists the current user has added the book to\nexport const getListBooks = (bookId: number) =>\n createSelector(geBooksChannel, ({ books }) => {\n return books[bookId] ? (books[bookId].listBooks || []) : [];\n });\nexport function useListBooks(bookId: number): ListSerializersListBook[] {\n return useSelector(getListBooks(bookId));\n}\n\n// Get all tags the current user has added to the book\nexport const getBookTag = (bookId: number) =>\n createSelector(geBooksChannel, ({ books }) => {\n return books[bookId] ? (books[bookId].tags || []) : null;\n });\nexport function useBookTags(bookId: number): TagSerializersBasicTag[] {\n return useSelector(getBookTag(bookId));\n}\n\n\n// Get all tags the current user has added to the book\nexport const getJournals = (bookId: number) =>\n createSelector(geBooksChannel, ({ books }) => {\n return books[bookId] ? (books[bookId].journals || []) : [];\n });\nexport function useJournals(bookId: number): ReadingJournalSerializersJournal[] {\n return useSelector(getJournals(bookId));\n}\n\nexport const getJournalsCount = (bookId: number) =>\n createSelector(geBooksChannel, ({ books }) => {\n return books[bookId] ? (books[bookId].journalsCount || 0) : 0;\n });\nexport function useJournalsCount(bookId: number): number {\n return useSelector(getJournalsCount(bookId));\n}\n\n// Get the UserBookRead for a given bookId / and optional userBookReadId\nexport const getUserBookRead = (bookId: number, userBookReadId: number | null) =>\n createSelector(geBooksChannel, ({ books }) => {\n const userBook = books[bookId] ? books[bookId].userBook : null\n if (userBook) {\n if (userBookReadId) {\n return userBook.datesRead.find((ubr) => ubr.id === userBookReadId) || null;\n } else {\n return userBook.datesRead[userBook.datesRead.length-1];\n }\n }\n return null;\n });\nexport function useUserBookRead(bookId: number, userBookReadId?: number | null): UserBookSerializersUserBookDate | null {\n return useSelector(getUserBookRead(bookId, userBookReadId));\n}\n\n// Get all dates read for a book\nexport const getUserBookReads = (bookId: number) =>\n createSelector(geBooksChannel, ({ books }) => {\n const userBook = books[bookId] ? books[bookId].userBook : null\n return userBook ? userBook.datesRead : [];\n });\nexport function useUserBookReads(bookId: number): UserBookSerializersUserBookDate[] {\n return useSelector(getUserBookReads(bookId));\n}\n\n\n// Get List books for a book id and list id\nexport const getListBook = (bookId: number, listId: number) =>\n createSelector(geBooksChannel, ({ books }) => {\n const listBooks = books[bookId] ? books[bookId].listBooks : [];\n return listBooks.find((lb) => lb?.listId === listId) || null;\n });\nexport function useListBook(bookId: number, listId: number): ListSerializersListBookByline | null {\n return useSelector(getListBook(bookId, listId));\n}\n"],"names":["getState","state","geBooksChannel","createSelector","getBook","bookId","books","useBook","useSelector","getUserBook","useUserBook","getListBooks","useListBooks","getBookTag","useBookTags","getJournalsCount","useJournalsCount","getUserBookRead","userBookReadId","userBook","ubr","useUserBookRead","getUserBookReads","useUserBookReads","getListBook","listId","lb","useListBook"],"mappings":"uDAKA,MAAMA,EAAYC,GAAqBA,EAE1BC,EAAiBC,EAC5BH,EACCC,GAAUA,EAAM,KACnB,EAGaG,EAAWC,GACtBF,EAAeD,EAAgB,CAAC,CAAE,MAAAI,KACzBA,EAAMD,CAAM,EAAIC,EAAMD,CAAM,EAAE,KAAO,IAC7C,EACI,SAASE,EAAQF,EAAkD,CACjE,OAAAG,EAAYJ,EAAQC,CAAM,CAAC,CACpC,CAGa,MAAAI,EAAeJ,GAC1BF,EAAeD,EAAgB,CAAC,CAAE,MAAAI,KACzBA,EAAMD,CAAM,EAAIC,EAAMD,CAAM,EAAE,SAAW,IACjD,EACI,SAASK,EAAYL,EAAoD,CACvE,OAAAG,EAAYC,EAAYJ,CAAM,CAAC,CACxC,CAGa,MAAAM,EAAgBN,GAC3BF,EAAeD,EAAgB,CAAC,CAAE,MAAAI,KACzBA,EAAMD,CAAM,EAAKC,EAAMD,CAAM,EAAE,WAAa,CAAC,EAAK,EAC1D,EACI,SAASO,EAAaP,EAA2C,CAC/D,OAAAG,EAAYG,EAAaN,CAAM,CAAC,CACzC,CAGa,MAAAQ,EAAcR,GACzBF,EAAeD,EAAgB,CAAC,CAAE,MAAAI,KACzBA,EAAMD,CAAM,EAAKC,EAAMD,CAAM,EAAE,MAAQ,CAAM,EAAA,IACrD,EACI,SAASS,EAAYT,EAA0C,CAC7D,OAAAG,EAAYK,EAAWR,CAAM,CAAC,CACvC,CAYa,MAAAU,EAAoBV,GAC/BF,EAAeD,EAAgB,CAAC,CAAE,MAAAI,KACzBA,EAAMD,CAAM,GAAKC,EAAMD,CAAM,EAAE,eAAiB,CACxD,EACI,SAASW,EAAiBX,EAAwB,CAChD,OAAAG,EAAYO,EAAiBV,CAAM,CAAC,CAC7C,CAGa,MAAAY,EAAkB,CAACZ,EAAgBa,IAC9Cf,EAAeD,EAAgB,CAAC,CAAE,MAAAI,KAAY,CAC5C,MAAMa,EAAWb,EAAMD,CAAM,EAAIC,EAAMD,CAAM,EAAE,SAAW,KAC1D,OAAIc,EACED,EACKC,EAAS,UAAU,KAAMC,GAAQA,EAAI,KAAOF,CAAc,GAAK,KAE/DC,EAAS,UAAUA,EAAS,UAAU,OAAO,CAAC,EAGlD,IACT,CAAC,EACa,SAAAE,EAAgBhB,EAAgBa,EAAwE,CACtH,OAAOV,EAAYS,EAAgBZ,EAAQa,CAAc,CAAC,CAC5D,CAGa,MAAAI,EAAoBjB,GAC/BF,EAAeD,EAAgB,CAAC,CAAE,MAAAI,KAAY,CAC5C,MAAMa,EAAWb,EAAMD,CAAM,EAAIC,EAAMD,CAAM,EAAE,SAAW,KACnD,OAAAc,EAAWA,EAAS,UAAY,EACzC,CAAC,EACI,SAASI,EAAiBlB,EAAmD,CAC3E,OAAAG,EAAYc,EAAiBjB,CAAM,CAAC,CAC7C,CAIa,MAAAmB,EAAc,CAACnB,EAAgBoB,IAC1CtB,EAAeD,EAAgB,CAAC,CAAE,MAAAI,MACdA,EAAMD,CAAM,EAAIC,EAAMD,CAAM,EAAE,UAAY,IAC3C,KAAMqB,IAAOA,GAAA,YAAAA,EAAI,UAAWD,CAAM,GAAK,IACzD,EACa,SAAAE,EAAYtB,EAAgBoB,EAAsD,CAChG,OAAOjB,EAAYgB,EAAYnB,EAAQoB,CAAM,CAAC,CAChD"}