* fix: show observation datetime in the obs time zone
I.e. it doesn't offset the observation datetime into the viewer's time zone.
* test: adjust to literal times by default
* chore: update to date-fns 3.0
* wip: show time zone names with all times
* show time zone name whenever a time zone is passed to a formatting function
* store observation IANA time zone in Realm
Note that this required patching around a bug in Hermes in which it should be
returning a GMT offset for the short time zone but is instead just returning
GMT.
* fix: omit time zone for unuploaded obs
* feat: show relative time differences on ActivityItem headers
* fix: hide zone/offset on ObsEdit before upload when signed in
* fix: hide clock icon in activity item header in new default mode
Also
* stop using checkCamelAndSnakeCase when not necessary in DetailsTab.js
* make POJO types only refer to other POJO types
* ActivityHeader was not listing category
* ActivityHeader lacked space before date
* Combined duplicate strings, used more descriptive keys and comments
* Relative dates were showing fractional weeks
* chore: validate and normalize translations in addition to src strings
* fix: globalize lat/lng/acc in LocationPicker
* refactor: extract language picker into component
* refactor: globalized text
* feat: added a script to i18ncli called "checkify" that generates
localization files prepended with a checkmark to help see strings that are
not globalized
* fix: localize date formatting (closes#1622)
Closes#2102
* Try to catch and log errors during upload
* Wraps some upload async methods with try/catch to attempt to log some
potential bugs
* Adjusts upload param mappings
* Try to get upload status to more accurately reflect the upload state
* Consistent upload success messaging after single upload
* Added basic navigation test for StandardCamera & SoundRecorder
* Abstracted camera nav buttons and used in SoundRecorder
* Show sounds in the MediaViewer
* Added sounds to ObsEdit, w/ MediaViewer support
* Ensure sounds get both uploaded and added to observations
* Local sound deletion
* Remote sound deletion
* Rudimentary and deeply unperformative sound visualization
Closes#869
* Make minimum viable RemoteComment
* Minimum vialbe RemoteIdentification
* Minimum viable remote project, place, and messages
* Create minimum viable records for all remote factories
* Remove factories for local device data
* Minimum viable local taxon, comment, id
* Minimum viable for local observation photo (photo has no primary key)
* Minimum viable LocalUser
* Minimum viable record for LocalObservation
* Refactor ObsStatus, add filled property
* Remove viewed prop from observation
* Update properties for ObsDetail mark viewed
* Use separate fields for comments and ids for ObsStatus
* Add hook for fetching updates
* Unit tests for the updates hook
* Unit tests for different paths for updating the realm observation when using the hook
* Update MyObservations.test.js
* Add integration test if updates has been called in my observations
* Update Podfile.lock
* Update observation to not viewed if the keys have not been initialized
* Add test case if observation fields are not initialized
* Add test case
* Refetch stale data on coming back from the background
* Subscribe to observation updates also in ObsDetail screen
This also invalidates and refetches the data after a successful mutation of the id or comment being viewed.
* Refetch observation updates data on sync button press
* Throw error in updates query
* Return refetch function from hook
* Add mock to ObsDetails
* Remove unused var
* Update useObservationsUpdates.test.js
* Reset realm viewed state to true ...
for all observations on app mount and coming to the foreground.
* Reorder function calls
* Change hook to use boolean as enabled param
* Create ObsDetails.test.js
* Update date handle tests to make sure Remote data classes have parseable date
* Add test case for comment and identification
* Update ObsDetails.test.js
* Also check for user in ObsDetails
* Refactored into separate hook for App.js
* Unit and integration test for new hook
* Rename const
* Rename field
* Rename field
* Export query key from hook
* Refactor true check
* Additional methods for obs being viewed or not
* Changed test description
* Add per_page to observations updated
* Add DateDisplay to ObsCard and make first pass at translation strings
* Add failing tests (due to lack of localization) for timeless dates
* WIP: trying to ensure i18next gets initialized before tests run
The remaining test failures might be legit. This probably breaks the actual
app, though.
* Got the rest of the tests working
* Updated tests to assume UTC
* Updated README to advise against using `npx jest` so test runs always have
the env vars we specify in our `npm test` script
* Moved i18next initialization to an explicitly-named file
* Use i18next init function in app
* Fixed up remaining tests
* Added test for non-English localization of date format
* Cleanup
* Made DateDisplay explicitly handle strings not Dates
* Restore skipped localization tests for MyObservations
* Remove duplicative tests from DateDisplay unit test
* Added note to the README about initializing i18next
* Updated change to DateDisplay in main
---------
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
* Format exif date as string for upload; remove unused code for handling evidence upload errors; closes#311
* Fix tests; add a new test to check for string formatting
* Fix exif test
* Make sure camera/no evidence still create a new observed_on_string
* Fix failing test with observed_on_string in fake LocalObs; closes#259
* Parse date into local timezone