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,