diff --git a/app/lib/csvToDoneEntries.ts b/app/lib/csvToDoneEntries.ts index 94d7f0c9..388df42e 100644 --- a/app/lib/csvToDoneEntries.ts +++ b/app/lib/csvToDoneEntries.ts @@ -10,7 +10,6 @@ class DoneEntryCsvRow extends S.Class("DoneEntryCsvRow")({ date: S.String, content: S.String, likes: S.String, - timestamp: S.String, }) {} export const csvToDoneEntries = (csvData: string) => @@ -26,7 +25,7 @@ export const csvToDoneEntries = (csvData: string) => const contact = yield* contacts.findBy("userName", row.userName.toLowerCase()) // `likes` comes in as as serialized array of user names; need to convert that to contactIDs - const likesUserNames = JSON.parse(row.likes) as string[] + const likesUserNames = (row.likes ? JSON.parse(row.likes) : []) as string[] const likes = [] as ContactId[] for (const userName of likesUserNames) { const contact = yield* contacts.findBy("userName", userName.toLowerCase()) @@ -39,7 +38,6 @@ export const csvToDoneEntries = (csvData: string) => date: row.date, content: row.content, likes, - timestamp: Number(row.timestamp), }) }).pipe(E.mapError(cause => new DoneEntryCsvParseError({ input, index, cause }))) }) diff --git a/app/lib/test/csvToDoneEntries.test.ts b/app/lib/test/csvToDoneEntries.test.ts index 1855da9c..fe724f3f 100644 --- a/app/lib/test/csvToDoneEntries.test.ts +++ b/app/lib/test/csvToDoneEntries.test.ts @@ -1,11 +1,7 @@ -import { clients } from "data/clients" import { contacts } from "data/contacts" -import { projects } from "data/projects" import { $, E, pipe } from "lib/Effect" import { type BaseTestCase } from "lib/runTestCases" -import { ClientCollection, ProvidedClients } from "schema/ClientCollection" import { ContactCollection, ProvidedContacts } from "schema/ContactCollection" -import { ProjectCollection, ProvidedProjects } from "schema/ProjectCollection" import { assert, expect, test } from "vitest" import { csvToDoneEntries } from "../csvToDoneEntries" @@ -62,19 +58,10 @@ const label = ({ label, input }: TestCase) => const errorPadding = Math.max(...testCases.filter(tc => tc.error).map(tc => label(tc).length)) -const TestProjects = new ProjectCollection(projects) -const TestClients = new ClientCollection(clients) const TestContacts = new ContactCollection(contacts) const decode = (csv: string) => - pipe( - csv, - csvToDoneEntries, - E.provideService(ProvidedContacts, TestContacts), - E.provideService(ProvidedProjects, TestProjects), - E.provideService(ProvidedClients, TestClients), - $, - ) + pipe(csv, csvToDoneEntries, E.provideService(ProvidedContacts, TestContacts), $) for (const testCase of testCases) { const { input, only, skip } = testCase diff --git a/app/routes/_private+/devtools+/danger+/ui/DoneEntryImporter.tsx b/app/routes/_private+/devtools+/danger+/ui/DoneEntryImporter.tsx index 93092ab1..99978f49 100644 --- a/app/routes/_private+/devtools+/danger+/ui/DoneEntryImporter.tsx +++ b/app/routes/_private+/devtools+/danger+/ui/DoneEntryImporter.tsx @@ -13,13 +13,14 @@ export const DoneEntryImporter = ({ add = NO_OP, destroyAll = NO_OP, contacts = const [doneEntries, setDones] = useState([]) const [successMessage, setSuccessMessage] = useState(undefined) - const decode = (csv: string) => - pipe( + const decode = (csv: string) => { + return pipe( csv, csvToDoneEntries, E.provideService(ProvidedContacts, new ContactCollection(contacts)), $, ) + } const onImportDataChange = (event: React.ChangeEvent) => { const csv = event.target.value @@ -48,10 +49,11 @@ export const DoneEntryImporter = ({ add = NO_OP, destroyAll = NO_OP, contacts = cols={200} placeholder={[ "Enter comma-delimited entries, one per line in this format: ", - "contactId,date,content ", + "contactId,date,content,likes", "", - "Example: ", - "brent,2023-01-27,Added feature X", + "Examples: ", + "brent,2023-01-27,Added feature X,[]", + 'herb,2023-01-27,"Updated weekly meeting template to be a ""custom building block""","[""shane"",""ritika"",""aasit"",""reid"",""colleen""]"', ].join("\n")} >