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:
associating salesforce contacts and leads with Nylas contacts
adding fetcher form salesforce
shows conencted leads and contacts
auto associates acount
fixing salesforce forms
Salesforce composers are styled
fix opportunity association with account on object creation
fix specs
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1507
Summary:
Resolves T1200 and probably others.
This diff moves all the window management / hot loading into a new class called the WindowManager
and also changes the way the app transitions between onboarding and main window. When you log out,
the main window clears config and clearing the config causes the window manager to close the main
window and open the login window. When it detects a token again, it opens the main window.
This means you can't:
- Open the main window from the login window
- Open mailto: links and accidentally see the main window or a composer, since the draft store isn't
running anywhere.
- Don't need to worry about properly resetting thigns when namespaces change, since the window
is now actually re-created from scratch with the new auth token.
Be a little more defensive about namespace checks in draft-store
Move window code to window-manager
Rename AtomApplication to just `Application`
Specs fix
Test Plan: Run tests, would be good to have more for this.
Reviewers: evan
Reviewed By: evan
Maniphest Tasks: T1200
Differential Revision: https://review.inboxapp.com/D1501
Summary:
Debounce changes out of the DatabaseStore to prevent lots of calls to persistModel from flooding the app
Tasks must always call super so they get IDs
The task queue shouldn't save every time it adds/removes a task - there could be hundreds
ActivityBar package is actually surprisingly slow, re-rendering needlessly
setState in MultiselectList sometimes renders immediately. Don't do this, because sometimes we're rendering twice back to back
Remove dead references
Never allow duplicate tags in the tags array
Don't archive threads that already have the archive tag (it doesn't do anything bad, but why bother creating tasks?)
Update DB specs
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1506
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:
Fixes T1127
For now, colons are taken literally. This means you can't type scoped
searches. This will likely change when search gets re-designed
Test Plan:
SearchBar.cjsx got a test for this. The class needs more tests
edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Subscribers: mg
Maniphest Tasks: T1127
Differential Revision: https://review.inboxapp.com/D1490
Summary:
Load unread counts from database again, not tags
fix(multiselect-list): Clear selection on esc
fix(onboarding): Make target=_blank links work in onboarding pages
fix(workspace): Items in header and footer regions are in a single column
fix(layout): Critical issue for things not 100% height
fix(activity-bar): Show in dev mode so you know you're in dev mode
fix(quoted-text): Support for #divRplyFwdMsg quoted text marker
Test Plan: Run specs
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1484
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: 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:
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 diff includes a few small things:
- Menu: Don't select the first item until the user taps down arrow, and allow the user to use the arrow keys to move up and down through Menu items.
- Menu: Make scroll code from MultiselectList re-usable, use in Menu. Now if you use the keys to move to an item that is offscreen it will follow.
- Popover: Tapping the button that opened popover should close it
- Make sure buttons in toolbars are at least standard height
- Re-enable Markdown processing via `grunt docs`
- A bit of initial inline documentation for crosjdoc. Need to evaluate whether this is worth doing everywhere.
- New `search-playground` package for experimenting with search and search weights.
- Swap itemClassProvider for more generic itemPropProvider
- Add crojsdoc config file
- Export React, because third party packages can't require things from our app
- [FEATURE] Bring back static file support in third party packages via `nylas://translate/IMG_20150417_124142.jpg`
- Fix invariant error with search bar
- [FEATURE] "Show Original" under Message actions
- Fix DatabaseView so that many archives at once don't cause problems
Test Plan: Run specs
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1426
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 is now in the thread-list package.
Account sidebar no longer has random stuff dealing with search, no longer maintains selection apart from FocusedTagStore
Thread nav buttons are in the thread package
Account sidebar pulls selection from FocusedTagStore, no longer fires an Action to select Inbox, which was weird
Thread store is in thread-list package. No longer has any selection concept -> moved to FocusedThreadStore. Also looks at database changes to do "shallow" updates when only threads and not messages have changed, or when only messages of a few...
...threads have changed.
WorkspaceStore now handles both pushing AND popping the thread sheet. So all sheet behavior is here.
ThreadStore => FocusedThreadStore, selectThreadId => selectThread
Include all models in inbox-exports
It actually takes a long time to call Promise.reject because Bluebird generates stack traces. Resolve with false instead (100msec faster!)
Cache the model class map. All the requires take ~20msec per call to this method
ThreadList looks at FocusedThreadStore for selection
FocusedThreadStore, FocusedTagStore
Updated specs
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1384
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:
Expose the animation coordinator in Nilas-exports, use in more places
Provide a way for queries to individually bypass waiting (messages query when opening thread)
Test Plan: No new tests to see here yet
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1376
Summary: If state.selectedId is null, or otherwise cannot find item, don't throw exception
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1373
Summary:
A change in the spec caused an error when message metatdata wasn't
available. The specs were also not updated to reflect the change.
fix thread list participants spec
fix thread list spec
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1372
Summary: This one is a bit interesting. We want to allow the user to view "All Mail", which is essentially "threads, with no tags query whatsoever." Rather than try to make `null` a valid selected tag Id, I used `*` as a "magic" tag id which is interpreted by the ThreadStore to mean "no tags where clause." Definitely a hack, but simpler than trying to make the account sidebar properly select "all mail" when selectedTagId = null.
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1360
Summary: When we get unread messages, grab their threads and then make sure they're in the inbox before notifying.
Test Plan: See updated specs!
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1361
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:
Freeze threads on their way out of the ThreadStore
Don't add an unread attribute to contacts by accident...
Don't pass inline functions as props that are looked at by _isEqual
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1367
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:
The issue was that when selecting a thread id, it was not loaded in the
current list of items in the ThreadList and failing to come up.
The notifications now pass a property that the AccountSidebarStore listens
for to indicate what tag we think is most likely to contain the thread
that we're directly trying to access.
Eventually the correct data set may be loaded that contains the thread we
want. In the meantime, the requested selectedThreadId may or may not
resolve to an actual selectedThread object. If we detect that the
requested thread came into scope, we trigger another action to notify
everyone that the thread is now available. We also pass along a force
flag since this is a case when the requested thread id hasn't changed
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1353
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: re-display information on re-entry of thread
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1340
Summary:
reply text now scrolls to bottom on new draft
tests for reply type
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1338
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:
add more Salesforce states
more salesforce sidebar
extract focused contacts into its own store
fullcontact store fixes
extract thread participants to own module
typo
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1326
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:
store not intelligently figures out the most relevant contact
fix primary contact logic
styling on contactstore
can select different people on the sidebar
add salesforce stub
put return statement back in checking for Salesforce Token
salesforce sidebar loads real data now
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1319
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:
feat(mode-switch): almost working
Remove SheetStore in favor of bigger WorkspaceStore
Back button for mode switching
Test Plan: Tests WIP
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1292
Summary: Resolves an issue where an attachment with a contentId was excluded from the attachments list on the message, even though the cid was not found in the message body.
Test Plan: New test case
Reviewers: evan
Reviewed By: evan
Maniphest Tasks: T427
Differential Revision: https://review.inboxapp.com/D1293
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:
This is a WIP to fix the blatant case of messages dissapearing when
there's an error. It's pending a better through through notification UI
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1270
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: tiny patch, but with lots of tests for message-item and factored out message-timestamp
Test Plan: Run brand new specs!
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1225
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:
Eventually, notification stuff should be moved out of InboxAPI into a separate package, and we should have some documented way of watching for "new" things. (Right now it'd be a bit hard to do on the database store...)
Additional fixes:
- AddRemoveTagsTask now optimistically updates the version. Before it would get the new version from the API response. This was bad because it could still cause local changes to be overwritten if you were changing tags really fast.
- AddRemoveTagsTask now takes a threadId, not a thread for consistency with all the rest of our Tasks
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1214
Summary:
fix(autoupdater): Fix bizarrely broken code in autoupdater
fix(urls): Use nilas.com instead of inboxapp
fix(show-main-window): Cmd-1 is the mac standard
fix(autoupdater): TESTS
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1199
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: Populates the unread tag counts using new API feature instead of using the local cache.
Test Plan: No tests for now :-(
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1195
Summary:
fix(http): Support http for API in addition to https throughout
test(attributes): Additional testing for model attributes
fix(versioning): Use version numbers with drafts as well as threads
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1194
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:
- Remove unnecessary log statements
- Use dbPath = null in specs, results in in-memory database
- Only surface promise errors that are Javascript syntax, refernece range or type problems
- Stub out NamespaceStore.current() always
Test Plan: Run tests, see less garbage!
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1171
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 updates the FileDownloadStore to use it's own internal Download class instead of leveraging the TaskStore (since downloads shouldn't be resumable / serialized to disk anyway). This means things can be tighter and less dependent on Actions. Downloads are now promise-based, so actions like "open file after downloading" can be chained to the end of the Download promise.
The MessageStore now queues downloads for inline attachments when you view the thread, and the MessageItem.cjsx substitutes in local file paths for cid:<CID>.
Test Plan: I made some pretty big changes and did not break any tests. This is a bad sign... Tests forthcoming, but will probably ship this to users tomorrow first.
Reviewers: evan
Reviewed By: evan
Differential Revision: https://review.inboxapp.com/D1149
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:
Also fixed a bug whereby the thread list item wasn't changing because the
tag change was too deep for React to diff properly
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1132
Summary: Also remove the static email-iframe.css since it's now inline
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://review.inboxapp.com/D1133
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