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