import * as React from 'react'; import { History } from 'history'; import { List, ListItem } from '../widgets/List'; import * as EteSync from '../api/EteSync'; import { routeResolver } from '../App'; import { JournalsData, UserInfoData, CredentialsData } from '../store'; class JournalsList extends React.PureComponent { props: { etesync: CredentialsData; journals: JournalsData; userInfo: UserInfoData; history: History; }; constructor(props: any) { super(props); this.journalClicked = this.journalClicked.bind(this); } render() { const derived = this.props.etesync.encryptionKey; let asymmetricCryptoManager: EteSync.AsymmetricCryptoManager; const journalMap = this.props.journals.reduce( (ret, journal) => { let cryptoManager: EteSync.CryptoManager; if (journal.key) { if (!asymmetricCryptoManager) { const userInfo = this.props.userInfo; const keyPair = userInfo.getKeyPair(new EteSync.CryptoManager(derived, 'userInfo', userInfo.version)); asymmetricCryptoManager = new EteSync.AsymmetricCryptoManager(keyPair); } const derivedJournalKey = asymmetricCryptoManager.decryptBytes(journal.key); cryptoManager = EteSync.CryptoManager.fromDerivedKey(derivedJournalKey, journal.version); } else { cryptoManager = new EteSync.CryptoManager(derived, journal.uid, journal.version); } let info = journal.getInfo(cryptoManager); ret[info.type] = ret[info.type] || []; ret[info.type].push( this.journalClicked(journal.uid)}> {info.displayName} ({journal.uid.slice(0, 5)}) ); return ret; }, { CALENDAR: [], ADDRESS_BOOK: [], TASKS: [] }); return ( ); } private journalClicked(journalUid: string) { this.props.history.push(routeResolver.getRoute('journals._id', { journalUid: journalUid })); } } export default JournalsList;