/** @babel */ import { Disposable, CompositeDisposable } from 'atom' import VIEW_URI from './view-uri' let disposables = null export function activate () { disposables = new CompositeDisposable() disposables.add( atom.workspace.addOpener(uri => { if (uri === VIEW_URI) { return deserializeIncompatiblePackagesComponent() } }) ) disposables.add( atom.commands.add('atom-workspace', { 'incompatible-packages:view': () => { atom.workspace.open(VIEW_URI) } }) ) } export function deactivate () { disposables.dispose() } export function consumeStatusBar (statusBar) { let incompatibleCount = 0 for (let pack of atom.packages.getLoadedPackages()) { if (!pack.isCompatible()) incompatibleCount++ } if (incompatibleCount > 0) { let icon = createIcon(incompatibleCount) let tile = statusBar.addRightTile({ item: icon, priority: 200 }) icon.element.addEventListener('click', () => { atom.commands.dispatch(icon.element, 'incompatible-packages:view') }) disposables.add(new Disposable(() => tile.destroy())) } } export function deserializeIncompatiblePackagesComponent () { const IncompatiblePackagesComponent = require('./incompatible-packages-component') return new IncompatiblePackagesComponent(atom.packages) } function createIcon (count) { const StatusIconComponent = require('./status-icon-component') return new StatusIconComponent({ count }) }