@lighthouse/common 4.24.1-canary-1 → 4.24.1-canary-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,7 +20,13 @@ var _helpers2 = require("../../helpers");
20
20
  var _images = require("../../images");
21
21
 
22
22
  const DEFAULT_MAX_SCANS = 200;
23
+ const MAX_ATTACHMENTS = 100;
23
24
  const LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io';
25
+ const maxFormsText = {
26
+ text: [(0, _helpers.text)(`Detailed Form Submissions in the Daily Activity Report are limited to a total of ${MAX_ATTACHMENTS}. `), (0, _helpers.text)('To access individual Form Submissions, open the hyperlink next to the respective submission within the Other Activity table. Alternatively, they may be accessed in the Lighthouse Management Console.')],
27
+ style: 'small',
28
+ margin: [0, 10, 0, 10]
29
+ };
24
30
  /**
25
31
  * buildActivityPdf
26
32
  *
@@ -104,7 +110,6 @@ async function buildActivitySummarySection(data) {
104
110
  tasks,
105
111
  timezone
106
112
  } = data;
107
- const MAX_ATTACHMENTS = 100;
108
113
  const enterEvents = (0, _lodash.filter)(events, event => event.type === 'enter');
109
114
  const exceedsMaxScans = (0, _lodash.size)(enterEvents) > maxScans;
110
115
  const scans = (0, _lodash.take)(enterEvents, maxScans);
@@ -144,11 +149,6 @@ async function buildActivitySummarySection(data) {
144
149
  }
145
150
 
146
151
  if (exceedsMaxForms) {
147
- const maxFormsText = {
148
- text: [(0, _helpers.text)(`Detailed Form Submissions in the Daily Activity Report are limited to a total of ${MAX_ATTACHMENTS}.`), (0, _helpers.text)('To access individual Form Submissions, open the hyperlink next to the respective submission within the Other Activity table. Alternatively, they may be accessed in the Lighthouse Management Console.')],
149
- style: 'small',
150
- margin: [0, 10, 0, 10]
151
- };
152
152
  activitySummarySection.push(maxFormsText);
153
153
  }
154
154
 
@@ -430,7 +430,15 @@ async function buildOtherActivitySection(data) {
430
430
  settings,
431
431
  timezone
432
432
  });
433
- return [header, hLine, activityTable];
433
+ const otherActivitySummarySection = [header, hLine, activityTable];
434
+ const formCount = (0, _lodash.size)(rows);
435
+ const exceedsMaxForms = formCount > MAX_ATTACHMENTS;
436
+
437
+ if (exceedsMaxForms) {
438
+ activitySummarySection.push(maxFormsText);
439
+ }
440
+
441
+ return otherActivitySummarySection;
434
442
  }
435
443
 
436
444
  function buildTitleTable(data) {
@@ -14,7 +14,13 @@ import { generateDefinition, buildLocationScansContent, buildLocationScansBounda
14
14
  import { getLocationReference, getTimezoneAbbr, getTimezoneDatetime } from '../../helpers';
15
15
  import { launchIcon } from '../../images';
16
16
  var DEFAULT_MAX_SCANS = 200;
17
+ var MAX_ATTACHMENTS = 100;
17
18
  var LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io';
19
+ var maxFormsText = {
20
+ text: [text("Detailed Form Submissions in the Daily Activity Report are limited to a total of ".concat(MAX_ATTACHMENTS, ". ")), text('To access individual Form Submissions, open the hyperlink next to the respective submission within the Other Activity table. Alternatively, they may be accessed in the Lighthouse Management Console.')],
21
+ style: 'small',
22
+ margin: [0, 10, 0, 10]
23
+ };
18
24
  /**
19
25
  * buildActivityPdf
20
26
  *
@@ -166,14 +172,13 @@ function buildActivitySummarySection(_x5) {
166
172
 
167
173
  function _buildActivitySummarySection() {
168
174
  _buildActivitySummarySection = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(data) {
169
- var audits, events, issues, _data$maxScans, maxScans, settings, tasks, timezone, MAX_ATTACHMENTS, enterEvents, exceedsMaxScans, scans, auditRows, issueRows, scanRows, taskRows, formCount, exceedsMaxForms, rows, sortedRows, title, header, hLine, activityTable, activitySummarySection, maxScansText, maxFormsText;
175
+ var audits, events, issues, _data$maxScans, maxScans, settings, tasks, timezone, enterEvents, exceedsMaxScans, scans, auditRows, issueRows, scanRows, taskRows, formCount, exceedsMaxForms, rows, sortedRows, title, header, hLine, activityTable, activitySummarySection, maxScansText;
170
176
 
171
177
  return _regeneratorRuntime.wrap(function _callee4$(_context4) {
172
178
  while (1) {
173
179
  switch (_context4.prev = _context4.next) {
174
180
  case 0:
175
181
  audits = data.audits, events = data.events, issues = data.issues, _data$maxScans = data.maxScans, maxScans = _data$maxScans === void 0 ? DEFAULT_MAX_SCANS : _data$maxScans, settings = data.settings, tasks = data.tasks, timezone = data.timezone;
176
- MAX_ATTACHMENTS = 100;
177
182
  enterEvents = filter(events, function (event) {
178
183
  return event.type === 'enter';
179
184
  });
@@ -196,14 +201,14 @@ function _buildActivitySummarySection() {
196
201
  style: 'summaryHeaderTable'
197
202
  });
198
203
  hLine = horizontalLine();
199
- _context4.next = 18;
204
+ _context4.next = 17;
200
205
  return buildActivityTable({
201
206
  rows: sortedRows,
202
207
  settings: settings,
203
208
  timezone: timezone
204
209
  });
205
210
 
206
- case 18:
211
+ case 17:
207
212
  activityTable = _context4.sent;
208
213
  activitySummarySection = [header, hLine, activityTable];
209
214
 
@@ -219,17 +224,12 @@ function _buildActivitySummarySection() {
219
224
  }
220
225
 
221
226
  if (exceedsMaxForms) {
222
- maxFormsText = {
223
- text: [text("Detailed Form Submissions in the Daily Activity Report are limited to a total of ".concat(MAX_ATTACHMENTS, ".")), text('To access individual Form Submissions, open the hyperlink next to the respective submission within the Other Activity table. Alternatively, they may be accessed in the Lighthouse Management Console.')],
224
- style: 'small',
225
- margin: [0, 10, 0, 10]
226
- };
227
227
  activitySummarySection.push(maxFormsText);
228
228
  }
229
229
 
230
230
  return _context4.abrupt("return", activitySummarySection);
231
231
 
232
- case 23:
232
+ case 22:
233
233
  case "end":
234
234
  return _context4.stop();
235
235
  }
@@ -558,7 +558,7 @@ function buildOtherActivitySection(_x7) {
558
558
 
559
559
  function _buildOtherActivitySection() {
560
560
  _buildOtherActivitySection = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7(data) {
561
- var audits, issues, tasks, settings, timezone, auditRows, issueRows, taskRows, rows, sortedRows, title, header, hLine, activityTable;
561
+ var audits, issues, tasks, settings, timezone, auditRows, issueRows, taskRows, rows, sortedRows, title, header, hLine, activityTable, otherActivitySummarySection, formCount, exceedsMaxForms;
562
562
  return _regeneratorRuntime.wrap(function _callee7$(_context7) {
563
563
  while (1) {
564
564
  switch (_context7.prev = _context7.next) {
@@ -587,9 +587,17 @@ function _buildOtherActivitySection() {
587
587
 
588
588
  case 11:
589
589
  activityTable = _context7.sent;
590
- return _context7.abrupt("return", [header, hLine, activityTable]);
590
+ otherActivitySummarySection = [header, hLine, activityTable];
591
+ formCount = size(rows);
592
+ exceedsMaxForms = formCount > MAX_ATTACHMENTS;
593
+
594
+ if (exceedsMaxForms) {
595
+ activitySummarySection.push(maxFormsText);
596
+ }
597
+
598
+ return _context7.abrupt("return", otherActivitySummarySection);
591
599
 
592
- case 13:
600
+ case 17:
593
601
  case "end":
594
602
  return _context7.stop();
595
603
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/pdf/activity-report/index.js"],"names":["filter","find","groupBy","isEmpty","map","size","sortBy","take","toString","reduce","moment","Promise","generateDefinition","buildLocationScansContent","buildLocationScansBoundaries","horizontalLine","summaryStatTable","summaryWrapperTable","table","summaryFieldsTable","text","zebraFillColor","getLocationReference","getTimezoneAbbr","getTimezoneDatetime","launchIcon","DEFAULT_MAX_SCANS","LIGHTHOUSE_BASE_URL","buildActivityPdf","pdfOptions","data","timestamp","timezone","title","generateContent","content","fileTitle","type","buildActivitySection","activitySection","summarySection","buildSummarySection","titleTable","buildTitleTable","showAlternate","locationScans","buildLocationScansSection","buildOtherActivitySection","otherActivity","buildActivitySummarySection","activitySummary","audits","events","issues","maxScans","settings","tasks","MAX_ATTACHMENTS","enterEvents","event","exceedsMaxScans","scans","auditRows","getFormRowData","issueRows","scanRows","getScanRowData","taskRows","formCount","exceedsMaxForms","rows","sortedRows","style","header","body","layout","hLine","buildActivityTable","activityTable","activitySummarySection","maxScansText","link","margin","push","maxFormsText","timezoneAbbr","activityTableHeader","bold","alignment","location","icon","name","summaryFields","timezoneHour","format","showTzAbbr","iconCell","fit","image","hasSummaryFields","fields","fieldsTable","activityTableRow","colSpan","dontBreakRows","headerRow","hLineWidth","paddingLeft","paddingRight","paddingTop","paddingBottom","vLineWidth","widths","activityTableRows","activityTableBody","fillColor","start","zones","hourIntervalBoundaries","hourIntervalColumnHeaders","columns","interval","index","intervals","scansTableHeader","sortedZones","groupedEventsByZone","memo","zone","zoneEvents","_id","scansTableRows","sortedGroup","locationScansByInterval","locationScansByIntervalContent","totalEvents","zoneDoc","doc","zoneName","scansTableBody","scansTable","eventsByType","enterEventsCount","enter","issuesCount","tasksCount","auditsCount","auditsText","issuesText","scansText","tasksText","auditsCountText","scansCountText","issuesCountText","tasksCountText","auditTable","scanTable","issueTable","taskTables","wrapperTable","end","address","headerTitle","headerSubTitle","addressText","street","city","state","postalCode","headerAddress","mTimezoneStart","tz","mTimezoneEnd","rangeStart","rangeEnd","add","startOf","headerRange","collection","locations","users","document","createdAt","entry","user","entity","userDoc","firstName","lastName"],"mappings":"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","sourcesContent":["import {\n filter,\n find,\n groupBy,\n isEmpty,\n map,\n size,\n sortBy,\n take,\n toString,\n reduce,\n} from 'lodash'\n\nimport moment from 'moment-timezone'\nimport Promise from 'bluebird'\n\nimport {\n generateDefinition,\n buildLocationScansContent,\n buildLocationScansBoundaries,\n horizontalLine,\n summaryStatTable,\n summaryWrapperTable,\n table,\n summaryFieldsTable,\n text,\n zebraFillColor,\n} from '../helpers'\n\nimport {\n getLocationReference,\n getTimezoneAbbr,\n getTimezoneDatetime,\n} from '../../helpers'\nimport { launchIcon } from '../../images'\n\nconst DEFAULT_MAX_SCANS = 200\nconst LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io'\n\n/**\n * buildActivityPdf\n *\n * @param {object} pdfOptions - the pdf options\n * @param {string} pdfOptions.fileTitle - pdf file title\n * @param {function} pdfOptions.footer - function executed to generate footer\n * @param {function} pdfOptions.header - function executed to generate header\n * @param {string} pdfOptions.logoUrl - pdf logo url\n * @param {array} pdfOptions.pageMargins - pdf page margins\n * @param {string} pdfOptions.pageOrientation - pdf page orientation\n * @param {string} pdfOptions.pageSize - pdf page size\n * @param {object} pdfOptions.styles - pdf styles\n * @param {object} pdfOptions.title - pdf title\n * @param {object} data - pdf data\n * @param {array} data.audits - audit documents\n * @param {string} data.end - end datetime of summary report\n * @param {array} data.events - event documents\n * @param {object} data.location - location document\n * @param {array} data.locations - location documents\n * @param {array} data.issues - issue documents\n * @param {bool} data.maxScans - max scans to include in standard report\n * @param {bool} data.showAlternate - show alternate summary report\n * @param {string} data.start - start datetime of summary report\n * @param {object} data.settings - settings properties\n * @param {string} data.settings.awsS3BaseUrl - aws S3 base url\n * @param {string} data.settings.cloudinaryBaseUrl - cloudinary base url\n * @param {array} data.tasks - task documents\n * @param {string} data.timestamp - timestamp string\n * @param {string} data.timezone - timezone string\n * @param {array} data.zones - zone documents\n * @param {array} data.users - user documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport async function buildActivityPdf(pdfOptions, data) {\n const { timestamp, timezone } = data\n\n const title = 'Daily Activity Report'\n const content = await generateContent(data)\n\n return generateDefinition({\n content,\n fileTitle: title,\n timestamp,\n timezone,\n type: 'Activity Summary',\n ...pdfOptions,\n })\n}\n\nasync function generateContent(data) {\n const activitySection = await buildActivitySection(data)\n const summarySection = buildSummarySection(data)\n const titleTable = buildTitleTable(data)\n\n return [titleTable, summarySection, activitySection]\n}\n\nasync function buildActivitySection(data) {\n const { showAlternate = false } = data\n\n if (showAlternate) {\n const locationScans = buildLocationScansSection(data)\n const otherActivity = await buildOtherActivitySection(data)\n\n return [locationScans, otherActivity]\n }\n\n const activitySummary = await buildActivitySummarySection(data)\n\n return [activitySummary]\n}\n\nasync function buildActivitySummarySection(data) {\n const {\n audits,\n events,\n issues,\n maxScans = DEFAULT_MAX_SCANS,\n settings,\n tasks,\n timezone,\n } = data\n\n const MAX_ATTACHMENTS = 100\n\n const enterEvents = filter(events, event => event.type === 'enter')\n const exceedsMaxScans = size(enterEvents) > maxScans\n const scans = take(enterEvents, maxScans)\n\n const auditRows = map(audits, getFormRowData('audits', data))\n const issueRows = map(issues, getFormRowData('issues', data))\n const scanRows = map(scans, getScanRowData(data))\n const taskRows = map(tasks, getFormRowData('tasks', data))\n\n const formCount = size([...auditRows, ...issueRows, ...taskRows])\n const exceedsMaxForms = formCount > MAX_ATTACHMENTS\n\n const rows = [...auditRows, ...issueRows, ...scanRows, ...taskRows]\n const sortedRows = sortBy(rows, ['timestamp'], ['asc'])\n const title = text('Activity Summary', { style: 'summarySectionHeader' })\n\n const header = table({\n body: [[title]],\n layout: 'noBorders',\n style: 'summaryHeaderTable',\n })\n\n const hLine = horizontalLine()\n const activityTable = await buildActivityTable({\n rows: sortedRows,\n settings,\n timezone,\n })\n const activitySummarySection = [header, hLine, activityTable]\n\n if (exceedsMaxScans) {\n const maxScansText = {\n text: [\n text(\n `Location Scans in the Daily Activity Report are limited to a total of ${maxScans}.`\n ),\n text(' To view all Location Scans visit '),\n text('the Events Report', {\n link: `${LIGHTHOUSE_BASE_URL}/reports/events`,\n }),\n text(' in the Lighthouse Management Console.'),\n ],\n style: 'small',\n margin: [0, 10, 0, 10],\n }\n\n activitySummarySection.push(maxScansText)\n }\n\n if (exceedsMaxForms) {\n const maxFormsText = {\n text: [\n text(\n `Detailed Form Submissions in the Daily Activity Report are limited to a total of ${MAX_ATTACHMENTS}.`\n ),\n text(\n 'To access individual Form Submissions, open the hyperlink next to the respective submission within the Other Activity table. Alternatively, they may be accessed in the Lighthouse Management Console.'\n ),\n ],\n style: 'small',\n margin: [0, 10, 0, 10],\n }\n\n activitySummarySection.push(maxFormsText)\n }\n\n return activitySummarySection\n}\n\nasync function buildActivityTable({ rows, settings, timezone }) {\n const timezoneAbbr = getTimezoneAbbr(timezone)\n\n const activityTableHeader = [\n text('Activity', { bold: true }),\n { text: '' }, // icon column\n text('Location', { bold: true }),\n text('User', { bold: true }),\n text(`Timestamp (${timezoneAbbr})`, { alignment: 'right', bold: true }),\n ]\n\n const activityTableRows = await Promise.map(rows, async function(data) {\n const { link, location, icon, name, summaryFields, timestamp, title } = data\n\n const timezoneHour = getTimezoneDatetime({\n format: 'ddd DD h:mm a',\n showTzAbbr: false,\n timestamp,\n timezone,\n })\n\n const iconCell = icon\n ? { alignment: 'center', fit: [8, 8], image: icon, link }\n : { text: '' }\n\n // NOTE: pass link to each column as\n // we can't wrap the entire table row\n const rows = [\n [\n text(title, { link }),\n iconCell,\n text(location, { link }),\n text(name, { link }),\n text(timezoneHour, { alignment: 'right', link }),\n ],\n ]\n\n const hasSummaryFields = !isEmpty(summaryFields)\n\n if (hasSummaryFields) {\n const fieldsTable = await summaryFieldsTable({\n fields: summaryFields,\n settings,\n timezone,\n })\n rows.push([fieldsTable])\n }\n\n // NOTE: we return a table per row which includes the entry details and the\n // summary fields if relevant\n const activityTableRow = [\n table({\n body: [...rows],\n colSpan: 5,\n dontBreakRows: true,\n headerRow: 0,\n layout: {\n hLineWidth: () => 0,\n paddingLeft: () => 0,\n paddingRight: () => 0,\n paddingTop: () => 5,\n paddingBottom: () => 5,\n vLineWidth: () => 0,\n },\n // NOTE: the timestamp must fill up the rest of the table space as\n // otherwise the padding would be off between this table and the parent\n // table that wraps it\n widths: [130, 25, 110, 110, '*'],\n }),\n ]\n\n return activityTableRow\n })\n\n const activityTableBody = isEmpty(activityTableRows)\n ? [[text('No other activity', { colSpan: 5 })]]\n : activityTableRows\n\n const activityTable = table({\n body: [activityTableHeader, ...activityTableBody],\n dontBreakRows: true,\n layout: {\n hLineWidth: () => 0,\n fillColor: zebraFillColor,\n paddingLeft: () => 5,\n paddingRight: () => 5,\n paddingTop: () => 5,\n paddingBottom: () => 5,\n vLineWidth: () => 0,\n },\n widths: [120, 15, 100, 100, '*'],\n })\n\n return activityTable\n}\n\nfunction buildLocationScansSection(data) {\n const { events, start, timezone, zones } = data\n\n const title = text('Location Scans', { style: 'summarySectionHeader' })\n\n const header = table({\n body: [[title]],\n layout: 'noBorders',\n style: 'summaryHeaderTable',\n })\n\n // use start time and timezone to figure out the interval boundaries\n const hourIntervalBoundaries = buildLocationScansBoundaries(start, timezone)\n\n // pair interval boundaries into column headers for the table\n const hourIntervalColumnHeaders = hourIntervalBoundaries.reduce(\n (columns, interval, index, intervals) => {\n if (index < size(intervals) - 1)\n // skip the final iteration as it's just the end of the last interval\n columns.push(\n text(`${interval.format('h')}-${intervals[index + 1].format('hA')}`, {\n alignment: 'center',\n bold: true,\n })\n )\n return columns\n },\n []\n )\n\n const scansTableHeader = [\n text('Location', { bold: true }),\n ...hourIntervalColumnHeaders,\n text('Total', { alignment: 'right', bold: true }),\n ]\n\n const hLine = horizontalLine()\n\n // NOTE: only show the enter events within the summary table\n const enterEvents = filter(events, event => event.type === 'enter')\n const sortedZones = sortBy(zones, ['name'])\n\n const groupedEventsByZone = reduce(\n sortedZones,\n (memo, zone) => {\n const zoneEvents = filter(\n enterEvents,\n event => event.zone && event.zone.toString() === zone._id.toString()\n )\n memo[zone._id] = zoneEvents\n return memo\n },\n {}\n )\n\n const scansTableRows = map(groupedEventsByZone, (events, zone = '') => {\n const sortedGroup = sortBy(events, ['timestamp'], ['asc'])\n\n // put events into interval buckets\n const locationScansByInterval = buildLocationScansContent(\n hourIntervalBoundaries,\n events\n )\n // map the interval buckets to a format fit for the table\n const locationScansByIntervalContent = locationScansByInterval.map(\n interval => {\n return { alignment: 'center', text: size(interval) }\n }\n )\n\n const totalEvents = size(sortedGroup)\n\n const zoneDoc =\n zone && find(zones, doc => doc._id.toString() === zone.toString())\n const zoneName = (zoneDoc && zoneDoc.name) || 'Unknown Location'\n\n return [\n zoneName,\n ...locationScansByIntervalContent,\n { alignment: 'right', bold: true, text: totalEvents },\n ]\n })\n\n const scansTableBody = isEmpty(scansTableRows)\n ? [[text('No location scans', { colSpan: 10 })]]\n : scansTableRows\n\n const scansTable = table({\n body: [scansTableHeader, ...scansTableBody],\n widths: [100, '*', '*', '*', '*', '*', '*', '*', '*', '*'],\n })\n\n return [header, hLine, scansTable]\n}\n\nfunction buildSummarySection(data) {\n const { audits, events, issues, tasks } = data\n\n //const userEvents = groupBy(events, 'user')\n const eventsByType = groupBy(events, 'type')\n\n const enterEventsCount = size(eventsByType.enter)\n //const geoEventsCount = size(eventsByType.geo)\n const issuesCount = size(issues)\n const tasksCount = size(tasks)\n const auditsCount = size(audits)\n //const uniqueUsers = size(userEvents)\n\n const auditsText = text('AUDITS', { style: 'summaryText' })\n //const geoText = text('GPS', { style: 'summaryText' })\n const issuesText = text('ISSUES', { style: 'summaryText' })\n //const peopleText = text('PEOPLE', { style: 'summaryText' })\n const scansText = text('SCANS', { style: 'summaryText' })\n const tasksText = text('TASKS', { style: 'summaryText' })\n\n const auditsCountText = text(toString(auditsCount), { style: 'summaryCount' })\n //const peopleCountText = text(toString(uniqueUsers), { style: 'summaryCount' })\n const scansCountText = text(toString(enterEventsCount), {\n style: 'summaryCount',\n })\n //const geoCountText = text(toString(geoEventsCount), { style: 'summaryCount' })\n const issuesCountText = text(toString(issuesCount), { style: 'summaryCount' })\n const tasksCountText = text(toString(tasksCount), { style: 'summaryCount' })\n\n const auditTable = summaryStatTable({\n body: [[auditsText], [auditsCountText]],\n })\n //const peopleTable = summaryStatTable({\n // body: [[peopleText], [peopleCountText]],\n //})\n //const gpsTable = summaryStatTable({ body: [[geoText], [geoCountText]] })\n const scanTable = summaryStatTable({ body: [[scansText], [scansCountText]] })\n const issueTable = summaryStatTable({\n body: [[issuesText], [issuesCountText]],\n })\n const taskTables = summaryStatTable({ body: [[tasksText], [tasksCountText]] })\n\n const wrapperTable = summaryWrapperTable({\n body: [\n [\n /*peopleTable,*/\n /*gpsTable,*/\n scanTable,\n issueTable,\n taskTables,\n auditTable,\n ],\n ],\n })\n\n return wrapperTable\n}\n\nasync function buildOtherActivitySection(data) {\n const { audits, issues, tasks, settings, timezone } = data\n\n const auditRows = map(audits, getFormRowData('audits', data))\n const issueRows = map(issues, getFormRowData('issues', data))\n const taskRows = map(tasks, getFormRowData('tasks', data))\n\n const rows = [...auditRows, ...issueRows, ...taskRows]\n const sortedRows = sortBy(rows, ['timestamp'], ['asc'])\n const title = text('Other Activity', { style: 'summarySectionHeader' })\n\n const header = table({\n body: [[title]],\n layout: 'noBorders',\n style: 'summaryHeaderTable',\n })\n\n const hLine = horizontalLine()\n const activityTable = await buildActivityTable({\n rows: sortedRows,\n settings,\n timezone,\n })\n\n return [header, hLine, activityTable]\n}\n\nfunction buildTitleTable(data) {\n const { location, start, end, timezone } = data\n const { address = {} } = location\n\n const headerTitle = text('Daily Activity Report', { style: 'title' })\n const headerSubTitle = text(location.name, { style: 'subTitle' })\n const addressText = !isEmpty(address)\n ? `${address.street}, ${address.city || ''} ${address.state ||\n ''} ${address.postalCode || ''}`\n : ''\n const headerAddress = text(addressText, { style: 'small' })\n\n const mTimezoneStart = moment.tz(start, timezone)\n const mTimezoneEnd = moment.tz(end, timezone)\n const timezoneAbbr = getTimezoneAbbr(timezone)\n\n const rangeStart = moment(mTimezoneStart).format('MMM DD h:mma')\n\n const rangeEnd = moment(mTimezoneEnd)\n .add(1, 'hour')\n .startOf('hour')\n .format('MMM DD h:mma')\n\n const headerRange = text(`${rangeStart} - ${rangeEnd} (${timezoneAbbr})`, {\n style: 'subTitle2',\n })\n\n const body = !isEmpty(address)\n ? [[headerTitle], [headerSubTitle], [headerAddress], [headerRange]]\n : [[headerTitle], [headerSubTitle], [headerRange]]\n\n return table({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n })\n}\n\nfunction getFormRowData(collection, { locations, users, zones }) {\n return document => {\n const {\n _id,\n createdAt,\n entry = {},\n title = 'Unknown',\n user = '',\n } = document\n\n const location = getLocationReference({\n entity: document,\n locations,\n zones,\n })\n\n const link = `${LIGHTHOUSE_BASE_URL}/reports/${collection}/${_id}`\n const timestamp = createdAt\n const userDoc = find(users, doc => doc._id.toString() === user.toString())\n const name =\n (userDoc && `${userDoc.firstName} ${userDoc.lastName}`) || 'Unknown User'\n\n // NOTE: currently only issues and tasks will return summary fields, audits\n // aren't supported and will return an empty array here\n const summaryFields = entry.summaryFields || []\n\n return {\n icon: launchIcon,\n location,\n link,\n name,\n summaryFields,\n timestamp,\n title,\n }\n }\n}\n\nfunction getScanRowData({ users, zones }) {\n return document => {\n const { timestamp, user = '', zone = '' } = document\n\n const userDoc =\n user && find(users, doc => doc._id.toString() === user.toString())\n const zoneDoc =\n zone && find(zones, doc => doc._id.toString() === zone.toString())\n\n const zoneName = zoneDoc && zoneDoc.name\n const location = zoneName || 'Unknown Location'\n\n const name =\n (userDoc && `${userDoc.firstName} ${userDoc.lastName}`) || 'Unknown User'\n\n const title = 'Location Scan'\n\n return {\n location,\n timestamp,\n name,\n title,\n }\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/pdf/activity-report/index.js"],"names":["filter","find","groupBy","isEmpty","map","size","sortBy","take","toString","reduce","moment","Promise","generateDefinition","buildLocationScansContent","buildLocationScansBoundaries","horizontalLine","summaryStatTable","summaryWrapperTable","table","summaryFieldsTable","text","zebraFillColor","getLocationReference","getTimezoneAbbr","getTimezoneDatetime","launchIcon","DEFAULT_MAX_SCANS","MAX_ATTACHMENTS","LIGHTHOUSE_BASE_URL","maxFormsText","style","margin","buildActivityPdf","pdfOptions","data","timestamp","timezone","title","generateContent","content","fileTitle","type","buildActivitySection","activitySection","summarySection","buildSummarySection","titleTable","buildTitleTable","showAlternate","locationScans","buildLocationScansSection","buildOtherActivitySection","otherActivity","buildActivitySummarySection","activitySummary","audits","events","issues","maxScans","settings","tasks","enterEvents","event","exceedsMaxScans","scans","auditRows","getFormRowData","issueRows","scanRows","getScanRowData","taskRows","formCount","exceedsMaxForms","rows","sortedRows","header","body","layout","hLine","buildActivityTable","activityTable","activitySummarySection","maxScansText","link","push","timezoneAbbr","activityTableHeader","bold","alignment","location","icon","name","summaryFields","timezoneHour","format","showTzAbbr","iconCell","fit","image","hasSummaryFields","fields","fieldsTable","activityTableRow","colSpan","dontBreakRows","headerRow","hLineWidth","paddingLeft","paddingRight","paddingTop","paddingBottom","vLineWidth","widths","activityTableRows","activityTableBody","fillColor","start","zones","hourIntervalBoundaries","hourIntervalColumnHeaders","columns","interval","index","intervals","scansTableHeader","sortedZones","groupedEventsByZone","memo","zone","zoneEvents","_id","scansTableRows","sortedGroup","locationScansByInterval","locationScansByIntervalContent","totalEvents","zoneDoc","doc","zoneName","scansTableBody","scansTable","eventsByType","enterEventsCount","enter","issuesCount","tasksCount","auditsCount","auditsText","issuesText","scansText","tasksText","auditsCountText","scansCountText","issuesCountText","tasksCountText","auditTable","scanTable","issueTable","taskTables","wrapperTable","otherActivitySummarySection","end","address","headerTitle","headerSubTitle","addressText","street","city","state","postalCode","headerAddress","mTimezoneStart","tz","mTimezoneEnd","rangeStart","rangeEnd","add","startOf","headerRange","collection","locations","users","document","createdAt","entry","user","entity","userDoc","firstName","lastName"],"mappings":";;;;;;;;;AAAA,SACEA,MADF,EAEEC,IAFF,EAGEC,OAHF,EAIEC,OAJF,EAKEC,GALF,EAMEC,IANF,EAOEC,MAPF,EAQEC,IARF,EASEC,QATF,EAUEC,MAVF,QAWO,QAXP;AAaA,OAAOC,MAAP,MAAmB,iBAAnB;AACA,OAAOC,OAAP,MAAoB,UAApB;AAEA,SACEC,kBADF,EAEEC,yBAFF,EAGEC,4BAHF,EAIEC,cAJF,EAKEC,gBALF,EAMEC,mBANF,EAOEC,KAPF,EAQEC,kBARF,EASEC,IATF,EAUEC,cAVF,QAWO,YAXP;AAaA,SACEC,oBADF,EAEEC,eAFF,EAGEC,mBAHF,QAIO,eAJP;AAKA,SAASC,UAAT,QAA2B,cAA3B;AAEA,IAAMC,iBAAiB,GAAG,GAA1B;AACA,IAAMC,eAAe,GAAG,GAAxB;AACA,IAAMC,mBAAmB,GAAG,2BAA5B;AAEA,IAAMC,YAAY,GAAG;AACnBT,EAAAA,IAAI,EAAE,CACJA,IAAI,4FACkFO,eADlF,QADA,EAIJP,IAAI,CACF,wMADE,CAJA,CADa;AASnBU,EAAAA,KAAK,EAAE,OATY;AAUnBC,EAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,EAAJ,EAAQ,CAAR,EAAW,EAAX;AAVW,CAArB;AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,gBAAsBC,gBAAtB;AAAA;AAAA;;;+EAAO,iBAAgCC,UAAhC,EAA4CC,IAA5C;AAAA;AAAA;AAAA;AAAA;AAAA;AACGC,YAAAA,SADH,GAC2BD,IAD3B,CACGC,SADH,EACcC,QADd,GAC2BF,IAD3B,CACcE,QADd;AAGCC,YAAAA,KAHD,GAGS,uBAHT;AAAA;AAAA,mBAIiBC,eAAe,CAACJ,IAAD,CAJhC;;AAAA;AAICK,YAAAA,OAJD;AAAA,6CAME3B,kBAAkB;AACvB2B,cAAAA,OAAO,EAAPA,OADuB;AAEvBC,cAAAA,SAAS,EAAEH,KAFY;AAGvBF,cAAAA,SAAS,EAATA,SAHuB;AAIvBC,cAAAA,QAAQ,EAARA,QAJuB;AAKvBK,cAAAA,IAAI,EAAE;AALiB,eAMpBR,UANoB,EANpB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SAgBQK,e;;;;;8EAAf,kBAA+BJ,IAA/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBACgCQ,oBAAoB,CAACR,IAAD,CADpD;;AAAA;AACQS,YAAAA,eADR;AAEQC,YAAAA,cAFR,GAEyBC,mBAAmB,CAACX,IAAD,CAF5C;AAGQY,YAAAA,UAHR,GAGqBC,eAAe,CAACb,IAAD,CAHpC;AAAA,8CAKS,CAACY,UAAD,EAAaF,cAAb,EAA6BD,eAA7B,CALT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SAQeD,oB;;;;;mFAAf,kBAAoCR,IAApC;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,kCACoCA,IADpC,CACUc,aADV,EACUA,aADV,oCAC0B,KAD1B;;AAAA,iBAGMA,aAHN;AAAA;AAAA;AAAA;;AAIUC,YAAAA,aAJV,GAI0BC,yBAAyB,CAAChB,IAAD,CAJnD;AAAA;AAAA,mBAKgCiB,yBAAyB,CAACjB,IAAD,CALzD;;AAAA;AAKUkB,YAAAA,aALV;AAAA,8CAOW,CAACH,aAAD,EAAgBG,aAAhB,CAPX;;AAAA;AAAA;AAAA,mBAUgCC,2BAA2B,CAACnB,IAAD,CAV3D;;AAAA;AAUQoB,YAAAA,eAVR;AAAA,8CAYS,CAACA,eAAD,CAZT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SAeeD,2B;;;;;0FAAf,kBAA2CnB,IAA3C;AAAA;;AAAA;AAAA;AAAA;AAAA;AAEIqB,YAAAA,MAFJ,GASMrB,IATN,CAEIqB,MAFJ,EAGIC,MAHJ,GASMtB,IATN,CAGIsB,MAHJ,EAIIC,MAJJ,GASMvB,IATN,CAIIuB,MAJJ,mBASMvB,IATN,CAKIwB,QALJ,EAKIA,QALJ,+BAKehC,iBALf,mBAMIiC,QANJ,GASMzB,IATN,CAMIyB,QANJ,EAOIC,KAPJ,GASM1B,IATN,CAOI0B,KAPJ,EAQIxB,QARJ,GASMF,IATN,CAQIE,QARJ;AAWQyB,YAAAA,WAXR,GAWsB7D,MAAM,CAACwD,MAAD,EAAS,UAAAM,KAAK;AAAA,qBAAIA,KAAK,CAACrB,IAAN,KAAe,OAAnB;AAAA,aAAd,CAX5B;AAYQsB,YAAAA,eAZR,GAY0B1D,IAAI,CAACwD,WAAD,CAAJ,GAAoBH,QAZ9C;AAaQM,YAAAA,KAbR,GAagBzD,IAAI,CAACsD,WAAD,EAAcH,QAAd,CAbpB;AAeQO,YAAAA,SAfR,GAeoB7D,GAAG,CAACmD,MAAD,EAASW,cAAc,CAAC,QAAD,EAAWhC,IAAX,CAAvB,CAfvB;AAgBQiC,YAAAA,SAhBR,GAgBoB/D,GAAG,CAACqD,MAAD,EAASS,cAAc,CAAC,QAAD,EAAWhC,IAAX,CAAvB,CAhBvB;AAiBQkC,YAAAA,QAjBR,GAiBmBhE,GAAG,CAAC4D,KAAD,EAAQK,cAAc,CAACnC,IAAD,CAAtB,CAjBtB;AAkBQoC,YAAAA,QAlBR,GAkBmBlE,GAAG,CAACwD,KAAD,EAAQM,cAAc,CAAC,OAAD,EAAUhC,IAAV,CAAtB,CAlBtB;AAoBQqC,YAAAA,SApBR,GAoBoBlE,IAAI,8BAAK4D,SAAL,sBAAmBE,SAAnB,sBAAiCG,QAAjC,GApBxB;AAqBQE,YAAAA,eArBR,GAqB0BD,SAAS,GAAG5C,eArBtC;AAuBQ8C,YAAAA,IAvBR,gCAuBmBR,SAvBnB,sBAuBiCE,SAvBjC,sBAuB+CC,QAvB/C,sBAuB4DE,QAvB5D;AAwBQI,YAAAA,UAxBR,GAwBqBpE,MAAM,CAACmE,IAAD,EAAO,CAAC,WAAD,CAAP,EAAsB,CAAC,KAAD,CAAtB,CAxB3B;AAyBQpC,YAAAA,KAzBR,GAyBgBjB,IAAI,CAAC,kBAAD,EAAqB;AAAEU,cAAAA,KAAK,EAAE;AAAT,aAArB,CAzBpB;AA2BQ6C,YAAAA,MA3BR,GA2BiBzD,KAAK,CAAC;AACnB0D,cAAAA,IAAI,EAAE,CAAC,CAACvC,KAAD,CAAD,CADa;AAEnBwC,cAAAA,MAAM,EAAE,WAFW;AAGnB/C,cAAAA,KAAK,EAAE;AAHY,aAAD,CA3BtB;AAiCQgD,YAAAA,KAjCR,GAiCgB/D,cAAc,EAjC9B;AAAA;AAAA,mBAkC8BgE,kBAAkB,CAAC;AAC7CN,cAAAA,IAAI,EAAEC,UADuC;AAE7Cf,cAAAA,QAAQ,EAARA,QAF6C;AAG7CvB,cAAAA,QAAQ,EAARA;AAH6C,aAAD,CAlChD;;AAAA;AAkCQ4C,YAAAA,aAlCR;AAuCQC,YAAAA,sBAvCR,GAuCiC,CAACN,MAAD,EAASG,KAAT,EAAgBE,aAAhB,CAvCjC;;AAyCE,gBAAIjB,eAAJ,EAAqB;AACbmB,cAAAA,YADa,GACE;AACnB9D,gBAAAA,IAAI,EAAE,CACJA,IAAI,iFACuEsC,QADvE,OADA,EAIJtC,IAAI,CAAC,oCAAD,CAJA,EAKJA,IAAI,CAAC,mBAAD,EAAsB;AACxB+D,kBAAAA,IAAI,YAAKvD,mBAAL;AADoB,iBAAtB,CALA,EAQJR,IAAI,CAAC,wCAAD,CARA,CADa;AAWnBU,gBAAAA,KAAK,EAAE,OAXY;AAYnBC,gBAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,EAAJ,EAAQ,CAAR,EAAW,EAAX;AAZW,eADF;AAgBnBkD,cAAAA,sBAAsB,CAACG,IAAvB,CAA4BF,YAA5B;AACD;;AAED,gBAAIV,eAAJ,EAAqB;AACnBS,cAAAA,sBAAsB,CAACG,IAAvB,CAA4BvD,YAA5B;AACD;;AA9DH,8CAgESoD,sBAhET;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SAmEeF,kB;;;;;iFAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoCN,YAAAA,IAApC,QAAoCA,IAApC,EAA0Cd,QAA1C,QAA0CA,QAA1C,EAAoDvB,QAApD,QAAoDA,QAApD;AACQiD,YAAAA,YADR,GACuB9D,eAAe,CAACa,QAAD,CADtC;AAGQkD,YAAAA,mBAHR,GAG8B,CAC1BlE,IAAI,CAAC,UAAD,EAAa;AAAEmE,cAAAA,IAAI,EAAE;AAAR,aAAb,CADsB,EAE1B;AAAEnE,cAAAA,IAAI,EAAE;AAAR,aAF0B,EAEZ;AACdA,YAAAA,IAAI,CAAC,UAAD,EAAa;AAAEmE,cAAAA,IAAI,EAAE;AAAR,aAAb,CAHsB,EAI1BnE,IAAI,CAAC,MAAD,EAAS;AAAEmE,cAAAA,IAAI,EAAE;AAAR,aAAT,CAJsB,EAK1BnE,IAAI,sBAAeiE,YAAf,QAAgC;AAAEG,cAAAA,SAAS,EAAE,OAAb;AAAsBD,cAAAA,IAAI,EAAE;AAA5B,aAAhC,CALsB,CAH9B;AAAA;AAAA,mBAWkC5E,OAAO,CAACP,GAAR,CAAYqE,IAAZ;AAAA,mFAAkB,kBAAevC,IAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AACxCiD,wBAAAA,IADwC,GACwBjD,IADxB,CACxCiD,IADwC,EAClCM,QADkC,GACwBvD,IADxB,CAClCuD,QADkC,EACxBC,IADwB,GACwBxD,IADxB,CACxBwD,IADwB,EAClBC,IADkB,GACwBzD,IADxB,CAClByD,IADkB,EACZC,aADY,GACwB1D,IADxB,CACZ0D,aADY,EACGzD,SADH,GACwBD,IADxB,CACGC,SADH,EACcE,KADd,GACwBH,IADxB,CACcG,KADd;AAG1CwD,wBAAAA,YAH0C,GAG3BrE,mBAAmB,CAAC;AACvCsE,0BAAAA,MAAM,EAAE,eAD+B;AAEvCC,0BAAAA,UAAU,EAAE,KAF2B;AAGvC5D,0BAAAA,SAAS,EAATA,SAHuC;AAIvCC,0BAAAA,QAAQ,EAARA;AAJuC,yBAAD,CAHQ;AAU1C4D,wBAAAA,QAV0C,GAU/BN,IAAI,GACjB;AAAEF,0BAAAA,SAAS,EAAE,QAAb;AAAuBS,0BAAAA,GAAG,EAAE,CAAC,CAAD,EAAI,CAAJ,CAA5B;AAAoCC,0BAAAA,KAAK,EAAER,IAA3C;AAAiDP,0BAAAA,IAAI,EAAJA;AAAjD,yBADiB,GAEjB;AAAE/D,0BAAAA,IAAI,EAAE;AAAR,yBAZ4C,EAchD;AACA;;AACMqD,wBAAAA,IAhB0C,GAgBnC,CACX,CACErD,IAAI,CAACiB,KAAD,EAAQ;AAAE8C,0BAAAA,IAAI,EAAJA;AAAF,yBAAR,CADN,EAEEa,QAFF,EAGE5E,IAAI,CAACqE,QAAD,EAAW;AAAEN,0BAAAA,IAAI,EAAJA;AAAF,yBAAX,CAHN,EAIE/D,IAAI,CAACuE,IAAD,EAAO;AAAER,0BAAAA,IAAI,EAAJA;AAAF,yBAAP,CAJN,EAKE/D,IAAI,CAACyE,YAAD,EAAe;AAAEL,0BAAAA,SAAS,EAAE,OAAb;AAAsBL,0BAAAA,IAAI,EAAJA;AAAtB,yBAAf,CALN,CADW,CAhBmC;AA0B1CgB,wBAAAA,gBA1B0C,GA0BvB,CAAChG,OAAO,CAACyF,aAAD,CA1Be;;AAAA,6BA4B5CO,gBA5B4C;AAAA;AAAA;AAAA;;AAAA;AAAA,+BA6BpBhF,kBAAkB,CAAC;AAC3CiF,0BAAAA,MAAM,EAAER,aADmC;AAE3CjC,0BAAAA,QAAQ,EAARA,QAF2C;AAG3CvB,0BAAAA,QAAQ,EAARA;AAH2C,yBAAD,CA7BE;;AAAA;AA6BxCiE,wBAAAA,WA7BwC;AAkC9C5B,wBAAAA,IAAI,CAACW,IAAL,CAAU,CAACiB,WAAD,CAAV;;AAlC8C;AAqChD;AACA;AACMC,wBAAAA,gBAvC0C,GAuCvB,CACvBpF,KAAK,CAAC;AACJ0D,0BAAAA,IAAI,YAAMH,IAAN,CADA;AAEJ8B,0BAAAA,OAAO,EAAE,CAFL;AAGJC,0BAAAA,aAAa,EAAE,IAHX;AAIJC,0BAAAA,SAAS,EAAE,CAJP;AAKJ5B,0BAAAA,MAAM,EAAE;AACN6B,4BAAAA,UAAU,EAAE;AAAA,qCAAM,CAAN;AAAA,6BADN;AAENC,4BAAAA,WAAW,EAAE;AAAA,qCAAM,CAAN;AAAA,6BAFP;AAGNC,4BAAAA,YAAY,EAAE;AAAA,qCAAM,CAAN;AAAA,6BAHR;AAINC,4BAAAA,UAAU,EAAE;AAAA,qCAAM,CAAN;AAAA,6BAJN;AAKNC,4BAAAA,aAAa,EAAE;AAAA,qCAAM,CAAN;AAAA,6BALT;AAMNC,4BAAAA,UAAU,EAAE;AAAA,qCAAM,CAAN;AAAA;AANN,2BALJ;AAaJ;AACA;AACA;AACAC,0BAAAA,MAAM,EAAE,CAAC,GAAD,EAAM,EAAN,EAAU,GAAV,EAAe,GAAf,EAAoB,GAApB;AAhBJ,yBAAD,CADkB,CAvCuB;AAAA,0DA4DzCV,gBA5DyC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAlB;;AAAA;AAAA;AAAA;AAAA,gBAXlC;;AAAA;AAWQW,YAAAA,iBAXR;AA0EQC,YAAAA,iBA1ER,GA0E4B/G,OAAO,CAAC8G,iBAAD,CAAP,GACtB,CAAC,CAAC7F,IAAI,CAAC,mBAAD,EAAsB;AAAEmF,cAAAA,OAAO,EAAE;AAAX,aAAtB,CAAL,CAAD,CADsB,GAEtBU,iBA5EN;AA8EQjC,YAAAA,aA9ER,GA8EwB9D,KAAK,CAAC;AAC1B0D,cAAAA,IAAI,GAAGU,mBAAH,4BAA2B4B,iBAA3B,EADsB;AAE1BV,cAAAA,aAAa,EAAE,IAFW;AAG1B3B,cAAAA,MAAM,EAAE;AACN6B,gBAAAA,UAAU,EAAE;AAAA,yBAAM,CAAN;AAAA,iBADN;AAENS,gBAAAA,SAAS,EAAE9F,cAFL;AAGNsF,gBAAAA,WAAW,EAAE;AAAA,yBAAM,CAAN;AAAA,iBAHP;AAINC,gBAAAA,YAAY,EAAE;AAAA,yBAAM,CAAN;AAAA,iBAJR;AAKNC,gBAAAA,UAAU,EAAE;AAAA,yBAAM,CAAN;AAAA,iBALN;AAMNC,gBAAAA,aAAa,EAAE;AAAA,yBAAM,CAAN;AAAA,iBANT;AAONC,gBAAAA,UAAU,EAAE;AAAA,yBAAM,CAAN;AAAA;AAPN,eAHkB;AAY1BC,cAAAA,MAAM,EAAE,CAAC,GAAD,EAAM,EAAN,EAAU,GAAV,EAAe,GAAf,EAAoB,GAApB;AAZkB,aAAD,CA9E7B;AAAA,8CA6FShC,aA7FT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAgGA,SAAS9B,yBAAT,CAAmChB,IAAnC,EAAyC;AAAA,MAC/BsB,MAD+B,GACItB,IADJ,CAC/BsB,MAD+B;AAAA,MACvB4D,KADuB,GACIlF,IADJ,CACvBkF,KADuB;AAAA,MAChBhF,QADgB,GACIF,IADJ,CAChBE,QADgB;AAAA,MACNiF,KADM,GACInF,IADJ,CACNmF,KADM;AAGvC,MAAMhF,KAAK,GAAGjB,IAAI,CAAC,gBAAD,EAAmB;AAAEU,IAAAA,KAAK,EAAE;AAAT,GAAnB,CAAlB;AAEA,MAAM6C,MAAM,GAAGzD,KAAK,CAAC;AACnB0D,IAAAA,IAAI,EAAE,CAAC,CAACvC,KAAD,CAAD,CADa;AAEnBwC,IAAAA,MAAM,EAAE,WAFW;AAGnB/C,IAAAA,KAAK,EAAE;AAHY,GAAD,CAApB,CALuC,CAWvC;;AACA,MAAMwF,sBAAsB,GAAGxG,4BAA4B,CAACsG,KAAD,EAAQhF,QAAR,CAA3D,CAZuC,CAcvC;;AACA,MAAMmF,yBAAyB,GAAGD,sBAAsB,CAAC7G,MAAvB,CAChC,UAAC+G,OAAD,EAAUC,QAAV,EAAoBC,KAApB,EAA2BC,SAA3B,EAAyC;AACvC,QAAID,KAAK,GAAGrH,IAAI,CAACsH,SAAD,CAAJ,GAAkB,CAA9B,EACE;AACAH,MAAAA,OAAO,CAACpC,IAAR,CACEhE,IAAI,WAAIqG,QAAQ,CAAC3B,MAAT,CAAgB,GAAhB,CAAJ,cAA4B6B,SAAS,CAACD,KAAK,GAAG,CAAT,CAAT,CAAqB5B,MAArB,CAA4B,IAA5B,CAA5B,GAAiE;AACnEN,QAAAA,SAAS,EAAE,QADwD;AAEnED,QAAAA,IAAI,EAAE;AAF6D,OAAjE,CADN;AAMF,WAAOiC,OAAP;AACD,GAX+B,EAYhC,EAZgC,CAAlC;AAeA,MAAMI,gBAAgB,IACpBxG,IAAI,CAAC,UAAD,EAAa;AAAEmE,IAAAA,IAAI,EAAE;AAAR,GAAb,CADgB,4BAEjBgC,yBAFiB,IAGpBnG,IAAI,CAAC,OAAD,EAAU;AAAEoE,IAAAA,SAAS,EAAE,OAAb;AAAsBD,IAAAA,IAAI,EAAE;AAA5B,GAAV,CAHgB,EAAtB;AAMA,MAAMT,KAAK,GAAG/D,cAAc,EAA5B,CApCuC,CAsCvC;;AACA,MAAM8C,WAAW,GAAG7D,MAAM,CAACwD,MAAD,EAAS,UAAAM,KAAK;AAAA,WAAIA,KAAK,CAACrB,IAAN,KAAe,OAAnB;AAAA,GAAd,CAA1B;AACA,MAAMoF,WAAW,GAAGvH,MAAM,CAAC+G,KAAD,EAAQ,CAAC,MAAD,CAAR,CAA1B;AAEA,MAAMS,mBAAmB,GAAGrH,MAAM,CAChCoH,WADgC,EAEhC,UAACE,IAAD,EAAOC,IAAP,EAAgB;AACd,QAAMC,UAAU,GAAGjI,MAAM,CACvB6D,WADuB,EAEvB,UAAAC,KAAK;AAAA,aAAIA,KAAK,CAACkE,IAAN,IAAclE,KAAK,CAACkE,IAAN,CAAWxH,QAAX,OAA0BwH,IAAI,CAACE,GAAL,CAAS1H,QAAT,EAA5C;AAAA,KAFkB,CAAzB;AAIAuH,IAAAA,IAAI,CAACC,IAAI,CAACE,GAAN,CAAJ,GAAiBD,UAAjB;AACA,WAAOF,IAAP;AACD,GAT+B,EAUhC,EAVgC,CAAlC;AAaA,MAAMI,cAAc,GAAG/H,GAAG,CAAC0H,mBAAD,EAAsB,UAACtE,MAAD,EAAuB;AAAA,QAAdwE,IAAc,uEAAP,EAAO;AACrE,QAAMI,WAAW,GAAG9H,MAAM,CAACkD,MAAD,EAAS,CAAC,WAAD,CAAT,EAAwB,CAAC,KAAD,CAAxB,CAA1B,CADqE,CAGrE;;AACA,QAAM6E,uBAAuB,GAAGxH,yBAAyB,CACvDyG,sBADuD,EAEvD9D,MAFuD,CAAzD,CAJqE,CAQrE;;AACA,QAAM8E,8BAA8B,GAAGD,uBAAuB,CAACjI,GAAxB,CACrC,UAAAqH,QAAQ,EAAI;AACV,aAAO;AAAEjC,QAAAA,SAAS,EAAE,QAAb;AAAuBpE,QAAAA,IAAI,EAAEf,IAAI,CAACoH,QAAD;AAAjC,OAAP;AACD,KAHoC,CAAvC;AAMA,QAAMc,WAAW,GAAGlI,IAAI,CAAC+H,WAAD,CAAxB;AAEA,QAAMI,OAAO,GACXR,IAAI,IAAI/H,IAAI,CAACoH,KAAD,EAAQ,UAAAoB,GAAG;AAAA,aAAIA,GAAG,CAACP,GAAJ,CAAQ1H,QAAR,OAAuBwH,IAAI,CAACxH,QAAL,EAA3B;AAAA,KAAX,CADd;AAEA,QAAMkI,QAAQ,GAAIF,OAAO,IAAIA,OAAO,CAAC7C,IAApB,IAA6B,kBAA9C;AAEA,YACE+C,QADF,4BAEKJ,8BAFL,IAGE;AAAE9C,MAAAA,SAAS,EAAE,OAAb;AAAsBD,MAAAA,IAAI,EAAE,IAA5B;AAAkCnE,MAAAA,IAAI,EAAEmH;AAAxC,KAHF;AAKD,GA1ByB,CAA1B;AA4BA,MAAMI,cAAc,GAAGxI,OAAO,CAACgI,cAAD,CAAP,GACnB,CAAC,CAAC/G,IAAI,CAAC,mBAAD,EAAsB;AAAEmF,IAAAA,OAAO,EAAE;AAAX,GAAtB,CAAL,CAAD,CADmB,GAEnB4B,cAFJ;AAIA,MAAMS,UAAU,GAAG1H,KAAK,CAAC;AACvB0D,IAAAA,IAAI,GAAGgD,gBAAH,4BAAwBe,cAAxB,EADmB;AAEvB3B,IAAAA,MAAM,EAAE,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,EAAqB,GAArB,EAA0B,GAA1B,EAA+B,GAA/B,EAAoC,GAApC,EAAyC,GAAzC,EAA8C,GAA9C;AAFe,GAAD,CAAxB;AAKA,SAAO,CAACrC,MAAD,EAASG,KAAT,EAAgB8D,UAAhB,CAAP;AACD;;AAED,SAAS/F,mBAAT,CAA6BX,IAA7B,EAAmC;AAAA,MACzBqB,MADyB,GACSrB,IADT,CACzBqB,MADyB;AAAA,MACjBC,MADiB,GACStB,IADT,CACjBsB,MADiB;AAAA,MACTC,MADS,GACSvB,IADT,CACTuB,MADS;AAAA,MACDG,KADC,GACS1B,IADT,CACD0B,KADC,EAGjC;;AACA,MAAMiF,YAAY,GAAG3I,OAAO,CAACsD,MAAD,EAAS,MAAT,CAA5B;AAEA,MAAMsF,gBAAgB,GAAGzI,IAAI,CAACwI,YAAY,CAACE,KAAd,CAA7B,CANiC,CAOjC;;AACA,MAAMC,WAAW,GAAG3I,IAAI,CAACoD,MAAD,CAAxB;AACA,MAAMwF,UAAU,GAAG5I,IAAI,CAACuD,KAAD,CAAvB;AACA,MAAMsF,WAAW,GAAG7I,IAAI,CAACkD,MAAD,CAAxB,CAViC,CAWjC;;AAEA,MAAM4F,UAAU,GAAG/H,IAAI,CAAC,QAAD,EAAW;AAAEU,IAAAA,KAAK,EAAE;AAAT,GAAX,CAAvB,CAbiC,CAcjC;;AACA,MAAMsH,UAAU,GAAGhI,IAAI,CAAC,QAAD,EAAW;AAAEU,IAAAA,KAAK,EAAE;AAAT,GAAX,CAAvB,CAfiC,CAgBjC;;AACA,MAAMuH,SAAS,GAAGjI,IAAI,CAAC,OAAD,EAAU;AAAEU,IAAAA,KAAK,EAAE;AAAT,GAAV,CAAtB;AACA,MAAMwH,SAAS,GAAGlI,IAAI,CAAC,OAAD,EAAU;AAAEU,IAAAA,KAAK,EAAE;AAAT,GAAV,CAAtB;AAEA,MAAMyH,eAAe,GAAGnI,IAAI,CAACZ,QAAQ,CAAC0I,WAAD,CAAT,EAAwB;AAAEpH,IAAAA,KAAK,EAAE;AAAT,GAAxB,CAA5B,CApBiC,CAqBjC;;AACA,MAAM0H,cAAc,GAAGpI,IAAI,CAACZ,QAAQ,CAACsI,gBAAD,CAAT,EAA6B;AACtDhH,IAAAA,KAAK,EAAE;AAD+C,GAA7B,CAA3B,CAtBiC,CAyBjC;;AACA,MAAM2H,eAAe,GAAGrI,IAAI,CAACZ,QAAQ,CAACwI,WAAD,CAAT,EAAwB;AAAElH,IAAAA,KAAK,EAAE;AAAT,GAAxB,CAA5B;AACA,MAAM4H,cAAc,GAAGtI,IAAI,CAACZ,QAAQ,CAACyI,UAAD,CAAT,EAAuB;AAAEnH,IAAAA,KAAK,EAAE;AAAT,GAAvB,CAA3B;AAEA,MAAM6H,UAAU,GAAG3I,gBAAgB,CAAC;AAClC4D,IAAAA,IAAI,EAAE,CAAC,CAACuE,UAAD,CAAD,EAAe,CAACI,eAAD,CAAf;AAD4B,GAAD,CAAnC,CA7BiC,CAgCjC;AACA;AACA;AACA;;AACA,MAAMK,SAAS,GAAG5I,gBAAgB,CAAC;AAAE4D,IAAAA,IAAI,EAAE,CAAC,CAACyE,SAAD,CAAD,EAAc,CAACG,cAAD,CAAd;AAAR,GAAD,CAAlC;AACA,MAAMK,UAAU,GAAG7I,gBAAgB,CAAC;AAClC4D,IAAAA,IAAI,EAAE,CAAC,CAACwE,UAAD,CAAD,EAAe,CAACK,eAAD,CAAf;AAD4B,GAAD,CAAnC;AAGA,MAAMK,UAAU,GAAG9I,gBAAgB,CAAC;AAAE4D,IAAAA,IAAI,EAAE,CAAC,CAAC0E,SAAD,CAAD,EAAc,CAACI,cAAD,CAAd;AAAR,GAAD,CAAnC;AAEA,MAAMK,YAAY,GAAG9I,mBAAmB,CAAC;AACvC2D,IAAAA,IAAI,EAAE,CACJ;AACE;;AACA;AACAgF,IAAAA,SAHF,EAIEC,UAJF,EAKEC,UALF,EAMEH,UANF,CADI;AADiC,GAAD,CAAxC;AAaA,SAAOI,YAAP;AACD;;SAEc5G,yB;;;;;wFAAf,kBAAyCjB,IAAzC;AAAA;AAAA;AAAA;AAAA;AAAA;AACUqB,YAAAA,MADV,GACwDrB,IADxD,CACUqB,MADV,EACkBE,MADlB,GACwDvB,IADxD,CACkBuB,MADlB,EAC0BG,KAD1B,GACwD1B,IADxD,CAC0B0B,KAD1B,EACiCD,QADjC,GACwDzB,IADxD,CACiCyB,QADjC,EAC2CvB,QAD3C,GACwDF,IADxD,CAC2CE,QAD3C;AAGQ6B,YAAAA,SAHR,GAGoB7D,GAAG,CAACmD,MAAD,EAASW,cAAc,CAAC,QAAD,EAAWhC,IAAX,CAAvB,CAHvB;AAIQiC,YAAAA,SAJR,GAIoB/D,GAAG,CAACqD,MAAD,EAASS,cAAc,CAAC,QAAD,EAAWhC,IAAX,CAAvB,CAJvB;AAKQoC,YAAAA,QALR,GAKmBlE,GAAG,CAACwD,KAAD,EAAQM,cAAc,CAAC,OAAD,EAAUhC,IAAV,CAAtB,CALtB;AAOQuC,YAAAA,IAPR,gCAOmBR,SAPnB,sBAOiCE,SAPjC,sBAO+CG,QAP/C;AAQQI,YAAAA,UARR,GAQqBpE,MAAM,CAACmE,IAAD,EAAO,CAAC,WAAD,CAAP,EAAsB,CAAC,KAAD,CAAtB,CAR3B;AASQpC,YAAAA,KATR,GASgBjB,IAAI,CAAC,gBAAD,EAAmB;AAAEU,cAAAA,KAAK,EAAE;AAAT,aAAnB,CATpB;AAWQ6C,YAAAA,MAXR,GAWiBzD,KAAK,CAAC;AACnB0D,cAAAA,IAAI,EAAE,CAAC,CAACvC,KAAD,CAAD,CADa;AAEnBwC,cAAAA,MAAM,EAAE,WAFW;AAGnB/C,cAAAA,KAAK,EAAE;AAHY,aAAD,CAXtB;AAiBQgD,YAAAA,KAjBR,GAiBgB/D,cAAc,EAjB9B;AAAA;AAAA,mBAkB8BgE,kBAAkB,CAAC;AAC7CN,cAAAA,IAAI,EAAEC,UADuC;AAE7Cf,cAAAA,QAAQ,EAARA,QAF6C;AAG7CvB,cAAAA,QAAQ,EAARA;AAH6C,aAAD,CAlBhD;;AAAA;AAkBQ4C,YAAAA,aAlBR;AAwBQgF,YAAAA,2BAxBR,GAwBsC,CAACrF,MAAD,EAASG,KAAT,EAAgBE,aAAhB,CAxBtC;AA0BQT,YAAAA,SA1BR,GA0BoBlE,IAAI,CAACoE,IAAD,CA1BxB;AA2BQD,YAAAA,eA3BR,GA2B0BD,SAAS,GAAG5C,eA3BtC;;AA6BE,gBAAI6C,eAAJ,EAAqB;AACnBS,cAAAA,sBAAsB,CAACG,IAAvB,CAA4BvD,YAA5B;AACD;;AA/BH,8CAiCSmI,2BAjCT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAoCA,SAASjH,eAAT,CAAyBb,IAAzB,EAA+B;AAAA,MACrBuD,QADqB,GACcvD,IADd,CACrBuD,QADqB;AAAA,MACX2B,KADW,GACclF,IADd,CACXkF,KADW;AAAA,MACJ6C,GADI,GACc/H,IADd,CACJ+H,GADI;AAAA,MACC7H,QADD,GACcF,IADd,CACCE,QADD;AAAA,0BAEJqD,QAFI,CAErByE,OAFqB;AAAA,MAErBA,OAFqB,kCAEX,EAFW;AAI7B,MAAMC,WAAW,GAAG/I,IAAI,CAAC,uBAAD,EAA0B;AAAEU,IAAAA,KAAK,EAAE;AAAT,GAA1B,CAAxB;AACA,MAAMsI,cAAc,GAAGhJ,IAAI,CAACqE,QAAQ,CAACE,IAAV,EAAgB;AAAE7D,IAAAA,KAAK,EAAE;AAAT,GAAhB,CAA3B;AACA,MAAMuI,WAAW,GAAG,CAAClK,OAAO,CAAC+J,OAAD,CAAR,aACbA,OAAO,CAACI,MADK,eACMJ,OAAO,CAACK,IAAR,IAAgB,EADtB,cAC4BL,OAAO,CAACM,KAAR,IAC1C,EAFc,cAERN,OAAO,CAACO,UAAR,IAAsB,EAFd,IAGhB,EAHJ;AAIA,MAAMC,aAAa,GAAGtJ,IAAI,CAACiJ,WAAD,EAAc;AAAEvI,IAAAA,KAAK,EAAE;AAAT,GAAd,CAA1B;AAEA,MAAM6I,cAAc,GAAGjK,MAAM,CAACkK,EAAP,CAAUxD,KAAV,EAAiBhF,QAAjB,CAAvB;AACA,MAAMyI,YAAY,GAAGnK,MAAM,CAACkK,EAAP,CAAUX,GAAV,EAAe7H,QAAf,CAArB;AACA,MAAMiD,YAAY,GAAG9D,eAAe,CAACa,QAAD,CAApC;AAEA,MAAM0I,UAAU,GAAGpK,MAAM,CAACiK,cAAD,CAAN,CAAuB7E,MAAvB,CAA8B,cAA9B,CAAnB;AAEA,MAAMiF,QAAQ,GAAGrK,MAAM,CAACmK,YAAD,CAAN,CACdG,GADc,CACV,CADU,EACP,MADO,EAEdC,OAFc,CAEN,MAFM,EAGdnF,MAHc,CAGP,cAHO,CAAjB;AAKA,MAAMoF,WAAW,GAAG9J,IAAI,WAAI0J,UAAJ,gBAAoBC,QAApB,eAAiC1F,YAAjC,QAAkD;AACxEvD,IAAAA,KAAK,EAAE;AADiE,GAAlD,CAAxB;AAIA,MAAM8C,IAAI,GAAG,CAACzE,OAAO,CAAC+J,OAAD,CAAR,GACT,CAAC,CAACC,WAAD,CAAD,EAAgB,CAACC,cAAD,CAAhB,EAAkC,CAACM,aAAD,CAAlC,EAAmD,CAACQ,WAAD,CAAnD,CADS,GAET,CAAC,CAACf,WAAD,CAAD,EAAgB,CAACC,cAAD,CAAhB,EAAkC,CAACc,WAAD,CAAlC,CAFJ;AAIA,SAAOhK,KAAK,CAAC;AACX0D,IAAAA,IAAI,EAAJA,IADW;AAEXC,IAAAA,MAAM,EAAE,WAFG;AAGX/C,IAAAA,KAAK,EAAE;AAHI,GAAD,CAAZ;AAKD;;AAED,SAASoC,cAAT,CAAwBiH,UAAxB,SAAiE;AAAA,MAA3BC,SAA2B,SAA3BA,SAA2B;AAAA,MAAhBC,KAAgB,SAAhBA,KAAgB;AAAA,MAAThE,KAAS,SAATA,KAAS;AAC/D,SAAO,UAAAiE,QAAQ,EAAI;AAAA,QAEfpD,GAFe,GAOboD,QAPa,CAEfpD,GAFe;AAAA,QAGfqD,SAHe,GAObD,QAPa,CAGfC,SAHe;AAAA,0BAObD,QAPa,CAIfE,KAJe;AAAA,QAIfA,KAJe,gCAIP,EAJO;AAAA,0BAObF,QAPa,CAKfjJ,KALe;AAAA,QAKfA,KALe,gCAKP,SALO;AAAA,yBAObiJ,QAPa,CAMfG,IANe;AAAA,QAMfA,IANe,+BAMR,EANQ;AASjB,QAAMhG,QAAQ,GAAGnE,oBAAoB,CAAC;AACpCoK,MAAAA,MAAM,EAAEJ,QAD4B;AAEpCF,MAAAA,SAAS,EAATA,SAFoC;AAGpC/D,MAAAA,KAAK,EAALA;AAHoC,KAAD,CAArC;AAMA,QAAMlC,IAAI,aAAMvD,mBAAN,sBAAqCuJ,UAArC,cAAmDjD,GAAnD,CAAV;AACA,QAAM/F,SAAS,GAAGoJ,SAAlB;AACA,QAAMI,OAAO,GAAG1L,IAAI,CAACoL,KAAD,EAAQ,UAAA5C,GAAG;AAAA,aAAIA,GAAG,CAACP,GAAJ,CAAQ1H,QAAR,OAAuBiL,IAAI,CAACjL,QAAL,EAA3B;AAAA,KAAX,CAApB;AACA,QAAMmF,IAAI,GACPgG,OAAO,cAAOA,OAAO,CAACC,SAAf,cAA4BD,OAAO,CAACE,QAApC,CAAR,IAA2D,cAD7D,CAlBiB,CAqBjB;AACA;;AACA,QAAMjG,aAAa,GAAG4F,KAAK,CAAC5F,aAAN,IAAuB,EAA7C;AAEA,WAAO;AACLF,MAAAA,IAAI,EAAEjE,UADD;AAELgE,MAAAA,QAAQ,EAARA,QAFK;AAGLN,MAAAA,IAAI,EAAJA,IAHK;AAILQ,MAAAA,IAAI,EAAJA,IAJK;AAKLC,MAAAA,aAAa,EAAbA,aALK;AAMLzD,MAAAA,SAAS,EAATA,SANK;AAOLE,MAAAA,KAAK,EAALA;AAPK,KAAP;AASD,GAlCD;AAmCD;;AAED,SAASgC,cAAT,QAA0C;AAAA,MAAhBgH,KAAgB,SAAhBA,KAAgB;AAAA,MAAThE,KAAS,SAATA,KAAS;AACxC,SAAO,UAAAiE,QAAQ,EAAI;AAAA,QACTnJ,SADS,GAC2BmJ,QAD3B,CACTnJ,SADS;AAAA,0BAC2BmJ,QAD3B,CACEG,IADF;AAAA,QACEA,IADF,gCACS,EADT;AAAA,yBAC2BH,QAD3B,CACatD,IADb;AAAA,QACaA,IADb,+BACoB,EADpB;AAGjB,QAAM2D,OAAO,GACXF,IAAI,IAAIxL,IAAI,CAACoL,KAAD,EAAQ,UAAA5C,GAAG;AAAA,aAAIA,GAAG,CAACP,GAAJ,CAAQ1H,QAAR,OAAuBiL,IAAI,CAACjL,QAAL,EAA3B;AAAA,KAAX,CADd;AAEA,QAAMgI,OAAO,GACXR,IAAI,IAAI/H,IAAI,CAACoH,KAAD,EAAQ,UAAAoB,GAAG;AAAA,aAAIA,GAAG,CAACP,GAAJ,CAAQ1H,QAAR,OAAuBwH,IAAI,CAACxH,QAAL,EAA3B;AAAA,KAAX,CADd;AAGA,QAAMkI,QAAQ,GAAGF,OAAO,IAAIA,OAAO,CAAC7C,IAApC;AACA,QAAMF,QAAQ,GAAGiD,QAAQ,IAAI,kBAA7B;AAEA,QAAM/C,IAAI,GACPgG,OAAO,cAAOA,OAAO,CAACC,SAAf,cAA4BD,OAAO,CAACE,QAApC,CAAR,IAA2D,cAD7D;AAGA,QAAMxJ,KAAK,GAAG,eAAd;AAEA,WAAO;AACLoD,MAAAA,QAAQ,EAARA,QADK;AAELtD,MAAAA,SAAS,EAATA,SAFK;AAGLwD,MAAAA,IAAI,EAAJA,IAHK;AAILtD,MAAAA,KAAK,EAALA;AAJK,KAAP;AAMD,GAtBD;AAuBD","sourcesContent":["import {\n filter,\n find,\n groupBy,\n isEmpty,\n map,\n size,\n sortBy,\n take,\n toString,\n reduce,\n} from 'lodash'\n\nimport moment from 'moment-timezone'\nimport Promise from 'bluebird'\n\nimport {\n generateDefinition,\n buildLocationScansContent,\n buildLocationScansBoundaries,\n horizontalLine,\n summaryStatTable,\n summaryWrapperTable,\n table,\n summaryFieldsTable,\n text,\n zebraFillColor,\n} from '../helpers'\n\nimport {\n getLocationReference,\n getTimezoneAbbr,\n getTimezoneDatetime,\n} from '../../helpers'\nimport { launchIcon } from '../../images'\n\nconst DEFAULT_MAX_SCANS = 200\nconst MAX_ATTACHMENTS = 100\nconst LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io'\n\nconst maxFormsText = {\n text: [\n text(\n `Detailed Form Submissions in the Daily Activity Report are limited to a total of ${MAX_ATTACHMENTS}. `\n ),\n text(\n 'To access individual Form Submissions, open the hyperlink next to the respective submission within the Other Activity table. Alternatively, they may be accessed in the Lighthouse Management Console.'\n ),\n ],\n style: 'small',\n margin: [0, 10, 0, 10],\n}\n\n/**\n * buildActivityPdf\n *\n * @param {object} pdfOptions - the pdf options\n * @param {string} pdfOptions.fileTitle - pdf file title\n * @param {function} pdfOptions.footer - function executed to generate footer\n * @param {function} pdfOptions.header - function executed to generate header\n * @param {string} pdfOptions.logoUrl - pdf logo url\n * @param {array} pdfOptions.pageMargins - pdf page margins\n * @param {string} pdfOptions.pageOrientation - pdf page orientation\n * @param {string} pdfOptions.pageSize - pdf page size\n * @param {object} pdfOptions.styles - pdf styles\n * @param {object} pdfOptions.title - pdf title\n * @param {object} data - pdf data\n * @param {array} data.audits - audit documents\n * @param {string} data.end - end datetime of summary report\n * @param {array} data.events - event documents\n * @param {object} data.location - location document\n * @param {array} data.locations - location documents\n * @param {array} data.issues - issue documents\n * @param {bool} data.maxScans - max scans to include in standard report\n * @param {bool} data.showAlternate - show alternate summary report\n * @param {string} data.start - start datetime of summary report\n * @param {object} data.settings - settings properties\n * @param {string} data.settings.awsS3BaseUrl - aws S3 base url\n * @param {string} data.settings.cloudinaryBaseUrl - cloudinary base url\n * @param {array} data.tasks - task documents\n * @param {string} data.timestamp - timestamp string\n * @param {string} data.timezone - timezone string\n * @param {array} data.zones - zone documents\n * @param {array} data.users - user documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport async function buildActivityPdf(pdfOptions, data) {\n const { timestamp, timezone } = data\n\n const title = 'Daily Activity Report'\n const content = await generateContent(data)\n\n return generateDefinition({\n content,\n fileTitle: title,\n timestamp,\n timezone,\n type: 'Activity Summary',\n ...pdfOptions,\n })\n}\n\nasync function generateContent(data) {\n const activitySection = await buildActivitySection(data)\n const summarySection = buildSummarySection(data)\n const titleTable = buildTitleTable(data)\n\n return [titleTable, summarySection, activitySection]\n}\n\nasync function buildActivitySection(data) {\n const { showAlternate = false } = data\n\n if (showAlternate) {\n const locationScans = buildLocationScansSection(data)\n const otherActivity = await buildOtherActivitySection(data)\n\n return [locationScans, otherActivity]\n }\n\n const activitySummary = await buildActivitySummarySection(data)\n\n return [activitySummary]\n}\n\nasync function buildActivitySummarySection(data) {\n const {\n audits,\n events,\n issues,\n maxScans = DEFAULT_MAX_SCANS,\n settings,\n tasks,\n timezone,\n } = data\n\n const enterEvents = filter(events, event => event.type === 'enter')\n const exceedsMaxScans = size(enterEvents) > maxScans\n const scans = take(enterEvents, maxScans)\n\n const auditRows = map(audits, getFormRowData('audits', data))\n const issueRows = map(issues, getFormRowData('issues', data))\n const scanRows = map(scans, getScanRowData(data))\n const taskRows = map(tasks, getFormRowData('tasks', data))\n\n const formCount = size([...auditRows, ...issueRows, ...taskRows])\n const exceedsMaxForms = formCount > MAX_ATTACHMENTS\n\n const rows = [...auditRows, ...issueRows, ...scanRows, ...taskRows]\n const sortedRows = sortBy(rows, ['timestamp'], ['asc'])\n const title = text('Activity Summary', { style: 'summarySectionHeader' })\n\n const header = table({\n body: [[title]],\n layout: 'noBorders',\n style: 'summaryHeaderTable',\n })\n\n const hLine = horizontalLine()\n const activityTable = await buildActivityTable({\n rows: sortedRows,\n settings,\n timezone,\n })\n const activitySummarySection = [header, hLine, activityTable]\n\n if (exceedsMaxScans) {\n const maxScansText = {\n text: [\n text(\n `Location Scans in the Daily Activity Report are limited to a total of ${maxScans}.`\n ),\n text(' To view all Location Scans visit '),\n text('the Events Report', {\n link: `${LIGHTHOUSE_BASE_URL}/reports/events`,\n }),\n text(' in the Lighthouse Management Console.'),\n ],\n style: 'small',\n margin: [0, 10, 0, 10],\n }\n\n activitySummarySection.push(maxScansText)\n }\n\n if (exceedsMaxForms) {\n activitySummarySection.push(maxFormsText)\n }\n\n return activitySummarySection\n}\n\nasync function buildActivityTable({ rows, settings, timezone }) {\n const timezoneAbbr = getTimezoneAbbr(timezone)\n\n const activityTableHeader = [\n text('Activity', { bold: true }),\n { text: '' }, // icon column\n text('Location', { bold: true }),\n text('User', { bold: true }),\n text(`Timestamp (${timezoneAbbr})`, { alignment: 'right', bold: true }),\n ]\n\n const activityTableRows = await Promise.map(rows, async function(data) {\n const { link, location, icon, name, summaryFields, timestamp, title } = data\n\n const timezoneHour = getTimezoneDatetime({\n format: 'ddd DD h:mm a',\n showTzAbbr: false,\n timestamp,\n timezone,\n })\n\n const iconCell = icon\n ? { alignment: 'center', fit: [8, 8], image: icon, link }\n : { text: '' }\n\n // NOTE: pass link to each column as\n // we can't wrap the entire table row\n const rows = [\n [\n text(title, { link }),\n iconCell,\n text(location, { link }),\n text(name, { link }),\n text(timezoneHour, { alignment: 'right', link }),\n ],\n ]\n\n const hasSummaryFields = !isEmpty(summaryFields)\n\n if (hasSummaryFields) {\n const fieldsTable = await summaryFieldsTable({\n fields: summaryFields,\n settings,\n timezone,\n })\n rows.push([fieldsTable])\n }\n\n // NOTE: we return a table per row which includes the entry details and the\n // summary fields if relevant\n const activityTableRow = [\n table({\n body: [...rows],\n colSpan: 5,\n dontBreakRows: true,\n headerRow: 0,\n layout: {\n hLineWidth: () => 0,\n paddingLeft: () => 0,\n paddingRight: () => 0,\n paddingTop: () => 5,\n paddingBottom: () => 5,\n vLineWidth: () => 0,\n },\n // NOTE: the timestamp must fill up the rest of the table space as\n // otherwise the padding would be off between this table and the parent\n // table that wraps it\n widths: [130, 25, 110, 110, '*'],\n }),\n ]\n\n return activityTableRow\n })\n\n const activityTableBody = isEmpty(activityTableRows)\n ? [[text('No other activity', { colSpan: 5 })]]\n : activityTableRows\n\n const activityTable = table({\n body: [activityTableHeader, ...activityTableBody],\n dontBreakRows: true,\n layout: {\n hLineWidth: () => 0,\n fillColor: zebraFillColor,\n paddingLeft: () => 5,\n paddingRight: () => 5,\n paddingTop: () => 5,\n paddingBottom: () => 5,\n vLineWidth: () => 0,\n },\n widths: [120, 15, 100, 100, '*'],\n })\n\n return activityTable\n}\n\nfunction buildLocationScansSection(data) {\n const { events, start, timezone, zones } = data\n\n const title = text('Location Scans', { style: 'summarySectionHeader' })\n\n const header = table({\n body: [[title]],\n layout: 'noBorders',\n style: 'summaryHeaderTable',\n })\n\n // use start time and timezone to figure out the interval boundaries\n const hourIntervalBoundaries = buildLocationScansBoundaries(start, timezone)\n\n // pair interval boundaries into column headers for the table\n const hourIntervalColumnHeaders = hourIntervalBoundaries.reduce(\n (columns, interval, index, intervals) => {\n if (index < size(intervals) - 1)\n // skip the final iteration as it's just the end of the last interval\n columns.push(\n text(`${interval.format('h')}-${intervals[index + 1].format('hA')}`, {\n alignment: 'center',\n bold: true,\n })\n )\n return columns\n },\n []\n )\n\n const scansTableHeader = [\n text('Location', { bold: true }),\n ...hourIntervalColumnHeaders,\n text('Total', { alignment: 'right', bold: true }),\n ]\n\n const hLine = horizontalLine()\n\n // NOTE: only show the enter events within the summary table\n const enterEvents = filter(events, event => event.type === 'enter')\n const sortedZones = sortBy(zones, ['name'])\n\n const groupedEventsByZone = reduce(\n sortedZones,\n (memo, zone) => {\n const zoneEvents = filter(\n enterEvents,\n event => event.zone && event.zone.toString() === zone._id.toString()\n )\n memo[zone._id] = zoneEvents\n return memo\n },\n {}\n )\n\n const scansTableRows = map(groupedEventsByZone, (events, zone = '') => {\n const sortedGroup = sortBy(events, ['timestamp'], ['asc'])\n\n // put events into interval buckets\n const locationScansByInterval = buildLocationScansContent(\n hourIntervalBoundaries,\n events\n )\n // map the interval buckets to a format fit for the table\n const locationScansByIntervalContent = locationScansByInterval.map(\n interval => {\n return { alignment: 'center', text: size(interval) }\n }\n )\n\n const totalEvents = size(sortedGroup)\n\n const zoneDoc =\n zone && find(zones, doc => doc._id.toString() === zone.toString())\n const zoneName = (zoneDoc && zoneDoc.name) || 'Unknown Location'\n\n return [\n zoneName,\n ...locationScansByIntervalContent,\n { alignment: 'right', bold: true, text: totalEvents },\n ]\n })\n\n const scansTableBody = isEmpty(scansTableRows)\n ? [[text('No location scans', { colSpan: 10 })]]\n : scansTableRows\n\n const scansTable = table({\n body: [scansTableHeader, ...scansTableBody],\n widths: [100, '*', '*', '*', '*', '*', '*', '*', '*', '*'],\n })\n\n return [header, hLine, scansTable]\n}\n\nfunction buildSummarySection(data) {\n const { audits, events, issues, tasks } = data\n\n //const userEvents = groupBy(events, 'user')\n const eventsByType = groupBy(events, 'type')\n\n const enterEventsCount = size(eventsByType.enter)\n //const geoEventsCount = size(eventsByType.geo)\n const issuesCount = size(issues)\n const tasksCount = size(tasks)\n const auditsCount = size(audits)\n //const uniqueUsers = size(userEvents)\n\n const auditsText = text('AUDITS', { style: 'summaryText' })\n //const geoText = text('GPS', { style: 'summaryText' })\n const issuesText = text('ISSUES', { style: 'summaryText' })\n //const peopleText = text('PEOPLE', { style: 'summaryText' })\n const scansText = text('SCANS', { style: 'summaryText' })\n const tasksText = text('TASKS', { style: 'summaryText' })\n\n const auditsCountText = text(toString(auditsCount), { style: 'summaryCount' })\n //const peopleCountText = text(toString(uniqueUsers), { style: 'summaryCount' })\n const scansCountText = text(toString(enterEventsCount), {\n style: 'summaryCount',\n })\n //const geoCountText = text(toString(geoEventsCount), { style: 'summaryCount' })\n const issuesCountText = text(toString(issuesCount), { style: 'summaryCount' })\n const tasksCountText = text(toString(tasksCount), { style: 'summaryCount' })\n\n const auditTable = summaryStatTable({\n body: [[auditsText], [auditsCountText]],\n })\n //const peopleTable = summaryStatTable({\n // body: [[peopleText], [peopleCountText]],\n //})\n //const gpsTable = summaryStatTable({ body: [[geoText], [geoCountText]] })\n const scanTable = summaryStatTable({ body: [[scansText], [scansCountText]] })\n const issueTable = summaryStatTable({\n body: [[issuesText], [issuesCountText]],\n })\n const taskTables = summaryStatTable({ body: [[tasksText], [tasksCountText]] })\n\n const wrapperTable = summaryWrapperTable({\n body: [\n [\n /*peopleTable,*/\n /*gpsTable,*/\n scanTable,\n issueTable,\n taskTables,\n auditTable,\n ],\n ],\n })\n\n return wrapperTable\n}\n\nasync function buildOtherActivitySection(data) {\n const { audits, issues, tasks, settings, timezone } = data\n\n const auditRows = map(audits, getFormRowData('audits', data))\n const issueRows = map(issues, getFormRowData('issues', data))\n const taskRows = map(tasks, getFormRowData('tasks', data))\n\n const rows = [...auditRows, ...issueRows, ...taskRows]\n const sortedRows = sortBy(rows, ['timestamp'], ['asc'])\n const title = text('Other Activity', { style: 'summarySectionHeader' })\n\n const header = table({\n body: [[title]],\n layout: 'noBorders',\n style: 'summaryHeaderTable',\n })\n\n const hLine = horizontalLine()\n const activityTable = await buildActivityTable({\n rows: sortedRows,\n settings,\n timezone,\n })\n\n const otherActivitySummarySection = [header, hLine, activityTable]\n\n const formCount = size(rows)\n const exceedsMaxForms = formCount > MAX_ATTACHMENTS\n\n if (exceedsMaxForms) {\n activitySummarySection.push(maxFormsText)\n }\n\n return otherActivitySummarySection\n}\n\nfunction buildTitleTable(data) {\n const { location, start, end, timezone } = data\n const { address = {} } = location\n\n const headerTitle = text('Daily Activity Report', { style: 'title' })\n const headerSubTitle = text(location.name, { style: 'subTitle' })\n const addressText = !isEmpty(address)\n ? `${address.street}, ${address.city || ''} ${address.state ||\n ''} ${address.postalCode || ''}`\n : ''\n const headerAddress = text(addressText, { style: 'small' })\n\n const mTimezoneStart = moment.tz(start, timezone)\n const mTimezoneEnd = moment.tz(end, timezone)\n const timezoneAbbr = getTimezoneAbbr(timezone)\n\n const rangeStart = moment(mTimezoneStart).format('MMM DD h:mma')\n\n const rangeEnd = moment(mTimezoneEnd)\n .add(1, 'hour')\n .startOf('hour')\n .format('MMM DD h:mma')\n\n const headerRange = text(`${rangeStart} - ${rangeEnd} (${timezoneAbbr})`, {\n style: 'subTitle2',\n })\n\n const body = !isEmpty(address)\n ? [[headerTitle], [headerSubTitle], [headerAddress], [headerRange]]\n : [[headerTitle], [headerSubTitle], [headerRange]]\n\n return table({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n })\n}\n\nfunction getFormRowData(collection, { locations, users, zones }) {\n return document => {\n const {\n _id,\n createdAt,\n entry = {},\n title = 'Unknown',\n user = '',\n } = document\n\n const location = getLocationReference({\n entity: document,\n locations,\n zones,\n })\n\n const link = `${LIGHTHOUSE_BASE_URL}/reports/${collection}/${_id}`\n const timestamp = createdAt\n const userDoc = find(users, doc => doc._id.toString() === user.toString())\n const name =\n (userDoc && `${userDoc.firstName} ${userDoc.lastName}`) || 'Unknown User'\n\n // NOTE: currently only issues and tasks will return summary fields, audits\n // aren't supported and will return an empty array here\n const summaryFields = entry.summaryFields || []\n\n return {\n icon: launchIcon,\n location,\n link,\n name,\n summaryFields,\n timestamp,\n title,\n }\n }\n}\n\nfunction getScanRowData({ users, zones }) {\n return document => {\n const { timestamp, user = '', zone = '' } = document\n\n const userDoc =\n user && find(users, doc => doc._id.toString() === user.toString())\n const zoneDoc =\n zone && find(zones, doc => doc._id.toString() === zone.toString())\n\n const zoneName = zoneDoc && zoneDoc.name\n const location = zoneName || 'Unknown Location'\n\n const name =\n (userDoc && `${userDoc.firstName} ${userDoc.lastName}`) || 'Unknown User'\n\n const title = 'Location Scan'\n\n return {\n location,\n timestamp,\n name,\n title,\n }\n }\n}\n"],"file":"index.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lighthouse/common",
3
- "version": "4.24.1-canary-1",
3
+ "version": "4.24.1-canary-2",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "lib/index.js",