Import UI #64
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#64
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Users import documents from the pond sidebar and see progress and results.
Scope
'Import document' action in the sidebar new-page menu: file picker (accept .docx/.odt/.md), upload with progress, job polling with state display (queued/converting/done/failed), on success navigate to the new page, on failure show the error with retry; Markdown files import directly (no job).
Acceptance criteria
Technical notes
Dependencies
Depends on #63.
Size: ~1 day
Conventions: English code/comments, clear human-readable code, no hard-coded UI strings (ADR 0012, add
deanden), permission checks only via the shared guard (docs/architecture/permissions.md). Read the referenced ADRs before starting.Done in
e2f942c. Pipeline fully green (all 7 contexts, incl. the new import e2e pack in the auth-e2e job); deployed to Test + Int and verified live.What shipped
apps/web/src/import/): a file picker (accept.docx/.odt/.md, multiple), upload with per-file progress, and open the new page on success.useImportuploads viaapiUploadFile, then for a conversion job pollsGET /jobs/:id(queued → converting → done), resolves the created page's slug and navigates; the first success of a batch navigates, every success refreshes the sidebar list. Failures stay listed with the localized error and a retry. Newimporti18n namespace (de+en)..md/.markdownand imports in-process, returning aConversionJobViewalreadysucceededwithresultPageId— the client navigates immediately, no polling. The media-extract → parse → create-page tail is now shared between the job path and the sync path; a conversion error on the sync path maps to an HTTP status.Acceptance criteria
.docx→ page opens with converted content (e2e with the #63 corpus fixture) —import.spec.ts; the.docxcase self-skips without a reachable pandoc sidecar (CI's e2e stack is container-networked and has none, same reason #63's real-pandoc test skips in CI), so it runs locally / on a stage. Verified locally againstpandoc/core:3.6(all 4 e2e green)..txtshows the errors-namespace message; the pond's page count is unchanged..mdimports both create their pages.Tests:
import.spec.ts(4 cases;.docxgated onE2E_PANDOC, the other three run in CI) + a.md-direct case in the apiimport.service.db.test.ts. Quality bar green: typecheck, lint, i18n:check, api 207, web 50.Live verification
.mdvia the deployed endpoint → 201succeeded(sourceFormat: md) with aresultPageId, page titled from its# heading. Web bundle serves (200)..docxend-to-end was already verified on Int in #63 and by the local e2e here.readyzconverter: ok. CD smoke tests green.Next: #65 (export ZIP/docx/odt).