[PB Extension] Create FW project#2394
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
myieye
left a comment
There was a problem hiding this comment.
Generally looks fine to me. 👍
|
|
||
| function isValidLangTag(tag: string): boolean { | ||
| try { | ||
| return Intl.getCanonicalLocales(tag).length === 1; |
There was a problem hiding this comment.
What's the === 1 about? I'd expect >= 1.
| async getProjects(): Promise<IProjectModel[]> { | ||
| return (await this.fetchPath('localProjects')) as IProjectModel[]; | ||
| const projects = (await this.fetchPath('localProjects')) as IProjectModel[]; | ||
| projects.forEach((p) => FwLiteApi.projectTypeByCode.set(p.code, p.crdt ? 'Harmony' : 'FwData')); |
There was a problem hiding this comment.
If I'm not mistaken, these projects are sometimes flagged as both crdt and fwdata.
There was a problem hiding this comment.
Correct, and if the project has both flags, don't we want to default to Harmony interaction?
`fetchUrl` now reads the response as text before conditionally parsing JSON, so endpoints that return an empty 200 (like DELETE entry and the new project/create route) no longer throw a SyntaxError. `FwLiteApi.createProject` wraps `POST /api/project/create`, which was added in #2281 to resolve #1920. Closes #2061. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds an end-to-end flow for creating a new FW Lite CRDT project from within the SelectLexicon dialog: - New `lexicon.createLexicon` PAPI command wrapping FwLiteApi.createProject - New CreateLexicon form component (name, auto-derived code, vernacular WS pre-filled from the Paratext project language, optional analysis WS) - "Create new lexicon" button in LexiconComboBox opens the form - On successful creation the new lexicon is auto-selected and the dialog shows the standard "Lexicon selection saved" confirmation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…key order - fw-lite-api: add static projectTypeByCode cache (shared across FwLiteApi instances including EntryService) so CRDT projects created via createProject route through mini-lcm/Harmony/... instead of mini-lcm/FwData/... getProjects() populates the cache; createProject() seeds 'Harmony' immediately so the writingSystems call in selectLexicon succeeds without a re-fetch - fw-lite-api: include response body text in error messages so backend validation failures (duplicate code, invalid lang tag, etc.) reach the logger - create-lexicon: validate vernacular and analysis language tags with Intl.getCanonicalLocales() before enabling the submit button - localized-string-keys / localizedStrings.json: restore alphabetical ordering Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- deriveCode now replaces invalid characters with '-' instead of removing them, matching the backend SanitizeProjectCode behavior - WebView onCreated catches selectLexicon failure: logs the error, refreshes the lexicon list, and falls back to the combo box so the user can manually select the project that was created on disk Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The Svelte frontend routes FwData projects via /paratext/fwdata/{code}
and CRDT/Harmony projects via /paratext/project/{code}. The standalone
getBrowseUrl always used 'fwdata', producing a broken URL for any
Harmony lexicon.
Move getBrowseUrl into FwLiteApi as a method so it can consult the
projectTypeByCode cache and emit 'project' vs 'fwdata' accordingly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Hints the default analysis writing system on the Create new lexicon form, per review feedback. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
26cae9e to
77b6250
Compare
Display the backend error message (e.g. duplicate code, invalid language tag) instead of only logging it, per review feedback. Also drop the now- pointless useCallback around handleSubmit. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Summary
FwLiteApi.createProject(name, code, vernacularWs, analysisWs?)to the Platform.Bible extension's HTTP client, wrapping thePOST /api/project/createendpoint added in Wire up template-based project creation via JSON snapshot import #2281.fetchUrl: it previously calledresponse.json()unconditionally, which throws aSyntaxErroron empty-body responses (HTTP 200 with no content). The fix reads the body as text first and only parses JSON when the body is non-empty. This also silently affecteddeleteEntry.Changes
platform.bible-extension/src/utils/fw-lite-api.tsfetchUrl:results.json()→results.text()+ conditionalJSON.parseFwLiteApi.createProject: new public method usingURLSearchParamsfor the create endpointplatform.bible-extension/src/main.ts— registerslexicon.createLexiconcommandplatform.bible-extension/src/types/lexicon.d.ts—'lexicon.createLexicon'command handler typeplatform.bible-extension/src/types/localized-string-keys.ts+contributions/localizedStrings.json— 8 new%lexicon_createLexicon_*%stringsplatform.bible-extension/src/components/create-lexicon.tsx— new form componentplatform.bible-extension/src/components/lexicon-combo-box.tsx— optionalonCreateNewprop adds the "Create new lexicon" buttonplatform.bible-extension/src/utils/project-manager.ts— passes the project's vernacular language tag when opening the SelectLexicon WebViewplatform.bible-extension/src/web-views/select-lexicon.web-view.tsx— wires up the create flow with auto-selection on successImplemented by Claude Sonnet 4.6 via Claude Code.
Devin review: https://app.devin.ai/review/sillsdev/languageforge-lexbox/pull/2394
Closes #2061