You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-09-16 08:56:40 +02:00
anv
This commit is contained in:
@@ -6,28 +6,12 @@ import { ItemListComponent } from 'src/components/item-list.js';
|
|||||||
import { Note } from 'src/models/note.js';
|
import { Note } from 'src/models/note.js';
|
||||||
import { Folder } from 'src/models/folder.js';
|
import { Folder } from 'src/models/folder.js';
|
||||||
import { _ } from 'src/locale.js';
|
import { _ } from 'src/locale.js';
|
||||||
|
import { NoteFolderService } from 'src/services/note-folder-service.js';
|
||||||
|
|
||||||
class FolderListComponent extends ItemListComponent {
|
class FolderListComponent extends ItemListComponent {
|
||||||
|
|
||||||
listView_itemPress = (folderId) => {
|
listView_itemPress = (folderId) => {
|
||||||
Folder.load(folderId).then((folder) => {
|
NoteFolderService.openNoteList(folderId);
|
||||||
Log.info('Current folder', folder);
|
|
||||||
|
|
||||||
Note.previews(folderId).then((notes) => {
|
|
||||||
this.props.dispatch({
|
|
||||||
type: 'NOTES_UPDATE_ALL',
|
|
||||||
notes: notes,
|
|
||||||
});
|
|
||||||
|
|
||||||
this.props.dispatch({
|
|
||||||
type: 'Navigation/NAVIGATE',
|
|
||||||
routeName: 'Notes',
|
|
||||||
folderId: folderId,
|
|
||||||
});
|
|
||||||
}).catch((error) => {
|
|
||||||
Log.warn('Cannot load notes', error);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -25,7 +25,7 @@ class ScreenHeaderComponent extends Component {
|
|||||||
// Note: this is hardcoded for now because navigation.state doesn't tell whether
|
// Note: this is hardcoded for now because navigation.state doesn't tell whether
|
||||||
// it's possible to go back or not. Maybe it's possible to get this information
|
// it's possible to go back or not. Maybe it's possible to get this information
|
||||||
// from somewhere else.
|
// from somewhere else.
|
||||||
return this.props.navState.routeName != 'Folders';
|
return this.props.navState.routeName != 'Notes';
|
||||||
}
|
}
|
||||||
|
|
||||||
sideMenuButton_press = () => {
|
sideMenuButton_press = () => {
|
||||||
|
31
ReactNativeClient/src/components/screens/loading.js
Normal file
31
ReactNativeClient/src/components/screens/loading.js
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import React, { Component } from 'react';
|
||||||
|
import { View, Text } from 'react-native';
|
||||||
|
import { connect } from 'react-redux'
|
||||||
|
import { Log } from 'src/log.js'
|
||||||
|
import { Folder } from 'src/models/folder.js'
|
||||||
|
import { ScreenHeader } from 'src/components/screen-header.js';
|
||||||
|
import { NoteFolderService } from 'src/services/note-folder-service.js';
|
||||||
|
|
||||||
|
class LoadingScreenComponent extends React.Component {
|
||||||
|
|
||||||
|
static navigationOptions = (options) => {
|
||||||
|
return { header: null };
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<View style={{flex: 1}}>
|
||||||
|
<Text>Loading...</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const LoadingScreen = connect(
|
||||||
|
(state) => {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
)(LoadingScreenComponent)
|
||||||
|
|
||||||
|
export { LoadingScreen };
|
@@ -1,6 +1,8 @@
|
|||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
import { Button } from 'react-native';
|
import { Button } from 'react-native';
|
||||||
import { Log } from 'src/log.js';
|
import { Log } from 'src/log.js';
|
||||||
|
import { Note } from 'src/models/note.js';
|
||||||
|
import { NoteFolderService } from 'src/services/note-folder-service.js';
|
||||||
|
|
||||||
const React = require('react');
|
const React = require('react');
|
||||||
const {
|
const {
|
||||||
@@ -40,15 +42,11 @@ const styles = StyleSheet.create({
|
|||||||
class SideMenuContentComponent extends Component {
|
class SideMenuContentComponent extends Component {
|
||||||
|
|
||||||
folder_press(folder) {
|
folder_press(folder) {
|
||||||
this.props.dispatch({
|
|
||||||
type: 'Navigation/NAVIGATE',
|
|
||||||
routeName: 'Notes',
|
|
||||||
folderId: folder.id,
|
|
||||||
});
|
|
||||||
|
|
||||||
this.props.dispatch({
|
this.props.dispatch({
|
||||||
type: 'SIDE_MENU_CLOSE',
|
type: 'SIDE_MENU_CLOSE',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
NoteFolderService.openNoteList(folder.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
@@ -18,12 +18,13 @@ import { NoteScreen } from 'src/components/screens/note.js'
|
|||||||
import { FolderScreen } from 'src/components/screens/folder.js'
|
import { FolderScreen } from 'src/components/screens/folder.js'
|
||||||
import { FoldersScreen } from 'src/components/screens/folders.js'
|
import { FoldersScreen } from 'src/components/screens/folders.js'
|
||||||
import { LoginScreen } from 'src/components/screens/login.js'
|
import { LoginScreen } from 'src/components/screens/login.js'
|
||||||
|
import { LoadingScreen } from 'src/components/screens/loading.js'
|
||||||
import { Setting } from 'src/models/setting.js'
|
import { Setting } from 'src/models/setting.js'
|
||||||
import { Synchronizer } from 'src/synchronizer.js'
|
import { Synchronizer } from 'src/synchronizer.js'
|
||||||
import { MenuContext } from 'react-native-popup-menu';
|
import { MenuContext } from 'react-native-popup-menu';
|
||||||
//import SideMenu from 'react-native-side-menu';
|
|
||||||
import { SideMenu } from 'src/components/side-menu.js';
|
import { SideMenu } from 'src/components/side-menu.js';
|
||||||
import { SideMenuContent } from 'src/components/side-menu-content.js';
|
import { SideMenuContent } from 'src/components/side-menu-content.js';
|
||||||
|
import { NoteFolderService } from 'src/services/note-folder-service.js';
|
||||||
|
|
||||||
let defaultState = {
|
let defaultState = {
|
||||||
notes: [],
|
notes: [],
|
||||||
@@ -45,19 +46,14 @@ const reducer = (state = defaultState, action) => {
|
|||||||
case 'Navigation/NAVIGATE':
|
case 'Navigation/NAVIGATE':
|
||||||
case 'Navigation/BACK':
|
case 'Navigation/BACK':
|
||||||
|
|
||||||
// If the current screen is already the requested screen, don't do anything
|
|
||||||
const r = state.nav.routes;
|
const r = state.nav.routes;
|
||||||
if (r.length && r[r.length - 1].routeName == action.routeName) {
|
const currentRoute = r.length ? r[r.length - 1] : null;
|
||||||
return state
|
const currentRouteName = currentRoute ? currentRoute.routeName : '';
|
||||||
}
|
|
||||||
|
|
||||||
action.params = { listMode: 'view' };
|
Log.info('Current route name', currentRouteName);
|
||||||
|
Log.info('New route name', action.routeName);
|
||||||
|
|
||||||
const nextStateNav = AppNavigator.router.getStateForAction(action, state.nav);
|
|
||||||
newState = Object.assign({}, state);
|
newState = Object.assign({}, state);
|
||||||
if (nextStateNav) {
|
|
||||||
newState.nav = nextStateNav;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('noteId' in action) {
|
if ('noteId' in action) {
|
||||||
newState.selectedNoteId = action.noteId;
|
newState.selectedNoteId = action.noteId;
|
||||||
@@ -67,6 +63,17 @@ const reducer = (state = defaultState, action) => {
|
|||||||
newState.selectedFolderId = action.folderId;
|
newState.selectedFolderId = action.folderId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (currentRouteName == action.routeName) {
|
||||||
|
// If the current screen is already the requested screen, don't do anything
|
||||||
|
} else {
|
||||||
|
action.params = { listMode: 'view' };
|
||||||
|
|
||||||
|
const nextStateNav = AppNavigator.router.getStateForAction(action, currentRouteName != 'Loading' ? state.nav : null);
|
||||||
|
if (nextStateNav) {
|
||||||
|
newState.nav = nextStateNav;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Replace all the notes with the provided array
|
// Replace all the notes with the provided array
|
||||||
@@ -168,17 +175,20 @@ const reducer = (state = defaultState, action) => {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Log.info('newState.selectedFolderId', newState.selectedFolderId);
|
||||||
|
|
||||||
return newState;
|
return newState;
|
||||||
}
|
}
|
||||||
|
|
||||||
let store = createStore(reducer);
|
let store = createStore(reducer);
|
||||||
|
|
||||||
const AppNavigator = StackNavigator({
|
const AppNavigator = StackNavigator({
|
||||||
Notes: {screen: NotesScreen},
|
Notes: { screen: NotesScreen },
|
||||||
Note: {screen: NoteScreen},
|
Note: { screen: NoteScreen },
|
||||||
Folder: {screen: FolderScreen},
|
Folder: { screen: FolderScreen },
|
||||||
Folders: {screen: FoldersScreen},
|
Folders: { screen: FoldersScreen },
|
||||||
Login: {screen: LoginScreen},
|
Login: { screen: LoginScreen },
|
||||||
|
Loading: { screen: LoadingScreen },
|
||||||
});
|
});
|
||||||
|
|
||||||
class AppComponent extends React.Component {
|
class AppComponent extends React.Component {
|
||||||
@@ -190,6 +200,7 @@ class AppComponent extends React.Component {
|
|||||||
|
|
||||||
BaseModel.dispatch = this.props.dispatch;
|
BaseModel.dispatch = this.props.dispatch;
|
||||||
BaseModel.db_ = db;
|
BaseModel.db_ = db;
|
||||||
|
NoteFolderService.dispatch = this.props.dispatch;
|
||||||
|
|
||||||
db.open().then(() => {
|
db.open().then(() => {
|
||||||
Log.info('Database is ready.');
|
Log.info('Database is ready.');
|
||||||
@@ -211,14 +222,27 @@ class AppComponent extends React.Component {
|
|||||||
|
|
||||||
Log.info('Loading folders...');
|
Log.info('Loading folders...');
|
||||||
|
|
||||||
Folder.all().then((folders) => {
|
return Folder.all().then((folders) => {
|
||||||
this.props.dispatch({
|
this.props.dispatch({
|
||||||
type: 'FOLDERS_UPDATE_ALL',
|
type: 'FOLDERS_UPDATE_ALL',
|
||||||
folders: folders,
|
folders: folders,
|
||||||
});
|
});
|
||||||
|
return folders;
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
Log.warn('Cannot load folders', error);
|
Log.warn('Cannot load folders', error);
|
||||||
});
|
});
|
||||||
|
}).then((folders) => {
|
||||||
|
let folder = folders[0];
|
||||||
|
|
||||||
|
if (!folder) throw new Error('No default folder is defined');
|
||||||
|
|
||||||
|
return NoteFolderService.openNoteList(folder.id);
|
||||||
|
|
||||||
|
// this.props.dispatch({
|
||||||
|
// type: 'Navigation/NAVIGATE',
|
||||||
|
// routeName: 'Notes',
|
||||||
|
// folderId: folder.id,
|
||||||
|
// });
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
let synchronizer = new Synchronizer(db, Registry.api());
|
let synchronizer = new Synchronizer(db, Registry.api());
|
||||||
Registry.setSynchronizer(synchronizer);
|
Registry.setSynchronizer(synchronizer);
|
||||||
@@ -254,7 +278,7 @@ class AppComponent extends React.Component {
|
|||||||
|
|
||||||
defaultState.nav = AppNavigator.router.getStateForAction({
|
defaultState.nav = AppNavigator.router.getStateForAction({
|
||||||
type: 'Navigation/NAVIGATE',
|
type: 'Navigation/NAVIGATE',
|
||||||
routeName: 'Folders',
|
routeName: 'Loading',
|
||||||
params: {listMode: 'view'}
|
params: {listMode: 'view'}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -36,6 +36,23 @@ class NoteFolderService extends BaseService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static openNoteList(folderId) {
|
||||||
|
return Note.previews(folderId).then((notes) => {
|
||||||
|
this.dispatch({
|
||||||
|
type: 'NOTES_UPDATE_ALL',
|
||||||
|
notes: notes,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.dispatch({
|
||||||
|
type: 'Navigation/NAVIGATE',
|
||||||
|
routeName: 'Notes',
|
||||||
|
folderId: folderId,
|
||||||
|
});
|
||||||
|
}).catch((error) => {
|
||||||
|
Log.warn('Cannot load notes', error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export { NoteFolderService };
|
export { NoteFolderService };
|
Reference in New Issue
Block a user