💌 A beautiful, fast and fully open source mail client for Mac, Windows and Linux.
Go to file
Juan Tejada 5d837ffd02 feat(undo-send): Add undo send
Summary:
Add ability to undo send. We decided to make undo send completely client side for a couple of reasons. If we rely on send-later for undo-send, we would be giving /all/ send load to our send-later backend. If this increases the send-later load too much, it might cause delays in the regular send-later functionality and potentially other plugins like snooze that run under the same service. We would also need to rely on the network to be able to cancel a send, which would make it unusable offline or hard to debug if that specific request fails for any given reason.

This commit also refactors the way `ComposerExtension.sendActionConfig` works. The method has been renamed and now must return an array of send actions. Also, all of the business logic to handle different send actions registered by extensions has been pieced apart from the SendActionButton and into a new SendActionStore. This also enables undo send to undo custom send actions registered by extensions.
Along the way, this also fixes a pending TODO to show all registered custom send actions in the preferences for choosing the preferred send action for sending.

Undo send works via a task, so in case N1 closes before send goes through, it will still be persisted to the task queue and restored when opened again. Undoing a send means dequeuing this task.

Test Plan: Manual

Reviewers: jackie, bengotow, halla, evan

Reviewed By: bengotow, halla, evan

Differential Revision: https://phab.nylas.com/D3361
2016-10-26 20:40:10 -07:00
apm refactor(env): new NylasEnv global 2015-11-17 16:41:20 -08:00
build build: bump eslint-plugin-import version 2016-10-26 14:29:18 -07:00
docs fix(readme): More Win32-specific instructions 2016-10-12 16:37:04 -07:00
dot-nylas bump(version): 0.4.200 2016-10-26 19:48:22 -04:00
examples Update broken links for guides, docs, and API (#2455) 2016-06-15 15:29:52 -07:00
flow-typed rm(grim): We’re not using Grim for deprecations 2016-10-25 11:36:20 -07:00
internal_packages feat(undo-send): Add undo send 2016-10-26 20:40:10 -07:00
keymaps fix(keymaps): Correctly map mod+z to undo, instead of just z (#2663) 2016-09-16 13:21:52 -07:00
menus fix(menus): Add missing Window menu to win32 and linux 2016-06-10 11:55:59 -07:00
script feat(win32): Allow N1 to become the system-wide mailto: handler 2016-10-12 16:05:36 -07:00
spec feat(undo-send): Add undo send 2016-10-26 20:40:10 -07:00
spec_integration fix(spec): remove unnecessary messages & prevent extra hot window 2016-09-29 09:52:51 -05:00
src feat(undo-send): Add undo send 2016-10-26 20:40:10 -07:00
static feat(undo-send): Add undo send 2016-10-26 20:40:10 -07:00
.eslintrc Update grunt tasks to lint and transpile es6 code using babel 2015-11-06 17:40:42 -08:00
.flowconfig feat(flow): Add Flow to Nylas N1 2016-10-24 22:44:16 -04:00
.gitignore feat(SFDC): Initial SFDC commit 2016-10-26 19:46:54 -04:00
.gitmodules feat(package): fix build-resources-task and move submodule 2016-04-25 16:01:56 -07:00
.travis.yml feat(travis): add ci-build/.* wildcard to building branches 2016-08-29 17:43:24 -07:00
appveyor.yml feat(win32): Allow N1 to become the system-wide mailto: handler 2016-10-12 16:05:36 -07:00
CHANGELOG.md update(changelog): 0.4.59 2016-10-24 14:13:58 -07:00
CONFIGURATION.md feat(self-hosting): Add onboarding flow for self-hosted sync engine 2016-07-21 14:25:30 -07:00
CONTRIBUTING.md fix(readme): Improve Win32 build instructions 2016-10-12 16:30:03 -07:00
ISSUE_TEMPLATE.md Update ISSUE_TEMPLATE.md 2016-07-23 13:03:38 -07:00
keymap.json fix(config): Move all reads / writes to the main process 2016-05-16 16:38:46 -05:00
LICENSE.md fix(license): Swap ref to GPLv3 with the whole thing so GitHub picks it up 2016-10-15 10:48:44 -07:00
N1.sh fix(N1.sh): Allow path to working copy to have spaces 2016-09-16 08:38:52 -07:00
package.json bump(version): 0.4.200 2016-10-26 19:48:22 -04:00
README.md Fixing broken screenshot link (#2911) 2016-10-06 18:48:12 -07: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)

Want help build the future of email? Nylas is hiring!

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. On Arch Linux, you can install n1 or n1-git from the aur.

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 five 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.

Themes

The Nylas N1 user interface is styled using CSS, which means it's easy to modify and extend. N1 comes stock with a few beautiful themes, and there are many more which have been built by community developers

Bundled Themes

Community Themes

To install community themes:

  1. Download and unzip the repo
  2. In Nylas N1, select Developer > Install a Package Manually...
  3. Navigate to where you downloaded the theme and select the root folder. The theme is copied into the ~/.nylas folder for your convinence
  4. Select Change Theme... from the top level menu, and you'll see the newly installed theme. That's it!

Want to dive in more? Try creating your own theme!

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.)

Bundled Plugins

Great starting points for creating your own plugins!

Community Plugins

Note these are not tested or officially supported by Nylas, but we still think they are really cool! If you find bugs with them, please open GitHub issues on their individual project pages, not the N1 repo page. Thanks!

When you install packages, they're moved to ~/.nylas/packages, and N1 runs apm install on the command line to fetch dependencies listed in the package's package.json

Configuration

You can configure N1 in a few ways—for instance, pointing it to your self-hosted instance of the sync engine or changing the interface zoom level. Learn more about how.

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.