* Fix dark mode rendering of 'follows you' pill
* Fix the darkmode coloring of the PTR
* Fix dark mode styles in dns instructions
* Only lint the src dir
* Get home screen's swipable pager working with the drawer
* Add tab bar to pager
* Implement popular & following views on home screen
* Visual tune-up
* Move the feed selector to the footer
* Fix to 'new posts' poll
* Add the view header as a feed item
* Use the native driver on the tabbar indicator to improve perf
* Reduce home polling to the currently active page; also reuse some code
* Add soft reset on tap selected in tab bar
* Remove explicit 'onboarding' flow
* Choose good stuff based on service
* Add foaf-based follow discovery
* Fall back to who to follow
* Fix backgrounds
* Switch to the off-spec goodstuff route
* 1.8
* Fix for dev & staging
* Swap the tab bar items and rename suggested to what's hot
* Go to whats-hot by default if you have no follows
* Implement pager and tabbar for desktop web
* Pin deps to make expo happy
* Add language filtering to goodstuff
* Stop storing the log on disk
* Add more info to the session logging
* Only clear session tokens from storage when they've expired
* Retry session resumption a few times if it's a network issue
* Improvements to the 'connecting' screen
* WIP - adding expo
* WIP - adding expo 2
* Fix tsc
* Finish adding expo
* Disable the 'require cycle' warning
* Tweak plist
* Modify some dependency versions to make expo happy
* Fix icon fill
* Get Web compiling for expo
* 1.7
* Switch to react-navigation in expo2 (#287)
* WIP Switch to react-navigation
* WIP Switch to react-navigation 2
* WIP Switch to react-navigation 3
* Convert all screens to react navigation
* Update BottomBar for react navigation
* Update mobile menu to be react-native drawer
* Fixes to drawer and bottombar
* Factor out some helpers
* Replace the navigation model with react-navigation
* Restructure the shell folder and fix the header positioning
* Restore the error boundary
* Fix tsc
* Implement not-found page
* Remove react-native-gesture-handler (no longer used)
* Handle notifee card presses
* Handle all navigations from the state layer
* Fix drawer behaviors
* Fix two linking issues
* Switch to our react-native-progress fork to fix an svg rendering issue
* Get Web working with react-navigation
* Refactor routes and navigation for a bit more clarity
* Remove dead code
* Rework Web shell to left/right nav to make this easier
* Fix ViewHeader for desktop web
* Hide profileheader back btn on desktop web
* Move the compose button to the left nav
* Implement reply prompt in threads for desktop web
* Composer refactors
* Factor out all platform-specific text input behaviors from the composer
* Small fix
* Update the web build to use tiptap for the composer
* Tune up the mention autocomplete dropdown
* Simplify the default avatar and banner
* Fixes to link cards in web composer
* Fix dropdowns on web
* Tweak load latest on desktop
* Add web beta message and feedback link
* Fix up links in desktop web
* Bring back the FAB and move compose out of the footer
* Increase the touch target sizes of the header back btns (close#279)
* Trigger 'load more' sooner (close#280)
* Replace react-native-root-toast with a custom toast that fits the visual style
* Tune dark mode colors
* Tune colors a bit more
* Move the reply prompt to a fixed position in the footer
* Fully hide muted posts but give a control to show anyway (close#270)
* Improve thread rendering (better clarity on reply lines)
* Add follower/following counts to side menu
* Fix issues with display name overflows
* Dont append the server's domain name when a custom domain is used
* Update the settings look & feel and add a tool to remove accounts from the switcher
* Try not rendering the bottomsheet when no modal is active.
There are cases where the bottomsheet decides to show itself when
it's not supposed to. It seems obvious to do what this change is
doing -- just dont render bottomsheet if no modal is active -- but
previously we experienced issues with that approach. This time it
seems to be working, so we're gonna yolo try it.
* Implement a handle-change modal with support for custom domains (closes#65)
* Small fix to side menu rendering
* Change onboarding to use an explicit 'is onboarding' mode to more clearly control the flow
* Add a progress bar to the welcome banner
* Dont show the 'unfollow button' on posts in weird times (close#271)
* Improve the empty state of the feed
* Only suggest recent posts
* Remove old tab controls from the mobile shell
* Add 'compose' and 'profile' to the footer; remove the FAB
* Fix lint
* Tune the footer icons
* Tune the 'current' state of footer icons
* Add 2xl text styles
* Tune the footer icons a bit more
* Fix lint
* More footer tuning
* update users
* update
* With constructed intro feed, only grab 20 random suggested users to avoid perf issues
* Don't 'check for latest' in the feed with the suggestions feed
* Show/hide the welcome banner on account change (close#257)
---------
Co-authored-by: Jay Graber <arcalinea@gmail.com>
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* update api to 0.1.3
* add repost modal with reposting functionality
* add quote post UI
* allow creation and view of quote posts
* Validate the post record before rendering a quote post
* Use createdAt in quote posts for now
* add web modal support
* Tune the quote post rendering
* Make did and declarationCid optional in postmeta
* Make did and declarationCid optional in postmeta
* dont allow image or link preview if quote post
* Handle no-text quote posts
* Tune the repost modal
* Tweak composer post text
* Fix lint
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* delete old onboarding files and code
* add custom FollowButton component to Post, FeedItem, & ProfileCard
* move building suggested feed into helper lib
* show suggested posts/feed if follower list is empty
* Update tsconfig.json
* add pagination to getting new onboarding
* remove unnecessary console log
* fix naming, add better null check for combinedCursor
* In locally-combined feeds, correctly produce an undefined cursor when out of data
* Minor refactors of the suggested posts lib functions
* Show 'follow button' style of post meta in certain conditions only
* Only show follow btn in posts on the main feed and the discovery feed
* Add a welcome notice to the home feed
* Tune the timing of when the welcome banner shows or hides
* Make the follow button an observer (closes#244)
* Update postmeta to keep the follow btn after press until next render
* A couple of fixes that ensure consistent welcome screen
* Fix lint
* Rework the welcome banner
* Fix cache invalidation of follows model on user switch
* Show welcome banner while loading
* Update the home onboarding feed to get top posts from hardcode recommends
* Drop unused helper function
* Update happy path tests
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Update to RN 71.1.0 (#100)
* Update to RN 71
* Adds missing lint plugin
* Add missing native changes
* Bump @atproto/api@0.0.7 (#112)
* Image not loading on swipe (#114)
* Adds prefetching to images
* Adds image prefetch
* bugfix for images not showing on swipe
* Fixes prefetch bug
* Update src/view/com/util/PostEmbeds.tsx
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Fixes to session management (#117)
* Update session-management to solve incorrectly dropped sessions
* Reset the nav on account switch
* Reset the feed on me.load()
* Update tests to reflect new account-switching behavior
* Increase max image resolutions and sizes (#118)
* Slightly increase the hitslop for post controls
* Fix character counter color in dark mode
* Update login to use new session.create api, which enables email login (close#93) (#119)
* Replaces the alert with dropdown for profile image and banner (#123)
* replaces the alert with dropdown for profile image and banner
* lint
* Fix to ordering of images in the embed grid (#121)
* Add explicit link-embed controls to the composer (#120)
* Add explicit link-embed controls
* Update the target rez/size of link embed thumbs
* Remove the alert before publishing without a link card
* [Draft] Fixes image failing on reupload issue (#128)
* Fixes image failing on reupload issue
* Use tmp folder instead of documents
* lint
* Image performance improvements (#126)
* Switch out most images for FastImage
* Add image loading placeholders
* Fix tests
* Collection of fixes to list rendering (#127)
* Fix bug that caused endless spinners in profile feeds
* Bundle fetches of suggested actors into one update
* Fixes to suggested follow rendering
* Fix missing replacement of flex:1 to height:100
* Fixes to navigation swipes (#129)
* Nav swipe: increase the distance traveled in response to gesture movement.
This causes swipes to feel faster and more responsive.
* Fix: fully clamp the swipe against the edge
* Improve the performance of swipes by skipping the interaction manager
* Adds dark mode to the edit screen (#130)
* Adds dark mode to edit screen
* lint
* lint
* lint
* Reduce render cost of post controls and improve perceived responsiveness (#132)
* Move post control animations into conditional render and increase perceived responsiveness
* Remove log
* Adds dark mode to the dropdown (#131)
* Adds dark mode to the bottom sheet
* Make background button lighter (like before)
* lint
* Fix bug in lightbox rendering (#133)
* Fix layout in onboarding to not overflow the footer
* Configure feed FlatList (removeClippedSubviews=true) to improve scroll performance (#136)
* Disable like/repost animations to see if theyre causing #135 (#137)
* Composer: mention tagging now works in middle of text (close#105) (#139)
* Implement account deletion (#141)
* Fix photo & camera permission management (#140)
* Check photo & camera perms and alert the user if not available (close#64)
- Adds perms checks with a prompt to update settings if needed
- Moves initial access of photos in the composer so that the initial prompt
occurs at an intuitive time.
* Add react-native-permissions test mock
* Fix issue causing multiple access requests
* Use longer var names
* Update podfile.lock
* Lint fix
* Move photo perm request in composer to the gallery btn instead of when the carousel is opened
* Adds more tracking all around the app (#142)
* Adds more tracking all around the app
* more events
* lint
* using better analytics naming
* missed file
* more fixes
* Calculate image aspect ratio on load (#146)
* Calculate image aspect ratio on load
* Move aspect ratio bounds to constants
* Adds detox testing and instructions (#147)
* Adds detox testing and instructions
* lint
* lint
* Error cleanup (close#79) (#148)
* Avoid surfacing errors to the user when it's not critical
* Remove now-unused GetAssertionsView
* Apply cleanError() consistently
* Give a better error message for Upstream Failures (http status 502)
* Hide errors in notifications because they're not useful
* More e2e tests (create account) (#150)
* Adds respots under the 'post' tab under profile (#158)
* Adds dark mode to delete account screen (#159)
* 87 dark mode edit profile (#162)
* Adds dark mode to delete account screen
* Adds one more missed darkmode
* more fixes
* Remove fallback gradient on external links without thumbs (#164)
* Remove fallback gradient on external links without thumbs
* Remove fallback gradient on external links without thumbs in the composer preview
* Fix refresh behavior around a series of models (repost, graph, vote) (#163)
* Fix refresh behavior around a series of models (repost, graph, vote)
* Fix cursor behavior in reposted-by view
* Fixes issue where retrying on image upload fails (#166)
* Fixes issue where retrying on image upload fails
* Lint, longer test time
* Longer waitfor time in tests
* even longer timeout
* longer timeout
* missed file
* Update src/view/com/composer/ComposePost.tsx
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Update src/view/com/composer/ComposePost.tsx
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* 154 cached image profile (#167)
* Fixes issue where retrying on image upload fails
* Lint, longer test time
* Longer waitfor time in tests
* even longer timeout
* longer timeout
* missed file
* Fixes image cache error on second try for profile screen
* lint
* lint
* lint
* Refactor session management to use a new "Agent" API (#165)
* Add the atp-agent implementation (temporarily in this repo)
* Rewrite all session & API management to use the new atp-agent
* Update tests for the atp-agent refactor
* Refactor management of session-related state. Includes:
- More careful management of when state is cleared or fetched
- Debug logging to help trace future issues
- Clearer APIs overall
* Bubble session-expiration events to the user and display a toast to explain
* Switch to the new @atproto/api@0.1.0
* Minor aesthetic cleanup in SessionModel
* Wire up ReportAccount and ReportPost (#168)
* Fixes embeds for youtube channels (#169)
* Bump app ios version to 1.1 (needed after app store submission)
* Fix potential issues with promise guards when an error occurs (#170)
* Refactor models to use bundleAsync and lock regions (#171)
* Fix to an edge case with feed re-ordering for threads (#172)
* 151 fix youtube channel embed (#173)
* Fixes embeds for youtube channels
* Tests for youtube extract meta
* lint
* Add 'doesnt use non-exempt encryption' to ios config
* Rework the search UI and add (#174)
* Add search tab and move icon to footer
* Remove subtitles from view header
* Remove unused code
* Clean up UI of search screen
* Search: give better user feedback to UI state and add a cancel button
* Add WhoToFollow section to search
* Add a temporary SuggestedPosts solution using the patented 'bsky team algo'
* Trigger reload of suggested content in search on open
* Wait five min between reloading discovery content
* Reduce weight of solid search icon in footer
* Fix lint
* Fix tests
* 151 feat youtube embed iframe (#176)
* youtube embed iframe temp commit
* Fixes styling and code cleanup
* lint
* Now clicking between the pause and settings button doesn't trigger the parent
* use modest branding (less yt logos)
* Stop playing the video once there's a navigation event
* Make sure the iframe is unmounted on any navigation event
* fixes tests
* lint
* Add scroll-to-top for all screens (#177)
* Adds hardcoded suggested list (#178)
* Adds hardcoded suggested list
* Update suggested-actors-view to support page sizes smaller than the hardcoded list
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* more robust centering of the play button (#181)
Co-authored-by: Aryan Goharzad <arrygoo@gmail.com>
* Bundle of UI modifications (#175)
* Adjust visual balance of SuggestedPosts and WhoToFollow
* Fix bug in the discovery load trigger
* Adjust search header aesthetic and have it scroll away
* More visual balance tweaks on the search page
* Even more visual balance tweaks on the search page
* Hide the footer on scroll in search
* Ditch the composer prompt buttons in the home feed
* Center the view header title
* Hide header on scroll on the home feed
* Fix e2e tests
* Fix home feed positioning (closes#189) (#195)
* Fix home feed positioning for floating header
* Fix positioning of errors in home feed
* Fix lint
* Don't show new-content notification for reposts (close#179) (#197)
* Show the splash screen during session resumption (close#186) (#199)
* Fix to suggested follows: chunk the hardcoded fetches to 25 at a time (close#196) (#198)
* UI updates to the floating action button (#201)
* Update FAB to use a plus icon and not drop shadow
* Update FAB positioning to be more consistent in different shell modes
* Animate the FAB's repositioning
* Remove the 'loading' placeholder from images as it degraded feed perf (#202)
* Remove the 'loading' placeholder from images as it degraded feed perf
* Remove references
* Fix RN bug that causes home feed not to load more; also fix home feed load view. (#208)
RN has a bug where rendering a flatlist with an empty array appears to break its
virtual list windowing behaviors. See https://stackoverflow.com/a/67873596
* Only give the loading spinner on the home feed during PTR (#207)
(cherry picked from commit b7a5da12fdfacef74873b5cf6d75f20d259bde0e)
* Implement our own lifecycle tracking to ensure it never fires while the app is backgrounded (close#193) (#211)
* Push notification fixes (#210)
* Fix to when screen analytics events are firing
* Fix: dont trigger update state when backgrounded
* Small fix to notifee API usage
* Fix: properly load notification info for push card
* Add feedback link to main menu (close#191) (#212)
* Add "follows you" information and sync follow state between views (#215)
* Bump @atproto/api@0.1.2 and update API usage
* Add 'follows you' pill to profile header (close#110)
* Add 'follows you' to followers and follows (close#103)
* Update reposted-by and liked-by views to use the same components as followers and following
* Create a local follows cache MyFollowsModel to keep views in sync (close#205)
* Add incremental hydration to the MyFollows model
* Fix tests
* Update deps
* Fix lint
* Fix to paginated fetches
* Fix reference
* Fix potential state-desync issue
* Fixes to notifications (#216)
* Improve push-notification for follows
* Refresh notifications on screen open (close#214)
* Avoid showing loader more than needed in post threads
* Refactor notification polling to handle view-state more effectively
* Delete a bunch of tests taht werent adding value
* Remove the accounts integration test; we'll use the e2e test instead
* Load latest in notifications when the screen is open rather than full refresh
* Randomize hard-coded suggested follows (#226)
* Ensure follows are loaded before filtering hardcoded suggestions
* Randomize hard-coded suggested profiles (close#219)
* Sanitizes posts on publish and render (#217)
* Sanatizes posts on publish and render
* lint
* lint and added sanitize to thread view as well
* adjusts indices based on replaced text
* Woops, fixes a bug
* bugfix + cleanup
* comment
* lint
* move sanitize text to later in the flow
* undo changes to compose post
* Add RichText library building upon the sanitizePost library method
* Add lodash.clonedeep dep
* Switch to RichText processing on record load & render
* Fix lint
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* A group of notifications fixes (#227)
* Fix: don't group together notifications that can't visually be grouped (close#221)
* Mark all notifications read on PTR
* Small optimization: useCallback and useMemo in posts feed
* Add loading spinner to footer of notifications (close#222)
* Fix to scrolling to posts within a thread (#228)
* Fix: render the entire thread at start so that scrollToIndex works always (close#270)
* Visual fixes to thread 'load more'
* A few small perf improvements to thread rendering
* Fix lint
* 1.2
* Remove unused logger lib
* Remove state-mock
* Type fixes
* Reorganize the folder structure for lib and switch to typescript path aliases
* Move build-flags into lib
* Move to the state path alias
* Add view path alias
* Fix lint
* iOS build fixes
* Wrap analytics in native/web splitter and re-enable in all view code
* Add web version of react-native-webview
* Add web split for version number
* Fix BlurView import for web
* Add web split for fastimage
* Create web split for permissions lib
* Fix for web high priority images
---------
Co-authored-by: Aryan Goharzad <arrygoo@gmail.com>
* Saves image on long press
* Adds save on long press
* Forking lightbox
* move to wrapper only to the bottom sheet to reduce impact of this change
* lint
* lint
* lint
* Use official `share` API
* Clean up cache after download
* comment
* comment
* Reduce swipe close velocity
* Updates per feedback
* lint
* bugfix
* Adds delayed press-in for TouchableOpacity
* Add some temporary logging to help suss out the session drop issue
* Fix to session resumption: copy session tokens during a resumeSession attempt
* Factor out notifee display into a lib and add to storybook
* Tune the bg notifications fetch to only get what is needed
* Fix: run account update inside a mobx action
* Remove debugging logs for sessions
* Fixes to bg notifications fetch
* Fix: test the session during resume to ensure it's valid
* Don't delete sessions for now
* Add notifee and request notif permissions on first login
* Set unread notifications badge on app icon
* Trigger a notifee card on new notifications
* Experimental: use react-native-background-fetch to check for notifications
* Add missing mocks
* Fix to resumeSession()
* Rework 'navIdx' variables from number arrays to strings to avoid equality-check failures in react hooks
* Resolve all remaining lint issues
* Fix tests
* Use node v18 in gh action test
* Update the account-create and signin views to use the design system.
Also:
- Add borderDark to the theme
- Start to an account selector in the signin flow
* Dark mode fixes in signin ui
* Track multiple active accounts and provide account-switching UI
* Add test tooling for an in-memory pds
* Add complete integration tests for login and the account switcher
* fixes youtube embed
* move extractMetaHtml test to its own file
* tests cleanup
* Add fallback for youtube meta data
* lint
* Check for youtube in the url domain
* use hostname instead of full url to check for link domain
* checks only for domain
* Increase left margin on feed and embiggen avis
* Decrease feed margins a bit
* Tweak post bottom margin
* Update loading placeholder to match feed
* Update 'view full thread' positioning
* Update postthread to match feed layout
* Update notifications and individual post to match new layout
* Add missing aborted check
* Remove scenes from the main menu
* Remove scenes from the profile view
* Remove 'scenes explainer' from onboarding flow
* Remove scene-related modals
* Remove member/membership code
* Remove all scenes-related items from notifications
* Remove scene-related code from posts feed
* Remove scene-related API helpers
* Update tests
* Add theming system
* Add standard Button control and update RadioButtons
* Unify radiobutton with design system
* Update debug screen to have multiple views
* Add ToggleButton
* Update error controls to use design system
* Add typography to <Text> element
* Move DropdownButton into the design system
* Clean out old code
* Move Text into design system
* Add 'inverted' color palette
* Move LoadingPlaceholder into the design system
* add editable button profile picture
* add editable button cover picture
* upload profile photos (save them locally)
* rollback pbxproj changes
* rollback podfile checksum (for git only)
* move edit photos onto edit profile modal
* adjust edit icon and image cropping size
* added temporary (react state) image
* added IMAGES_ENABLED flag
* minor lint fix
* save local photos on edit profile upload (wip)
* save profile photos on profile view state (wip)
* remove unecessary computed
* save photo in state before pushing it to viewmodel
* refactor profile pictures's state
* remove unnecessary isMe prop
* removing old comments
* tweak icon size & position
* A few styling tweaks and a fix to mobx state management
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* upload images in composer v1
* fix android compile
* reafctor image carousel into new component;
fix photo overlapping text in composer
* revert android changes
* further refactoring code into different components
* move show carousel out of the component
* fixing add photo using camera
* fix typescript issue; force mediatype photo
* change post test with photo attached;
remove auto linking settings
* use runInAction in getPhotos model
* react-hooks/exhaustive-deps fixes
* crop every photo;
make use of useCallback
* moving placeholder condition
* Cleanup
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Flatten all routing into a single stack
* Replace router with custom implementation
* Add shell header and titles
* Add tab selector
* Add back/forward history menus on longpress
* Fix: don't modify state during render
* Add refresh() to navigation and reroute navigations to the current location to refresh instead of add to history
* Cache screens during navigation to maintain scroll position and improve load-time for renders