Skip to content

TT-7019,feat: enhance AlertDialog responsiveness and add publishing control in PlanView#440

Closed
gtryus wants to merge 600 commits into
masterfrom
feature/TT-7019-publish-button
Closed

TT-7019,feat: enhance AlertDialog responsiveness and add publishing control in PlanView#440
gtryus wants to merge 600 commits into
masterfrom
feature/TT-7019-publish-button

Conversation

@gtryus

@gtryus gtryus commented Jul 17, 2026

Copy link
Copy Markdown
Contributor
  • PlanView.tsx — mobile Publish button now reads canPublish from PlanContext and is disabled={!canPublish}, matching the desktop PublishButton behavior.
  • ScriptureTable.tsx — setSectionPublish now triggers startSave() after 1s, same pattern as updateTitleMedia, so publishing persists immediately instead of waiting for the next navigation.
  • UnsavedContext.tsx — the Unsaved-Data-dialog save-confirmation timeout was raised from 18s (an outlier) to 200s, matching the convention used elsewhere in the app.
  • AlertDialog.tsx — added mobile-aware Dialog-paper sizing (via useMobile()/useTheme()), fixing the "wrong place" positioning bug for the Unsaved Data dialog and every other confirmation dialog built on this shared component.

Greg Trihus and others added 30 commits May 8, 2026 14:06
- Updated scope assignment in useBurritoAudio and useBurritoNavigation to ensure it defaults to an empty array when scopeRef is not defined.
- Enhanced tests for useBurritoAudio to validate the new scope structure.
- Added identification trimming functionality in useCreateBurrito to clean up metadata fields before saving.

These changes improve data integrity and ensure consistent behavior across components.
TT-7308 Refactor scope handling and triming spaces from meta data items.
- Introduced a dialog for users to input references and navigate to specific rows in the PlanSheet.
- Implemented localization for new strings related to the "Go to Reference" feature.
- Enhanced the findPlanSheetRowFromReferenceQuery utility to support various reference formats.
- Added tests for the new functionality to ensure accurate row retrieval based on user input.

These changes improve user navigation within the PlanSheet, enhancing overall usability.
- Implemented akuoBookToUsfm function to map Akuo-style book slots to USFM codes.
- Created projectDefaultToBurritoBookKey function for mapping project defaults to burrito book keys.
- Added comprehensive tests for both functions to ensure correct mapping and handling of edge cases.
- Updated BurritoBooks and useBurritoApmData to utilize the new mapping functions for improved book code resolution.

These changes enhance the handling of book codes in the application, ensuring accurate mappings and better integration with project defaults.
Moving `newBooks.add(book)` out of forEach loop drops books when a project has passages with multiple book codes
In the old code, newBooks.add(book) was called inside the passageRecs.forEach loop, so every unique book code encountered across passages was added to the Set. The new code moved the newBooks.add(book) call to after the loop, so only the last book value seen is added. If a project has passages referencing different books (e.g. GEN and EXO), only the last one survives. The old code would add both since book was reassigned and newBooks.add(book) was called on each iteration.

This incomplete books list is then saved to org defaults via setOrgDefault(burritoBooks, books, teamId) at BurritoBooks.tsx:95, and later consumed by useCreateBurrito.ts:370 which iterates for (const book of books) to drive the export. Missing books mean their sections are silently skipped during export.
TT-7122 General Project to Burrito
- Modified the "Go to Reference" placeholder text for clarity in localization files.
- Introduced new JSON localization file for additional strings.
- Enhanced the `findPlanSheetRowFromReferenceQuery` function to support exact reference text matching for general projects and improved scripture parsing logic.
- Added tests to validate new functionality and ensure accurate row retrieval based on user input.

These changes improve user navigation and localization support within the PlanSheet component.
TT-6990 Add "Go to Reference" functionality in PlanSheet component
…ceQuery

- Simplified array initialization in tests for better clarity.
- Enhanced readability of conditional statements in the findPlanSheetRowFromReferenceQuery function.
- Updated error handling check in PlanSheet component to explicitly compare against false.

These changes improve code maintainability and readability across the affected components.
- Introduced new workflow steps for the BOLD (Basic Oral Language Documentation) process, including careful speech, careful transcription, free transcription, and LWC translation.
- Updated localization files to include new strings related to the BOLD workflow.
- Implemented logic in various components to utilize the new workflow process, enhancing project management capabilities.
- Removed outdated localization JSON file and updated the exported strings reference.

These changes improve the application's support for the BOLD workflow, enhancing user experience and localization accuracy.
This document outlines the user experience principles, design component library, and theming considerations for the APM project. It includes detailed definitions and states for various UI components to ensure consistency and usability.
…functionality

- Added audio diagnostics logging capabilities to track media recording and conversion processes.
- Introduced new utility functions for gathering audio track and blob diagnostics.
- Enhanced the MediaRecord component to log detailed information during upload and save operations, including mobile view context.
- Updated AudioMediaRecorder and conversion functions to include diagnostic logging for better debugging and performance analysis.

These changes improve the observability of audio processing workflows and facilitate troubleshooting.
Add UX principles and design component library
- Modified the getAudioTrackDiagnostics function to accept a Partial<MediaStream> instead of a full MediaStream.
- Added a check to return an empty array if the stream does not have the getAudioTracks method, improving robustness.

These changes enhance the function's flexibility and error handling for audio diagnostics.
- Added new artifact type "Careful Speech" to localization files and workflow steps for the BOLD process.
- Updated SQL migration scripts to include careful speech recordings and transcription steps.
- Refactored components to utilize the new artifact type and improve handling of phrase segment artifacts.
- Removed outdated localization JSON file and updated the exported strings reference.

These changes enhance the application's support for careful speech workflows, improving user experience and localization accuracy.
TT-7294a Implement audio diagnostics logging and enhance MediaRecord functionality
TT-7312 Add BOLD workflow steps and localization updates
- Updated the condition in useOfflineSetup to filter offline records instead of all records for the 'bold' process.
- Refactored useTeamWorkflowProcess to utilize the useGlobal hook for offline state management, enhancing clarity and performance.

These changes streamline the workflow processes and improve the application's handling of offline scenarios.
Detect if files are missing in cloud but available on local computer

Add pending uploads functionality and localization support

- Introduced a new PendingUploadsDialog component to manage and display pending media uploads.
- Added localization strings for pending upload messages in both XLIFF and XLF files.
- Enhanced the Uploader component to handle terminal failure messages for uploads.
- Implemented logic to manage pending uploads in the Redux store, including actions for appending and removing uploads.
- Updated TeamActions to include a button for accessing the pending uploads dialog, with a badge indicating the number of pending uploads.

These changes improve user experience by providing better management of media uploads and clear feedback on upload statuses.
- Updated error handling in the uploadFile function to ensure proper cleanup of XHR values before rejecting the upload.
- Enhanced readability of the finalizeTerminalFailure calls by formatting them across multiple lines.
- Streamlined the uploadFile invocation in nextUpload for improved clarity.

These changes improve the maintainability of the upload logic and enhance error reporting consistency.
- Added `getImportExportBusy` callback to various components to check the import/export busy state before proceeding with uploads.
- Updated `nextUpload` action to wait for import/export processes to complete, improving upload reliability.
- Introduced `waitForImportExportIdle` utility to manage polling for the busy state, ensuring smoother user experience during uploads.

These changes enhance the upload process by preventing conflicts with ongoing import/export operations.
TT-7003 Detect if files are missing in cloud but available on local computer
…noise suppression options

- Added new localization strings for echo cancellation and noise suppression features in the RecordStepSettings component.
- Implemented state management for echo cancellation and noise suppression settings in the RecordStepSettings component.
- Updated MediaRecord and WSAudioPlayer components to support new audio processing options.
- Refactored useWavRecorder to handle echo cancellation and noise suppression during audio capture.
- Removed outdated localization JSON file and updated the exported strings reference.

These changes improve the audio recording functionality by allowing users to customize their recording environment for better quality.
…rder

- Updated conditions to handle both false and undefined values for echo cancellation and noise suppression settings.
- Improved clarity in the audio capture constraints configuration.

These changes enhance the robustness of audio recording settings, ensuring better handling of supported features.
TT-7294b Enhance audio recording settings with echo cancellation and noise suppression options
- Renamed and updated localization keys for the "Go to reference" feature, including `goToReferenceClear` and `goToReferenceDescription`.
- Improved the PlanSheet component by adding a clear button for the go-to input field and ensuring it focuses automatically when opened.
- Added new test cases for scripture query matching and section phrase searching to enhance functionality and reliability.

These changes improve user experience in navigating references and ensure better localization support.
Greg Trihus and others added 29 commits July 11, 2026 14:45
…egistration

- Added PWA icons: pwa-192x192.png, pwa-512x512.png, and pwa-maskable-512x512.png.
- Implemented PwaUpdatePrompt component to notify users of available updates.
- Integrated PwaUpdatePrompt into the Root component for web builds.
- Updated localization strings for PWA reload and update notifications.
- Configured Vite to support PWA with custom service worker registration and caching strategies.
* Version 2 aero calls throw instead of returning status.
Hide error details from user unless they click on the details link
Remove whisper as supported model for all languages except the 19 Jonathan recommended

* removed redundant string

* rebase

* rebase

* Devin review and bad data bug discovered

* copilot review
possible race condition: wait for the backup restore to be done before checking projects loaded
* edit button into table

* fix 1:1a-a

* renumbering with verse letter parts

* @
fix(mark-verses): flag skipped leading subpart (1:1 -> 1:2b skips 1:2a)

Make the skipped-verse detection subpart-aware. Previously a next-row
reference that jumped to a mid-verse subpart (e.g. `1:1` followed by
`1:2b` or `1:2b-c`) was treated as valid because the skip check compared
only whole-verse order keys, ignoring the letter suffix.

- markVersesReferenceSkipsAhead now compares against the expected resume
  position at subpart granularity, so starting a new split verse at part
  b (skipping part a) counts as a forward gap and gets the warning.
- markVersesSkippedPassageRefs now lists the skipped leading subparts
  (e.g. `1:2a`) alongside any skipped whole verses.

Update/extend the unit tests for both.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@

* @
feat(mark-verses): place split-verse suffix beside the verse field

In the Edit Reference dialog, when "Split verse" is checked the letter
suffix picker now sits inline to the right of its verse field instead of
stacked beneath it, per the design mockup. Applies to both the fixed
start / dropdown end (restricted) layout and the fully editable
(unrestricted) endpoints via a shared renderSuffixSelect helper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@

* @
refactor(mark-verses): drop "IsMobile" from names now used on desktop too

Mark Verses is now used on desktop as well as mobile, so rename the
component files and identifiers to drop the misleading "IsMobile"
suffix:

- PassageDetailMarkVersesIsMobile.{tsx,test.tsx,cy.tsx} -> PassageDetailMarkVerses.*
- MarkVersesTableIsMobile.tsx -> MarkVersesTable.tsx
- exported components / props types renamed to match
- id "mark-verses-mobile" -> "mark-verses", table aria-label
  "mobile mark verses table" -> "mark verses table"
- update the two importers and the XLIFF sourcefile context

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@

* clean up comments

* @
chore(localization): regenerate strings bundle after rebase onto develop

Merged XLIFF (develop + branch changes) produces a new hashed bundle;
removes the two stale hash files and updates the pointer.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@

* toast

* Revert putting suffix next to verse

This reverts commit f5de0fa.

* toast on dialog edits also

* @
test(mark-verses): match in-row Edit Reference button by aria-label

The standalone "Edit Reference" button became a compact in-row icon
button whose accessible name comes from its aria-label
(verse-edit-reference-<rowIndex>), not visible text. Update the tests
to click it via a clickEditReference helper and add the missing `edit`
key to the useSelector mock.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@

* verse subparts logic fixes at passage bounds

* allow scrolling table past discussions button

* tap on warning show tooltip

* preserve segments when switching to mobile view

* Use theme styling on highlighted play button

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…425)

Update the wsAudioPlayerSegment segment-remove button tooltip text from
"Remove Next Boundary" to "Remove Boundary" and regenerate localization.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Removed the !isMobileView guard on the Delete Region control in
WSAudioPlayer so the button now renders in Mobile view as it does in
Desktop. Mobile users can once again delete an incorrect recording
region instead of having to clear and re-record the entire audio.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…egment prop (#428)

Delete the SegmentControlsMobile component, which was never imported or
rendered anywhere. Also remove the highlightAutoSegment prop plumbing from
WSAudioPlayer and WSAudioPlayerSegment: no caller ever set it to true, so the
auto-segment button always rendered in its plain (non-highlighted) state. The
button now drops the always-undefined variant.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… BOLD record step (#429)

For the BOLD workflow record step, suppress the Versions button
(gated on !isBoldWorkflow). Replace the text "Clear" button in the
WSAudioPlayer record controls with a trash-can icon button, matching
the delete affordance used in other wavesurfer contexts (e.g. Careful
Speech). The clear functionality (Clear Recording confirmation) is
unchanged.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ad component (#431)

OrgHead.tsx closed the mobile Edit Workflow dialog by calling setWorkflowVisible(false) directly, which unmounted StepEditor before the startSave()/saveRecs() flow ever ran — so newly added steps (only in local component state) were discarded instead of persisted to Orbit.

The desktop entry points (TeamItem.tsx, PersonalItem.tsx) already wrap their close handler with startSave() + waitForSave() to flush pending changes first. I mirrored that same pattern in OrgHead.tsx:

- Added UnsavedContext (startSave/waitForSave) and useGetGlobal.
- Added handleWorkflowClose, which checks getGlobal('changed'); if there are unsaved changes it triggers startSave() and only flips workflowVisible to false once waitForSave resolves.
- Wired the dialog's onOpen to this new handler instead of the raw setWorkflowVisible

Co-authored-by: Greg Trihus <gtryus@gmail.com>
* TT-7521 no sheet edit while offline

* feat: add canEditSheetBase permission to project permissions context

---------

Co-authored-by: Greg Trihus <gtryus@gmail.com>
* TT-6881 No team creation or add while offline

* fix: update team add button visibility logic based on connection status

---------

Co-authored-by: Greg Trihus <gtryus@gmail.com>
fix: ensure reference length is checked before filtering passages
…ecord features (#434)

* TT-6828-9 feat: implement Phrase Back Translation and Guided Phrase Record features

Also addresses:
- TT-6828, TT-6829 — guided segmenting + autosave
- TT-7053, TT-7103, TT-7095, TT-7096, TT-7115 — Save Segments / autosave / unsaved-dialog class
- TT-7093 — no verse pre-fill; listen-first + auto-segment flow
- TT-7133 — region navigation + play (CS playback model)
- TT-7385 — speaker cleared on record (CS controls)
- TT-7097 — dual-player legacy bugs
- TT-7094 — mobile routing to new component
- TT-7116 — overwrite semantics (CS delete + re-record)

Also likely addressed:
- TT-4856 — BT playlist
- TT-7082, TT-7109, TT-7110 — layout/design deltas; re-check against new CS-style layout
- Added new segment definitions and boundaries for Phrase Back Translation in CONTEXT.md.
- Updated localization files to include new strings for Phrase Back Translation controls.
- Refactored PassageDetail components to integrate Guided Phrase Record functionality, replacing the previous Careful Speech implementation.
- Adjusted tests to accommodate changes in segment handling and control strings.

* refactor: clean up imports and improve code readability in PassageDetail components

- Removed unused imports and streamlined import paths for better clarity.
- Refactored the handleSpeakerChange function for improved readability.
- Adjusted dependencies in useEffect and useCallback hooks for consistency.
- Updated test imports to reflect new file structure.
- Enhanced localization model by restructuring interface definitions for better maintainability.

* feat: enhance PassageDetailGuidedPhraseRecord and CarefulSpeechControls with new parameters and localization updates

- Updated PassageDetailGuidedPhraseRecord to accept phraseSegParams for improved JSON handling.
- Refactored CarefulSpeechControls tests to remove Redux dependencies and utilize a new controlStrings object for localization.
- Improved clarity and maintainability of test components by streamlining props and removing unused imports.

---------

Co-authored-by: Greg Trihus <gtryus@gmail.com>
* TT-7520 continue to last visited page when opening desktop

* devin review
…cord features with new controls and localization updates

- Updated CONTEXT.md to clarify the two-phase flow for Phrase Back Translation and Careful Speech.
- Added new localization strings for reset confirmation in Phrase Back Translation.
- Enhanced PassageDetail components to support new segment handling and navigation features.
- Improved WSAudioPlayer and CarefulSpeechControls with additional props for better user experience.
- Refactored tests to align with new functionality and ensure comprehensive coverage.
…ith language scoping and localization updates

- Updated CONTEXT.md to clarify segment boundaries and language scoping for Phrase Back Translation.
- Added new localization strings for language configuration and reset confirmation in Phrase Back Translation.
- Enhanced PassageDetail components to support language selection and improved segment handling.
- Refactored MediaRecord and ArtifactStatus components to accommodate new language props.
- Improved Consultant Check Review with language picker for better user experience.
- Updated tests to ensure coverage of new language handling features.
…g in PassageDetail components

- Changed module resolution strategy from "node" to "bundler" in tsconfig.json.
- Updated import paths in PassageDetail components to reflect new directory structure.
- Refactored language parsing logic by replacing `parseStepLanguageField` with `parseMediaLanguageField` for better clarity and functionality.
- Enhanced `parseMediaLanguageField` to return both language name and BCP47 code, improving data handling in the components.
…cord features with new controls

This PR enhances the non-BOLD Phrase Back Translation / Guided Phrase Record flow by introducing step-language scoping (multi-LWC), new boundary/undo/reset controls, and supporting localization + configuration updates across the renderer.

Changes:

- Add step-language scoping for Phrase BT outputs and segment-boundary storage (per-language BT:<bcp47> buckets), including legacy-claim behavior and updated matching/completion logic.
- Extend the guided phrase recording UI with multi-level segment undo, recording-pass reset-to-baseline (with confirmation), sequential navigation controls, and improved gating rules.
- Add Step Editor settings for Phrase BT language + artifact selection, plus new localization strings and Consultant Check language selection.
)

- Changed the exported strings file reference from "strings5b4801f2.json" to "strings9685e6a9.json".
- Updated the localization string for "splitSegment" from "Split Segment" to "Split".

Co-authored-by: Greg Trihus <gtryus@gmail.com>
…der (#439)

Co-authored-by: Greg Trihus <gtryus@gmail.com>
…ontrol in PlanView

- PlanView.tsx — mobile Publish button now reads canPublish from PlanContext and is disabled={!canPublish}, matching the desktop PublishButton behavior.
- ScriptureTable.tsx — setSectionPublish now triggers startSave() after 1s, same pattern as updateTitleMedia, so publishing persists immediately instead of waiting for the next navigation.
- UnsavedContext.tsx — the Unsaved-Data-dialog save-confirmation timeout was raised from 18s (an outlier) to 200s, matching the convention used elsewhere in the app.
- AlertDialog.tsx — added mobile-aware Dialog-paper sizing (via useMobile()/useTheme()), fixing the "wrong place" positioning bug for the Unsaved Data dialog and every other confirmation dialog built on this shared component.
@gtryus gtryus closed this Jul 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants