@lighthouse/common 4.36.0 → 4.36.2-canary.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.
@@ -77,9 +77,9 @@ function generateContent(data) {
77
77
  gps = {},
78
78
  headerFields = {},
79
79
  score = {},
80
- timezone,
81
80
  title = 'Unknown'
82
81
  } = entity;
82
+ const timezone = entity?.timezone || data?.timezone;
83
83
  const entityDetails = (0, _helpers2.getAuditEntryDetails)(data);
84
84
  const {
85
85
  gpsText,
@@ -155,37 +155,31 @@ function generateContent(data) {
155
155
  style: 'totalScore'
156
156
  });
157
157
  const body = renderThirdRow ? [firstRow, secondRow, thirdRow] : [firstRow, secondRow];
158
- const entityFields = Object.keys(entity);
159
- const formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(field => entityFields.includes(field)); // NOTE: stand in for flag rolloutFormDuration
160
-
161
- if (formDurationFieldsPresent) {
162
- const startedAtInTimezone = entity.startedAt ? (0, _momentTimezone.default)(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
163
- const startedAt = (0, _helpers.text)(`Started: ${startedAtInTimezone}`, {
164
- colSpan: 2,
165
- style: 'small'
166
- });
167
- const submittedAtInTimezone = entity.submittedAt ? (0, _momentTimezone.default)(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
168
- const submittedAt = (0, _helpers.text)(`Submitted: ${submittedAtInTimezone}`, {
169
- colSpan: 2,
170
- style: 'small'
171
- });
172
-
173
- const momentDuration = _momentTimezone.default.duration(Math.abs(entity.formDuration));
158
+ const startedAtInTimezone = entity.startedAt ? (0, _momentTimezone.default)(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
159
+ const startedAt = (0, _helpers.text)(`Started: ${startedAtInTimezone}`, {
160
+ colSpan: 2,
161
+ style: 'small'
162
+ });
163
+ const submittedAtInTimezone = entity.submittedAt ? (0, _momentTimezone.default)(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
164
+ const submittedAt = (0, _helpers.text)(`Submitted: ${submittedAtInTimezone}`, {
165
+ colSpan: 2,
166
+ style: 'small'
167
+ });
174
168
 
175
- const days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
176
- const hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
177
- const minutes = momentDuration.minutes().toString().padStart(2, '0');
178
- const seconds = momentDuration.seconds().toString().padStart(2, '0');
179
- const formattedFormDuration = entity.formDuration ? `${entity.formDuration < 0 ? '-' : ''}${days}:${hours}:${minutes}:${seconds}` : 'Not recorded';
180
- const formDuration = (0, _helpers.text)(`Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`, {
181
- colSpan: 2,
182
- style: 'small'
183
- });
184
- body.push([startedAt, dummyColumn]);
185
- body.push([submittedAt, dummyColumn]);
186
- body.push([formDuration, dummyColumn]);
187
- }
169
+ const momentDuration = _momentTimezone.default.duration(Math.abs(entity.formDuration));
188
170
 
171
+ const days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
172
+ const hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
173
+ const minutes = momentDuration.minutes().toString().padStart(2, '0');
174
+ const seconds = momentDuration.seconds().toString().padStart(2, '0');
175
+ const formattedFormDuration = entity.formDuration ? `${entity.formDuration < 0 ? '-' : ''}${days}:${hours}:${minutes}:${seconds}` : 'Not recorded';
176
+ const formDuration = (0, _helpers.text)(`Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`, {
177
+ colSpan: 2,
178
+ style: 'small'
179
+ });
180
+ body.push([startedAt, dummyColumn]);
181
+ body.push([submittedAt, dummyColumn]);
182
+ body.push([formDuration, dummyColumn]);
189
183
  const titleTable = (0, _helpers.twoColumnTable)({
190
184
  body,
191
185
  layout: 'noBorders',
@@ -92,34 +92,28 @@ function generateContent(data) {
92
92
  style: 'small'
93
93
  });
94
94
  const body = !(0, _lodash.isEmpty)(reverseGeocoded) ? [[headerTitle], [headerSubTitle], [headerAddress]] : [[headerTitle], [headerSubTitle]];
95
- const entityFields = Object.keys(entity);
96
- const formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(field => entityFields.includes(field)); // NOTE: stand in for flag rolloutFormDuration
97
-
98
- if (formDurationFieldsPresent) {
99
- const startedAtInTimezone = entity.startedAt ? (0, _momentTimezone.default)(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
100
- const startedAt = (0, _helpers.text)(`Started: ${startedAtInTimezone}`, {
101
- style: 'small'
102
- });
103
- const submittedAtInTimezone = entity.submittedAt ? (0, _momentTimezone.default)(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
104
- const submittedAt = (0, _helpers.text)(`Submitted: ${submittedAtInTimezone}`, {
105
- style: 'small'
106
- });
107
-
108
- const momentDuration = _momentTimezone.default.duration(Math.abs(entity.formDuration));
95
+ const startedAtInTimezone = entity.startedAt ? (0, _momentTimezone.default)(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
96
+ const startedAt = (0, _helpers.text)(`Started: ${startedAtInTimezone}`, {
97
+ style: 'small'
98
+ });
99
+ const submittedAtInTimezone = entity.submittedAt ? (0, _momentTimezone.default)(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
100
+ const submittedAt = (0, _helpers.text)(`Submitted: ${submittedAtInTimezone}`, {
101
+ style: 'small'
102
+ });
109
103
 
110
- const days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
111
- const hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
112
- const minutes = momentDuration.minutes().toString().padStart(2, '0');
113
- const seconds = momentDuration.seconds().toString().padStart(2, '0');
114
- const formattedFormDuration = entity.formDuration ? `${entity.formDuration < 0 ? '-' : ''}${days}:${hours}:${minutes}:${seconds}` : 'Not recorded';
115
- const formDuration = (0, _helpers.text)(`Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`, {
116
- style: 'small'
117
- });
118
- body.push([startedAt]);
119
- body.push([submittedAt]);
120
- body.push([formDuration]);
121
- }
104
+ const momentDuration = _momentTimezone.default.duration(Math.abs(entity.formDuration));
122
105
 
106
+ const days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
107
+ const hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
108
+ const minutes = momentDuration.minutes().toString().padStart(2, '0');
109
+ const seconds = momentDuration.seconds().toString().padStart(2, '0');
110
+ const formattedFormDuration = entity.formDuration ? `${entity.formDuration < 0 ? '-' : ''}${days}:${hours}:${minutes}:${seconds}` : 'Not recorded';
111
+ const formDuration = (0, _helpers.text)(`Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`, {
112
+ style: 'small'
113
+ });
114
+ body.push([startedAt]);
115
+ body.push([submittedAt]);
116
+ body.push([formDuration]);
123
117
  const titleTable = (0, _helpers.table)({
124
118
  body,
125
119
  layout: 'noBorders',
@@ -94,34 +94,28 @@ function generateContent(data) {
94
94
  body.push([headerAddress]);
95
95
  }
96
96
 
97
- const entityFields = Object.keys(entity);
98
- const formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(field => entityFields.includes(field)); // NOTE: stand in for flag rolloutFormDuration
99
-
100
- if (formDurationFieldsPresent) {
101
- const startedAtInTimezone = entity.startedAt ? (0, _momentTimezone.default)(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
102
- const startedAt = (0, _helpers.text)(`Started: ${startedAtInTimezone}`, {
103
- style: 'small'
104
- });
105
- const submittedAtInTimezone = entity.submittedAt ? (0, _momentTimezone.default)(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
106
- const submittedAt = (0, _helpers.text)(`Submitted: ${submittedAtInTimezone}`, {
107
- style: 'small'
108
- });
109
-
110
- const momentDuration = _momentTimezone.default.duration(Math.abs(entity.formDuration));
97
+ const startedAtInTimezone = entity.startedAt ? (0, _momentTimezone.default)(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
98
+ const startedAt = (0, _helpers.text)(`Started: ${startedAtInTimezone}`, {
99
+ style: 'small'
100
+ });
101
+ const submittedAtInTimezone = entity.submittedAt ? (0, _momentTimezone.default)(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
102
+ const submittedAt = (0, _helpers.text)(`Submitted: ${submittedAtInTimezone}`, {
103
+ style: 'small'
104
+ });
111
105
 
112
- const days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
113
- const hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
114
- const minutes = momentDuration.minutes().toString().padStart(2, '0');
115
- const seconds = momentDuration.seconds().toString().padStart(2, '0');
116
- const formattedFormDuration = entity.formDuration ? `${entity.formDuration < 0 ? '-' : ''}${days}:${hours}:${minutes}:${seconds}` : 'Not recorded';
117
- const formDuration = (0, _helpers.text)(`Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`, {
118
- style: 'small'
119
- });
120
- body.push([startedAt]);
121
- body.push([submittedAt]);
122
- body.push([formDuration]);
123
- }
106
+ const momentDuration = _momentTimezone.default.duration(Math.abs(entity.formDuration));
124
107
 
108
+ const days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
109
+ const hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
110
+ const minutes = momentDuration.minutes().toString().padStart(2, '0');
111
+ const seconds = momentDuration.seconds().toString().padStart(2, '0');
112
+ const formattedFormDuration = entity.formDuration ? `${entity.formDuration < 0 ? '-' : ''}${days}:${hours}:${minutes}:${seconds}` : 'Not recorded';
113
+ const formDuration = (0, _helpers.text)(`Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`, {
114
+ style: 'small'
115
+ });
116
+ body.push([startedAt]);
117
+ body.push([submittedAt]);
118
+ body.push([formDuration]);
125
119
  const titleTable = (0, _helpers.table)({
126
120
  body,
127
121
  layout: 'noBorders',
@@ -71,9 +71,9 @@ function generateContent(data) {
71
71
  headerFields = _entity$headerFields === void 0 ? {} : _entity$headerFields,
72
72
  _entity$score = entity.score,
73
73
  score = _entity$score === void 0 ? {} : _entity$score,
74
- timezone = entity.timezone,
75
74
  _entity$title = entity.title,
76
75
  title = _entity$title === void 0 ? 'Unknown' : _entity$title;
76
+ var timezone = (entity === null || entity === void 0 ? void 0 : entity.timezone) || (data === null || data === void 0 ? void 0 : data.timezone);
77
77
  var entityDetails = getAuditEntryDetails(data);
78
78
  var gpsText = entityDetails.gpsText,
79
79
  groupedData = entityDetails.groupedData,
@@ -147,37 +147,29 @@ function generateContent(data) {
147
147
  style: 'totalScore'
148
148
  });
149
149
  var body = renderThirdRow ? [firstRow, secondRow, thirdRow] : [firstRow, secondRow];
150
- var entityFields = Object.keys(entity);
151
- var formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(function (field) {
152
- return entityFields.includes(field);
153
- }); // NOTE: stand in for flag rolloutFormDuration
154
-
155
- if (formDurationFieldsPresent) {
156
- var startedAtInTimezone = entity.startedAt ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
157
- var startedAt = text("Started: ".concat(startedAtInTimezone), {
158
- colSpan: 2,
159
- style: 'small'
160
- });
161
- var submittedAtInTimezone = entity.submittedAt ? moment(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
162
- var submittedAt = text("Submitted: ".concat(submittedAtInTimezone), {
163
- colSpan: 2,
164
- style: 'small'
165
- });
166
- var momentDuration = moment.duration(Math.abs(entity.formDuration));
167
- var days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
168
- var hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
169
- var minutes = momentDuration.minutes().toString().padStart(2, '0');
170
- var seconds = momentDuration.seconds().toString().padStart(2, '0');
171
- var formattedFormDuration = entity.formDuration ? "".concat(entity.formDuration < 0 ? '-' : '').concat(days, ":").concat(hours, ":").concat(minutes, ":").concat(seconds) : 'Not recorded';
172
- var formDuration = text("Form Duration (DD:HH:MM:SS): ".concat(formattedFormDuration), {
173
- colSpan: 2,
174
- style: 'small'
175
- });
176
- body.push([startedAt, dummyColumn]);
177
- body.push([submittedAt, dummyColumn]);
178
- body.push([formDuration, dummyColumn]);
179
- }
180
-
150
+ var startedAtInTimezone = entity.startedAt ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
151
+ var startedAt = text("Started: ".concat(startedAtInTimezone), {
152
+ colSpan: 2,
153
+ style: 'small'
154
+ });
155
+ var submittedAtInTimezone = entity.submittedAt ? moment(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
156
+ var submittedAt = text("Submitted: ".concat(submittedAtInTimezone), {
157
+ colSpan: 2,
158
+ style: 'small'
159
+ });
160
+ var momentDuration = moment.duration(Math.abs(entity.formDuration));
161
+ var days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
162
+ var hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
163
+ var minutes = momentDuration.minutes().toString().padStart(2, '0');
164
+ var seconds = momentDuration.seconds().toString().padStart(2, '0');
165
+ var formattedFormDuration = entity.formDuration ? "".concat(entity.formDuration < 0 ? '-' : '').concat(days, ":").concat(hours, ":").concat(minutes, ":").concat(seconds) : 'Not recorded';
166
+ var formDuration = text("Form Duration (DD:HH:MM:SS): ".concat(formattedFormDuration), {
167
+ colSpan: 2,
168
+ style: 'small'
169
+ });
170
+ body.push([startedAt, dummyColumn]);
171
+ body.push([submittedAt, dummyColumn]);
172
+ body.push([formDuration, dummyColumn]);
181
173
  var titleTable = twoColumnTable({
182
174
  body: body,
183
175
  layout: 'noBorders',
@@ -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","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","days","floor","asDays","toString","padStart","hours","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) {\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: ${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: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const days = Math.floor(momentDuration.asDays())\n .toString()\n .padStart(2, '0')\n const hours = Math.floor(momentDuration.hours())\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 ? `${\n entity.formDuration < 0 ? '-' : ''\n }${days}:${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (DD: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 = buildAuditFollowUps(followUps, { timezone })\n\n const promises = {\n entry: buildAuditContent(groupedData.items),\n footerTemplate: buildTemplateContent(footerFields.formGroups, data),\n headerTemplate: buildTemplateContent(headerFields.formGroups, data),\n }\n\n const auditItemsTitle = [\n {\n text: 'Audit Items',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n },\n },\n hLineTop,\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","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","startedAtInTimezone","startedAt","tz","format","submittedAtInTimezone","submittedAt","momentDuration","duration","Math","abs","formDuration","days","floor","asDays","toString","padStart","hours","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) {\n const { entity } = data\n\n const {\n followUps = [],\n footerFields = {},\n gps = {},\n headerFields = {},\n score = {},\n title = 'Unknown',\n } = entity\n\n const timezone = entity?.timezone || data?.timezone\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 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: ${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: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const days = Math.floor(momentDuration.asDays())\n .toString()\n .padStart(2, '0')\n const hours = Math.floor(momentDuration.hours())\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 ? `${\n entity.formDuration < 0 ? '-' : ''\n }${days}:${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (DD: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 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 = buildAuditFollowUps(followUps, { timezone })\n\n const promises = {\n entry: buildAuditContent(groupedData.items),\n footerTemplate: buildTemplateContent(footerFields.formGroups, data),\n headerTemplate: buildTemplateContent(headerFields.formGroups, data),\n }\n\n const auditItemsTitle = [\n {\n text: 'Audit Items',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n },\n },\n hLineTop,\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"}
@@ -82,34 +82,26 @@ function generateContent(data) {
82
82
  style: 'small'
83
83
  });
84
84
  var body = !isEmpty(reverseGeocoded) ? [[headerTitle], [headerSubTitle], [headerAddress]] : [[headerTitle], [headerSubTitle]];
85
- var entityFields = Object.keys(entity);
86
- var formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(function (field) {
87
- return entityFields.includes(field);
88
- }); // NOTE: stand in for flag rolloutFormDuration
89
-
90
- if (formDurationFieldsPresent) {
91
- var startedAtInTimezone = entity.startedAt ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
92
- var startedAt = text("Started: ".concat(startedAtInTimezone), {
93
- style: 'small'
94
- });
95
- var submittedAtInTimezone = entity.submittedAt ? moment(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
96
- var submittedAt = text("Submitted: ".concat(submittedAtInTimezone), {
97
- style: 'small'
98
- });
99
- var momentDuration = moment.duration(Math.abs(entity.formDuration));
100
- var days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
101
- var hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
102
- var minutes = momentDuration.minutes().toString().padStart(2, '0');
103
- var seconds = momentDuration.seconds().toString().padStart(2, '0');
104
- var formattedFormDuration = entity.formDuration ? "".concat(entity.formDuration < 0 ? '-' : '').concat(days, ":").concat(hours, ":").concat(minutes, ":").concat(seconds) : 'Not recorded';
105
- var formDuration = text("Form Duration (DD:HH:MM:SS): ".concat(formattedFormDuration), {
106
- style: 'small'
107
- });
108
- body.push([startedAt]);
109
- body.push([submittedAt]);
110
- body.push([formDuration]);
111
- }
112
-
85
+ var startedAtInTimezone = entity.startedAt ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
86
+ var startedAt = text("Started: ".concat(startedAtInTimezone), {
87
+ style: 'small'
88
+ });
89
+ var submittedAtInTimezone = entity.submittedAt ? moment(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
90
+ var submittedAt = text("Submitted: ".concat(submittedAtInTimezone), {
91
+ style: 'small'
92
+ });
93
+ var momentDuration = moment.duration(Math.abs(entity.formDuration));
94
+ var days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
95
+ var hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
96
+ var minutes = momentDuration.minutes().toString().padStart(2, '0');
97
+ var seconds = momentDuration.seconds().toString().padStart(2, '0');
98
+ var formattedFormDuration = entity.formDuration ? "".concat(entity.formDuration < 0 ? '-' : '').concat(days, ":").concat(hours, ":").concat(minutes, ":").concat(seconds) : 'Not recorded';
99
+ var formDuration = text("Form Duration (DD:HH:MM:SS): ".concat(formattedFormDuration), {
100
+ style: 'small'
101
+ });
102
+ body.push([startedAt]);
103
+ body.push([submittedAt]);
104
+ body.push([formDuration]);
113
105
  var titleTable = table({
114
106
  body: body,
115
107
  layout: 'noBorders',
@@ -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","entityFields","Object","keys","formDurationFieldsPresent","some","field","includes","startedAtInTimezone","startedAt","tz","format","submittedAtInTimezone","submittedAt","momentDuration","duration","Math","abs","formDuration","days","floor","asDays","toString","padStart","hours","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: ${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: ${submittedAtInTimezone}`, {\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const days = Math.floor(momentDuration.asDays())\n .toString()\n .padStart(2, '0')\n const hours = Math.floor(momentDuration.hours())\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 ? `${\n entity.formDuration < 0 ? '-' : ''\n }${days}:${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (DD: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","startedAtInTimezone","startedAt","tz","format","submittedAtInTimezone","submittedAt","momentDuration","duration","Math","abs","formDuration","days","floor","asDays","toString","padStart","hours","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 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: ${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: ${submittedAtInTimezone}`, {\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const days = Math.floor(momentDuration.asDays())\n .toString()\n .padStart(2, '0')\n const hours = Math.floor(momentDuration.hours())\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 ? `${\n entity.formDuration < 0 ? '-' : ''\n }${days}:${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (DD: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 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"}
@@ -83,34 +83,26 @@ function generateContent(data) {
83
83
  body.push([headerAddress]);
84
84
  }
85
85
 
86
- var entityFields = Object.keys(entity);
87
- var formDurationFieldsPresent = ['formDuration', 'startedAt', 'submittedAt'].some(function (field) {
88
- return entityFields.includes(field);
89
- }); // NOTE: stand in for flag rolloutFormDuration
90
-
91
- if (formDurationFieldsPresent) {
92
- var startedAtInTimezone = entity.startedAt ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
93
- var startedAt = text("Started: ".concat(startedAtInTimezone), {
94
- style: 'small'
95
- });
96
- var submittedAtInTimezone = entity.submittedAt ? moment(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
97
- var submittedAt = text("Submitted: ".concat(submittedAtInTimezone), {
98
- style: 'small'
99
- });
100
- var momentDuration = moment.duration(Math.abs(entity.formDuration));
101
- var days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
102
- var hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
103
- var minutes = momentDuration.minutes().toString().padStart(2, '0');
104
- var seconds = momentDuration.seconds().toString().padStart(2, '0');
105
- var formattedFormDuration = entity.formDuration ? "".concat(entity.formDuration < 0 ? '-' : '').concat(days, ":").concat(hours, ":").concat(minutes, ":").concat(seconds) : 'Not recorded';
106
- var formDuration = text("Form Duration (DD:HH:MM:SS): ".concat(formattedFormDuration), {
107
- style: 'small'
108
- });
109
- body.push([startedAt]);
110
- body.push([submittedAt]);
111
- body.push([formDuration]);
112
- }
113
-
86
+ var startedAtInTimezone = entity.startedAt ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
87
+ var startedAt = text("Started: ".concat(startedAtInTimezone), {
88
+ style: 'small'
89
+ });
90
+ var submittedAtInTimezone = entity.submittedAt ? moment(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
91
+ var submittedAt = text("Submitted: ".concat(submittedAtInTimezone), {
92
+ style: 'small'
93
+ });
94
+ var momentDuration = moment.duration(Math.abs(entity.formDuration));
95
+ var days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
96
+ var hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
97
+ var minutes = momentDuration.minutes().toString().padStart(2, '0');
98
+ var seconds = momentDuration.seconds().toString().padStart(2, '0');
99
+ var formattedFormDuration = entity.formDuration ? "".concat(entity.formDuration < 0 ? '-' : '').concat(days, ":").concat(hours, ":").concat(minutes, ":").concat(seconds) : 'Not recorded';
100
+ var formDuration = text("Form Duration (DD:HH:MM:SS): ".concat(formattedFormDuration), {
101
+ style: 'small'
102
+ });
103
+ body.push([startedAt]);
104
+ body.push([submittedAt]);
105
+ body.push([formDuration]);
114
106
  var titleTable = table({
115
107
  body: body,
116
108
  layout: 'noBorders',
@@ -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","days","floor","asDays","toString","padStart","hours","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: ${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: ${submittedAtInTimezone}`, {\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const days = Math.floor(momentDuration.asDays())\n .toString()\n .padStart(2, '0')\n const hours = Math.floor(momentDuration.hours())\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 ? `${\n entity.formDuration < 0 ? '-' : ''\n }${days}:${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (DD: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","startedAtInTimezone","startedAt","tz","format","submittedAtInTimezone","submittedAt","momentDuration","duration","Math","abs","formDuration","days","floor","asDays","toString","padStart","hours","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 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: ${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: ${submittedAtInTimezone}`, {\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const days = Math.floor(momentDuration.asDays())\n .toString()\n .padStart(2, '0')\n const hours = Math.floor(momentDuration.hours())\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 ? `${\n entity.formDuration < 0 ? '-' : ''\n }${days}:${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (DD: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 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.36.0",
3
+ "version": "4.36.2-canary.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "lib/index.js",