Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 325e849

Browse files
committed
support updating the icon status from packages
1 parent 01ad2a9 commit 325e849

5 files changed

+69
-0
lines changed

lib/directory-view.coffee

+8
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ class DirectoryView extends HTMLElement
5252
else
5353
@draggable = true
5454
@subscriptions.add @directory.onDidStatusChange => @updateStatus()
55+
@subscriptions.add @directory.onDidIconStatusChange (iconStatus) =>
56+
@updateIconStatus(iconStatus)
5557
@updateStatus()
5658

5759
@expand() if @directory.expansionState.isExpanded
@@ -60,6 +62,12 @@ class DirectoryView extends HTMLElement
6062
@classList.remove('status-ignored', 'status-modified', 'status-added')
6163
@classList.add("status-#{@directory.status}") if @directory.status?
6264

65+
updateIconStatus: (newIconStatus) ->
66+
if newIconStatus isnt @iconStatus and @iconStatus
67+
@classList.remove(@iconStatus)
68+
@classList.add(newIconStatus) if newIconStatus
69+
@iconStatus = newIconStatus
70+
6371
subscribeToDirectory: ->
6472
@subscriptions.add @directory.onDidAddEntries (addedEntries) =>
6573
return unless @isExpanded

lib/directory.coffee

+8
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ class Directory
4848
onDidStatusChange: (callback) ->
4949
@emitter.on('did-status-change', callback)
5050

51+
onDidIconStatusChange: (callback) ->
52+
@emitter.on('did-icon-status-change', callback)
53+
5154
onDidAddEntries: (callback) ->
5255
@emitter.on('did-add-entries', callback)
5356

@@ -91,6 +94,11 @@ class Directory
9194
@status = newStatus
9295
@emitter.emit('did-status-change', newStatus)
9396

97+
updateIconStatus: (newIconStatus) ->
98+
if newIconStatus isnt @iconStatus
99+
@iconStatus = newIconStatus
100+
@emitter.emit('did-icon-status-change', newIconStatus)
101+
94102
# Is the given path ignored?
95103
isPathIgnored: (filePath) ->
96104
if atom.config.get('tree-view.hideVcsIgnoredFiles')

lib/file-view.coffee

+7
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,19 @@ class FileView extends HTMLElement
2222
@fileName.classList.add(FileIcons.getService().iconClassForPath(@file.path))
2323

2424
@subscriptions.add @file.onDidStatusChange => @updateStatus()
25+
@subscriptions.add @file.onDidIconStatusChange (iconStatus) => @updateIconStatus(iconStatus)
2526
@updateStatus()
2627

2728
updateStatus: ->
2829
@classList.remove('status-ignored', 'status-modified', 'status-added')
2930
@classList.add("status-#{@file.status}") if @file.status?
3031

32+
updateIconStatus: (newIconStatus) ->
33+
if newIconStatus isnt @iconStatus and @iconStatus
34+
@classList.remove(@iconStatus)
35+
@classList.add(newIconStatus) if newIconStatus
36+
@iconStatus = newIconStatus
37+
3138
getPath: ->
3239
@fileName.dataset.path
3340

lib/file.coffee

+8
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ class File
3333
onDidStatusChange: (callback) ->
3434
@emitter.on('did-status-change', callback)
3535

36+
onDidIconStatusChange: (callback) ->
37+
@emitter.on('did-icon-status-change', callback)
38+
3639
# Subscribe to the project' repo for changes to the Git status of this file.
3740
subscribeToRepo: ->
3841
repo = repoForPath(@path)
@@ -62,5 +65,10 @@ class File
6265
@status = newStatus
6366
@emitter.emit('did-status-change', newStatus)
6467

68+
updateIconStatus: (newIconStatus) ->
69+
if newIconStatus isnt @iconStatus
70+
@iconStatus = newIconStatus
71+
@emitter.emit('did-icon-status-change', newIconStatus)
72+
6573
isPathEqual: (pathToCompare) ->
6674
@path is pathToCompare or @realPath is pathToCompare

spec/tree-view-spec.coffee

+38
Original file line numberDiff line numberDiff line change
@@ -2784,3 +2784,41 @@ describe "TreeView", ->
27842784

27852785
runs ->
27862786
expect($(treeView.roots[0].entries).find('.directory:contains(alpha):first .entry').length).toBe 3
2787+
2788+
describe "async icon status change", ->
2789+
it "adds a status class on a Directory", ->
2790+
dir1 = treeView.find('.directory:contains(dir1)').last()
2791+
expect(dir1.hasClass('test-status')).toBe(false)
2792+
dir1[0].directory.updateIconStatus('test-status')
2793+
expect(dir1.hasClass('test-status')).toBe(true)
2794+
2795+
it "updates a status class on a Directory", ->
2796+
dir1 = treeView.find('.directory:contains(dir1)').last()
2797+
dir1[0].directory.updateIconStatus('test-status1')
2798+
dir1[0].directory.updateIconStatus('test-status2')
2799+
expect(dir1.hasClass('test-status1')).toBe(false)
2800+
expect(dir1.hasClass('test-status2')).toBe(true)
2801+
2802+
it "clears a status class on a Directory", ->
2803+
dir1 = treeView.find('.directory:contains(dir1)').last()
2804+
dir1[0].directory.updateIconStatus('test-status1')
2805+
dir1[0].directory.updateIconStatus(null)
2806+
expect(dir1.hasClass('test-status1')).toBe(false)
2807+
expect(dir1.hasClass('null')).toBe(false)
2808+
2809+
it "adds a status class on a File", ->
2810+
expect(sampleJs.hasClass('test-status')).toBe(false)
2811+
sampleJs[0].file.updateIconStatus('test-status')
2812+
expect(sampleJs.hasClass('test-status')).toBe(true)
2813+
2814+
it "updates a status class on a File", ->
2815+
sampleJs[0].file.updateIconStatus('test-status1')
2816+
sampleJs[0].file.updateIconStatus('test-status2')
2817+
expect(sampleJs.hasClass('test-status1')).toBe(false)
2818+
expect(sampleJs.hasClass('test-status2')).toBe(true)
2819+
2820+
it "clears a status class on a File", ->
2821+
sampleJs[0].file.updateIconStatus('test-status1')
2822+
sampleJs[0].file.updateIconStatus(null)
2823+
expect(sampleJs.hasClass('test-status1')).toBe(false)
2824+
expect(sampleJs.hasClass('null')).toBe(false)

0 commit comments

Comments
 (0)