Skip to content

Commit

Permalink
Merge pull request #118 from konecty/fix/export-date-formatting
Browse files Browse the repository at this point in the history
Fix: Export date formatting
  • Loading branch information
silveirado authored Mar 11, 2024
2 parents b7ea2ed + 721c6c8 commit 7006094
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 16 deletions.
9 changes: 6 additions & 3 deletions src/imports/data/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,13 @@ export async function getNextUserFromQueue({ authTokenId, document, queueId, con
* @param {boolean} [payload.getTotal=false]
* @param {'true'} [payload.withDetailFields]
* @param {import('../model/User').User} [payload.contextUser]
* @param {boolean} [payload.transformDatesToString=true]
* @param {import('@opentelemetry/api').Span} [payload.tracingSpan]
*
* @returns {Promise<import('../types/result').KonectyResult<object[]>>} - Konecty result
*/

export async function find({ authTokenId, document, displayName, displayType, fields, filter, sort, limit, start, getTotal, withDetailFields, contextUser, tracingSpan }) {
export async function find({ authTokenId, document, displayName, displayType, fields, filter, sort, limit, start, getTotal, withDetailFields, contextUser, transformDatesToString = true, tracingSpan }) {
try {
tracingSpan?.setAttribute('document', document);

Expand Down Expand Up @@ -296,11 +297,13 @@ export async function find({ authTokenId, document, displayName, displayType, fi
});
}

result.data = result.data.map(dateToString);
if (transformDatesToString) {
result.data = result.data.map(dateToString);
}

return result;
} catch (error) {
tracingSpan?.setAttributes("error", error.message);
tracingSpan?.setAttribute("error", error.message);
logger.error(error, `Error executing query: ${error.message}`);

return {
Expand Down
26 changes: 15 additions & 11 deletions src/imports/data/dateParser/index.ts
Original file line number Diff line number Diff line change
@@ -1,44 +1,48 @@
import { DateTime } from 'luxon';

import isObject from 'lodash/isObject';
import isFunction from 'lodash/isFunction';
import reduce from 'lodash/reduce';
import isDate from 'lodash/isDate';
import isArray from 'lodash/isArray';
import isDate from 'lodash/isDate';
import isFunction from 'lodash/isFunction';
import isObject from 'lodash/isPlainObject';
import isString from 'lodash/isString';
import map from 'lodash/map';
import reduce from 'lodash/reduce';

type RecordObject = {
toHexString?: () => string;
};

export function dateToString(record: any): string | Array<any> | object {
type TransformFn = (date: DateTime) => string;

export function dateToString<ReturnT = string | Array<any> | object>(record: any, transformFn?: TransformFn): ReturnT {
if (isObject(record)) {
const typedRecord = record as RecordObject;

if (isFunction(typedRecord.toHexString)) {
return typedRecord.toHexString();
return typedRecord.toHexString() as ReturnT;
}

const transformToString = isFunction(transformFn) ? transformFn : (date: DateTime) => date.toISO();

return reduce(
typedRecord,
(acc, value, key) => {
if (isDate(value)) {
return {
...acc,
[key]: DateTime.fromJSDate(value).toISO(),
[key]: transformToString(DateTime.fromJSDate(value)),
};
}
if (isArray(value)) {
return {
...acc,
[key]: map(value, dateToString),
[key]: map(value, v => dateToString(v, transformFn)),
};
}
if (isObject(value)) {
return {
...acc,
[key]: dateToString(value),
[key]: dateToString(value, transformFn),
};
}
return {
Expand All @@ -47,9 +51,9 @@ export function dateToString(record: any): string | Array<any> | object {
};
},
{},
);
) as ReturnT;
} else if (isArray(record)) {
return map(record, dateToString);
return map(record, v => dateToString(v, transformFn)) as ReturnT;
} else {
return record;
}
Expand Down
7 changes: 5 additions & 2 deletions src/imports/data/export.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { xlsExport } from '@imports/exports/xlsExport';
import { List } from '@imports/model/List';
import { User } from '@imports/model/User';
import { KonectyResult } from '@imports/types/result';
import { dateToString } from './dateParser';

type ExportDataParams = {
document: string;
Expand Down Expand Up @@ -113,7 +114,8 @@ export default async function exportData({ document, listName, type = 'csv', use
limit: query.limit,
start: query.start,
withDetailFields: 'true',
getTotal: true,
getTotal: false,
transformDatesToString: false,
tracingSpan,
});

Expand All @@ -125,8 +127,9 @@ export default async function exportData({ document, listName, type = 'csv', use
const dataResult = result.data.reduce(
(acc: { flatData: object[]; keys: Record<string, number> }, item) => {
const flatItem = flatten<object, object>(item);
const transformed = dateToString<typeof flatItem>(flatItem, date => date.toFormat('dd/MM/yyyy HH:mm:ss'));

acc.flatData.push(flatItem);
acc.flatData.push(transformed);
Object.keys(flatItem as object).forEach(key => (acc.keys[key] = 1));

return acc;
Expand Down

0 comments on commit 7006094

Please sign in to comment.