lacona-osx
Version:
Lacona Extensions for OSX, tied into the global-context hosted API
94 lines (75 loc) • 3.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SpotlightDirectory = exports.SpotlightFile = undefined;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _elliptical = require('elliptical');
var _laconaPhrases = require('lacona-phrases');
var _laconaApi = require('lacona-api');
var _path = require('path');
var _fromPromise = require('rxjs/observable/fromPromise');
var _startWith = require('rxjs/operator/startWith');
var _utils = require('./utils');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @jsx createElement */
const Files = {
fetch({ props }) {
var _context;
return (_context = (0, _fromPromise.fromPromise)((0, _laconaApi.fetchFiles)({ query: props.query })), _startWith.startWith).call(_context, []);
},
clear: true
};
function describeFiles(input, observe) {
const data = input != null ? observe((0, _elliptical.createElement)(Files, { query: input.toLowerCase() })) : [];
const items = _lodash2.default.chain(data).filter().filter(({ contentType }) => contentType !== 'public.folder').filter('path').map(({ path }) => ({
text: (0, _path.basename)(path),
value: path,
qualifiers: (0, _utils.subPaths)((0, _path.dirname)(path)),
annotation: { type: 'icon', value: path }
})).value();
return (0, _elliptical.createElement)('list', { strategy: 'contain', items: items, limit: 10, strategy: 'fuzzy' });
}
function describeFolders(input, observe) {
const data = input != null ? observe((0, _elliptical.createElement)(Files, { query: input.toLowerCase() })) : [];
const items = _lodash2.default.chain(data).filter(({ contentType }) => contentType === 'public.folder').filter('path').map(({ path }) => ({
text: (0, _path.basename)(path),
value: path,
qualifiers: (0, _utils.subPaths)((0, _path.dirname)(path)),
annotation: { type: 'icon', value: path }
})).value();
return (0, _elliptical.createElement)('list', { strategy: 'contain', items: items, limit: 10, strategy: 'fuzzy' });
}
const SpotlightFile = exports.SpotlightFile = {
extends: [_laconaPhrases.File],
describe({ props, observe, config }) {
if (config.enableSpotlightFiles) {
return (0, _elliptical.createElement)(
'placeholder',
{ argument: 'file' },
(0, _elliptical.createElement)('dynamic', {
describe: input => describeFiles(input, observe),
greedy: true,
splitOn: props.splitOn,
limit: 1 })
);
}
}
};
const SpotlightDirectory = exports.SpotlightDirectory = {
extends: [_laconaPhrases.Directory],
describe({ props, observe, config }) {
if (config.enableSpotlightDirectories) {
return (0, _elliptical.createElement)(
'placeholder',
{ argument: 'folder' },
(0, _elliptical.createElement)('dynamic', {
describe: input => describeFolders(input, observe),
greedy: true,
splitOn: props.splitOn,
limit: 1 })
);
}
}
};