Mailspring/exports/nylas-exports.coffee
dillon be7b52cb98 feat(categories): enable creating new labels and folders. addresses T3351.
Summary:
write tests for adding/removing existing labels and popover closing

add more tests

address code review comments

fix the tests

add test for creating label

add test for creating label and queueing change label task

add test for creating a folder

add syncback category task spec

make the rest of the tests pass

remove unnecessary parens

add a few more tests

add last test

Test Plan: added some tests. all tests green

Reviewers: bengotow, evan

Reviewed By: evan

Differential Revision: https://phab.nylas.com/D2010
2015-09-10 10:34:09 -07:00

152 lines
6 KiB
CoffeeScript

Task = null
Model = null
TaskRegistry = null
DatabaseObjectRegistry = null
class NylasExports
@registerSerializable = (exported) ->
if exported.prototype
Task ?= require '../src/flux/tasks/task'
Model ?= require '../src/flux/models/model'
if exported.prototype instanceof Model
DatabaseObjectRegistry ?= require '../src/database-object-registry'
DatabaseObjectRegistry.register(exported)
else if exported.prototype instanceof Task
TaskRegistry ?= require '../src/task-registry'
TaskRegistry.register(exported)
@get = (prop, get) ->
Object.defineProperty @, prop, {get, enumerable: true}
# Will lazy load when requested
@load = (prop, path) ->
Object.defineProperty @, prop,
get: ->
exported = require "../src/#{path}"
NylasExports.registerSerializable(exported)
return exported
enumerable: true
# Will require immediately
@require = (prop, path) ->
exported = require "../src/#{path}"
NylasExports.registerSerializable(exported)
@[prop] = exported
# Actions
@load "Actions", 'flux/actions'
# API Endpoints
@load "NylasAPI", 'flux/nylas-api'
@load "NylasSyncStatusStore", 'flux/stores/nylas-sync-status-store'
@load "EdgehillAPI", 'flux/edgehill-api'
# The Database
@load "ModelView", 'flux/stores/model-view'
@load "SearchView", 'flux/stores/search-view'
@load "DatabaseView", 'flux/stores/database-view'
@load "DatabaseStore", 'flux/stores/database-store'
# Database Objects
# These need to be required immeidatley to populated the
# DatabaseObjectRegistry so we know what Database Tables to construct
@require "File", 'flux/models/file'
@require "Event", 'flux/models/event'
@require "Label", 'flux/models/label'
@require "Folder", 'flux/models/folder'
@require "Thread", 'flux/models/thread'
@require "Account", 'flux/models/account'
@require "Message", 'flux/models/message'
@require "Contact", 'flux/models/contact'
@require "Category", 'flux/models/category'
@require "Calendar", 'flux/models/calendar'
@require "Metadata", 'flux/models/metadata'
@require "DatabaseObjectRegistry", "database-object-registry"
@require "MailViewFilter", 'mail-view-filter'
# Exported so 3rd party packages can subclass Model
@load "Model", 'flux/models/model'
@load "Attributes", 'flux/attributes'
# The Task Queue
@require "Task", 'flux/tasks/task'
@require "TaskRegistry", "task-registry"
@require "TaskQueue", 'flux/stores/task-queue'
@load "TaskQueueStatusStore", 'flux/stores/task-queue-status-store'
@require "UndoRedoStore", 'flux/stores/undo-redo-store'
# Tasks
# These need to be required immediately to populate the TaskRegistry so
# we know how to deserialized saved or IPC-sent tasks.
@require "EventRSVP", 'flux/tasks/event-rsvp'
@require "SendDraftTask", 'flux/tasks/send-draft'
@require "FileUploadTask", 'flux/tasks/file-upload-task'
@require "DestroyDraftTask", 'flux/tasks/destroy-draft'
@require "ChangeLabelsTask", 'flux/tasks/change-labels-task'
@require "ChangeFolderTask", 'flux/tasks/change-folder-task'
@require "SyncbackCategoryTask", 'flux/tasks/syncback-category-task'
@require "ChangeUnreadTask", 'flux/tasks/change-unread-task'
@require "SyncbackDraftTask", 'flux/tasks/syncback-draft'
@require "ChangeStarredTask", 'flux/tasks/change-starred-task'
@require "CreateMetadataTask", 'flux/tasks/create-metadata-task'
@require "MarkMessageReadTask", 'flux/tasks/mark-message-read'
@require "ArchiveThreadHelper", 'flux/tasks/archive-thread-helper'
@require "DestroyMetadataTask", 'flux/tasks/destroy-metadata-task'
# Stores
# These need to be required immediately since some Stores are
# listen-only and not explicitly required from anywhere. Stores
# currently set themselves up on require.
@require "EventStore", 'flux/stores/event-store'
@require "DraftStore", 'flux/stores/draft-store'
@require "AccountStore", 'flux/stores/account-store'
@require "MessageStore", 'flux/stores/message-store'
@require "ContactStore", 'flux/stores/contact-store'
@require "CategoryStore", 'flux/stores/category-store'
@require "MetadataStore", 'flux/stores/metadata-store'
@require "AnalyticsStore", 'flux/stores/analytics-store'
@require "WorkspaceStore", 'flux/stores/workspace-store'
@require "DraftCountStore", 'flux/stores/draft-count-store'
@require "FileUploadStore", 'flux/stores/file-upload-store'
@require "UnreadCountStore", 'flux/stores/unread-count-store'
@require "FileDownloadStore", 'flux/stores/file-download-store'
@require "DraftStoreExtension", 'flux/stores/draft-store-extension'
@require "FocusedContentStore", 'flux/stores/focused-content-store'
@require "FocusedMailViewStore", 'flux/stores/focused-mail-view-store'
@require "FocusedContactsStore", 'flux/stores/focused-contacts-store'
@require "MessageBodyProcessor", 'flux/stores/message-body-processor'
@require "MessageStoreExtension", 'flux/stores/message-store-extension'
# React Components
@get "React", -> require 'react' # Our version of React for 3rd party use
@load "ReactRemote", 'react-remote/react-remote-parent'
@load "ComponentRegistry", 'component-registry'
@load "PriorityUICoordinator", 'priority-ui-coordinator'
# Utils
@load "Utils", 'flux/models/utils'
@load "DOMUtils", 'dom-utils'
@load "CanvasUtils", 'canvas-utils'
@load "RegExpUtils", 'regexp-utils'
@load "MessageUtils", 'flux/models/message-utils'
# Services
@load "UndoManager", 'flux/undo-manager'
@load "QuotedHTMLParser", 'services/quoted-html-parser'
@load "QuotedPlainTextParser", 'services/quoted-plain-text-parser'
# Errors
@get "APIError", -> require('../src/flux/errors').APIError
@get "OfflineError", -> require('../src/flux/errors').OfflineError
@get "TimeoutError", -> require('../src/flux/errors').TimeoutError
# Process Internals
@load "LaunchServices", 'launch-services'
@load "BufferedProcess", 'buffered-process'
@load "BufferedNodeProcess", 'buffered-node-process'
# Testing
@get "NylasTestUtils", -> require '../spec-nylas/test_utils'
module.exports = NylasExports