Summary: Fixes T1191
Test Plan: No new tests to see here.
Reviewers: evan
Reviewed By: evan
Maniphest Tasks: T1191
Differential Revision: https://phab.nylas.com/D1603
Summary: Add docs for new RetinaImg modes
Test Plan: Not much to test, except that it looks good!
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1595
Summary:
Fix T1822 - saving templates not working, not showing template
Fix T1800 - give composers a minimum size
Fix the bottom bar of the composer so the gray bar goes all the way across in popout mode.
Fix T1825 - switch to a more attractive "June 4, 2015 at 3:10 PM" styling for expanded dates
Remove, rather than hide, react components for text fields in composer. Fixes T1147
Fix specs
Switch to 999+ instead of infinity. Fixes T1768
Fix broken TemplateStore specs
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Maniphest Tasks: T1147, T1768, T1822, T1800, T1825
Differential Revision: https://phab.nylas.com/D1601
Summary:
Features:
- ThreadListParticipants ignores drafts when computing participants, renders "Draft" label, pending design
- Put the WorkspaceStore in every window—means they all get toolbars and custom gumdrop icons on Mac OS X
Bug Fixes:
- Never display notifications for email the user just sent
- Fix obscure issue with DatabaseView trying to update metadata on items it froze. This resolves issue with names remaining bold after marking as read, drafts not appearing in message list immediately.
- When you pop out a draft, save it first and *wait* for the commit() promise to succeed.
- If you scroll very fast, you node.contentWindow can be null in eventedIframe
Other:
Make it OK to re-register the same component
Make it possible to unregister a hot window
Break the Sheet Toolbar out into it's own file to make things manageable
Replace `package.windowPropsReceived` with a store-style model where anyone can listen for changes to `windowProps`
When I put the WorkspaceStore in every window, I ran into a problem because the package was no longer rendering an instance of the Composer, it was declaring a root sheet with a composer in it. This meant that it was actually a React component that needed to listen to window props, not the package itself.
`atom` is already an event emitter, so I added a `onWindowPropsReceived` hook so that components can listen to window props as if they were listening to a store. I think this might be more flexible than only broadcasting the props change event to packages.
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1592
Summary:
Update a few more packages to deactivate properly
Miscelaneous fixes
Initial commit of new settings package
WIP
WIP - can load and unload and install / uninstall
Click to create new boilerplate package, package updating
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1582
Summary:
fix specs
This functionality used to work but `component` isn't defined and focus: was failing. Added specs to make sure this doesn't happen again.
Test Plan: Run new specs
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1583
Summary:
Fixes T1751
Since there's time between clicking "send" and the draft appearing on the
TaskQueue (which is what we use to determine sending state declaratively)
it's possible for it to send twice.
I opted to use `setState` at the Composer View level since I don't think
we should debouce the Action or the Store. It's totally fine for a script
to queue a bunch of messages to send via the queue. We really just want to
stop it at the user intaction level.
Test Plan: There's a test for this now in the composer-spec
Reviewers: bengotow
Reviewed By: bengotow
Maniphest Tasks: T1751
Differential Revision: https://phab.nylas.com/D1576
Summary:
fix(task-queue): Repair the findTask function
Add "ship logs" and "open logs" to the developer menu
Patches for Chromium 42
Test Plan: Run tests!
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1547
Summary:
Fixes T1327
Fixes T1294
Fixes T1307
Fixes T1207
- More robus Undo Manager
- Scrolls to the most recent undo location
- Fixes a variety of bugs when the composer's cursor ends up in an unsupported
location
- Fixes auto-scroll detection at end of content
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Maniphest Tasks: T1207, T1294, T1307, T1327
Differential Revision: https://phab.nylas.com/D1529
Summary:
Fixes: T1334
remove final InboxApp references
move out all underscore-plus methods
Mass find and replace of underscore-plus
sed -i '' -- 's/underscore-plus/underscore/g' **/*.coffee
sed -i '' -- 's/underscore-plus/underscore/g' **/*.cjsx
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D1534
Summary:
This is an effort to make the logic around the process of sending a draft
cleaner and easier to understand.
Fixes T1253
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Maniphest Tasks: T1253
Differential Revision: https://phab.nylas.com/D1518
Summary: This resolves T1187 — pasting plain text and html now work pretty well
Test Plan: Run new test case
Reviewers: evan
Reviewed By: evan
Maniphest Tasks: T1187
Differential Revision: https://review.inboxapp.com/D1511
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 makes a couple changes:
- New drafts are no longer created in the composer component. Draft creation is back in the draft store where it belongs!
- This means that the Draft List doesn't *always* contain two extra drafts, which are the unopened hot windows.
- Windows never show until they're loaded, which means windows open slowly vs. opening empty. I think the former is preferable but it's easy to change.
- Login window is now sized *before* it's shown instead of afterwards
- The mailto: behavior is now handled by the DraftStore, which gets rid of the whole draftInitialJSON thing that never made any sense.
fix(login) Make login window show at the correct size
logout from edgehill completely
Fix draft delete issue
Don't show windows, hot or cold, until they've loaded
Move logic for responding to mailto links into the draft store
Always fire `windowPropsChanged` after packages load or the window is shown
Show more error codes in red in activity bar
Make sure DraftStoreProxy doesn't interrupt the rendering of the composer with a new draft
Fix account-sidebar scroll issue, maybe?
Test Plan: Run tests!
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1479
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:
#### WIP! ####
This is making it all work with the association endpoint, putting
together the Salesforce Sidebar interfaces, and getting the nested
creators/updaters working.
I still need to do a bunch of UI work and actually debug the whole
workflow still
---
rename SalesforceContactStore to SalesforceSearchStore
rename SalesforceContact to SalesforceSearchResult
salesforce sidebar changes
salesforce association picker
object form store fixes
figuring out newFormItem instigators
Make SalesforceObjectFormStore declarative off SalesforceObjectStore
Make action basd handlers for SalesforceObjectStore
sidebar store create and associate
salesforce sidebar and picker fixes
association works and displays on sidebar
salesforce object form fixes
object form fixes
fix salesforce updating
Test Plan: TODO
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1440
Summary: mailto from cold start waits for window to open
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1453
Summary:
This diff moves us up to React 0.13.2 and transitions some of the core React components to the new
syntax based on plain Javascript objects. `setInitialState` is now just code in the constructor,
`getDOMNode(@)` is now `React.findDOMNode(@)`, and `isMounted` is no longer necessary or available.
This diff also adds `RegisteredComponent` to match `RegisteredRegion`. In another diff,
I think we should change the names of these to be `DynamicComponent` and `DynamicComponentSet`.
This diff also includes preliminary API Reference docs for Menu.cjsx and Popover.cjsx. You can build the docs
using `grunt docs` from the build folder. It produces a simple html format now, but it's easy
to customize.
Also we now ignore "Unnecessary fat arrow"
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1437
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:
- You can now paste Ben Imposter (imposter@nilas.com).
- You can now paste an email and we look up a matching name in the Contact Store
Test Plan: Run glorious new specs
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1378
Summary:
When you're typing at the end of the composer, then the composer should
look like it's scrolling along with you.
When you're typing in the middle of the composer, if the footer
inforamtion scrolls past the end of the page, then that's fine.
When the selection changes, the contenteditable component now caches
whether or not the selection is at the end of the content. It has to do it
at this point, otherwise the cloned, cached DOM nodes of the saved
selection are not the same nodes that will show up in the future.
Whether the cursor is at the end is queried by the composer on a body
change. If it is, then the composer expects a callback from its parent
(the message list), to call to update the scroll position.
The message list immediately updates the scroll position to move the
bottom of the composer to the bottom of the message-wrap window.
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1366
Summary:
Pending issues:
- As you're typing, Atom Shell says the word you're currently typing is misspelled until you finish it. I will need to patch Atom Shell to fix this.
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1358
Summary:
Now all elements by default have selection set to inherit with the root
level body object set to no selection.
This makes everything (except input elements) not selectable by default.
You can explicitly set the css class or use the new `.selectable` class.
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1355
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:
quoted text add and remove at filter level
fix double space quoted text issue when replying to message
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1341
Summary:
Message list can be narrower
Account sidebar is narrower
Never open new windows on single click
Blue send button
Clean up cruft from draft deletion
Render composer empty, setProps when draft populated
Use new `pristine` attribute to discard un-changed new drafts
_addToProxy needs deep equals to prevent "save to = [], cc = []"
Mark as read on click, not afterwards
Allow toolbar / sheet items to style based on the workspace mode
specs covering draft unloading / behavior of cleanup
Always, always reset mode to spec after each test
New tests for destroy draft functionality
Test Plan: Run a handful of new tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1335
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: Only applies to the main window. Will be applied to secondary windows like the composer when design decides whether that window will have a toolbar. (white or gray at the top?)
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1298
Summary:
The Drafts tag now displays the total number of local drafts instead of
the number of unread drafts from the server.
The Trash label has been removed since there's no way in the UI to add or
remove stuff from there.
The Important label has been removed since it's a poorly understood
Gmail-specific feature and there's no way in the UI to add or remove
things from that label.
There is no Starred label because there's no UI to indicate whther or not
something is starred and no UI interface to add or remove from stars.
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1296
Summary: Add tooltip. To use just add a data-tooltip="plain string"
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1288
Summary:
Debounce Component Registry trigger to make app launch much more efficient
Allow arbitrary additional attributes to be set on flexbox, resizable-region
Updates to notification styling
Sheet store maintains an array of sheet types3 instead of sheet elements
Search bar and composer new should be globally visible
Toolbar is now in sheet container instead of individual sheet columns
The sheet container monitors sheet column width and manually positions toolbars
Test Plan: No new tests yet - will see if this design sticks first.
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1287
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
commit d1c455515e04424d429c87a07aff248a4a767f23
Merge: 72e5536 512f8db
Author: Ben Gotow <bengotow@gmail.com>
Date: Thu Feb 19 18:42:29 2015 -0800
Merge sheet and flexbox components, fonts, and more
Conflicts:
static/workspace-view.less
commit 72e553652f5b26a96155c51e04db46baafb916be
Author: Ben Gotow <bengotow@gmail.com>
Date: Wed Feb 18 12:33:08 2015 -0800
Start transitioning to a better set of ui-variables (from bootstrap)
commit ed22fb7fe1c6544af44fae69b83e7e63965ddf4d
Author: Ben Gotow <bengotow@gmail.com>
Date: Wed Feb 18 11:55:58 2015 -0800
I hate CSS
commit 512f8db414ceef74712c9d63ba5a67b44cf778c4
Author: Ben Gotow <bengotow@gmail.com>
Date: Mon Feb 16 10:10:44 2015 -0800
Initial work on top toolbar
commit c2d7a0e0a2f6f6ebe254cca24ad0735336d57b70
Author: Ben Gotow <bengotow@gmail.com>
Date: Thu Feb 12 18:47:26 2015 -0800
New UI Prototype interaction / stores for sheets
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:
fix(streaming): Reconnect every 30 seconds, always
Never accept drafts via any API source
fix(attachments): Fix for changes to open API
Get rid of shouldAbort, just let tasks decide what to do in cleanup
Never let SaveDraftTask run while another SaveDraftTask for same draft is running
Never used IPC
Ignore destroy draft 404
Moving draft store proxy to draft store level
Only block on older saves
Replace SaveDraftTask with SyncbackDraftTask, do saving directly from proxy
Never sync back ;-)
Fix specs
Alter SendDraftTask so that it can send an unsaved draft
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1245
Summary:
Initial hooks for reply to message
Per-message actions and reply to message!
Always commit changes before openinig popout composer
Flip message display - newest at bottom like Gmail
WIP specs
New activity bar inspector for deltas
Don't allow long polling connection to restart after end() called
A bit of activity bar refactoring and filter options, clear
Include "On ... someone wrote" in replies / fw
Slightly more robust quoted text removal, detects "On..."
Abort request to really end it
Additional specs for draft store
Test Plan: Run 20 new tests!
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1230
Summary:
task store fixes
more task store fixes
check for blocked tasks
retry tasks
add spec descriptions
more test stubs
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1209
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:
Why does message-list have default participants? No other packages do
Component registry warns if mixin component name not found
Clear the component registry between tests and wipe React elements inserted into DOM
Everything should have a displayName, even you ComposerView
Stub all ComponentRegistry dependencies, always
Test Plan: Run all the tests at the same time
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1201
Summary:
focuses on draft when replying
focus on to field on new composer
santize html on paste in contentedtiable
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1177
Summary:
fix keymaps and add archive-and-previous
test for star thread
focus bcc and cc
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1174
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:
There were several issues causing uploading to not work:
# The file upload response came back as a string instead of an Object. Needed to detect and `JSON.parse`
# The `MessageAttachment` component was not available as a package on the popout composer (since it used to be inside of `MessageList`)
# The `message.draft` bit was not set properly causing the DB changes to be ignored
# The actions notifying of `uploadStateChanged` were only being broadcasted in the main window (where the `TaskStore` is) and never making it to the popout composer.
Also keybindings for close window and up & down arrows were fixed.
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1157
Summary: This diff essentially inverts the behavior of native-key-bindings. Instead of opting-in to native-key-bindings, they're applied UNLESS there's an override-key-bindings class. I think this may be a better solution for us since we don't often want to override behavior like Copy and Select All.
Test Plan: No new tests on this one...
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1124
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