Skip to content

Commit 1f1dbcb

Browse files
committed
fix(people): pass an out-of-range date serial through instead of failing the import
1 parent 2d50d6a commit 1f1dbcb

2 files changed

Lines changed: 14 additions & 1 deletion

File tree

‎apps/sim/app/o/[organizationId]/people/read-people-sheet.test.ts‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,17 @@ describe('readPeopleSheet', () => {
5050
expect(sheet.rows).toEqual([['ada@example.com', '2024-01-31']])
5151
})
5252

53+
it('passes an out-of-range date serial through as text for the server to refuse', async () => {
54+
const sheet = await readPeopleSheet(
55+
workbookFile([
56+
['email', 'start date'],
57+
['ada@example.com', -5],
58+
])
59+
)
60+
expect(sheet.rows[0]?.[0]).toBe('ada@example.com')
61+
expect(sheet.rows[0]?.[1]).not.toMatch(/^\d{4}-\d{2}-\d{2}$/)
62+
})
63+
5364
it('keeps blank rows in place so issue row numbers match the sheet', async () => {
5465
const sheet = await readPeopleSheet(
5566
workbookFile([

‎apps/sim/app/o/[organizationId]/people/read-people-sheet.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@ export async function readPeopleSheet(file: File): Promise<PeopleSheet> {
3939
const cell = grid[row]?.[column]
4040
if (!cell || cell.v === undefined || cell.v === null) return ''
4141
if (cell.t === 'n' && XLSX.SSF.is_date(cell.z ?? '')) {
42+
// A serial outside Excel's calendar has no date; its text goes on for the server to refuse.
4243
const date = XLSX.SSF.parse_date_code(Number(cell.v), dateSystem)
43-
return `${date.y}-${String(date.m).padStart(2, '0')}-${String(date.d).padStart(2, '0')}`
44+
if (date)
45+
return `${date.y}-${String(date.m).padStart(2, '0')}-${String(date.d).padStart(2, '0')}`
4446
}
4547
return String(cell.w ?? cell.v).trim()
4648
}

0 commit comments

Comments
 (0)