diff --git a/src/EteSyncContext.tsx b/src/EteSyncContext.tsx
index fceac8d..bbd9172 100644
--- a/src/EteSyncContext.tsx
+++ b/src/EteSyncContext.tsx
@@ -13,7 +13,7 @@ import JournalFetcher from './JournalFetcher';
import * as EteSync from './api/EteSync';
import { routeResolver, getPalette } from './App';
-import * as store from './store';
+import { store, StoreState, FetchStatus, CredentialsType, CredentialsData, fetchCredentials } from './store';
import * as C from './Constants';
@@ -30,32 +30,6 @@ interface FormErrors {
errorServer?: string;
}
-function fetchCredentials(username: string, password: string, encryptionPassword: string, server: string) {
- const authenticator = new EteSync.Authenticator(server);
-
- return (dispatch: any) => {
- dispatch(store.credentialsRequest());
-
- authenticator.getAuthToken(username, password).then(
- (authToken) => {
- const credentials = new EteSync.Credentials(username, authToken);
- const derived = EteSync.deriveKey(username, encryptionPassword);
-
- const context = {
- serviceApiUrl: server,
- credentials,
- encryptionKey: derived,
- };
-
- dispatch(store.credentialsSuccess(context));
- },
- (error) => {
- dispatch(store.credentialsFailure(error));
- }
- );
- };
-}
-
class EteSyncContext extends React.Component {
state: {
showAdvanced?: boolean;
@@ -68,7 +42,7 @@ class EteSyncContext extends React.Component {
};
props: {
- credentials: store.CredentialsType;
+ credentials: CredentialsType;
};
constructor(props: any) {
@@ -119,7 +93,7 @@ class EteSyncContext extends React.Component {
this.setState({password: '', encryptionPassword: ''});
- store.store.dispatch(fetchCredentials(username, password, encryptionPassword, server));
+ store.dispatch(fetchCredentials(username, password, encryptionPassword, server));
}
toggleAdvancedSettings() {
@@ -127,9 +101,9 @@ class EteSyncContext extends React.Component {
}
render() {
- if (((this.props.credentials.status === store.FetchStatus.Initial) &&
+ if (((this.props.credentials.status === FetchStatus.Initial) &&
(this.props.credentials.value === null)) ||
- (this.props.credentials.status === store.FetchStatus.Failure)) {
+ (this.props.credentials.status === FetchStatus.Failure)) {
let advancedSettings = null;
if (this.state.showAdvanced) {
@@ -219,11 +193,11 @@ class EteSyncContext extends React.Component {
);
- } else if (this.props.credentials.status === store.FetchStatus.Request) {
+ } else if (this.props.credentials.status === FetchStatus.Request) {
return (
Loading
);
}
- let context = this.props.credentials.value as store.CredentialsData;
+ let context = this.props.credentials.value as CredentialsData;
return (
@@ -248,7 +222,7 @@ class EteSyncContext extends React.Component {
}
}
-const mapStateToProps = (state: store.StoreState) => {
+const mapStateToProps = (state: StoreState) => {
return {
credentials: state.credentials,
};
diff --git a/src/JournalFetcher.tsx b/src/JournalFetcher.tsx
index cc7437f..87a3ccb 100644
--- a/src/JournalFetcher.tsx
+++ b/src/JournalFetcher.tsx
@@ -3,9 +3,8 @@ import { connect } from 'react-redux';
import { withRouter } from 'react-router';
import { EteSyncContextType } from './EteSyncContext';
-import * as EteSync from './api/EteSync';
-import * as store from './store';
+import { store, JournalsType, fetchJournals, StoreState } from './store';
interface PropsType {
etesync: EteSyncContextType;
@@ -13,26 +12,7 @@ interface PropsType {
}
interface PropsTypeInner extends PropsType {
- journals: store.JournalsType;
-}
-
-function fetchJournals(etesync: EteSyncContextType) {
- const credentials = etesync.credentials;
- const apiBase = etesync.serviceApiUrl;
-
- return (dispatch: any) => {
- dispatch(store.journalsRequest());
-
- let journalManager = new EteSync.JournalManager(credentials, apiBase);
- journalManager.list().then(
- (journals) => {
- dispatch(store.journalsSuccess(journals));
- },
- (error) => {
- dispatch(store.journalsFailure(error));
- }
- );
- };
+ journals: JournalsType;
}
class JournalFetcher extends React.Component {
@@ -43,7 +23,7 @@ class JournalFetcher extends React.Component {
}
componentDidMount() {
- store.store.dispatch(fetchJournals(this.props.etesync));
+ store.dispatch(fetchJournals(this.props.etesync));
}
render() {
@@ -55,7 +35,7 @@ class JournalFetcher extends React.Component {
}
}
-const mapStateToProps = (state: store.StoreState, props: PropsType) => {
+const mapStateToProps = (state: StoreState, props: PropsType) => {
return {
journals: state.cache.journals,
};
diff --git a/src/JournalView.tsx b/src/JournalView.tsx
index 36ec632..9226c78 100644
--- a/src/JournalView.tsx
+++ b/src/JournalView.tsx
@@ -11,7 +11,7 @@ import JournalViewEntries from './JournalViewEntries';
import JournalViewAddressBook from './JournalViewAddressBook';
import JournalViewCalendar from './JournalViewCalendar';
-import * as store from './store';
+import { store, StoreState, JournalsType, EntriesType, fetchEntries } from './store';
interface PropsType {
etesync: EteSyncContextType;
@@ -19,28 +19,8 @@ interface PropsType {
}
interface PropsTypeInner extends PropsType {
- journals: store.JournalsType;
- entries: store.EntriesType;
-}
-
-function fetchEntries(etesync: EteSyncContextType, journalUid: string) {
- const credentials = etesync.credentials;
- const apiBase = etesync.serviceApiUrl;
-
- return (dispatch: any) => {
- const prevUid = null;
- dispatch(store.entriesRequest(journalUid));
-
- let entryManager = new EteSync.EntryManager(credentials, apiBase, journalUid);
- entryManager.list(prevUid).then(
- (entries) => {
- dispatch(store.entriesSuccess(journalUid, entries));
- },
- (error) => {
- dispatch(store.entriesFailure(journalUid, error));
- }
- );
- };
+ journals: JournalsType;
+ entries: EntriesType;
}
class JournalView extends React.Component {
@@ -57,7 +37,7 @@ class JournalView extends React.Component {
componentDidMount() {
const journal = this.props.match.params.journalUid;
- store.store.dispatch(fetchEntries(this.props.etesync, journal));
+ store.dispatch(fetchEntries(this.props.etesync, journal));
}
render() {
@@ -122,7 +102,7 @@ class JournalView extends React.Component {
}
}
-const mapStateToProps = (state: store.StoreState, props: PropsType) => {
+const mapStateToProps = (state: StoreState, props: PropsType) => {
return {
journals: state.cache.journals,
entries: state.cache.entries,
diff --git a/src/store.tsx b/src/store.tsx
index c821804..1da6bf8 100644
--- a/src/store.tsx
+++ b/src/store.tsx
@@ -52,7 +52,7 @@ export interface StoreState {
};
}
-export function credentialsSuccess(creds: CredentialsData) {
+function credentialsSuccess(creds: CredentialsData) {
return {
type: Actions.FETCH_CREDENTIALS,
status: FetchStatus.Success,
@@ -60,14 +60,14 @@ export function credentialsSuccess(creds: CredentialsData) {
};
}
-export function credentialsRequest() {
+function credentialsRequest() {
return {
type: Actions.FETCH_CREDENTIALS,
status: FetchStatus.Request,
};
}
-export function credentialsFailure(error: Error) {
+function credentialsFailure(error: Error) {
return {
type: Actions.FETCH_CREDENTIALS,
status: FetchStatus.Failure,
@@ -75,7 +75,33 @@ export function credentialsFailure(error: Error) {
};
}
-export function journalsSuccess(value: JournalsData) {
+export function fetchCredentials(username: string, password: string, encryptionPassword: string, server: string) {
+ const authenticator = new EteSync.Authenticator(server);
+
+ return (dispatch: any) => {
+ dispatch(credentialsRequest());
+
+ authenticator.getAuthToken(username, password).then(
+ (authToken) => {
+ const creds = new EteSync.Credentials(username, authToken);
+ const derived = EteSync.deriveKey(username, encryptionPassword);
+
+ const context = {
+ serviceApiUrl: server,
+ credentials: creds,
+ encryptionKey: derived,
+ };
+
+ dispatch(credentialsSuccess(context));
+ },
+ (error) => {
+ dispatch(credentialsFailure(error));
+ }
+ );
+ };
+}
+
+function journalsSuccess(value: JournalsData) {
return {
type: Actions.FETCH_JOURNALS,
status: FetchStatus.Success,
@@ -83,14 +109,14 @@ export function journalsSuccess(value: JournalsData) {
};
}
-export function journalsRequest() {
+function journalsRequest() {
return {
type: Actions.FETCH_JOURNALS,
status: FetchStatus.Request,
};
}
-export function journalsFailure(error: Error) {
+function journalsFailure(error: Error) {
return {
type: Actions.FETCH_JOURNALS,
status: FetchStatus.Failure,
@@ -98,7 +124,26 @@ export function journalsFailure(error: Error) {
};
}
-export function entriesSuccess(journal: string, value: EntriesData) {
+export function fetchJournals(etesync: CredentialsData) {
+ const creds = etesync.credentials;
+ const apiBase = etesync.serviceApiUrl;
+
+ return (dispatch: any) => {
+ dispatch(journalsRequest());
+
+ let journalManager = new EteSync.JournalManager(creds, apiBase);
+ journalManager.list().then(
+ (vals) => {
+ dispatch(journalsSuccess(vals));
+ },
+ (error) => {
+ dispatch(journalsFailure(error));
+ }
+ );
+ };
+}
+
+function entriesSuccess(journal: string, value: EntriesData) {
return {
type: Actions.FETCH_ENTRIES,
status: FetchStatus.Success,
@@ -107,7 +152,7 @@ export function entriesSuccess(journal: string, value: EntriesData) {
};
}
-export function entriesRequest(journal: string) {
+function entriesRequest(journal: string) {
return {
type: Actions.FETCH_ENTRIES,
status: FetchStatus.Request,
@@ -115,7 +160,7 @@ export function entriesRequest(journal: string) {
};
}
-export function entriesFailure(journal: string, error: Error) {
+function entriesFailure(journal: string, error: Error) {
return {
type: Actions.FETCH_ENTRIES,
status: FetchStatus.Failure,
@@ -124,6 +169,26 @@ export function entriesFailure(journal: string, error: Error) {
};
}
+export function fetchEntries(etesync: CredentialsData, journalUid: string) {
+ const creds = etesync.credentials;
+ const apiBase = etesync.serviceApiUrl;
+
+ return (dispatch: any) => {
+ const prevUid = null;
+ dispatch(entriesRequest(journalUid));
+
+ let entryManager = new EteSync.EntryManager(creds, apiBase, journalUid);
+ entryManager.list(prevUid).then(
+ (vals) => {
+ dispatch(entriesSuccess(journalUid, vals));
+ },
+ (error) => {
+ dispatch(entriesFailure(journalUid, error));
+ }
+ );
+ };
+}
+
export function logout() {
return {
type: Actions.FETCH_CREDENTIALS,