Update views when packages are installed/uninstalled

This commit is contained in:
Kevin Sawicki
2013-05-22 12:01:03 -07:00
parent 9ecfe91729
commit d671345ab3
5 changed files with 59 additions and 23 deletions

View File

@@ -34,7 +34,7 @@ describe "PackageConfigPanel", ->
panel = new PackageConfigPanel
installedCallback = jasmine.createSpy("installed packages callback")
panel.installed.on("installed-packages-loaded", installedCallback)
panel.packageEventEmitter.on("installed-packages-loaded", installedCallback)
waitsFor -> installedCallback.callCount > 0
describe 'Installed tab', ->

View File

@@ -3,7 +3,6 @@ ConfigPanel = require 'config-panel'
packageManager = require 'package-manager'
### Internal ###
module.exports =
class AvailablePackagesConfigPanel extends ConfigPanel
@content: ->
@@ -11,12 +10,14 @@ class AvailablePackagesConfigPanel extends ConfigPanel
@div outlet: 'loadingArea', class: 'alert alert-info loading-area', =>
@span 'Loading available packages\u2026'
initialize: ->
packageManager.getAvailable (error, packages=[]) =>
initialize: (@packageEventEmitter) ->
packageManager.getAvailable (error, @packages=[]) =>
@loadingArea.hide()
if error?
console.error(error.stack ? error)
else
for pack in packages
@append(new PackageConfigView(pack))
@trigger('available-packages-loaded', [packages])
for pack in @packages
@append(new PackageConfigView(pack, @packageEventEmitter))
@packageEventEmitter.trigger('available-packages-loaded', [@packages])
getPackageCount: -> @packages.length

View File

@@ -4,17 +4,39 @@ PackageConfigView = require 'package-config-view'
packageManager = require 'package-manager'
### Internal ###
module.exports =
class InstalledPackagesConfigPanel extends ConfigPanel
@content: ->
@div class: 'installed-packages', =>
@div outlet: 'loadingArea', class: 'alert alert-info loading-area', =>
@span 'Loading installed packages\u2026'
@div outlet: 'packagesArea'
initialize: ->
packages = _.sortBy(atom.getAvailablePackageMetadata(), 'name')
packageManager.renderMarkdownInMetadata packages, =>
initialize: (@packageEventEmitter) ->
@packages = _.sortBy(atom.getAvailablePackageMetadata(), 'name')
packageManager.renderMarkdownInMetadata @packages, =>
@loadingArea.hide()
@append(new PackageConfigView(pack)) for pack in packages
@trigger 'installed-packages-loaded', [packages]
for pack in @packages
@packagesArea.append(new PackageConfigView(pack, @packageEventEmitter))
@packageEventEmitter.trigger 'installed-packages-loaded', [@packages]
@packageEventEmitter.on 'package-installed', (pack) => @addPackage(pack)
@packageEventEmitter.on 'package-uninstalled', (pack) => @removePackage(pack)
removePackage: ({name}) ->
@packages = _.reject @packages, (pack) -> pack.name is name
@packagesArea.children("[name=#{name}]").remove()
addPackage: (pack) ->
@packages.push(pack)
@packages = _.sortBy(@packages, 'name')
index = @packages.indexOf(pack)
view = new PackageConfigView(pack, @packageEventEmitter)
if index is 0
@packagesArea.prepend(view)
else if index is @packages.length - 1
@packagesArea.append(view)
else
@packagesArea.children(":eq(#{index})").before(view)
getPackageCount: -> @packages.length

View File

@@ -1,9 +1,13 @@
ConfigPanel = require 'config-panel'
InstalledPackagesConfigPanel = require 'installed-packages-config-panel'
AvailablePackagesConfigPanel = require 'available-packages-config-panel'
_ = require 'underscore'
EventEmitter = require 'event-emitter'
class PackageEventEmitter
_.extend PackageEventEmitter.prototype, EventEmitter
### Internal ###
module.exports =
class PackageConfigPanel extends ConfigPanel
@content: ->
@@ -16,10 +20,13 @@ class PackageConfigPanel extends ConfigPanel
@li outlet: 'availableLink', =>
@a 'Available', =>
@span class: 'badge pull-right', outlet: 'availableCount'
@subview 'installed', new InstalledPackagesConfigPanel()
@subview 'available', new AvailablePackagesConfigPanel()
initialize: ->
@packageEventEmitter = new PackageEventEmitter()
@installed = new InstalledPackagesConfigPanel(@packageEventEmitter)
@available = new AvailablePackagesConfigPanel(@packageEventEmitter)
@append(@installed, @available)
@available.hide()
@installedLink.on 'click', =>
@@ -34,8 +41,8 @@ class PackageConfigPanel extends ConfigPanel
@availableLink.addClass('active')
@available.show()
@installed.on 'installed-packages-loaded', (event, packages) =>
@installedCount.text(packages.length)
@packageEventEmitter.on 'installed-packages-loaded package-installed package-uninstalled', =>
@installedCount.text(@installed.getPackageCount())
@available.on 'available-packages-loaded', (event, packages) =>
@availableCount.text(packages.length)
@packageEventEmitter.on 'available-packages-loaded', =>
@availableCount.text(@available.getPackageCount())

View File

@@ -34,7 +34,7 @@ class PackageConfigView extends View
bundled: false
updateAvailable: false
initialize: (@pack, @queue) ->
initialize: (@pack, @packageEventEmitter) ->
@updatePackageState()
@attr('name', @pack.name)
@@ -103,10 +103,16 @@ class PackageConfigView extends View
packageManager.install(@pack, packageManagerCallback)
else
@defaultAction.text('Uninstalling\u2026')
packageManager.uninstall(@pack, packageManagerCallback)
packageManager.uninstall @pack, (error) =>
unless error?
@packageEventEmitter.trigger('package-uninstalled', @pack)
packageManagerCallback()
else
@defaultAction.text('Installing\u2026')
packageManager.install(@pack, packageManagerCallback)
packageManager.install @pack, (error) =>
unless error?
@packageEventEmitter.trigger('package-installed', @pack)
packageManagerCallback()
@updateDefaultAction()