UNPKG

lacona-osx

Version:

Lacona Extensions for OSX, tied into the global-context hosted API

159 lines (127 loc) 5.83 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContactDate = exports.ContactPhoneNumber = exports.ContactEmail = exports.Contact = undefined; var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _contactSources = require('./contact-sources'); var _elliptical = require('elliptical'); var _laconaPhrases = require('lacona-phrases'); var _constantMaps = require('./constant-maps'); var constantMaps = _interopRequireWildcard(_constantMaps); var _laconaApi = require('lacona-api'); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function spreadElementsFromContacts(data, map) { const items = _lodash2.default.chain(data).map(({ firstName, middleName, lastName, nickname, company, value, label, id }) => { const possibleNames = (0, _contactSources.possibleNameCombinations)({ firstName, middleName, lastName, nickname, company }); const qualifiers = [map[label] ? map[label][0] : label]; return _lodash2.default.map(possibleNames, poss => ({ text: poss.name, value, qualifiers: _lodash2.default.concat(qualifiers, poss.qualifiers), annotation: { type: 'contact', value: id } })); }).flatten().value(); return (0, _elliptical.createElement)( 'placeholder', { argument: 'contact' }, (0, _elliptical.createElement)('list', { items: items, limit: 10, unique: true, strategy: 'contain' }) ); } /** @jsx createElement */ class ContactObject { constructor({ id, name }) { this.id = id; this.name = name; this.type = 'contact card'; this.limitId = 'contact-card'; this[_elliptical.unique] = id; } open() { (0, _laconaApi.openURL)({ url: `addressbook://${this.id}` }); } } function contactElementsFromContacts(data) { const items = _lodash2.default.chain(data).map(({ firstName, middleName, lastName, nickname, company, id }) => { const possibleNames = (0, _contactSources.possibleNameCombinations)({ firstName, middleName, lastName, nickname, company }); const value = new ContactObject({ id, name: possibleNames[0] }); return _lodash2.default.map(possibleNames, poss => ({ text: poss.name, value, qualifiers: poss.qualifiers, annotation: { type: 'contact', value: id } })); }).flatten().value(); return (0, _elliptical.createElement)( 'placeholder', { argument: 'contact' }, (0, _elliptical.createElement)('list', { items: items, limit: 10, unique: true, strategy: 'contain' }) ); } function spreadEmails(ary) { return (0, _contactSources.spread)(ary, 'emails', ['firstName', 'lastName', 'middleName', 'nickname', 'company', 'id']); } function spreadPhoneNumbers(ary) { return (0, _contactSources.spread)(ary, 'phoneNumbers', ['firstName', 'lastName', 'middleName', 'nickname', 'company', 'id']); } function spreadDates(ary) { return (0, _contactSources.spread)(ary, 'dates', ['firstName', 'lastName', 'middleName', 'nickname', 'company', 'id']); } const Contact = exports.Contact = { extends: [_laconaPhrases.ContactCard], describe({ observe, config }) { if (!config.enableContactCards) return; const data = observe((0, _elliptical.createElement)(_contactSources.Contacts, null)); return contactElementsFromContacts(data); } }; const ContactEmail = exports.ContactEmail = { extends: [_laconaPhrases.EmailAddress], describe({ observe, config }) { if (!config.enableContactInfo) return; const data = observe((0, _elliptical.createElement)(_contactSources.Contacts, null)); const emails = spreadEmails(data); return spreadElementsFromContacts(emails, constantMaps.emailLabelMap); } }; const ContactPhoneNumber = exports.ContactPhoneNumber = { extends: [_laconaPhrases.PhoneNumber], describe({ observe, config }) { if (!config.enableContactInfo) return; const data = observe((0, _elliptical.createElement)(_contactSources.Contacts, null)); const phoneNumbers = spreadPhoneNumbers(data); return spreadElementsFromContacts(phoneNumbers, constantMaps.phoneNumberMap); } }; const ContactDate = exports.ContactDate = { extends: [_laconaPhrases.Day], describe({ observe, props, config }) { if (!config.enableContactDates) return; const data = observe((0, _elliptical.createElement)(_contactSources.Contacts, null)); const dates = spreadDates(data); const items = _lodash2.default.chain(dates).map(({ firstName, middleName, lastName, nickname, company, value, label, id }) => { const trueValue = _lodash2.default.clone(value); trueValue[_elliptical.unique] = `${id}@${label}`; const dateNames = _constantMaps.dateMap[label] || [label]; const possibleNames = (0, _contactSources.possibleNameCombinations)({ firstName, middleName, lastName, nickname }); return _lodash2.default.map(dateNames, dateName => { return _lodash2.default.map(possibleNames, poss => ({ text: `${poss.name}'s ${dateName}`, value: trueValue, qualifiers: poss.qualifiers })); }); }).flattenDeep().value(); return (0, _elliptical.createElement)( 'placeholder', { argument: 'special day' }, (0, _elliptical.createElement)( 'sequence', null, props.prepositions ? (0, _elliptical.createElement)('literal', { text: 'on ', decorate: true }) : null, (0, _elliptical.createElement)('list', { items: items, limit: 10, unique: true, strategy: 'contain', merge: true }) ) ); } };