💌 A beautiful, fast and fully open source mail client for Mac, Windows and Linux.
Find a file
Evan Morikawa d4ef6a20e5 feat(sidebar): Add thread list of currently selected participants
Summary:
WIP. I added a collection index to make displaying the threads of a
currently selected participant on the sidebar easy and fast.

The problem is that the `participants` of a thread, while a collection of
`Contact` objects, have no "ids" for those contact objects.

One idea was to create the join table but access contacts by email instead
of id. This required a minor change to the way the data is entered in the
join table.

This means the sidebar can now simply do:

`DatabaseStore.findAll(Thread).where(Thread.attributes.participants.contains('foo@bar.com'))`

While I didn't for this initial test, we could also/instead create the
`Message-Contact` join table. The trick about a Message-Contact table is
that I believe we'd have to create additional columns further specifying
which field we're interested in.

The following two queries:

`DatabaseStore.findAll(Message).where(Message.attributes.to.contains('foo@bar.com'))`

`DatabaseStore.findAll(Message).where(Message.attributes.from.contains('foo@bar.com'))`

would require additional columns in the `Message-Contact` join table
because currently the only columns are `id` and `value`.

In the case of the sidebar use case, I think the Thread participants is
what you want to see anyway.

Unfortunately an email-centric scheme can't distinguish between
`noreply@phab.com <Evan>` and `noreply@phab.com <Juan>`. I actually think
this may be a good thing since I think most people think in terms of email
address as the unique key anyway and for the use case of showing related
emails in the sidebar I'd rather overshow than undershow.

This solution seems to be working pretty well in initial testing, but I
want to see if you guys can think of anything this may subtly screw up
down the line, or if you can think of a simpler way to do this.

Test Plan: todo

Reviewers: juan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2687
2016-03-09 14:33:31 -05:00
apm refactor(env): new NylasEnv global 2015-11-17 16:41:20 -08:00
build bump(asar): 0.10, use ordering feature we PR'd [TEST CI] 2016-03-08 15:21:28 -08:00
docs rm(Nilas-contact-elements): Remove unused package 2016-02-01 19:12:06 -08:00
dot-nylas feat(keymap): add new <KeymapHandlers /> 2015-11-06 11:47:06 -08:00
examples rm(mispelled): Stranded package.json file 2016-01-07 14:59:10 -08:00
internal_packages feat(sidebar): Add thread list of currently selected participants 2016-03-09 14:33:31 -05:00
keymaps Merge pull request #1506 from nylas/osx-shortcuts-improvement 2016-03-08 14:14:02 -08:00
menus feat(theme-picker): Add visual theme picker to menu 2016-03-04 15:34:48 -08:00
script build(32-bit): Move a few docker files out of root of repo 2016-03-03 17:03:14 -08:00
spec remove(popover): Remove Popover in favor of FixedPopover 2016-03-09 10:05:46 -08:00
spec_integration 🎨: Smaller buttons, smaller toolbar, smaller text 2016-02-09 19:45:24 -08:00
src feat(sidebar): Add thread list of currently selected participants 2016-03-09 14:33:31 -05:00
static remove(popover): Remove Popover in favor of FixedPopover 2016-03-09 10:05:46 -08:00
.eslintrc Update grunt tasks to lint and transpile es6 code using babel 2015-11-06 17:40:42 -08:00
.gitignore feat(spec): add config dir to integration specs 2015-12-10 10:52:20 -05:00
.gitmodules feat(build): add nylas build resources 2015-12-02 13:59:54 -08:00
.travis.yml fix(travis): fewer builds 2016-02-25 17:04:32 -08:00
appveyor.yml fix(appveyor): check if the decryption password env variable is set 2015-12-21 20:51:04 -05:00
CHANGELOG.md bump(version): 0.4.10 and changelog 2016-02-26 16:45:21 -08:00
CONTRIBUTING.md Example Update 2016-02-27 11:40:39 -05:00
ISSUE_TEMPLATE.md fix(issue-template): Update formatting 2016-02-18 11:05:13 -08:00
LICENSE.md meta(license): Add GPLv3 License 2015-10-01 10:23:42 -07:00
N1.sh fix(launch): convert Atom's launch script for N1 2016-03-02 17:47:47 -08:00
package.json bump(version): 0.4.12 beta 2016-03-08 18:33:24 -08:00
README.md update(readme): Add Material 2016-03-08 15:51:11 -08:00

N1 Logo

N1 Screenshot

N1 is an open-source mail client built on the modern web with Electron, React, and Flux. It is designed to be extensible, so it's easy to create new experiences and workflows around email. N1 is built on the Nylas Sync Engine which is also open source free software.

Build Status Slack Invite Button ![GitHub issues On Deck](https://badge.waffle.io/nylas/N1.png?label=on deck&title=On Deck)

Download N1

You can download compiled versions of N1 for Windows, Mac OS X, and Linux (.deb) from https://nylas.com/N1. You can also build and run N1 on Fedora. A Fedora distribution is coming soon!

Build A Plugin

Plugins lie at the heart of N1 and give it its powerful features. Building your own plugins allows you to integrate the app with other tools, experiment with new workflows, and more. Follow the Getting Started guide to write your first plugin in 5 minutes. To create your own theme, go to our Theme Starter guide.

If you would like to run the N1 source and contribute, check out our contributing guide.

Plugin List

We're working on building a plugin index that makes it super easy to add them to N1. For now, check out the list below! (Feel free to submit a PR if you build a plugin and want it featured here.)

Themes

Create your own theme!

Composer
  • Translate — Works with 10 languages
  • Quick Schedule — Show your availability to schedule a meeting with someone
  • Quick Replies — Send emails faster with templates
  • Send Later — Schedule your emails to be sent at a later time
  • Open Tracking — See if your emails have been read
  • Link Tracking — See if your links have been clicked
  • Emoji Keyboard — Insert emojis by typing a colon (:) followed by the name of an emoji symbol
  • Jiffy — Insert animated GIFs
  • In Development: Cypher (PGP Encryption)
Sidebar
Navbar
Threadlist
Messages

Running Locally

By default the N1 source points to our hosted version of the Nylas Sync Engine; however, the Sync Engine is open source and you can run it yourself.

Feature Requests / Plugin Ideas

Have an idea for a package, or a feature you'd love to see in N1? Check out our public Trello board to contribute your thoughts and vote on existing ideas.