Summary:
atom-window `sendMessage` was not the same as `browserWindow.webContents.send`. WTF.
Save current namespace to config.cson so that it is never null when window opens
Don't re-create thread view on namespace change unless the namespace has changed
Tests for NamespaceStore state
Push worker immediately in workerForNamcespace to avoid creating two connections per namespace
Allow \n to be put into sreaming buffer, but only one
Clear streaming buffer when we're reconnecting to avoid processing same deltas twice (because of 400msec throttle)
Make `onProcessBuffer` more elegant—No functional changes
Test Plan: Run tests!
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1551
Summary: Resolves T1241
Test Plan: No tests to run - all CSS!
Reviewers: evan
Reviewed By: evan
Maniphest Tasks: T1241
Differential Revision: https://review.inboxapp.com/D1510
Summary:
Focused Content Store should notify observers when focused items change, not just when they're reassigned
Popovers should have a `direction` and optional event onOpened
Menu divider documentation was wrong, menus should support checked items by default
Pressing escape in a popover's input should dismiss the popover
Other changes
Remove specs that make no sense anymore
Small tweak to report build breaking. Shouldn't happen often ;)
Test Plan: Run tests, which will now phone home if they break
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1493
Summary:
Loads the current user to pre-populate the Salesforce field in the
creators
add tabindex to tokenizing text fields
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1468
Summary:
This diff gives the ComponentRegistry a cleaner, smaller API. Instead of querying by name, location or role,
it's now just location and role, and you can register components for one or more location and one or more
roles without assigning the entries in the registry separate names.
When you register with the ComponentRegistry, the syntax is also cleaner and uses the component's displayName
instead of requiring you to provide a name. You also provide the actual component when unregistering, ensuring
that you can't unregister someone else's component.
InjectedComponent and InjectedComponentSet now wrap their children in UnsafeComponent, which prevents
render/component lifecycle problems from propogating.
Existing components have been updated:
1. maxWidth / minWidth are now containerStyles.maxWidth/minWidth
2. displayName is now required to use the CR.
3. containerRequired = false can be provided to exempt a component from being wrapped in an UnsafeComponent.
This is useful because it's slightly faster and keeps DOM flat.
This diff also makes the "Show Component Regions" more awesome. It displays column regions, since they now
use the InjectedComponentSet, and also shows for InjectedComponent as well as InjectedComponentSet.
Change ComponentRegistry syntax, lots more work on safely wrapping items. See description.
Fix for inline flexbox scenarios (message actions)
Allow ~/.inbox/packages to be symlinked to a github repo
Test Plan: Run tests!
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1457
Summary: fix(query): .count() queries are apparently coming back as strings. Never let this happen
Test Plan: Run 1 new test
Reviewers: evan
Reviewed By: evan
Subscribers: ktalwar
Differential Revision: https://review.inboxapp.com/D1441
Summary:
tests on the schemas
build input elements
form builder pulls data
grouping by row
salesforce object store
salesforce api logic
successfully pulling salesforce objects into db
object store saving to db
refactoring tokenizing text field
full documented tokenizing text field with specs
linking in object picker component
converting generated form to a controlled input
form change handlers for controlled inputs
Salesforce object creator store
new way of opening windows
removed atom.state.mode
create new salesforce object creator in new window
form creator loading in popup with generated form
generated form renders select and multiselcet and textarea
add checkbox
creating related objects
windnows know when others close
remove debugger statements
form submission
converting data for salesforce posting
hot window loading
new hot window registration
hot loading windows
actions for listening to salesforce objects created
generated form errors
error handling for salesforce object creator
rename saleforce object form store
display errors to form
submitting state passed through
properly posts objects to Salesforce
change name to salesforce object form
add deep clone
use formItemEach
styling for Salesforce form creator
salesforce required fields come back and populate form
generated form loads related objects into fields
remove console logs and fix sales schema adapter test
fix task queue and formbuilder specs
fix action bridge spec
fix tokenizing text field spec
fix draft store and tokenizing proptypes
fix linter issues
fix tokenizing text field bug
rename to refresh window props
remove console.log
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1425
Summary:
This is a small diff that isolates the pattern of "insert all the things with role=ThreadAction and pass them these props". The goal is to eventually make this wrapper do some analysis, performance checks, etc. Right now, it just has the advantage of making the parent components simpler and also adding a new inspector view where you can see the regions , their names and the props they take (thread:<Thread> or selection:<ModelListSelection>)
fix(menu): Re-importing different class with same name breaking dropdowns
make composer use flexbox for it's footer
fix alignment of the input in the participant text field. how did this break?
new action for hiding / showing component regions
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1422
Summary:
fix(scrollbars): overflow-y, not overflow
fix(participants): Overflow not set correctly on participants
fix(thread-list): Don't show reply or fw icon for unsent drafts
Remove bad code for updating sidebar drafts
Mark as read in MessageStore so that receiving new messages while viewing a thread re-marks it as read
Don't show messages I send with the "Reply" icon
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1418
Summary:
Remember to remove all the event listeners added to email frame
New files tab, queryable filename, not attribute
Rename ThreadSelectionBar to RootSelectionBar to go with RootCenterComponent, make it appear for draft selection and file selection as well
Initial file list and file list store, File Location
Remove unnecessary shouldComponentUpdate
Always track whether new requests have happened since ours to prevent out of order triggers
Always scroll to the current [focused/keyboard-cursor] in lists
So goodbye to the trash tag
Only scroll to current item if focus or keyboard has moved
Show message snippet in notification if no subject line
Make the RootSelectionBar pull items from Component Registry
New Archive button (prettier than the other one)
Refactor event additions to iframe so iframe can be used for file display also
Thread List is no longer the uber root package - drafts and files moved to separate packages
WorkspaceStore now allows packages to register sheets, "view" concept replaced with "root sheet" concept, "mode" may not be observed by all sheets, and is now called "preferred mode"
Don't animate transitions between two root sheets
Mode switch is only visible on root sheets that support multiple modes
Account sidebar now shows "Views" that have registered themselves: drafts and files for now
Model Selection Bar is now a component, just like ModelList. Meant to be in the toolbar above a Model List
Misc supporting changes
New files package which registers it's views and components
Rename files package to `file-list`
Move checkmark column down into model list
Don't throw exception if shift-down arrow and nothing selected
Takes a long time on login to fetch first page of threads, make pages smaller
Displaynames, spec fixes
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1412
Summary:
This diff provides multi-selection in the thread list powered by a new ModelList component that implements selection on top of ListTabular (or soon another List component). It includes business logic for single selection, shift selection, command-click selection, etc.
This diff also improves the performance of DatabaseView by assessing whether updates are required based on specific database changes and skipping queries in many scenarios.
WIP
WIP
Move selection into modelView instead of store
WIP
Preparing to convert to ModelList mixin
Make ThreadStore => ThreadListStore
Break the DraftStore in two (new DraftListStore) to avoid keeping all drafts in all windows
Get rid of unread instance variable in favor of getter that falls through to isUnread()
Much smarter logic in DatabaseView to prevent needless queries (especially counts and full invalidation of retained range)
Squashed commit of the following:
commit 486516b540e659735675765ca8b20d8a107ee2a9
Author: Ben Gotow <bengotow@gmail.com>
Date: Tue Apr 7 17:30:23 2015 -0700
Invalidate the retained range debounced
commit 7ac80403f52d108696c555f79c4c687d969f0228
Author: Ben Gotow <bengotow@gmail.com>
Date: Tue Apr 7 17:30:16 2015 -0700
Wait until after the view updates to move focus
commit 88d66eb19a9710847ff98bea22045bb686f30cc6
Author: Ben Gotow <bengotow@gmail.com>
Date: Tue Apr 7 17:28:01 2015 -0700
Bail out early when loading data if a reload has been requested
commit a49bedc44687040f7c675ff298376917a0b5fdcb
Author: Ben Gotow <bengotow@gmail.com>
Date: Tue Apr 7 16:38:58 2015 -0700
Log query data when in a query is being logged
commit c64a9e02f9072fd30edb98c45be581d6ac00c48a
Author: Ben Gotow <bengotow@gmail.com>
Date: Tue Apr 7 16:38:45 2015 -0700
Mark thread and messages as read in parallel instead of in sequence
commit 4b227100a795e20257cda0d60b00cc75b0000b0f
Author: Ben Gotow <bengotow@gmail.com>
Date: Tue Apr 7 16:38:32 2015 -0700
Don't load tags with hardcoded IDs from the database, and load them in parallel instead of in sequence
commit aeb7f1d646786cfa1c247fe78ce5467da07c4446
Author: Ben Gotow <bengotow@gmail.com>
Date: Tue Apr 7 16:37:54 2015 -0700
Pass objects instead of ids to thread methods—since we always have the most current thread anyway, this makes things a bit faster
commit e70889d1d05ece81a081b8b3f27b62491429b6f9
Author: Ben Gotow <bengotow@gmail.com>
Date: Mon Apr 6 16:41:49 2015 -0700
[icon] Paper airplanes
Restyle account sidebar, optimize tag count queries a bit more
Fix initialization issue with webkit image mask
Can't compare dates with is/isnt
Assets for check boxes
Bug fixes
Wrap ModelList instead of providing props
Verbose mode for database view
Fix existing specs
Six new specs covering invalidateIfItemsInconsistent
Test Plan: Run 40+ new tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1410
Summary:
NamespaceStore needs to be more careful about triggering unnecessarily
ThreadListParticipants should use minimum set of <span> tags, not one per name
FocusedTagStore triggers only when the tag has actually changed
New InboxSyncWorker is responsible for fetching contacts, calendars, threads
Update the draft list to look like the thread list
ThreadStore now uses a "Database View" to vend items, which will free it up to focus on things like selection soon. The DatabaseView handles pagination and maintains a cache of items in a "retained range" the view needs. It also abstracts the...
..."thread metadata" concept into a general purpose pattern
Thread-list package implements SearchView to match the DatabaseView. Instead of fetching items from the database it uses the search API
Update existing specs
Bug fix
Specs for focused stores
New specs!
Pad search range so we prefetch the next pages
Clear the scroll offset if the view is changed (between tabs)
Test Plan: Run 58 new tests with 110 new assertions!
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1398
Summary:
ThreadStore should be done loading as soon as threads are available
SearchSuggestionStore should use ContactsStore for contact results
Contact Store should not "filter all, take 10" it should only filter until it has 10. It should also check against "Ben Gotow" as well as "Ben" and "Gotow", so I can type "Ben Go"
Sometimes participants are "Ben Gotow <ben@g.com>", "ben@g.com". If we get zero contacts after removing Me, put "Me" back in...
Fix "Update Available" notification, broken reference to `atom.views.getView(atom.workspace)`
A bit more debugging around cursors. Need to handle this case soon.
Only use atomWorkspace if it exists.
Fix for dragging next to / around toolbar window controls
Consolidate the display of Contacts in menus into a single MenuItem subclass
Update Template Popover styling
fetchFromCache should only remove thread loading indicator *IF* it found results in the cache. Doh...
Give the thread list "Name" column a fixed width (mg)
Better styling of message list collapsed mode, rage against user selection and cursor: pointer
Occasionally admin.inboxapp.com returns bogus data
Sebaastian feedback on thread list
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1350
Summary:
This diff uses the new ?expanded=true threads request to fetch threads and the messages inside them at the same time. The messages from this endpoint don't contain bodies. Message bodies have been moved to a new "secondary attribute" type, which can be optionally requested when making queries. This allows us to 1) quickly fetch messages without worrying about MBs of JSON, 2) update messages without updating their bodies, and 3) avoid calls to /messages?thread_id=123. The new message store fetches just the items it wants to display in expanded mode, and we'll show snippets for the rest.
Fix up forwarded message
Approach: Thread.messageMetadata
join approach WIP
join approach complete
"" || null = null. OMG.
Make spinner a bit smarter, use code delays and not css delays
Search suggestion store should only show first 10 matches
Msg collapsing, refactored msg store that will fetch individual messages that are marked as expanded, set loaded = true when it's all done
Test Plan: Tests coming soon. The query refactoring here broke a lot of tests...
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1345
Summary:
fix(keymappings): Enter to focus item, logout works now
Minor fix for some problems with activity bar
Fix tabindex = 1 where tabindex should be =-1
Remove idgen that was causing footers to be replaced
WIP
Draft store extension hooks
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1320
Summary:
There are two known issues:
- toolbar is not draggable in some areas when in three-pane mode.
- archive button appears over very long subjects. Propose moving this button elsewhere.
WIP
WIP
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1311
Summary:
feat(debugging): Put db query tiemstamps in js timelines
Mark as read *after* you stop looking at a message, to avoid pointless repaint while looking
fix specs :'(
Make focus() do something smart if not provided a field name
Stop doing the partial load / full load from cache. Slower, but also means we can evaluate "correct" scroll offset in one pass
refactor message-list to fade in after load. simplifies scroll logic
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1306
Summary: Adds the draft list using a refactored list-tabular class. Also fixes several draft bugs that appeared after allowing editing.
Test Plan: Run tests (need to test new ListTabular component ASAP)
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1272
Summary:
toolbar popup displays
restore caret protection on contenteditable
BAD - can't use cursor saving and restoring with react :(
_findNode works
saves and restores cursor state
contenteditable fixes to support cursor
comments on cursor
initial undo manager
extract undo manager and move up in stack
make undo manager a mixin
adding selection snapshots in composer
fixes in undo manager
selection saves selection states properly
move UndoManager and fix draft
selection state can now select backwards
selection works backwards and click not overridden
change bold class to allow for bolding and unbolding
styling of hover component
can set links in composer
bold and italic clicking works. text seleciton works
show link modal on hover
selection fixes
Test Plan: TODO
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1249
Summary:
Use blockquote, apply gmail's styling
Fix in popout composer so the ... button rests at the bottom
Test Plan: Need to figure out the best strategy for tests here - will write tomorrow
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1197
Summary:
This diff replaces the participant text fields with ones based on TokenizingTextField, a new core
component that handles autocompletion, drag and drop of tokens, etc.
Fix large queries overloading SQLite size limits
New general purpose tokenized text field with token selection, copy paste, etc
Move pre-send logic to the view since DraftStore requests from db, which may not have settled
Tests - still a WIP
Support for contextual menus instead of X
Test Plan: Run new tests. Needs many more, but have higher priority things to fix
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1142
Summary:
Fix bad LESS
Use CJSX glob-to-multiple?
Look for themes in internal_packages
Test Plan: Run build
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1127
Summary:
This diff contains a few major changes:
1. Scribe is no longer used for the text editor. It's just a plain contenteditable region. The toolbar items (bold, italic, underline) still work. Scribe was causing React inconcistency issues in the following scenario:
- View thread with draft, edit draft
- Move to another thread
- Move back to thread with draft
- Move to another thread. Notice that one or more messages from thread with draft are still there.
There may be a way to fix this, but I tried for hours and there are Github Issues open on it's repository asking for React compatibility, so it may be fixed soon. For now contenteditable is working great.
2. Action.saveDraft() is no longer debounced in the DraftStore. Instead, firing that action causes the save to happen immediately, and the DraftStoreProxy has a new "DraftChangeSet" class which is responsbile for batching saves as the user interacts with the ComposerView. There are a couple big wins here:
- In the future, we may want to be able to call Action.saveDraft() in other situations and it should behave like a normal action. We may also want to expose the DraftStoreProxy as an easy way of backing interactive draft UI.
- Previously, when you added a contact to To/CC/BCC, this happened:
<input> -> Action.saveDraft -> (delay!!) -> Database -> DraftStore -> DraftStoreProxy -> View Updates
Increasing the delay to something reasonable like 200msec meant there was 200msec of lag before you saw the new view state.
To fix this, I created a new class called DraftChangeSet which is responsible for accumulating changes as they're made and firing Action.saveDraft. "Adding" a change to the change set also causes the Draft provided by the DraftStoreProxy to change immediately (the changes are a temporary layer on top of the database object). This means no delay while changes are being applied. There's a better explanation in the source!
This diff includes a few minor fixes as well:
1. Draft.state is gone—use Message.object = draft instead
2. String model attributes should never be null
3. Pre-send checks that can cancel draft send
4. Put the entire curl history and task queue into feedback reports
5. Cache localIds for extra speed
6. Move us up to latest React
Test Plan: No new tests - once we lock down this new design I'll write tests for the DraftChangeSet
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1125