From 5e4798e90ba180d3b1e23c0481485045d1c1b581 Mon Sep 17 00:00:00 2001 From: Denis Moiseev Date: Mon, 1 Jul 2019 22:37:29 +0300 Subject: [PATCH] Children books --- .../details/components/book-details.tsx | 33 +++++++++++++++++-- src/services/api/fantlab/book.js | 10 ++++++ src/types/book-extended.ts | 7 ++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/screens/details/components/book-details.tsx b/src/screens/details/components/book-details.tsx index 17487a16..55524d55 100644 --- a/src/screens/details/components/book-details.tsx +++ b/src/screens/details/components/book-details.tsx @@ -51,6 +51,8 @@ export class BookDetails extends React.Component { {!!book.description && } + {!!book.children.length && this.renderChildrenBooks()} + {!!book.parent.length && this.renderParentBooks()} @@ -106,15 +108,42 @@ export class BookDetails extends React.Component { ВХОДИТ В {this.props.book.parent.map(book => ( - this.openParent(book)} title={book.type} value={book.title} /> + this.openBook(book)} title={book.type} value={book.title} /> + ))} + + ); + } + + renderChildrenBooks() { + return ( + + СОДЕРЖИТ + + {this.props.book.children.map(book => ( + this.openBook(book)} + title={book.type} + value={this.getChildBookTitle(book)} + /> ))} ); } + getChildBookTitle(book) { + if (book.year) { + return `${book.title} (${book.year})`; + } + + return book.title; + } + openChangeStatus = () => this.props.navigation.navigate('/modal/change-status', { book: this.props.book }); - openParent = book => this.props.navigation.push('Details', { bookId: book.id }); + openBook(book) { + this.props.navigation.push('Details', { bookId: book.id }); + } } const s = StyleSheet.create({ diff --git a/src/services/api/fantlab/book.js b/src/services/api/fantlab/book.js index df3f5db8..ae00c56c 100644 --- a/src/services/api/fantlab/book.js +++ b/src/services/api/fantlab/book.js @@ -26,6 +26,7 @@ export const mapBody = { genre, searchTitles, parent, + children, }; function editionCount(book) { @@ -55,3 +56,12 @@ function parent(w) { })), ).filter(p => p.id); } + +function children(w) { + return _.filter(w.children, c => +c.deep === 1 && c.work_id).map(c => ({ + id: c.work_id, + title: c.work_name || c.work_name_alt || c.work_name_orig, + type: _.capitalize(c.work_type) || 'Другое', + year: c.work_year, + })); +} diff --git a/src/types/book-extended.ts b/src/types/book-extended.ts index 0567966b..e04c6304 100644 --- a/src/types/book-extended.ts +++ b/src/types/book-extended.ts @@ -16,3 +16,10 @@ export interface ParentBook { title: string; type: string; } + +export interface ChildBook { + id: string; + title: string; + type: string; + year?: number; +}