diff --git a/src/component/notebook/notebookList.js b/src/component/notebook/notebookList.js index 5236c01..3930748 100644 --- a/src/component/notebook/notebookList.js +++ b/src/component/notebook/notebookList.js @@ -13,6 +13,7 @@ import {Navigation} from 'react-native-navigation'; import Api from '../../util/api'; import Notebook from './notebook' import NotebookAdd from './notebookAdd' +import {Icon} from "../../style/icon"; export default class NotebookList extends Component { @@ -72,6 +73,11 @@ export default class NotebookList extends Component { } _onNotebookPress(notebook) { + if(this.props.onPress) { + this.props.onPress(notebook); + return + } + Navigation.push(this.props.componentId, { component: { name: 'NotebookDetail', @@ -102,6 +108,10 @@ export default class NotebookList extends Component { notebooks.unshift({id: 'new'}); } + if(this.props.filter) { + notebooks = notebooks.filter(this.props.filter); + } + let groups = this.createGroup(notebooks, this.itemsPerRow); this.setState({ notebooks: groups diff --git a/src/page/NotebookEditPage.js b/src/page/NotebookEditPage.js index 6121c24..434555d 100644 --- a/src/page/NotebookEditPage.js +++ b/src/page/NotebookEditPage.js @@ -172,6 +172,26 @@ export default class NotebookEditPage extends Component { }); } + openMargePage() { + Navigation.push(this.props.componentId, { + component: { + name: 'NotebookMerge', + passProps: { + notebook: this.props.notebook + }, + options: { + bottomTabs: { + visible: false, + + // hide bottom tab for android + drawBehind: true, + animate: true + } + } + } + }); + } + render() { const tip = this.props.notebook ? ( @@ -241,7 +261,16 @@ export default class NotebookEditPage extends Component { onPress={this._onEditCover.bind(this)}> 设置封面 + {(this.state.notebook.isExpired) && ( + <> + + + 合并日记本 + + + )} + diff --git a/src/page/NotebookMergePage.js b/src/page/NotebookMergePage.js new file mode 100644 index 0000000..a098f01 --- /dev/null +++ b/src/page/NotebookMergePage.js @@ -0,0 +1,125 @@ +import {Component} from "react"; +import UserBooks from "../component/notebook/notebookList"; +import {ActivityIndicator, Alert, Animated, DeviceEventEmitter, Easing, Modal, Platform, View} from "react-native"; +import React from "react"; +import Api from '../util/api'; +import colors from '../style/color'; +import Toast from "react-native-root-toast"; +import Event from "../util/event"; +import {Navigation} from "react-native-navigation"; + +export default class NotebookMergePage extends Component { + + constructor(props) { + super(props); + this.state = { + loading: false + } + } + + static options(passProps) { + return { + topBar: { + title: { + text: '合并日记本' + }, + backButton: { + title: passProps.backTitle ? passProps.backTitle : '返回' + } + }, + bottomTabs: { + visible: false, + + // hide bottom tab for android + drawBehind: true, + animate: true + } + }; + } + + componentDidMount() { + (async() => { + let user = await Api.getSelfInfoByStore(); + this.setState({user: user}); + })() + } + + onPress = (book) => { + Alert.alert('提示', '确认将《' + book.subject + '》合并到当前日记本?',[ + {text: '确认合并', style: 'destructive', onPress: () => this.margeBooks(book)}, + {text: '取消', onPress: () => console.log('OK Pressed!')}, + ]); + }; + + margeBooks = async (book) => { + this.setState({loading: true}); + let err = null; + try { + await Api.margeNotebook(book.id, this.props.notebook.id); + } catch (e) { + err = e.message; + } + this.setState({loading: false}); + + if (err) { + let msg = "合并失败" + "\n" + err; + Toast.show(msg, { + duration: 2000, + position: 250, + shadow: false, + hideOnPress: true, + }); + } else { + DeviceEventEmitter.emit(Event.updateNotebooks); + Toast.show("合并完成", { + duration: 2000, + position: 250, + shadow: false, + hideOnPress: true, + }); + Navigation.popToRoot(this.props.componentId); + } + + }; + + closeModal() { + Animated.parallel([ + Animated.timing( + this.state.fadeAnimOpacity, + {toValue: 0, duration: 350, easing: Easing.out(Easing.cubic)} + ), + Animated.timing( + this.state.fadeAnimHeight, + {toValue: 0, duration: 350, easing: Easing.out(Easing.cubic)} + ) + ]).start(() => { + this.setState({modalVisible: false}); + }); + } + + render() { + if(!this.state.user) { + return null; + } + return ( + + {}}> + + + + + book.isExpired && book.id !== this.props.notebook.id} + onPress={this.onPress} + /> + + ); + } +} \ No newline at end of file diff --git a/src/page/_list.js b/src/page/_list.js index 433c50f..8f0bda3 100644 --- a/src/page/_list.js +++ b/src/page/_list.js @@ -1,23 +1,24 @@ export default { -About: require("./AboutPage.js").default, -DiaryDetail: require("./DiaryDetailPage.js").default, -Empty: require("./EmptyPage.js").default, -Feedback: require("./FeedbackPage.js").default, -Follow: require("./FollowPage.js").default, -FollowUser: require("./FollowUserPage.js").default, -Home: require("./HomePage.js").default, -NotebookDetail: require("./NotebookDetailPage.js").default, -NotebookEdit: require("./NotebookEditPage.js").default, -NotificationHistory: require("./NotificationHistoryPage.js").default, -Notification: require("./NotificationPage.js").default, -Password: require("./PasswordPage.js").default, -Photo: require("./PhotoPage.js").default, -Setting: require("./SettingPage.js").default, -Topic: require("./TopicPage.js").default, -UserInfoEdit: require("./UserInfoEditPage.js").default, -UserIntroEdit: require("./UserIntroEditPage.js").default, -UserNameEdit: require("./UserNameEditPage.js").default, -User: require("./UserPage.js").default, -WebView: require("./WebViewPage.js").default, -Write: require("./WritePage.js").default + About: require("./AboutPage.js").default, + DiaryDetail: require("./DiaryDetailPage.js").default, + Empty: require("./EmptyPage.js").default, + Feedback: require("./FeedbackPage.js").default, + Follow: require("./FollowPage.js").default, + FollowUser: require("./FollowUserPage.js").default, + Home: require("./HomePage.js").default, + NotebookDetail: require("./NotebookDetailPage.js").default, + NotebookEdit: require("./NotebookEditPage.js").default, + NotebookMerge: require("./NotebookMergePage.js").default, + NotificationHistory: require("./NotificationHistoryPage.js").default, + Notification: require("./NotificationPage.js").default, + Password: require("./PasswordPage.js").default, + Photo: require("./PhotoPage.js").default, + Setting: require("./SettingPage.js").default, + Topic: require("./TopicPage.js").default, + UserInfoEdit: require("./UserInfoEditPage.js").default, + UserIntroEdit: require("./UserIntroEditPage.js").default, + UserNameEdit: require("./UserNameEditPage.js").default, + User: require("./UserPage.js").default, + WebView: require("./WebViewPage.js").default, + Write: require("./WritePage.js").default } \ No newline at end of file diff --git a/src/util/api.js b/src/util/api.js index d38acd4..e1d8543 100644 --- a/src/util/api.js +++ b/src/util/api.js @@ -349,6 +349,9 @@ async function deleteNotebook(id) { return call('DELETE', '/notebooks/' + id) } +async function margeNotebook(from, to) { + return callV2('POST', `/notebooks/${from}/marge_to/${to}`); +} async function report(user_id, diary_id) { return call('POST', '/reports/', { @@ -567,6 +570,7 @@ export default { createNotebook, updateNotebook, deleteNotebook, + margeNotebook, report, feedback,