commit 50d0cfb87c
Author: Ben Gotow <bengotow@gmail.com>
Date: Fri May 27 14:01:49 2016 -0700
IdentityStore conveniene methods for subscription state
commit 80c3c7b956
Author: Ben Gotow <bengotow@gmail.com>
Date: Fri May 27 12:03:53 2016 -0700
Periodically refresh identity, show expired notice in top bar
commit 5dc39efe98
Merge: 4c4f463906ea74
Author: Juan Tejada <juans.tejada@gmail.com>
Date: Thu May 26 15:17:46 2016 -0700
Merge branch 'bengotow/n1-pro' of github.com:nylas/N1 into bengotow/n1-pro
commit 4c4f463f4b
Author: Juan Tejada <juans.tejada@gmail.com>
Date: Thu May 26 15:16:48 2016 -0700
Hijack links inside email that go to billing site and add SSO to them
commit 906ea74807
Author: Ben Gotow <bengotow@gmail.com>
Date: Thu May 26 12:02:29 2016 -0700
Add custom welcome page for upgrading users
commit 2ba9aedfe9
Author: Juan Tejada <juans.tejada@gmail.com>
Date: Wed May 25 17:27:12 2016 -0700
Add styling to Subscription tab in prefs
commit 384433a338
Author: Ben Gotow <bengotow@gmail.com>
Date: Wed May 25 16:21:18 2016 -0700
Add better style reset, more IdentityStore changes
commit c4f9dfb4e4
Author: Ben Gotow <bengotow@gmail.com>
Date: Wed May 25 15:29:41 2016 -0700
Add subscription tab
commit bd4c25405a
Author: Ben Gotow <bengotow@gmail.com>
Date: Wed May 25 14:18:40 2016 -0700
Point to billing-staging for now
commit 578e808bfc
Author: Ben Gotow <bengotow@gmail.com>
Date: Wed May 25 13:30:13 2016 -0700
Rename account helpers > onboarding helpers
commit dfea0a9861
Author: Ben Gotow <bengotow@gmail.com>
Date: Wed May 25 13:26:46 2016 -0700
A few minor fixes
commit 7110217fd4
Author: Ben Gotow <bengotow@gmail.com>
Date: Wed May 25 12:58:21 2016 -0700
feat(onboarding): Nylas Pro onboarding overhaul
Summary:
Rip out all invite-related code
Enable Templates and Translate by default
Scrub packages page, unused code in onboarding pkg
Remove resizing
New onboarding screens
IMAP provider list, validation
Call success with response object as well
Renaming and tweaks
Test Plan: No tests yet
Reviewers: evan, juan, jackie
Differential Revision: https://phab.nylas.com/D2985
commit dc9ea45ca9
Author: Ben Gotow <bengotow@gmail.com>
Date: Wed May 25 12:52:39 2016 -0700
Renaming and tweaks
commit 5ca4cd31ce
Author: Ben Gotow <bengotow@gmail.com>
Date: Wed May 25 11:03:57 2016 -0700
Call success with response object as well
commit 45f14f9b00
Author: Ben Gotow <bengotow@gmail.com>
Date: Tue May 24 18:26:38 2016 -0700
IMAP provider list, validation
commit c6ca124e6e
Author: Ben Gotow <bengotow@gmail.com>
Date: Sat May 21 11:14:44 2016 -0700
New onboarding screens
commit dad918d926
Author: Ben Gotow <bengotow@gmail.com>
Date: Thu May 19 16:37:31 2016 -0700
Remove resizing
commit ecb1a569e2
Author: Ben Gotow <bengotow@gmail.com>
Date: Thu May 19 16:36:04 2016 -0700
Scrub packages page, unused code in onboarding pkg
commit 3e0a44156c
Author: Ben Gotow <bengotow@gmail.com>
Date: Thu May 19 16:33:12 2016 -0700
Enable Templates and Translate by default
commit 0d218bc86f
Author: Ben Gotow <bengotow@gmail.com>
Date: Thu May 19 16:30:47 2016 -0700
Rip out all invite-related code
Summary:
- Fixes several selection and focus issues along the way
- Can now preview what tokens will look like when not editing
- Adds decorator to listen to mail merge session changes and removes a bunch of duplicated code
- Gets rid of all imperative code (and specs) that had to imperatively
reach into the dom to update the tokens
Test Plan: - Unit tests
Reviewers: bengotow, evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2989
Summary:
This diff introduces several updates to mail merge to improve the procedure for sending a list of drafts.
Specifically, sending mass email will now:
- Clear mail merge metadata on the drafts that will actually be sent
- Upload attached files only /once/, and reuse those files on the drafts that will actually be sent
- Minimize database writes for new drafts being created
- Will queue a SendManyDraftsTask that will subsequently queue the necessary SendDraftTasks and keep track of them, and notify of any failed tasks
TODO:
- Add state to MailMerge plugin for failed sends and ability to attempt to re send them
Test Plan: - TODO
Reviewers: evan, bengotow, jackie
Reviewed By: bengotow, jackie
Subscribers: jackie
Differential Revision: https://phab.nylas.com/D2973
Summary:
SEE ASSOCIATED SUBMODULE DIFF
This enables rich React components (like the Scheduler's `NewEventCard`)
to be used in contenteditables.
We introduce the concept of an "Overlaid Component". These are rendered
React components that are absolutely positioned on top of an equivalent
"Anchor" in a contenteditable.
Inside the contenteditable are special `<img />` tags that have an
id corresponding to a particular rich overlaid component. This way, even
if those img tags are cut and pasted or moved, they'll have a mapping to a
particular component stored in the `OverlaidComponentStore`. Img tags
are fairly well handled natively by contenteditable and allow you to
maniuplate these overlaid components as normal text elements.
The `OverlaidComponentStore` is responsible for listening to and managing
the state of the Anchors and their equivalent OverlaidComponents.
We use a decorator called `ListenToChanges` that allows us to wrap
components to update their corresponding anchor. Since we need to know
about ALL changes that could affect rendered height and width, we need to
use a `MuatationListener` instead of the React render cycle.
This is only the initial diff. There are several TODOs here:
https://paper.dropbox.com/doc/Composer-Overlaid-Components-FoZrF0cFggzSUZirZ9MNo
Test Plan: TODO. Manual
Reviewers: juan, bengotow
Reviewed By: juan
Differential Revision: https://phab.nylas.com/D2946
Summary:
- Simplify undoManager to just maintain the undo/redo history items
- DraftEditingSession manages snapshotting state of draft, hack allows it to also save selection (still hoping to eventually put selection in body HTML as markers)
- Switch from `debounce` to `throttle` style behavior so typing for along time followed by undo doesn't undo away your entire block.
This resolves two issues:
+ Changes to participant fields are no longer undoable because they go straight to the session.
+ Changes to metadata weren't undoable.
Test Plan: Tests WIP
Reviewers: evan, juan
Reviewed By: juan
Differential Revision: https://phab.nylas.com/D2956
- Will wait for categories to be ready before attempting to focus the
inbox for the new account, preventing a blank screen when a new account
is added
- Add temprary action to set the collapsed state of a sidebar action
after adding a new account
- Adds a piece of global state that will be persisted to
`NylasEnv.savedState` indicating wether the accounts for the sidebar
should be reset whenever the FocusedPerspective changes
- #2257
Summary:
Add basic globally accessible performance monitoring.
Allows us to measure load times for composer windows (or whatever else we
want) and view the data as a Histogram on Mixpanel
Test Plan: manual
Reviewers: bengotow, juan
Reviewed By: juan
Differential Revision: https://phab.nylas.com/D2965
- This error was still being thrown for a large number of accounts,
despite the fact that the N1-Snoozed category was being created
- This error was happening when adding a new account which did not already have a
snooze category in the backend:
- When the account is added the AccountStore triggers more than once,
causing the SnoozeStore to send more than one request to create the
same category. Any request after the first one will fail because the
category already exists
- The fix is not try to create a category unless the accounts have
actually changed
Summary:
Moves all reading / writing of config file to the main process,
to avoid needing to write code to lock across processes. This should also
be more efficient than re-loading the file in all processes when it's
saved.
Test Plan: Run tests
Reviewers: evan, jackie
Reviewed By: evan, jackie
Differential Revision: https://phab.nylas.com/D2963
Summary:
Adds ability to drop tokens in subject via a custom rendered subject field which
renders a contenteditable instead of an input.
Decided to completely replace the subject field via injected components for a
few resons:
- That's the way we are currently extending the functionality of the participant fields, so it keeps the plugin code consistent (at the cost of potentially more code)
- Completely replacing the subject for a contenteditable means we hace to do extra work to clean up the html before sending.
- Reusing our Contenteditable.cjsx class for the subject is overkill, but using a vanilla contenteditable meant duplicating a bunch of the code in that class if we want to add
Test Plan: Unit tests
Reviewers: bengotow, evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2949
Summary:
- Add some docs to Table components
- Updates Table components to use a TableDataSource instead of accessing arrays, cleans up code a bit
- Add enzyme lib to have a cleaner and simpler api to write tests for React Components
- Updates decorators to extend from the BaseComponent instead of vanilla Component, this way instance methods are still available on composed components
Test Plan: - Unit tests
Reviewers: evan, bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2941
* Added Less Is More Theme to internal-packages and README.md
* fixed Less Is More title in README.md
* removed units for values of zero
* updated readme, package title fix, theme topbar fix, message list adjustments
object-shorthand got turned off. We think it's fine to say {foo: foo} if
you want
quote-props is error consistent as neeeded.
Use custom file-by-file rules for global-require
- This prevented emoji selection via the popover from working on a new
window because the plugin is loaded after the contenteditable sets up
the action listeners, so we need to re set them on update
Summary:
- Remove nylas-long-connection.coffee duplicate code from sync worker package
and replace with delta-streaming-connection which uses NylasAPI.longConnection
- Replacement for XHR will come in another diff -- still need to clean up and
fix some edge cases
Test Plan:
- TODO! Will add test coverage for NylasLongConnection and
DeltaStreamingConnection
Reviewers: evan, bengotow
Reviewed By: evan, bengotow
Differential Revision: https://phab.nylas.com/D2875
Summary: This is mostly config changes.
Test Plan: Tested the Google OAuth flow.
Reviewers: bengotow, drew
Reviewed By: bengotow, drew
Differential Revision: https://phab.nylas.com/D2907
Summary: Adds CSV imports, proper styles to mail merge plugin and fixes a handful of bugs
Test Plan: TODO
Reviewers: bengotow, evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2925
Office 365 likes to format email addresses as follows:
Last Name, First Name (Some Description) <email@address.org>
This causes Contact.firstName() (and hence sometimes displayName()) to return
"Last Name," which looks a bit odd in the message/thread views.
The intent of the commit is to correctly parse these names so that (using the
above example):
- firstName = "First Name"
- lastName = "Last Name (Some Description)"
- fullName = "First Name Last Name (Some Description)"
These behavioral changes only impact names containing a ','.
I don't know that this really provides exhaustive coverage of Office 365, and
keeping the description as part of the last name is not completely guilt free,
but it's not any worse than the previous state of affairs which also has
the description in the same field but combined instead with (misplaced)
first name data.
Summary:
Keymaps & menus CSON => JSON, remove AtomKeymaps, CommandRegistry use of CSS selectors, use Mousetrap instead
Important Notes:
- The `application:` prefix is reserved for commands which are handled in the application process. Don't use it for other things. You will not receive the events in the window.
- Maintaining dynamic menus seems to come with quite an overhead, because Electron updates the entire menu every time. In the future, we'll need https://github.com/electron/electron/issues/528 to really make things nice. I will be tracking this upstream.
- The format for keyboard shortcuts has changed. `cmd-X` is now `command+shift+x`
Test Plan: Run tests
Reviewers: juan, evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2917
Summary:
Adds Mail Merge Plugin
- Adds new table components to component kit
- Adds new extension points to allow dragging and dropping into composer contenteditable and participant fields and customizing participant fields
- Adds new decorators and other misc updates
- #1608
Test Plan: TODO
Reviewers: bengotow, evan
Reviewed By: bengotow, evan
Differential Revision: https://phab.nylas.com/D2895
Summary:
Adds an activity list view that shows message opens and link clicks in a
chronological feed.
TODO: Add badge for unread notifications and different styling for read/unread
notifications. Click item to jump to corresponding thread.
Test Plan: TODO.
Reviewers: evan, bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2915
Summary:
This diff is designed to dramatically speed up new window load time for
all window types and reduce memory consumption of our hot windows.
Before this diff, windows loaded in ~3 seconds. They now boot in a couple
hundred milliseconds without requiring to keep hot windows around for
each and every type of popout window we want to load quickly.
One of the largest bottlenecks was the `require`ing and initializing of
everything in `NylasExports`.
I changed `NylasExports` to be entirely lazily-loaded. Drafts and tasks
now register their constructors with a `StoreRegistry` and the
`TaskRegistry`. This lets us explicitly choose a time to activate these
stores in the window initalization instead of whenever nylas-exports
happens to be required first.
Before, NylasExports was required first when components were first
rendering. This made initial render extremely slow and made the proposed
time picker popout slow.
By moving require into the very initial window boot, we can create a new
scheme of hot windows that are "half loaded". All of the expensive
require-ing and store initialization is done. All we need to do is
activate the packages for just the one window.
This means that the hot window scheme needs to fundamentally change from
have fully pre-loaded windows, to having half-loaded empty hot windows
that can get their window props overridden again.
This led to a major refactor of the WindowManager to support this new
window scheme.
Along the way the API of WindowManager was significantly simplifed.
Instead of a bunch of special-cased windows, there are now consistent
interfaces to get and `ensure` windows are created and displayed. This
DRYed up a lot of repeated logic around showing or creating core windows.
This also allowed the consolidation of the core window configurations into
one place for much easier reasoning about what's getting booted up.
When a hot window goes "live" and gets populated, we simply change the
`windowType`. This now re-triggers the loading of all of the packages for
the window. All of the loading time is now just for the packages that
window requires since core Nylas is there thanks to the hot window
mechanism.
Unfortunately loading all of the packages for the composer was still
unnaceptably slow. The major issue was that all of the composer plugins
were taking a long time to process and initialize. The solution was to
have the main composer load first, then trigger another window load
settings change to change the `windowType` that loads in all of the
plugins.
Another major bottleneck was the `RetinaImg` name lookup on disk. This
requires traversing the entire static folder synchronously on boot. This
is now done once when the main window loads and saved in a cache in the
browser process. Any secondary windows simply ask the backend for this
cache and save the filesystem access time.
The Paper Doc below is the current set of manual tests I'm doing to make
sure no window interactions (there are a lot of them!) regressed.
Test Plan: https://paper.dropbox.com/doc/Window-Refactor-UYsgvjgdXgVlTw8nXTr9h
Reviewers: juan, bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2916