@lighthouse/common 4.34.0-canary-16 → 4.34.0

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.
@@ -159,7 +159,7 @@ function generateContent(data, flags) {
159
159
  });
160
160
  const body = renderThirdRow ? [firstRow, secondRow, thirdRow] : [firstRow, secondRow];
161
161
  const entityFields = Object.keys(entity);
162
- const formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(field => entityFields.includes(field));
162
+ const formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(field => entityFields.includes(field)); // NOTE: stand in for flag rolloutFormDuration
163
163
 
164
164
  if (formDurationFieldsPresent) {
165
165
  const startedAtInTimezone = entity.startedAt ? (0, _momentTimezone.default)(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
@@ -183,9 +183,9 @@ function generateContent(data, flags) {
183
183
  colSpan: 2,
184
184
  style: 'small'
185
185
  });
186
- body.push([startedAt]);
187
- body.push([submittedAt]);
188
- body.push([formDuration]);
186
+ body.push([startedAt, dummyColumn]);
187
+ body.push([submittedAt, dummyColumn]);
188
+ body.push([formDuration, dummyColumn]);
189
189
  }
190
190
 
191
191
  const titleTable = (0, _helpers.twoColumnTable)({
@@ -91,14 +91,9 @@ function generateContent(data) {
91
91
  const headerAddress = (0, _helpers.text)(address, {
92
92
  style: 'small'
93
93
  });
94
- const body = [[headerTitle], [headerSubTitle]];
95
-
96
- if (!(0, _lodash.isEmpty)(reverseGeocoded)) {
97
- body.push([headerAddress]);
98
- }
99
-
94
+ const body = !(0, _lodash.isEmpty)(reverseGeocoded) ? [[headerTitle], [headerSubTitle], [headerAddress]] : [[headerTitle], [headerSubTitle]];
100
95
  const entityFields = Object.keys(entity);
101
- const formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(field => entityFields.includes(field));
96
+ const formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(field => entityFields.includes(field)); // NOTE: stand in for flag rolloutFormDuration
102
97
 
103
98
  if (formDurationFieldsPresent) {
104
99
  const startedAtInTimezone = entity.startedAt ? (0, _momentTimezone.default)(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
@@ -95,7 +95,7 @@ function generateContent(data) {
95
95
  }
96
96
 
97
97
  const entityFields = Object.keys(entity);
98
- const formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(field => entityFields.includes(field));
98
+ const formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(field => entityFields.includes(field)); // NOTE: stand in for flag rolloutFormDuration
99
99
 
100
100
  if (formDurationFieldsPresent) {
101
101
  const startedAtInTimezone = entity.startedAt ? (0, _momentTimezone.default)(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
@@ -151,7 +151,7 @@ function generateContent(data, flags) {
151
151
  var entityFields = Object.keys(entity);
152
152
  var formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(function (field) {
153
153
  return entityFields.includes(field);
154
- });
154
+ }); // NOTE: stand in for flag rolloutFormDuration
155
155
 
156
156
  if (formDurationFieldsPresent) {
157
157
  var startedAtInTimezone = entity.startedAt ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
@@ -173,9 +173,9 @@ function generateContent(data, flags) {
173
173
  colSpan: 2,
174
174
  style: 'small'
175
175
  });
176
- body.push([startedAt]);
177
- body.push([submittedAt]);
178
- body.push([formDuration]);
176
+ body.push([startedAt, dummyColumn]);
177
+ body.push([submittedAt, dummyColumn]);
178
+ body.push([formDuration, dummyColumn]);
179
179
  }
180
180
 
181
181
  var titleTable = twoColumnTable({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/pdf/audit/index.js"],"names":["Promise","isEmpty","round","moment","buildAuditContent","buildAuditFollowUps","buildTemplateContent","generateDefinition","getFormattedAddress","horizontalLine","text","twoColumnTable","getAuditEntryDetails","buildAuditPdf","pdfOptions","data","entity","timezone","flags","console","info","sequenceId","timestamp","createdAt","title","fileTitle","generateContent","then","content","type","catch","err","Error","message","rolloutAuditFollowUps","followUps","footerFields","gps","headerFields","score","entityDetails","gpsText","groupedData","locationText","referenceValue","timezoneHourTime","scoreText","target","targetServiceLevel","renderTargetFields","headerTitle","style","headerScore","alignment","firstRow","subTitle","headerSubTitle","colSpan","secondRow","reverseGeocoded","address","renderHeaderAddress","dummyColumn","headerAddress","renderThirdRow","thirdRow","serviceLevelBelow","serviceLevelText","scoreServiceLevelSubTitle","truncatedTargetPercent","scoreTargetText","scoreTargetSubTitle","scoreBreakdown","actual","max","scorePercentage","scoreTitle","body","entityFields","Object","keys","formDurationFieldsPresent","some","field","includes","startedAtInTimezone","startedAt","tz","format","submittedAtInTimezone","submittedAt","momentDuration","duration","Math","abs","formDuration","hours","floor","asHours","toString","padStart","minutes","seconds","formattedFormDuration","push","titleTable","layout","widths","margin","totalScoreTable","hLineTop","hLineBottom","followUpItems","promises","entry","items","footerTemplate","formGroups","headerTemplate","auditItemsTitle","font","lineHeight","props"],"mappings":"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","sourcesContent":["import Promise from 'bluebird'\nimport { isEmpty, round } from 'lodash'\nimport moment from 'moment-timezone'\n\nimport {\n buildAuditContent,\n buildAuditFollowUps,\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n horizontalLine,\n text,\n twoColumnTable,\n} from '../helpers'\nimport { getAuditEntryDetails } from '../../helpers'\n\n/**\n * buildAuditPdf\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} pdfOptions.flags - flags to conditionally render parts of the pdf\n * @param {object} data - pdf data\n * @param {object} data.entity - audit document\n * @param {object} data.locations - locations documents\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 {string} data.timezone - timezone string\n * @param {object} data.users - application user documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport function buildAuditPdf(pdfOptions, data) {\n const { entity, timezone } = data\n const { flags = {} } = pdfOptions\n\n console.info('buildAuditPdf')\n\n const sequenceId = entity.sequenceId\n const timestamp = entity.createdAt\n const title = entity.title || 'Unknown'\n const fileTitle = `Audit Report - ${title}`\n\n return generateContent(data, flags)\n .then(content =>\n generateDefinition({\n content,\n fileTitle,\n sequenceId,\n timestamp,\n timezone,\n type: 'Audit',\n ...pdfOptions,\n })\n )\n .catch(err => {\n throw new Error(`BuildAuditPdfError: ${err.message}`)\n })\n}\n\nfunction generateContent(data, flags) {\n const { rolloutAuditFollowUps } = flags\n const { entity } = data\n\n const {\n followUps = [],\n footerFields = {},\n gps = {},\n headerFields = {},\n score = {},\n timezone,\n title = 'Unknown',\n } = entity\n\n const entityDetails = getAuditEntryDetails(data)\n\n const {\n gpsText,\n groupedData,\n locationText,\n referenceValue,\n timezoneHourTime,\n scoreText,\n target,\n targetServiceLevel,\n } = entityDetails\n\n const renderTargetFields = !!targetServiceLevel\n const headerTitle = text(title, { style: 'title' })\n const headerScore = text(scoreText, { alignment: 'right', style: 'title' })\n const firstRow = [headerTitle, headerScore]\n const subTitle = `${locationText ||\n gpsText} - ${timezoneHourTime} by ${referenceValue}`\n\n let headerSubTitle = text(subTitle, { colSpan: 2, style: 'subTitle' })\n let secondRow = [headerSubTitle]\n\n const reverseGeocoded = gps.reverseGeocoded\n const address = !isEmpty(reverseGeocoded)\n ? getFormattedAddress(reverseGeocoded)\n : ''\n const renderHeaderAddress = !isEmpty(reverseGeocoded)\n const dummyColumn = text(' ', { style: 'small' })\n\n let headerAddress = text(address, { colSpan: 2, style: 'small' })\n const renderThirdRow = renderHeaderAddress || renderTargetFields\n let thirdRow = renderHeaderAddress ? [headerAddress] : []\n\n if (renderTargetFields) {\n headerSubTitle = text(subTitle, { style: 'subTitle' })\n\n const serviceLevelBelow = targetServiceLevel === 'below'\n const serviceLevelText =\n targetServiceLevel === 'above'\n ? 'Above Target'\n : targetServiceLevel === 'on'\n ? 'On Target'\n : targetServiceLevel === 'below'\n ? 'Below Target'\n : ''\n\n const scoreServiceLevelSubTitle = text(serviceLevelText, {\n alignment: 'right',\n style: serviceLevelBelow ? 'serviceLevelBelow' : 'serviceLevelAboveOrOn',\n })\n\n secondRow = [headerSubTitle, scoreServiceLevelSubTitle]\n headerAddress = text(address, { style: 'small' })\n\n const truncatedTargetPercent = round(target, 2)\n const scoreTargetText = `(Target - ${truncatedTargetPercent}%)`\n const scoreTargetSubTitle = text(scoreTargetText, {\n alignment: 'right',\n style: 'subTitle',\n })\n\n thirdRow = renderHeaderAddress\n ? [headerAddress, scoreTargetSubTitle]\n : [dummyColumn, scoreTargetSubTitle]\n }\n\n const scoreBreakdown = text(\n `${round(score.actual, 2)} / ${round(score.max, 2)}`,\n {\n alignment: 'right',\n style: 'totalScore',\n }\n )\n const scorePercentage = text(scoreText, {\n alignment: 'right',\n colSpan: 2,\n style: 'totalAuditScore',\n })\n const scoreTitle = text('Total Score', { style: 'totalScore' })\n\n const body = renderThirdRow\n ? [firstRow, secondRow, thirdRow]\n : [firstRow, secondRow]\n\n const entityFields = Object.keys(entity)\n const formDurationFieldsPresent = [\n 'formDuration',\n 'startedAt',\n 'submittedAt',\n ].some(field => entityFields.includes(field))\n\n if (formDurationFieldsPresent) {\n const startedAtInTimezone = entity.startedAt\n ? moment(entity.startedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const startedAt = text(`Started At: ${startedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted At: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const hours = Math.floor(momentDuration.asHours())\n .toString()\n .padStart(2, '0')\n const minutes = momentDuration\n .minutes()\n .toString()\n .padStart(2, '0')\n const seconds = momentDuration\n .seconds()\n .toString()\n .padStart(2, '0')\n const formattedFormDuration = entity.formDuration\n ? `${entity.formDuration < 0 ? '-' : ''}${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (HH:MM:SS): ${formattedFormDuration}`,\n {\n colSpan: 2,\n style: 'small',\n }\n )\n\n body.push([startedAt])\n body.push([submittedAt])\n body.push([formDuration])\n }\n\n const titleTable = twoColumnTable({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n widths: ['*', 100],\n margin: [0, 0, 0, 30],\n })\n\n const totalScoreTable = twoColumnTable({\n body: [[scoreTitle, scoreBreakdown], [scorePercentage]],\n layout: 'noBorders',\n widths: ['*', 100],\n })\n\n const hLineTop = horizontalLine({ margin: [0, 10, 0, 0] })\n const hLineBottom = horizontalLine()\n\n const followUpItems = rolloutAuditFollowUps\n ? buildAuditFollowUps(followUps, { timezone })\n : []\n\n const promises = {\n entry: buildAuditContent(groupedData.items, { rolloutAuditFollowUps }),\n footerTemplate: buildTemplateContent(footerFields.formGroups, data),\n headerTemplate: buildTemplateContent(headerFields.formGroups, data),\n }\n\n const auditItemsTitle = rolloutAuditFollowUps\n ? [\n {\n text: 'Audit Items',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n },\n },\n hLineTop,\n ]\n : []\n\n return Promise.props(promises)\n .then(({ entry, footerTemplate, headerTemplate }) => [\n titleTable,\n followUpItems,\n ...auditItemsTitle,\n ...headerTemplate,\n ...entry,\n hLineTop,\n totalScoreTable,\n hLineBottom,\n ...footerTemplate,\n ])\n .catch(err => {\n throw new Error(`GenerateContentError: ${err.message}`)\n })\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/pdf/audit/index.js"],"names":["Promise","isEmpty","round","moment","buildAuditContent","buildAuditFollowUps","buildTemplateContent","generateDefinition","getFormattedAddress","horizontalLine","text","twoColumnTable","getAuditEntryDetails","buildAuditPdf","pdfOptions","data","entity","timezone","flags","console","info","sequenceId","timestamp","createdAt","title","fileTitle","generateContent","then","content","type","catch","err","Error","message","rolloutAuditFollowUps","followUps","footerFields","gps","headerFields","score","entityDetails","gpsText","groupedData","locationText","referenceValue","timezoneHourTime","scoreText","target","targetServiceLevel","renderTargetFields","headerTitle","style","headerScore","alignment","firstRow","subTitle","headerSubTitle","colSpan","secondRow","reverseGeocoded","address","renderHeaderAddress","dummyColumn","headerAddress","renderThirdRow","thirdRow","serviceLevelBelow","serviceLevelText","scoreServiceLevelSubTitle","truncatedTargetPercent","scoreTargetText","scoreTargetSubTitle","scoreBreakdown","actual","max","scorePercentage","scoreTitle","body","entityFields","Object","keys","formDurationFieldsPresent","some","field","includes","startedAtInTimezone","startedAt","tz","format","submittedAtInTimezone","submittedAt","momentDuration","duration","Math","abs","formDuration","hours","floor","asHours","toString","padStart","minutes","seconds","formattedFormDuration","push","titleTable","layout","widths","margin","totalScoreTable","hLineTop","hLineBottom","followUpItems","promises","entry","items","footerTemplate","formGroups","headerTemplate","auditItemsTitle","font","lineHeight","props"],"mappings":"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","sourcesContent":["import Promise from 'bluebird'\nimport { isEmpty, round } from 'lodash'\nimport moment from 'moment-timezone'\n\nimport {\n buildAuditContent,\n buildAuditFollowUps,\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n horizontalLine,\n text,\n twoColumnTable,\n} from '../helpers'\nimport { getAuditEntryDetails } from '../../helpers'\n\n/**\n * buildAuditPdf\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} pdfOptions.flags - flags to conditionally render parts of the pdf\n * @param {object} data - pdf data\n * @param {object} data.entity - audit document\n * @param {object} data.locations - locations documents\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 {string} data.timezone - timezone string\n * @param {object} data.users - application user documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport function buildAuditPdf(pdfOptions, data) {\n const { entity, timezone } = data\n const { flags = {} } = pdfOptions\n\n console.info('buildAuditPdf')\n\n const sequenceId = entity.sequenceId\n const timestamp = entity.createdAt\n const title = entity.title || 'Unknown'\n const fileTitle = `Audit Report - ${title}`\n\n return generateContent(data, flags)\n .then(content =>\n generateDefinition({\n content,\n fileTitle,\n sequenceId,\n timestamp,\n timezone,\n type: 'Audit',\n ...pdfOptions,\n })\n )\n .catch(err => {\n throw new Error(`BuildAuditPdfError: ${err.message}`)\n })\n}\n\nfunction generateContent(data, flags) {\n const { rolloutAuditFollowUps } = flags\n const { entity } = data\n\n const {\n followUps = [],\n footerFields = {},\n gps = {},\n headerFields = {},\n score = {},\n timezone,\n title = 'Unknown',\n } = entity\n\n const entityDetails = getAuditEntryDetails(data)\n\n const {\n gpsText,\n groupedData,\n locationText,\n referenceValue,\n timezoneHourTime,\n scoreText,\n target,\n targetServiceLevel,\n } = entityDetails\n\n const renderTargetFields = !!targetServiceLevel\n const headerTitle = text(title, { style: 'title' })\n const headerScore = text(scoreText, { alignment: 'right', style: 'title' })\n const firstRow = [headerTitle, headerScore]\n const subTitle = `${locationText ||\n gpsText} - ${timezoneHourTime} by ${referenceValue}`\n\n let headerSubTitle = text(subTitle, { colSpan: 2, style: 'subTitle' })\n let secondRow = [headerSubTitle]\n\n const reverseGeocoded = gps.reverseGeocoded\n const address = !isEmpty(reverseGeocoded)\n ? getFormattedAddress(reverseGeocoded)\n : ''\n const renderHeaderAddress = !isEmpty(reverseGeocoded)\n const dummyColumn = text(' ', { style: 'small' })\n\n let headerAddress = text(address, { colSpan: 2, style: 'small' })\n const renderThirdRow = renderHeaderAddress || renderTargetFields\n let thirdRow = renderHeaderAddress ? [headerAddress] : []\n\n if (renderTargetFields) {\n headerSubTitle = text(subTitle, { style: 'subTitle' })\n\n const serviceLevelBelow = targetServiceLevel === 'below'\n const serviceLevelText =\n targetServiceLevel === 'above'\n ? 'Above Target'\n : targetServiceLevel === 'on'\n ? 'On Target'\n : targetServiceLevel === 'below'\n ? 'Below Target'\n : ''\n\n const scoreServiceLevelSubTitle = text(serviceLevelText, {\n alignment: 'right',\n style: serviceLevelBelow ? 'serviceLevelBelow' : 'serviceLevelAboveOrOn',\n })\n\n secondRow = [headerSubTitle, scoreServiceLevelSubTitle]\n headerAddress = text(address, { style: 'small' })\n\n const truncatedTargetPercent = round(target, 2)\n const scoreTargetText = `(Target - ${truncatedTargetPercent}%)`\n const scoreTargetSubTitle = text(scoreTargetText, {\n alignment: 'right',\n style: 'subTitle',\n })\n\n thirdRow = renderHeaderAddress\n ? [headerAddress, scoreTargetSubTitle]\n : [dummyColumn, scoreTargetSubTitle]\n }\n\n const scoreBreakdown = text(\n `${round(score.actual, 2)} / ${round(score.max, 2)}`,\n {\n alignment: 'right',\n style: 'totalScore',\n }\n )\n const scorePercentage = text(scoreText, {\n alignment: 'right',\n colSpan: 2,\n style: 'totalAuditScore',\n })\n const scoreTitle = text('Total Score', { style: 'totalScore' })\n\n const body = renderThirdRow\n ? [firstRow, secondRow, thirdRow]\n : [firstRow, secondRow]\n\n const entityFields = Object.keys(entity)\n const formDurationFieldsPresent = [\n 'formDuration',\n 'startedAt',\n 'submittedAt',\n ].some(field => entityFields.includes(field))\n\n // NOTE: stand in for flag rolloutFormDuration\n if (formDurationFieldsPresent) {\n const startedAtInTimezone = entity.startedAt\n ? moment(entity.startedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const startedAt = text(`Started At: ${startedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted At: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const hours = Math.floor(momentDuration.asHours())\n .toString()\n .padStart(2, '0')\n const minutes = momentDuration\n .minutes()\n .toString()\n .padStart(2, '0')\n const seconds = momentDuration\n .seconds()\n .toString()\n .padStart(2, '0')\n const formattedFormDuration = entity.formDuration\n ? `${entity.formDuration < 0 ? '-' : ''}${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (HH:MM:SS): ${formattedFormDuration}`,\n {\n colSpan: 2,\n style: 'small',\n }\n )\n\n body.push([startedAt, dummyColumn])\n body.push([submittedAt, dummyColumn])\n body.push([formDuration, dummyColumn])\n }\n\n const titleTable = twoColumnTable({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n widths: ['*', 100],\n margin: [0, 0, 0, 30],\n })\n\n const totalScoreTable = twoColumnTable({\n body: [[scoreTitle, scoreBreakdown], [scorePercentage]],\n layout: 'noBorders',\n widths: ['*', 100],\n })\n\n const hLineTop = horizontalLine({ margin: [0, 10, 0, 0] })\n const hLineBottom = horizontalLine()\n\n const followUpItems = rolloutAuditFollowUps\n ? buildAuditFollowUps(followUps, { timezone })\n : []\n\n const promises = {\n entry: buildAuditContent(groupedData.items, { rolloutAuditFollowUps }),\n footerTemplate: buildTemplateContent(footerFields.formGroups, data),\n headerTemplate: buildTemplateContent(headerFields.formGroups, data),\n }\n\n const auditItemsTitle = rolloutAuditFollowUps\n ? [\n {\n text: 'Audit Items',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n },\n },\n hLineTop,\n ]\n : []\n\n return Promise.props(promises)\n .then(({ entry, footerTemplate, headerTemplate }) => [\n titleTable,\n followUpItems,\n ...auditItemsTitle,\n ...headerTemplate,\n ...entry,\n hLineTop,\n totalScoreTable,\n hLineBottom,\n ...footerTemplate,\n ])\n .catch(err => {\n throw new Error(`GenerateContentError: ${err.message}`)\n })\n}\n"],"file":"index.js"}
@@ -81,16 +81,11 @@ function generateContent(data) {
81
81
  var headerAddress = text(address, {
82
82
  style: 'small'
83
83
  });
84
- var body = [[headerTitle], [headerSubTitle]];
85
-
86
- if (!isEmpty(reverseGeocoded)) {
87
- body.push([headerAddress]);
88
- }
89
-
84
+ var body = !isEmpty(reverseGeocoded) ? [[headerTitle], [headerSubTitle], [headerAddress]] : [[headerTitle], [headerSubTitle]];
90
85
  var entityFields = Object.keys(entity);
91
86
  var formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(function (field) {
92
87
  return entityFields.includes(field);
93
- });
88
+ }); // NOTE: stand in for flag rolloutFormDuration
94
89
 
95
90
  if (formDurationFieldsPresent) {
96
91
  var startedAtInTimezone = entity.startedAt ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/pdf/issue/index.js"],"names":["get","filter","isEmpty","map","moment","buildTemplateContent","generateDefinition","getFormattedAddress","horizontalLine","table","text","threeColumnTable","getIssueDetails","getStatusDetails","getTimezoneAbbr","getTimezoneDatetime","buildIssuePdf","pdfOptions","data","entity","timezone","sequenceId","timestamp","createdAt","title","fileTitle","generateContent","then","content","type","entry","gps","timeline","entityDetails","assigneeNames","durationText","gpsText","locationText","statusColor","statusText","reverseGeocoded","subTitle","headerTitle","style","headerSubTitle","address","headerAddress","body","push","entityFields","Object","keys","formDurationFieldsPresent","some","field","includes","startedAtInTimezone","startedAt","tz","format","submittedAtInTimezone","submittedAt","momentDuration","duration","Math","abs","formDuration","hours","floor","asHours","toString","padStart","minutes","seconds","formattedFormDuration","titleTable","layout","statusLabelText","bold","statusValueText","color","metaTable","durationLabelText","durationValueText","assigneeLabelText","assigneeValueText","timelineTitle","timelineHorizontalLine","timelineTable","createTimelineTable","formGroups","timezoneAbbr","timelineHeaderRow","alignment","statusUpdates","timelineBodyRows","colSpan","item","meta","source","next","firstName","lastName","fullName","isNew","isUpdate","isOpen","statusDetails","nextStatusText","activity","datetime","showTzAbbr"],"mappings":"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","sourcesContent":["import { get, filter, isEmpty, map } from 'lodash'\nimport moment from 'moment-timezone'\n\nimport {\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n horizontalLine,\n table,\n text,\n threeColumnTable,\n} from '../helpers'\n\nimport {\n getIssueDetails,\n getStatusDetails,\n getTimezoneAbbr,\n getTimezoneDatetime,\n} from '../../helpers'\n\n/**\n * buildIssuePdf\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 {object} data.entity - issue document\n * @param {object} data.locations - locations documents\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 {string} data.timezone - timezone string\n * @param {object} data.users - application user documents\n * @param {object} data.zones - zone documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport function buildIssuePdf(pdfOptions, data) {\n const { entity, timezone } = data\n\n const sequenceId = entity.sequenceId\n const timestamp = entity.createdAt\n const title = entity.title || 'Unknown'\n\n const fileTitle = `Issue Report - ${title}`\n\n return generateContent(data).then(content =>\n generateDefinition({\n content,\n fileTitle,\n sequenceId,\n timestamp,\n timezone,\n type: 'Issue',\n ...pdfOptions,\n })\n )\n}\n\nfunction generateContent(data) {\n const { entity, timezone } = data\n const { entry, gps = {}, timeline = [], title } = entity\n\n const entityDetails = getIssueDetails(data)\n\n const {\n assigneeNames,\n durationText,\n gpsText,\n locationText,\n statusColor,\n statusText,\n } = entityDetails\n\n const reverseGeocoded = gps.reverseGeocoded\n\n const subTitle = `${locationText || gpsText}`\n const headerTitle = text(title, { style: 'title' })\n const headerSubTitle = text(subTitle, { style: 'subTitle' })\n const address = !isEmpty(reverseGeocoded)\n ? getFormattedAddress(reverseGeocoded)\n : ''\n const headerAddress = text(address, { style: 'small' })\n\n const body = [[headerTitle], [headerSubTitle]]\n\n if (!isEmpty(reverseGeocoded)) {\n body.push([headerAddress])\n }\n\n const entityFields = Object.keys(entity)\n const formDurationFieldsPresent = [\n 'formDuration',\n 'startedAt',\n 'submittedAt',\n ].some(field => entityFields.includes(field))\n\n if (formDurationFieldsPresent) {\n const startedAtInTimezone = entity.startedAt\n ? moment(entity.startedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const startedAt = text(`Started At: ${startedAtInTimezone}`, {\n style: 'small',\n })\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted At: ${submittedAtInTimezone}`, {\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const hours = Math.floor(momentDuration.asHours())\n .toString()\n .padStart(2, '0')\n const minutes = momentDuration\n .minutes()\n .toString()\n .padStart(2, '0')\n const seconds = momentDuration\n .seconds()\n .toString()\n .padStart(2, '0')\n const formattedFormDuration = entity.formDuration\n ? `${entity.formDuration < 0 ? '-' : ''}${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (HH:MM:SS): ${formattedFormDuration}`,\n {\n style: 'small',\n }\n )\n\n body.push([startedAt])\n body.push([submittedAt])\n body.push([formDuration])\n }\n\n const titleTable = table({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n })\n\n const statusLabelText = text('Status', { bold: true })\n const statusValueText = text(statusText, { color: statusColor })\n\n const metaTable = table({\n body: [[statusLabelText, statusValueText]],\n layout: 'noBorders',\n style: 'metaTable',\n })\n\n if (statusText === 'CLOSED') {\n const durationLabelText = text('Duration', { bold: true })\n const durationValueText = text(durationText)\n metaTable.table.body.push([durationLabelText, durationValueText])\n }\n\n const assigneeLabelText = text('Assignees', { bold: true })\n const assigneeValueText = text(assigneeNames)\n metaTable.table.body.push([assigneeLabelText, assigneeValueText])\n\n const timelineTitle = text('Timeline', { style: 'timelineTitle' })\n const timelineHorizontalLine = horizontalLine()\n const timelineTable = createTimelineTable(timeline, timezone)\n\n return buildTemplateContent(entry.formGroups, data).then(entry => [\n titleTable,\n metaTable,\n timelineTitle,\n timelineHorizontalLine,\n timelineTable,\n ...entry,\n ])\n}\n\nfunction createTimelineTable(timeline, timezone) {\n const timezoneAbbr = getTimezoneAbbr(timezone)\n\n const timelineHeaderRow = [\n text('Activity', { bold: true }),\n text('User', { bold: true }),\n text(`Date & Timestamp (${timezoneAbbr})`, {\n alignment: 'right',\n bold: true,\n }),\n ]\n\n const statusUpdates = filter(timeline, ['meta.field', 'status'])\n\n const timelineBodyRows = isEmpty(statusUpdates)\n ? [text('No Timeline activity', { colSpan: 3 })]\n : map(statusUpdates, item => {\n const { meta = {}, source, timestamp, type } = item\n\n const next = get(meta, 'next')\n const firstName = get(source, 'meta.firstName')\n const lastName = get(source, 'meta.lastName')\n\n const fullName =\n firstName && lastName ? `${firstName} ${lastName}` : 'Unknown User'\n\n const isNew = type === 'issue-new'\n const isUpdate = type === 'issue-update'\n const isOpen = next === 'open'\n\n const statusDetails = getStatusDetails(next)\n const nextStatusText = statusDetails.text\n\n const activity =\n isNew && isOpen\n ? 'Issue opened'\n : isNew && !isOpen\n ? `Issue opened with status ${nextStatusText}`\n : isUpdate\n ? `Issue updated to ${nextStatusText}`\n : 'Unknown status timeline change'\n\n const datetime = getTimezoneDatetime({\n format: 'ddd, MMM D h:mm:ssa z',\n showTzAbbr: false,\n timestamp,\n timezone,\n })\n\n return [\n text(activity),\n text(fullName),\n text(datetime, { alignment: 'right' }),\n ]\n })\n\n const timelineTable = threeColumnTable({\n body: [timelineHeaderRow, ...timelineBodyRows],\n })\n\n return timelineTable\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/pdf/issue/index.js"],"names":["get","filter","isEmpty","map","moment","buildTemplateContent","generateDefinition","getFormattedAddress","horizontalLine","table","text","threeColumnTable","getIssueDetails","getStatusDetails","getTimezoneAbbr","getTimezoneDatetime","buildIssuePdf","pdfOptions","data","entity","timezone","sequenceId","timestamp","createdAt","title","fileTitle","generateContent","then","content","type","entry","gps","timeline","entityDetails","assigneeNames","durationText","gpsText","locationText","statusColor","statusText","reverseGeocoded","subTitle","headerTitle","style","headerSubTitle","address","headerAddress","body","entityFields","Object","keys","formDurationFieldsPresent","some","field","includes","startedAtInTimezone","startedAt","tz","format","submittedAtInTimezone","submittedAt","momentDuration","duration","Math","abs","formDuration","hours","floor","asHours","toString","padStart","minutes","seconds","formattedFormDuration","push","titleTable","layout","statusLabelText","bold","statusValueText","color","metaTable","durationLabelText","durationValueText","assigneeLabelText","assigneeValueText","timelineTitle","timelineHorizontalLine","timelineTable","createTimelineTable","formGroups","timezoneAbbr","timelineHeaderRow","alignment","statusUpdates","timelineBodyRows","colSpan","item","meta","source","next","firstName","lastName","fullName","isNew","isUpdate","isOpen","statusDetails","nextStatusText","activity","datetime","showTzAbbr"],"mappings":"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","sourcesContent":["import { get, filter, isEmpty, map } from 'lodash'\nimport moment from 'moment-timezone'\n\nimport {\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n horizontalLine,\n table,\n text,\n threeColumnTable,\n} from '../helpers'\n\nimport {\n getIssueDetails,\n getStatusDetails,\n getTimezoneAbbr,\n getTimezoneDatetime,\n} from '../../helpers'\n\n/**\n * buildIssuePdf\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 {object} data.entity - issue document\n * @param {object} data.locations - locations documents\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 {string} data.timezone - timezone string\n * @param {object} data.users - application user documents\n * @param {object} data.zones - zone documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport function buildIssuePdf(pdfOptions, data) {\n const { entity, timezone } = data\n\n const sequenceId = entity.sequenceId\n const timestamp = entity.createdAt\n const title = entity.title || 'Unknown'\n\n const fileTitle = `Issue Report - ${title}`\n\n return generateContent(data).then(content =>\n generateDefinition({\n content,\n fileTitle,\n sequenceId,\n timestamp,\n timezone,\n type: 'Issue',\n ...pdfOptions,\n })\n )\n}\n\nfunction generateContent(data) {\n const { entity, timezone } = data\n const { entry, gps = {}, timeline = [], title } = entity\n\n const entityDetails = getIssueDetails(data)\n\n const {\n assigneeNames,\n durationText,\n gpsText,\n locationText,\n statusColor,\n statusText,\n } = entityDetails\n\n const reverseGeocoded = gps.reverseGeocoded\n\n const subTitle = `${locationText || gpsText}`\n const headerTitle = text(title, { style: 'title' })\n const headerSubTitle = text(subTitle, { style: 'subTitle' })\n const address = !isEmpty(reverseGeocoded)\n ? getFormattedAddress(reverseGeocoded)\n : ''\n const headerAddress = text(address, { style: 'small' })\n\n const body = !isEmpty(reverseGeocoded)\n ? [[headerTitle], [headerSubTitle], [headerAddress]]\n : [[headerTitle], [headerSubTitle]]\n\n const entityFields = Object.keys(entity)\n const formDurationFieldsPresent = [\n 'formDuration',\n 'startedAt',\n 'submittedAt',\n ].some(field => entityFields.includes(field))\n\n // NOTE: stand in for flag rolloutFormDuration\n if (formDurationFieldsPresent) {\n const startedAtInTimezone = entity.startedAt\n ? moment(entity.startedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const startedAt = text(`Started At: ${startedAtInTimezone}`, {\n style: 'small',\n })\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted At: ${submittedAtInTimezone}`, {\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const hours = Math.floor(momentDuration.asHours())\n .toString()\n .padStart(2, '0')\n const minutes = momentDuration\n .minutes()\n .toString()\n .padStart(2, '0')\n const seconds = momentDuration\n .seconds()\n .toString()\n .padStart(2, '0')\n const formattedFormDuration = entity.formDuration\n ? `${entity.formDuration < 0 ? '-' : ''}${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (HH:MM:SS): ${formattedFormDuration}`,\n {\n style: 'small',\n }\n )\n\n body.push([startedAt])\n body.push([submittedAt])\n body.push([formDuration])\n }\n\n const titleTable = table({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n })\n\n const statusLabelText = text('Status', { bold: true })\n const statusValueText = text(statusText, { color: statusColor })\n\n const metaTable = table({\n body: [[statusLabelText, statusValueText]],\n layout: 'noBorders',\n style: 'metaTable',\n })\n\n if (statusText === 'CLOSED') {\n const durationLabelText = text('Duration', { bold: true })\n const durationValueText = text(durationText)\n metaTable.table.body.push([durationLabelText, durationValueText])\n }\n\n const assigneeLabelText = text('Assignees', { bold: true })\n const assigneeValueText = text(assigneeNames)\n metaTable.table.body.push([assigneeLabelText, assigneeValueText])\n\n const timelineTitle = text('Timeline', { style: 'timelineTitle' })\n const timelineHorizontalLine = horizontalLine()\n const timelineTable = createTimelineTable(timeline, timezone)\n\n return buildTemplateContent(entry.formGroups, data).then(entry => [\n titleTable,\n metaTable,\n timelineTitle,\n timelineHorizontalLine,\n timelineTable,\n ...entry,\n ])\n}\n\nfunction createTimelineTable(timeline, timezone) {\n const timezoneAbbr = getTimezoneAbbr(timezone)\n\n const timelineHeaderRow = [\n text('Activity', { bold: true }),\n text('User', { bold: true }),\n text(`Date & Timestamp (${timezoneAbbr})`, {\n alignment: 'right',\n bold: true,\n }),\n ]\n\n const statusUpdates = filter(timeline, ['meta.field', 'status'])\n\n const timelineBodyRows = isEmpty(statusUpdates)\n ? [text('No Timeline activity', { colSpan: 3 })]\n : map(statusUpdates, item => {\n const { meta = {}, source, timestamp, type } = item\n\n const next = get(meta, 'next')\n const firstName = get(source, 'meta.firstName')\n const lastName = get(source, 'meta.lastName')\n\n const fullName =\n firstName && lastName ? `${firstName} ${lastName}` : 'Unknown User'\n\n const isNew = type === 'issue-new'\n const isUpdate = type === 'issue-update'\n const isOpen = next === 'open'\n\n const statusDetails = getStatusDetails(next)\n const nextStatusText = statusDetails.text\n\n const activity =\n isNew && isOpen\n ? 'Issue opened'\n : isNew && !isOpen\n ? `Issue opened with status ${nextStatusText}`\n : isUpdate\n ? `Issue updated to ${nextStatusText}`\n : 'Unknown status timeline change'\n\n const datetime = getTimezoneDatetime({\n format: 'ddd, MMM D h:mm:ssa z',\n showTzAbbr: false,\n timestamp,\n timezone,\n })\n\n return [\n text(activity),\n text(fullName),\n text(datetime, { alignment: 'right' }),\n ]\n })\n\n const timelineTable = threeColumnTable({\n body: [timelineHeaderRow, ...timelineBodyRows],\n })\n\n return timelineTable\n}\n"],"file":"index.js"}
@@ -86,7 +86,7 @@ function generateContent(data) {
86
86
  var entityFields = Object.keys(entity);
87
87
  var formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(function (field) {
88
88
  return entityFields.includes(field);
89
- });
89
+ }); // NOTE: stand in for flag rolloutFormDuration
90
90
 
91
91
  if (formDurationFieldsPresent) {
92
92
  var startedAtInTimezone = entity.startedAt ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/pdf/task/index.js"],"names":["isEmpty","moment","buildTemplateContent","generateDefinition","getFormattedAddress","text","table","getTaskEntryDetails","buildTaskPdf","pdfOptions","data","entity","timezone","sequenceId","timestamp","createdAt","title","fileTitle","generateContent","then","content","type","entry","gps","entityDetails","gpsText","locationText","referenceValue","timezoneHourTime","reverseGeocoded","subTitle","headerSubTitle","style","headerTitle","address","headerAddress","body","push","entityFields","Object","keys","formDurationFieldsPresent","some","field","includes","startedAtInTimezone","startedAt","tz","format","submittedAtInTimezone","submittedAt","momentDuration","duration","Math","abs","formDuration","hours","floor","asHours","toString","padStart","minutes","seconds","formattedFormDuration","titleTable","layout","formGroups"],"mappings":"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","sourcesContent":["import { isEmpty } from 'lodash'\nimport moment from 'moment-timezone'\n\nimport {\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n text,\n table,\n} from '../helpers'\nimport { getTaskEntryDetails } from '../../helpers'\n\n/**\n * buildTaskPdf\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 {object} data.entity - task document\n * @param {object} data.locations - locations documents\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 {string} data.timezone - timezone string\n * @param {object} data.users - application user documents\n * @param {object} data.zones - zone documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport function buildTaskPdf(pdfOptions, data) {\n const { entity, timezone } = data\n\n const sequenceId = entity.sequenceId\n const timestamp = entity.createdAt\n const title = entity.title || 'Unknown'\n\n const fileTitle = `Task Report - ${title}`\n\n return generateContent(data).then(content =>\n generateDefinition({\n content,\n fileTitle,\n sequenceId,\n timestamp,\n timezone,\n type: 'Task',\n ...pdfOptions,\n })\n )\n}\n\nfunction generateContent(data) {\n const { entity, timezone } = data\n\n const { entry, gps = {}, title } = entity\n\n const entityDetails = getTaskEntryDetails(data)\n\n const {\n gpsText,\n locationText,\n referenceValue,\n timezoneHourTime,\n } = entityDetails\n\n const reverseGeocoded = gps.reverseGeocoded\n\n const subTitle = `${locationText ||\n gpsText} - ${timezoneHourTime} by ${referenceValue}`\n const headerSubTitle = text(subTitle, { style: 'subTitle' })\n const headerTitle = text(title, { style: 'title' })\n const address = !isEmpty(reverseGeocoded)\n ? getFormattedAddress(reverseGeocoded)\n : ''\n const headerAddress = text(address, { style: 'small' })\n\n const body = [[headerTitle], [headerSubTitle]]\n\n if (!isEmpty(reverseGeocoded)) {\n body.push([headerAddress])\n }\n\n const entityFields = Object.keys(entity)\n const formDurationFieldsPresent = [\n 'formDuration',\n 'startedAt',\n 'submittedAt',\n ].some(field => entityFields.includes(field))\n\n if (formDurationFieldsPresent) {\n const startedAtInTimezone = entity.startedAt\n ? moment(entity.startedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const startedAt = text(`Started At: ${startedAtInTimezone}`, {\n style: 'small',\n })\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted At: ${submittedAtInTimezone}`, {\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const hours = Math.floor(momentDuration.asHours())\n .toString()\n .padStart(2, '0')\n const minutes = momentDuration\n .minutes()\n .toString()\n .padStart(2, '0')\n const seconds = momentDuration\n .seconds()\n .toString()\n .padStart(2, '0')\n const formattedFormDuration = entity.formDuration\n ? `${entity.formDuration < 0 ? '-' : ''}${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (HH:MM:SS): ${formattedFormDuration}`,\n {\n style: 'small',\n }\n )\n\n body.push([startedAt])\n body.push([submittedAt])\n body.push([formDuration])\n }\n\n const titleTable = table({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n })\n\n return buildTemplateContent(entry.formGroups, data).then(entry => [\n titleTable,\n ...entry,\n ])\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/pdf/task/index.js"],"names":["isEmpty","moment","buildTemplateContent","generateDefinition","getFormattedAddress","text","table","getTaskEntryDetails","buildTaskPdf","pdfOptions","data","entity","timezone","sequenceId","timestamp","createdAt","title","fileTitle","generateContent","then","content","type","entry","gps","entityDetails","gpsText","locationText","referenceValue","timezoneHourTime","reverseGeocoded","subTitle","headerSubTitle","style","headerTitle","address","headerAddress","body","push","entityFields","Object","keys","formDurationFieldsPresent","some","field","includes","startedAtInTimezone","startedAt","tz","format","submittedAtInTimezone","submittedAt","momentDuration","duration","Math","abs","formDuration","hours","floor","asHours","toString","padStart","minutes","seconds","formattedFormDuration","titleTable","layout","formGroups"],"mappings":"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","sourcesContent":["import { isEmpty } from 'lodash'\nimport moment from 'moment-timezone'\n\nimport {\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n text,\n table,\n} from '../helpers'\nimport { getTaskEntryDetails } from '../../helpers'\n\n/**\n * buildTaskPdf\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 {object} data.entity - task document\n * @param {object} data.locations - locations documents\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 {string} data.timezone - timezone string\n * @param {object} data.users - application user documents\n * @param {object} data.zones - zone documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport function buildTaskPdf(pdfOptions, data) {\n const { entity, timezone } = data\n\n const sequenceId = entity.sequenceId\n const timestamp = entity.createdAt\n const title = entity.title || 'Unknown'\n\n const fileTitle = `Task Report - ${title}`\n\n return generateContent(data).then(content =>\n generateDefinition({\n content,\n fileTitle,\n sequenceId,\n timestamp,\n timezone,\n type: 'Task',\n ...pdfOptions,\n })\n )\n}\n\nfunction generateContent(data) {\n const { entity, timezone } = data\n\n const { entry, gps = {}, title } = entity\n\n const entityDetails = getTaskEntryDetails(data)\n\n const {\n gpsText,\n locationText,\n referenceValue,\n timezoneHourTime,\n } = entityDetails\n\n const reverseGeocoded = gps.reverseGeocoded\n\n const subTitle = `${locationText ||\n gpsText} - ${timezoneHourTime} by ${referenceValue}`\n const headerSubTitle = text(subTitle, { style: 'subTitle' })\n const headerTitle = text(title, { style: 'title' })\n const address = !isEmpty(reverseGeocoded)\n ? getFormattedAddress(reverseGeocoded)\n : ''\n const headerAddress = text(address, { style: 'small' })\n\n const body = [[headerTitle], [headerSubTitle]]\n\n if (!isEmpty(reverseGeocoded)) {\n body.push([headerAddress])\n }\n\n const entityFields = Object.keys(entity)\n const formDurationFieldsPresent = [\n 'formDuration',\n 'startedAt',\n 'submittedAt',\n ].some(field => entityFields.includes(field))\n\n // NOTE: stand in for flag rolloutFormDuration\n if (formDurationFieldsPresent) {\n const startedAtInTimezone = entity.startedAt\n ? moment(entity.startedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const startedAt = text(`Started At: ${startedAtInTimezone}`, {\n style: 'small',\n })\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted At: ${submittedAtInTimezone}`, {\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const hours = Math.floor(momentDuration.asHours())\n .toString()\n .padStart(2, '0')\n const minutes = momentDuration\n .minutes()\n .toString()\n .padStart(2, '0')\n const seconds = momentDuration\n .seconds()\n .toString()\n .padStart(2, '0')\n const formattedFormDuration = entity.formDuration\n ? `${entity.formDuration < 0 ? '-' : ''}${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (HH:MM:SS): ${formattedFormDuration}`,\n {\n style: 'small',\n }\n )\n\n body.push([startedAt])\n body.push([submittedAt])\n body.push([formDuration])\n }\n\n const titleTable = table({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n })\n\n return buildTemplateContent(entry.formGroups, data).then(entry => [\n titleTable,\n ...entry,\n ])\n}\n"],"file":"index.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lighthouse/common",
3
- "version": "4.34.0-canary-16",
3
+ "version": "4.34.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "lib/index.js",