UNPKG

lacona-osx

Version:

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

172 lines (146 loc) 6.39 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.RelationshipDate = exports.RelationshipEmail = exports.RelationshipPhoneNumber = undefined; var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _elliptical = require('elliptical'); var _laconaPhrases = require('lacona-phrases'); var _constantMaps = require('./constant-maps'); var _contactSources = require('./contact-sources'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function spreadRelationships(obj) { return (0, _contactSources.spreadObject)(obj, 'relationships', ['phoneNumbers', 'emails', 'dates', 'id', 'firstName', 'lastName', 'company'], null, 'relationship'); } /** @jsx createElement */ function spreadPhoneNumbers(ary) { return (0, _contactSources.spread)(ary, 'phoneNumbers', ['relationship', 'id', 'firstName', 'lastName', 'company']); } function spreadEmails(ary) { return (0, _contactSources.spread)(ary, 'emails', ['relationship', 'id', 'firstName', 'lastName', 'company']); } function spreadDates(ary) { return (0, _contactSources.spread)(ary, 'dates', ['relationship', 'id', 'firstName', 'lastName', 'company']); } function getNameQualifiers({ firstName, lastName, company }) { if (firstName && lastName) { return [firstName, `${firstName} ${lastName}`]; } else if (firstName || lastName) { return [firstName || lastName]; } else if (company) { return [company]; } } function describeRelationship(data, map) { const items = _lodash2.default.chain(data).map(({ relationship, value, label, id, firstName, lastName, company }) => { const relationships = _constantMaps.relationshipMap[relationship] || [relationship]; const qualifiers = getNameQualifiers({ firstName, lastName, company }); qualifiers.push([map[label] ? map[label][0] : label]); const annotation = { type: 'contact', value: id }; return _lodash2.default.map(relationships, oneRelationship => { return [{ text: `my ${oneRelationship.toLowerCase()}`, value, annotation, qualifiers }, { text: `my ${_lodash2.default.capitalize(oneRelationship)}`, value, annotation, qualifiers }]; }); }).flattenDeep().value(); return (0, _elliptical.createElement)( 'placeholder', { argument: 'relationship' }, (0, _elliptical.createElement)('list', { items: items, limit: 10, unique: true }) ); } const RelationshipPhoneNumber = exports.RelationshipPhoneNumber = { extends: [_laconaPhrases.PhoneNumber], describe({ observe, config }) { if (!config.enableContactInfo) return; const data = observe((0, _elliptical.createElement)(_contactSources.UserContact, null)); const phoneNumbers = spreadPhoneNumbers(spreadRelationships(data)); return describeRelationship(phoneNumbers, _constantMaps.phoneNumberMap); } }; const RelationshipEmail = exports.RelationshipEmail = { extends: [_laconaPhrases.EmailAddress], describe({ observe, config }) { if (!config.enableContactInfo) return; const data = observe((0, _elliptical.createElement)(_contactSources.UserContact, null)); const emails = spreadEmails(spreadRelationships(data)); return describeRelationship(emails, _constantMaps.emailLabelMap); } }; const RelationshipDate = exports.RelationshipDate = { extends: [_laconaPhrases.Day], describe({ observe, props, config }) { if (!config.enableContactDates) return; const data = observe((0, _elliptical.createElement)(_contactSources.UserContact, null)); const dates = spreadDates(spreadRelationships(data)); const items = _lodash2.default.chain(dates).map(({ relationship, value, label, id, firstName, lastName, company }) => { const relationships = _constantMaps.relationshipMap[relationship] || [relationship]; const trueValue = _lodash2.default.clone(value); trueValue[_elliptical.unique] = `${id}@${label}`; const dateNames = _constantMaps.dateMap[label] || [label]; const annotation = { type: 'contact', value: id }; const qualifiers = getNameQualifiers({ firstName, lastName, company }); return _lodash2.default.map(dateNames, dateName => { return _lodash2.default.map(relationships, oneRelationship => [{ text: `my ${oneRelationship.toLowerCase()}'s ${dateName}`, value: trueValue, annotation, qualifiers }, { text: `${_lodash2.default.capitalize(oneRelationship)}'s ${dateName}`, value: trueValue, annotation, qualifiers }]); }); // return ( // <choice limit={1} value={value} annotation={annotation} qualifiers={qualifiers}> // {_.map(dateNames, dateName => { // return [ // _.map(relationships, oneRelationship => ( // <sequence> // <placeholder argument='relationship'> // <literal strategy='fuzzy' text={`my ${oneRelationship.toLowerCase()}'s`} /> // </placeholder> // <literal text=' ' /> // <placeholder argument='special day'> // <literal strategy='fuzzy' text={dateName} /> // </placeholder> // </sequence> // )), // _.map(relationships, oneRelationship => ( // <sequence> // <placeholder argument='relationship'> // <literal text={`${_.capitalize(oneRelationship)}'s`} /> // </placeholder> // <literal text=' ' /> // <placeholder argument='special day'> // <literal text={dateName} /> // </placeholder> // </sequence> // )) // ] // })} // </choice> // ) }).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, merge: true }) ) ); } };