lacona-osx
Version:
Lacona Extensions for OSX, tied into the global-context hosted API
127 lines (100 loc) • 3.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.RunningApp = exports.RunningAppSource = undefined;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _elliptical = require('elliptical');
var _laconaPhrases = require('lacona-phrases');
var _laconaApi = require('lacona-api');
var _Observable = require('rxjs/Observable');
var _map = require('rxjs/operator/map');
var _mergeMap = require('rxjs/operator/mergeMap');
var _startWith = require('rxjs/operator/startWith');
var _concat = require('rxjs/operator/concat');
var _fromPromise = require('rxjs/observable/fromPromise');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @jsx createElement */
const RunningAppSource = exports.RunningAppSource = {
fetch({ activate }) {
if ((0, _laconaApi.isDemo)()) {
return new _Observable.Observable(observer => {
(0, _laconaApi.fetchRunningApplications)((err, apps) => {
const trueData = _lodash2.default.map(apps, app => {
if (app.activationPolicy === 'regular') {
return new DockAppObject(app);
} else {
return new MenuBarAppObject(app);
}
});
observer.next(trueData);
});
});
} else {
var _context;
return (_context = (_context = (_context = (0, _fromPromise.fromPromise)((0, _laconaApi.fetchRunningApplications)()), _concat.concat).call(_context, _mergeMap.mergeMap.call(activate, () => {
return (0, _fromPromise.fromPromise)((0, _laconaApi.fetchRunningApplications)());
})), _map.map).call(_context, apps => {
return _lodash2.default.map(apps, app => {
if (app.activationPolicy === 'regular') {
return new DockAppObject(app);
} else {
return new MenuBarAppObject(app);
}
});
}), _startWith.startWith).call(_context, []);
}
}
};
class MenuBarAppObject {
constructor({ bundleId, name, path }) {
this.path = path;
this.name = name;
this.type = 'application';
this.bundleId = bundleId;
this[_elliptical.unique] = path;
}
quit() {
return (0, _laconaApi.quitApplication)({ path: this.path });
}
launch() {
return (0, _laconaApi.openFile)({ path: this.path });
}
}
class DockAppObject {
constructor({ bundleId, name, path }) {
this.name = name;
this.type = 'application';
this.path = path;
this.bundleId = bundleId;
this[_elliptical.unique] = path;
}
activate() {
return (0, _laconaApi.activateApplication)({ path: this.path });
}
launch() {
return (0, _laconaApi.openFile)({ path: this.path });
}
hide() {
return (0, _laconaApi.hideApplication)({ path: this.path });
}
close() {
return (0, _laconaApi.closeApplicationWindows)({ bundleId: this.bundleId });
}
quit() {
return (0, _laconaApi.quitApplication)({ path: this.path });
}
}
const RunningApp = exports.RunningApp = {
extends: [_laconaPhrases.RunningApplication],
describe({ observe, props }) {
const data = observe((0, _elliptical.createElement)(RunningAppSource, null));
const apps = _lodash2.default.chain(data).filter().filter('name').map(app => ({ text: app.name, value: app })).value();
return (0, _elliptical.createElement)(
'placeholder',
{ argument: 'application', suppressEmpty: props.suppressEmpty },
(0, _elliptical.createElement)('list', { strategy: 'fuzzy', items: apps, unique: true })
);
}
};