From abce2aaa274f83f53de2fb88fd81e3da664317fd Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 2 Jan 2026 23:53:06 +0900 Subject: feat(import): simplify CSV format by removing deck column MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since import is initiated from deck context, the deck is already known via props. Simplifies CSV format to: note_type,Field1,Field2,... BREAKING CHANGE: CSV format changed from deck,note_type,... to note_type,... 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- docs/manual/csv-import.md | 35 +++++++++++++++--------------- src/client/components/ImportNotesModal.tsx | 18 +++++++-------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/docs/manual/csv-import.md b/docs/manual/csv-import.md index 6759e54..321a9c6 100644 --- a/docs/manual/csv-import.md +++ b/docs/manual/csv-import.md @@ -16,10 +16,9 @@ Kioku allows you to bulk import notes from CSV files. The first row is the header. Use the following format: ``` -deck,note_type,Field1,Field2,... +note_type,Field1,Field2,... ``` -- **deck**: Deck name (for reference only; import destination is selected in the UI) - **note_type**: Note type name (required) - **Field names**: Field names defined in the note type @@ -28,27 +27,27 @@ deck,note_type,Field1,Field2,... Rows 2 and onwards contain the notes to import. ```csv -deck,note_type,Front,Back -MyDeck,Basic,hello,world -MyDeck,Basic,goodbye,farewell +note_type,Front,Back +Basic,hello,world +Basic,goodbye,farewell ``` ### Example: Basic Note Type ```csv -deck,note_type,Front,Back -Vocabulary,Basic,apple,a round fruit -Vocabulary,Basic,banana,a yellow fruit -Vocabulary,Basic,orange,a citrus fruit +note_type,Front,Back +Basic,apple,a round fruit +Basic,banana,a yellow fruit +Basic,orange,a citrus fruit ``` ### Example: Basic (and reversed card) Note Type ```csv -deck,note_type,Front,Back -Capitals,Basic (and reversed card),Tokyo,Japan -Capitals,Basic (and reversed card),Paris,France -Capitals,Basic (and reversed card),London,United Kingdom +note_type,Front,Back +Basic (and reversed card),Tokyo,Japan +Basic (and reversed card),Paris,France +Basic (and reversed card),London,United Kingdom ``` ## CSV Specification @@ -66,17 +65,17 @@ Kioku's CSV parser is RFC 4180 compliant. Use double quotes (`"`) to include commas or newlines within a field: ```csv -deck,note_type,Front,Back -MyDeck,Basic,"Hello, World!",example with comma -MyDeck,Basic,"Line 1 +note_type,Front,Back +Basic,"Hello, World!",example with comma +Basic,"Line 1 Line 2",example with newline ``` To include a double quote within a field, escape it by doubling: ```csv -deck,note_type,Front,Back -MyDeck,Basic,"He said ""Hello""",example with quotes +note_type,Front,Back +Basic,"He said ""Hello""",example with quotes ``` ## Important Notes diff --git a/src/client/components/ImportNotesModal.tsx b/src/client/components/ImportNotesModal.tsx index a7a88c5..2eb0922 100644 --- a/src/client/components/ImportNotesModal.tsx +++ b/src/client/components/ImportNotesModal.tsx @@ -142,22 +142,20 @@ export function ImportNotesModal({ const { headers, rows } = parseResult.data; - // Validate headers: must have deck, note_type, and at least one field - if (headers.length < 3) { - setError( - "CSV must have at least 3 columns: deck, note_type, and field(s)", - ); + // Validate headers: must have note_type and at least one field + if (headers.length < 2) { + setError("CSV must have at least 2 columns: note_type and field(s)"); setPhase("upload"); return; } - if (headers[0] !== "deck" || headers[1] !== "note_type") { - setError("First two columns must be 'deck' and 'note_type'"); + if (headers[0] !== "note_type") { + setError("First column must be 'note_type'"); setPhase("upload"); return; } - const fieldNames = headers.slice(2); + const fieldNames = headers.slice(1); const validated: ValidatedRow[] = []; const errors: ValidationError[] = []; @@ -316,9 +314,9 @@ export function ImportNotesModal({

Expected format:

- deck,note_type,Front,Back + note_type,Front,Back
- MyDeck,Basic,hello,world + Basic,hello,world
-- cgit v1.2.3-70-g09d2