lacona-osx
Version:
Lacona Extensions for OSX, tied into the global-context hosted API
159 lines (127 loc) • 5.83 kB
JavaScript
;
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 })
)
);
}
};