lib/views/run-view.coffee
{$$, SelectListView} = require 'atom-space-pen-views'
keys = require 'lodash/keys'
module.exports =
class RunView extends SelectListView
initialize: (pkgs) ->
super
data = pkgs.reduce (data, pkg) =>
data.concat @parseData pkg
, []
@setItems data
@show()
parseData: (pkg) -> keys(pkg.scripts or {}).map (script) ->
filter: "#{script} #{pkg.name or pkg.wd}"
label: script
script: script
pkg: pkg
getFilterKey: () -> 'filter'
show: () ->
@panel ?= atom.workspace.addModalPanel item: @
@panel.show()
@focusFilterEditor()
return
cancelled: () -> @hide()
hide: () -> @panel?.destroy()
viewForItem: ({label, pkg}) ->
$$ ->
@li =>
@div label
@div style: 'color: #989898', pkg.name or pkg.wd
confirmed: ({script, pkg}) ->
@cancel()
info = atom.notifications.addInfo "npm run #{script} @ #{pkg.name or pkg.wd}",
detail: "Running..."
dismissable: yes
pkg.run script
.then ({stdout, stderr}) ->
info.dismiss()
atom.notifications.addSuccess "npm run #{script} @ #{pkg.name or pkg.wd}",
detail: stdout
dismissable: yes
.catch ({code, stdout, stderr}) ->
info.dismiss()
atom.notifications.addError "npm run #{script} @ #{pkg.name or pkg.wd}",
detail: stderr
dismissable: yes
return