Compare commits

...

2598 Commits

Author SHA1 Message Date
Eric Bailey c01c130b7b Add to existing 2024-02-09 11:56:19 -06:00
Eric Bailey 648462b5bd Round line height 2024-02-09 11:55:13 -06:00
Eric Bailey d6235453c9 Design system tweaks (#2822)
* Tweak palette, theme naming, update usages

* Update Typography, replace the few usages
2024-02-09 09:52:32 -08:00
dan 43b447e5f4 Fix layout calculations (#2816) 2024-02-08 22:20:41 -08:00
dan d36b91fe67 Fix flashes and jumps when opening profile (#2815)
* Don't reset the tree when profile loads fully

* Give avatars a background color like placeholders

* Prevent jumps due to rich text resolving

* Rm log

* Rm unused
2024-02-08 21:00:50 -08:00
dan 0d00c7d851 Show text cursor on web bio (#2813) 2024-02-09 02:20:34 +00:00
Hailey de28626001 Precache basic profile from posts for instant future navigations (#2795)
* skeleton for caching

* modify some existing logic

* refactor uri resolution query

* add precache feed posts

* adjustments

* remove prefetch on hover (maybe revert, just example)

* fix

* change arg name to match what we want

* optional infinite stale time

* use `ProfileViewDetailed`

* Revert "remove prefetch on hover (maybe revert, just example)"

This reverts commit 08609deb0d.

* add warning comment back for stale time

* remove comment

* store profile with both the handle and did for query key

* remove extra block from revert

* clarify argument name

* remove QT cache

* structure queries the same (put `enabled` at bottom)

* use both `ProfileViewDetailed` and `ProfileView` for the query return type

* placeholder profile header

* remove logs

* remove a few other things we don't need

* add placeholder

* refactor

* refactor

* we don't need this height adjustment now

* use gray banner while loading

* set background color of image to the loading placeholder color

* reorg imports

* add border to header on loading

* Fix style

* Rm radius

* oops

* Undo edit

* Back out type changes

* Tighten some types and moderate shadow

* Move precaching fns to profile where the cache is

* Rename functions to match what they do now

* Remove anys

---------

Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
2024-02-09 01:38:16 +00:00
dan d9b62955b5 Remove Profile Preview modal (#2790) 2024-02-08 23:41:02 +00:00
dan 06f81d6948 Keep pager feeds in sync with the right pane (#2775)
* Hoist selected feed state

* Seed state from params

* Refine and fix logic

* Fix scroll restoration

* Soft reset on second click
2024-02-08 12:37:08 -08:00
Hima 80c482b026 Add: Followed version 1.68 of Japanese display (#2777)
* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* messages.po を更新

* Update messages.po
2024-02-08 12:10:01 -08:00
Frudrax Cheng 0dfed21642 Update zh-CN localization to 1.68 (#2780)
* update Chinese localization to 1.68

* fix typo

* improve translation

* update messages.po

* modify some translations
2024-02-08 12:08:00 -08:00
Liberal dev de705606d0 fix google translate appear (#2784) 2024-02-08 12:04:36 -08:00
Gildásio Filho 8b239c8347 Update pt-BR translation to 1.68 (#2786)
* Update messages.po

* Update messages.po
2024-02-08 12:03:23 -08:00
Hailey 1de1d10cf6 Fix error screen on native, use Not Found for profile errors instead of Oops! (#2789)
* remove unnecessary `<CenterView>`

* show back header on profile error

* use `Not Found` instead of `Oops` for account errors

* use `Not Found` instead of `Oops` for account errors
2024-02-08 12:01:36 -08:00
Edison Lee 4041db31e2 Correct the country code name of Taiwan (#2797) 2024-02-08 12:00:03 -08:00
Armaan 1700b82713 changed Benachrichtigunge (#2805) 2024-02-08 11:52:44 -08:00
dan 0944d2d9ed Add composer button to Notifications (#2806) 2024-02-08 11:50:57 -08:00
Hailey 390a9f3dd5 use the palette's font color in the composer (as string) (#2792) 2024-02-08 15:39:33 +00:00
Hailey 83edb4446d use the palette's font color in the composer (#2791)
* use the palette's font color in the composer

* correct type for cssproperties

* log
2024-02-07 15:07:25 -08:00
Paul Frazee f0a35a940b Bump ios build 2024-02-07 10:03:46 -08:00
Paul Frazee 32020d62d6 Hackfix to avoid creating identical profile objects during account creation 2024-02-07 10:03:26 -08:00
Paul Frazee fc40b200ed 1.68 2024-02-06 22:12:41 -08:00
Paul Frazee 3b0f94bfb0 Fix test 2024-02-06 22:09:34 -08:00
Hailey 573cf31d86 fix theme cross-tab write loop (#2774)
* don't write on onUpdate, memoize

* refac useColorModeTheme
2024-02-06 21:16:50 -08:00
dan dc6603a1b9 Fix open-in-new-tab for TextLink (#2773) 2024-02-06 19:45:16 -08:00
surfdude29 76811657e8 Add missing word in ModerationDetails.tsx (#2753) 2024-02-06 19:14:33 -08:00
Hailey 3a9497cc7e use ios live text interaction in alt text modal and image viewer (#2752) 2024-02-06 19:13:28 -08:00
surfdude29 2427329a84 Fix typo in ca/messages.po (#2754) 2024-02-06 19:12:26 -08:00
Eric Bailey 541eb8ded1 Update open graph data (#2760)
* Update open graph data

* Format

* Fix typo
2024-02-06 18:52:04 -08:00
Maison da Silva 29b31b7739 Variable translation broke the number of "following" in pt-BR (#2766)
* Variable translation broke the number of "following" in pt-BR

Variable translation broke the number of "following" in pt-BR

* Update Date
2024-02-06 18:51:33 -08:00
dan 4583521b11 Refactor Home feed pager rendering logic (#2768)
* Use new persistence API for selected feed

* Refactor Home feeds pager data source
2024-02-06 18:50:44 -08:00
Hailey f393dda528 convert query to lowercase before performing search (#2770) 2024-02-06 17:57:16 -08:00
Paul Frazee a070d40990 Merge branch 'Pranith-Kanchan-Pranith-Kanchan-link-cannot-in-Moderation' into main 2024-02-06 17:55:16 -08:00
Paul Frazee 1a38673ac1 Fix lint 2024-02-06 17:55:06 -08:00
Paul Frazee 06d71cf2cc Merge branch 'Pranith-Kanchan-link-cannot-in-Moderation' of https://github.com/Pranith-Kanchan/social-app into Pranith-Kanchan-Pranith-Kanchan-link-cannot-in-Moderation 2024-02-06 17:40:42 -08:00
Hailey 39b4081c5e Fix iOS composer text getting cut off (#2764)
* patch react-native textinput

* cleanup patchfile
2024-02-06 14:45:41 -08:00
Hailey 52f57b3aec Display the language selection dialog correctly on web (#2719)
* add event to callback

* position translation button correctly based on press position

* properly place the background

* remove worthless comment
2024-02-06 12:51:32 -08:00
dan 9ccad0ba6c Prevent post meta misclicks in QT (#2701) 2024-02-06 12:44:33 -08:00
Mary 41860d8b80 fix: remove list from pinned once deleted (#2705) 2024-02-06 12:26:57 -08:00
Paul Frazee 2d13f3b367 Merge branch 'mary-ext-fix/app-password-submit' into main 2024-02-06 12:14:27 -08:00
Paul Frazee d385837812 Go back to autofocus and small ui tweak 2024-02-06 12:13:09 -08:00
Paul Frazee ed80551278 Cat on keyboard 2024-02-06 12:07:06 -08:00
Paul Frazee b61db0f4e4 Merge branch 'fix/app-password-submit' of https://github.com/mary-ext/fork-bsky-app into mary-ext-fix/app-password-submit 2024-02-06 12:00:55 -08:00
Hailey ec86282403 Options for selecting dark theme, fix some white flashes when in dark mode (#2722)
* add dark theme selection to settings/schema

* use `useThemePrefs` where needed

* adjust theme providers to support various themes

* update storybook

* handle web themes

* better themeing for web

* dont show dark theme prefs when color mode is light

* drop the inverted text change on oled theme

* get the color mode inside of `useColorModeTheme`

* use `ThemeName` type everywhere

* typo

* use dim/dark instead of dark/oled

* prevent any fickers on web

* fix styles

* use `dim` for dark default

* more cleanup

* 🤔

* set system background color

* ts
2024-02-06 11:43:51 -08:00
Hailey 856f80fc6d fix some youtube videos not properly loading (#2726)
* add player iframe to bskyweb

* iframe for youtube content

* update tests

* ts error
2024-02-06 11:05:17 -08:00
Hailey a9ab13e5a9 password flow improvements (#2730)
* add button to skip sending reset code

* add validation to reset code

* comments

* update test id

* consistency sneak in - everything capitalized

* add change password button to settings

* create a modal for password change

* change password modal

* remove unused styles

* more improvements

* improve layout

* change done button color

* add already have a code to modal

* remove unused prop

* icons, auto add dash

* cleanup

* better appearance on android

* Remove log

* Improve error messages and add specificity to function names

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2024-02-06 10:06:25 -08:00
Paul Frazee b9e00afdb1 Merge branch 'RonyVidaur-main' into main 2024-02-06 09:29:02 -08:00
Paul Frazee 0604e5b84e Fix lint 2024-02-06 09:28:56 -08:00
Paul Frazee 57559ab6ca Merge branch 'main' of https://github.com/RonyVidaur/social-app into RonyVidaur-main 2024-02-06 09:13:19 -08:00
Hailey 065a094087 fix web aux click on all browsers (#2633) 2024-02-06 09:00:16 -08:00
Samuel Newman 2f1ce117d7 Long press external embed to share (#2621)
* long press external embed to share

* use existing shareUrl function
2024-02-05 15:58:03 -08:00
Mary 2754121f67 Bump replies (#2604)
* fix: bump replies

* refactor: only bump if not at 0
2024-02-05 15:44:14 -08:00
Samuel Newman 6ad5863573 Move query augmentation to lower component (#2748) 2024-02-05 15:26:08 -08:00
Hailey fca00d20a4 update docs to include info on installing cocoapods (#2744)
* update docs to include info on installing `cocoapods`

* wording
2024-02-05 15:25:28 -08:00
Mary ca66fae3ef fix: listen for error event on image (#2736) 2024-02-05 15:23:20 -08:00
ɴᴏᴠᴀ 2fd4b27ec6 Butterfly logo icon for Android push notifications (#2716)
* butterfly icon for android push notifications

* first block unnecessary
2024-02-05 15:22:17 -08:00
Hailey c84b654812 fix scrolling in delete account modal (#2733) 2024-02-05 15:00:13 -08:00
surfdude29 33902a0351 Fix string in onboarding screen in fr/messages.po (#2720) 2024-02-05 14:54:42 -08:00
Frudrax Cheng a5cd1d377f Chinese localization (#2668)
* Chinese localization

* fixed languages.ts typo

* crosscheck with proofreading of translation

* fixed messages.po string styles

* a minor adjustment

* Update Chinese localization

* fixed a typo & modify the translation of handle

* based on the latest messages.po translation

* removed unused strings

* based on the latest messages.po translation
2024-02-05 14:50:10 -08:00
Minseo Lee 0b37cf4ee7 Update Korean localization (#2664)
* Update messages.po

* Update messages.po

* Fix typo

Co-authored-by: Hanee (임하은) <hanee_l@naver.com>

* Update messages.po

* Update messages.po

* Update messages.po

---------

Co-authored-by: Hanee (임하은) <hanee_l@naver.com>
2024-02-05 14:45:09 -08:00
L-tan 8df2760173 Update Japanese localization to 1.67 (#2658)
* reset headers

* fill in untranslated message

* unified "Following" Feed

* Suggest wording tweak in StepAlgoFeeds/index.tsx (#2653)

* Suggest wording tweak in StepAlgoFeeds/index.tsx

* Update src/screens/Onboarding/StepAlgoFeeds/index.tsx

---------

Co-authored-by: Eric Bailey <git@esb.lol>

* Fix typos and suggested punctuation tweak in StepSuggestedAccounts/index.tsx (#2649)

* Fix typos in StepSuggestedAccounts/index.tsx

* suggested wording tweak

* on second thought, 'some' again is redundant

* update header

* update translation

* intl:extract

* update messages

* update revision date

* modify by reveiew suggestions

Co-authored-by: tkusano <tkusano@users.noreply.github.com>

* modify by reveiew suggestions

Co-authored-by: Hima-Zinn <Hima-Zinn@users.noreply.github.com>

* unified "フォロー中フィード"

Co-authored-by: Hima-Zinn <Hima-Zinn@users.noreply.github.com>

* modify by reveiew suggestions

Co-authored-by: noritada <noritada@users.noreply.github.com>

* modify by reveiew suggestions

Co-authored-by: noritada <noritada@users.noreply.github.com>

* modify merge miss

* Completes missing translations due to merging

---------

Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
Co-authored-by: Eric Bailey <git@esb.lol>
Co-authored-by: tkusano <tkusano@users.noreply.github.com>
Co-authored-by: Hima-Zinn <Hima-Zinn@users.noreply.github.com>
Co-authored-by: noritada <noritada@users.noreply.github.com>
2024-02-05 14:44:47 -08:00
Eric Bailey 96f39657d7 Only re-reg push noty token when account changes (#2654) 2024-02-05 14:41:14 -08:00
Gildásio Filho 5ee802bb1f Update pt-BR translation to 1.67 (#2652)
* Update messages.po

* Update messages.po

* Update messages.po

* Remove double escape character

* Update revision date

* Update messages.po

* Fix typo
2024-02-05 14:40:31 -08:00
dan b7056365dd Remove dead code for pager (#2651) 2024-02-05 14:40:07 -08:00
Paul Frazee f0e046a44b Merge branch 'main' of github.com:bluesky-social/social-app into main 2024-02-05 14:39:16 -08:00
Paul Frazee 2039df4879 Merge branch 'ivanbea-main' into main 2024-02-05 13:53:45 -08:00
Paul Frazee 7caf927323 Merge branch 'main' of https://github.com/ivanbea/social-app into ivanbea-main 2024-02-05 13:53:27 -08:00
Minseo Lee b8f0c5b538 Update Step3.tsx (#2638) 2024-02-05 13:50:33 -08:00
Pranith Kanchan f8b43e1f7e link in Moderation screen cannot be tapped #2745
link in Moderation screen cannot be tapped #2745
2024-02-05 17:40:19 +05:30
Hailey 0bbe2c5e32 show bottom bar on web tablet breakpoints when logged out (signup cta) (#2747)
* show signup bottom bar on web tablet

* show signup bottom bar on web tablet

* comment

* adjust load latest btn position based on logged in/out
2024-02-04 12:54:07 -08:00
Jaz 250b48d5a2 Merge pull request #2743 from bluesky-social/support_did_previews
Support previews for links using DIDs and not just handles
2024-02-04 10:18:34 -08:00
Jaz 3ed1877e4b Support previews for links using DIDs and not just handles 2024-02-03 22:24:54 -08:00
RonyVidaur 1412f9d95c format 2024-02-03 22:27:50 -06:00
RonyVidaur 323b5bdfda enhance check 2024-02-03 22:09:07 -06:00
RonyVidaur 6f228a598e validate phone number based on country 2024-02-03 21:54:37 -06:00
Paul Frazee 15e90356e7 Bump build 2024-01-31 21:57:31 -08:00
Paul Frazee 17db71ac0e Tweak content 2024-01-31 21:52:32 -08:00
Paul Frazee f6cdebb8af Bump build number 2024-01-31 16:43:07 -08:00
Paul Frazee 2e3e66c974 Fix sort 2024-01-31 16:42:48 -08:00
Paul Frazee 50eb1c30d2 Bump build numbers 2024-01-31 16:08:07 -08:00
Mary c3d3f91349 fix: submit app password on enter 2024-02-01 06:55:52 +07:00
Eric Bailey 4cf68b32c8 Change up onboarding algo feeds, rework copy (#2718)
* Switcheroo

* tweak copy

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2024-01-31 15:36:00 -08:00
surfdude29 3d4cd9eda3 Remove superseded strings from en/messages.po (#2706) 2024-01-31 14:33:55 -08:00
surfdude29 39619226da Remove superseded strings from de/messages.po (#2707)
* Remove superseded strings from de/messages.po

* restore some superseded translations to their equivalents
2024-01-31 14:33:18 -08:00
surfdude29 cbb856f09b Remove superseded strings from es/messages.po (#2708)
* Remove superseded strings from es/messages.po

* oops, missed one
2024-01-31 14:33:02 -08:00
surfdude29 277aa13d35 Remove superseded strings from fr/messages.po (#2709) 2024-01-31 14:32:42 -08:00
surfdude29 880f94a92b Remove superseded strings from hi/messages.po (#2711)
A cleanup PR that removes strings from hi/messages.po that have been superseded and are no longer used.

I also matched some of the superseded strings that had already been translated to their new equivalents.
2024-01-31 14:16:30 -08:00
Hailey 5db56277c0 Onboarding moderation improvements (#2713)
* create separate label group arrays

* render adult and other label groups separately

* animate in/out the additional settings

* improve toggle logic

* support animations on all platforms

* remove debug

* update notice, prevent running animations on mount

* reorg imports
2024-01-31 14:14:37 -08:00
Eric Bailey a4ff290769 🤦 (#2655) 2024-01-31 13:02:20 -08:00
Eric Bailey 1720eef5c4 New splash screen (#2714)
* New splash screen

* Add logotype to splash

* Adjust spacing
2024-01-31 13:01:07 -08:00
Hailey 10cd4adc79 set default display name to be blank (#2717) 2024-01-31 12:58:27 -08:00
Hailey dfc5a03eb5 add padding to bottom offset (#2715) 2024-01-31 12:52:02 -08:00
Eric Bailey 174900596f Copy edits (#2710) 2024-01-31 09:56:44 -08:00
Paul Frazee 68d4cd1046 Bump ios build number 2024-01-30 20:51:02 -08:00
Paul Frazee 31bf286fdc Reduce the odds of false positives in the language suggester (close #2598) (#2700) 2024-01-30 20:16:49 -08:00
Eric Bailey 42fe0e1609 Handle onboarding in non-prod envs (#2698) 2024-01-30 19:06:58 -08:00
dan 2b0f92c7e0 Workaround Safari content-visibility bug (#2699) 2024-01-30 19:05:45 -08:00
dan 7b683b617a Fix notification invalidation condition on web (#2697)
Co-authored-by: Dan Abramov <dan@mac.home>
2024-01-30 18:52:20 -08:00
Hailey 59aacf4126 moderate avatars and embeds in composer reply to (#2665)
* moderate avatars and embeds in composer reply to

* oops

* dont need moderation in the quote opts
2024-01-30 18:11:23 -08:00
Hailey 28455f49dc prevent duplicate keys in feed tab bar (#2666) 2024-01-30 17:54:29 -08:00
Hailey faf48db679 add padding to user's lists/feeds scrollviews (#2675)
* add padding to user's lists/feeds scrollviews

* always use the header offset for padding
2024-01-30 17:49:34 -08:00
Hailey c3b4ce4378 adjust height of list based on screen size (#2678) 2024-01-30 17:46:44 -08:00
Paul Frazee 45291f17a0 Fix notification mark-read behaviors (#2696)
* Mark read on first notifs page fetch always; this is less optimal but it fixes a case where when the first full page's unreads are all filtered out

* Use the pre-filter indexedAt for updateSeen
2024-01-30 17:46:35 -08:00
Hailey a175922ccf Merge pull request #2695 from bluesky-social/hailey/fix-android-swipe
fix left swipe on android
2024-01-30 17:30:32 -08:00
Hailey d8fc3798e3 add comment 2024-01-30 17:10:19 -08:00
Hailey db3b10e98b update comment 2024-01-30 17:09:02 -08:00
Hailey bb4c9df039 cleanup 2024-01-30 17:00:49 -08:00
Hailey 767dd83d0b cleanup 2024-01-30 16:55:57 -08:00
Hailey ca9b2a551d check if a thread is muted before incrementing notif badge, filter out quotes (#2686)
* check if a thread is muted before incrementing notif badge

* some filtering for quotes and reposts

* move logic to util

* change logic

* revert always fetching

* logic for cases when we don't have a subject (count)

* unneeded change

* check subject embed in `isThreadMuted`

* remove todo
2024-01-30 16:55:46 -08:00
Hailey fc8ea01741 use variable 2024-01-30 16:45:02 -08:00
Hailey df740c85e0 use gap on native 2024-01-30 16:37:26 -08:00
Eric Bailey 08a11f628e Revert text selection bg color change (#2689) 2024-01-30 15:48:18 -08:00
Hailey e45f0b6c43 Autofocus the alt text input on all platforms, improve dismissability on native (#2690)
* sneak in a eslint fix

* autofocus the alt text input whenever we open the modal

* properly use the hook
2024-01-30 15:48:03 -08:00
Hailey c5edd0a065 remove unnecessary right padding in main thread item (#2693) 2024-01-30 15:25:29 -08:00
Eric Bailey 68639db76f Fix chrome font weight rendering (#2694) 2024-01-30 15:09:43 -08:00
Eric Bailey 2ce9ab7da0 Don't interpolate rkey (#2691) 2024-01-30 15:09:21 -08:00
Eric Bailey bb7ce215f7 i18n interests, allow for fallbacks (#2692) 2024-01-30 15:04:54 -08:00
Hailey 4058174678 Merge pull request #2679 from bluesky-social/hailey/check-blocks-load-profile
clear cache when blocking/unblocking and whenever we get blocked, better invalidation logic for `useProfileQuery`
2024-01-30 10:35:46 -08:00
Hailey 05f48860a0 ts 2024-01-30 10:31:24 -08:00
Hailey 159df136c1 move to correct file 2024-01-30 10:27:18 -08:00
Paul Frazee c59741c10b Merge branch 'main' of github.com:bluesky-social/social-app into main 2024-01-30 09:28:56 -08:00
Prates f81bacc402 Avatar type for Feed check (#2661)
* Changed type from algo to list

* Fixed to check if it's a feed or a list
2024-01-30 09:21:06 -08:00
Paul Frazee e13777c191 Merge branch 'main' of github.com:bluesky-social/social-app into main 2024-01-30 09:18:47 -08:00
Hailey 640ce5e47b use in app browser for translations when enabled (#2663) 2024-01-30 09:14:41 -08:00
Hailey 0ff6ee2fc8 better naming 2024-01-29 19:48:50 -08:00
Hailey ebe64b828b update deprecated 2024-01-29 18:51:54 -08:00
Hailey c5c3f6dbe5 naming 2024-01-29 18:44:19 -08:00
Hailey 30b06c1d9e dont invalidate profile queries if they are only for display name resolution 2024-01-29 18:38:04 -08:00
Hailey a8d267e972 configurable stale time for profile queries 2024-01-29 18:37:41 -08:00
Hailey 65e349ee96 use isLoading for whether to show no profile header 2024-01-29 18:37:15 -08:00
Hailey dd3229d900 check if we are blocked when opening a profile, reset posts cache if we are 2024-01-29 16:48:49 -08:00
surfdude29 4f28028569 Fix typos and suggested punctuation tweak in StepSuggestedAccounts/index.tsx (#2649)
* Fix typos in StepSuggestedAccounts/index.tsx

* suggested wording tweak

* on second thought, 'some' again is redundant
2024-01-27 14:15:48 -06:00
surfdude29 20b2f1475c Suggest wording tweak in StepAlgoFeeds/index.tsx (#2653)
* Suggest wording tweak in StepAlgoFeeds/index.tsx

* Update src/screens/Onboarding/StepAlgoFeeds/index.tsx

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2024-01-27 14:14:21 -06:00
Paul Frazee ae4ce4bb87 Fix easignore 2024-01-26 17:37:27 -08:00
Paul Frazee 1ba3466d53 Bump ios build number 2024-01-26 17:06:42 -08:00
Paul Frazee 8a40916cd4 Enable new onboarding 2024-01-26 13:57:17 -08:00
Paul Frazee 9bcf867d68 Merge branch 'main' of github.com:bluesky-social/social-app into main 2024-01-26 13:56:05 -08:00
Paul Frazee 00b4ee5b0d 1.67 2024-01-26 13:55:56 -08:00
Paul Frazee 77d47c2b45 Bump dev-env 2024-01-26 13:54:25 -08:00
dan ad3067b581 Adjust placeholder to be pixel-perfect (#2650) 2024-01-26 21:45:22 +00:00
surfdude29 93133b4864 Fix typos in StepFollowingFeed.tsx (#2643) 2024-01-26 12:10:21 -08:00
Paul Frazee b629fbdbb9 Two UI tweaks after recent updates (#2647)
* Readd the top border to the highlighted post when a reply (revert #2628)

* Readd right pad to post controls
2024-01-26 12:09:52 -08:00
Ivan Beà a48f4fc7b6 Update messages.po
Apply @surfdude26 and @jordimas corrections
2024-01-26 17:45:25 +01:00
Ivan Beà 88b64840b6 Update messages.po 2024-01-26 15:59:36 +01:00
Ivan Beà 92a4de9398 Update messages.po 2024-01-26 15:01:35 +01:00
Ivan Beà e4d8cf578d Update catalan localization
Update catalan localization
2024-01-26 14:59:33 +01:00
Paul Frazee 6149437c05 Account creation improvements & some other fixes (#2636)
* Quick fix to mobile

* Enlarge tap targets in account creation

* Improve keyboard behaviors during account creation

* Improve autocompletion behaviors during account creation

* Use the logo in the Deactivated screen
2024-01-25 22:24:37 -08:00
dan c8175b9c4e Add missing top border to notifications loading state (#2635) 2024-01-25 21:24:24 -08:00
dan 23a4bbf608 Prefetch profile links on web (#2634) 2024-01-25 21:23:56 -08:00
Eric Bailey 157404132f Improve type checking for metrics events (#2632) 2024-01-25 21:12:48 -08:00
Eric Bailey bc502edae1 Clean up some sentry logs (#2630)
* Change prop name for sentry ingestion

* Fix test

* Add default object
2024-01-25 21:11:01 -08:00
Eric Bailey 3371038f7d New Onboarding (#2596)
* Add round and square buttons

* Allow some style for buttons, add icons

* Change text selection color

* Center button text, whoops

* Outer layout, some primitive updates

* WIP

* onboarding feed prefs (#2590)

* add `style` to toggle label to modify text style

* Revert "add `style` to toggle label to modify text style"

This reverts commit 8f4b517b85.

* following feed prefs

* remove unnecessary memo

* reusable divider component

* org imports

* add finished screen

* Theme SelectedAccountCard

* Require at least 3 interests

* Placeholder save logic

* WIP algo feeds

* Improve lineHeight handling, add RichText, improve Link by adding InlineLink

* Inherit lineHeight in heading comps

* Algo feeds mostly good

* Topical feeds ish

* Layout cleanup

* Improve button styles

* moderation prefs for onboarding (#2594)

* WIP algo feeds

* modify controlalbelgroup typing for easy .map()

* adjust padding on button

* add moderation screen

* add moderation screen

* add moderation screen

---------

Co-authored-by: Eric Bailey <git@esb.lol>

* Fix toggle button styles

* A11y props on outer portal

* Put it all on red

* New data shape

* Handle mock data

* Bulk write (not yet)

* Remove interests validation

* Clean up interests

* i18n layout and first step

* Clean up suggested follows screen

* Clean up following step

* Clean up algo feeds step

* Clean up topical feeds

* Add skeleton for feed card

* WIP moderation step

* cleanup moderation styles (#2605)

* cleanup moderation styles

* fix(?) toggle button group styles

* adjust toggle to fit any screen

* Some more cleanup

* Icons

* ToggleButton tweaks

* Reset

* Hook up data

* Better suggestions

* Bulk write

* Some logging

* Use new api

* Concat topical feeds

* Metrics

* Disable links in RichText, feedcards

* Tweak primary feed cards

* Update metrics

* Fix layout shift

* Fix ToggleButton again, whoops

* Error state

* Bump api package, ensure interests are saved

* Better fix for autofill

* i18n, button positions

* Remove unused export

* Add default prefs object

* Fix overflow in user cards

* Add 2 lines of bios to suggested accounts cards

* Nits

* Don't resolve facets by default

* Update storybook

* Disable flag for now

* Remove age dialog from moderations step

* Improvements and tweaks to new onboarding

---------

Co-authored-by: Hailey <153161762+haileyok@users.noreply.github.com>
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2024-01-25 20:22:40 -08:00
Paul Frazee 5443503593 Add account-activation queueing to signup (#2613)
* Add deactivated-account tracking

* Center button text

* Add Deactivated screen

* Add icon to Deactivated screen

* Abort session resumption if the session is deactivated

* Implement deactivated screen status checks

* Bump api@0.9.5

* Use new typo-fixed scope

* UI refinements
2024-01-25 15:33:23 -08:00
dan 335bef3d30 Present highlighted post as part of the thread (#2628) 2024-01-25 14:48:25 -08:00
Hailey ab200285c5 android alt text selection fix for expandable alt (#2629) 2024-01-25 14:12:15 -08:00
dan 10b1d16c8a Fix post controls tap areas (#2627) 2024-01-25 14:06:28 -08:00
dan ef84f3a25e Dejank navigation between thread posts (#2625)
* Dejank parent thread spinner

* Fix bottom border/spinner jank

* Revert unnecessary change
2024-01-25 13:32:17 -08:00
dan de6b380f4e Show composer reply prompt on tablet (#2622) 2024-01-25 13:26:07 -08:00
dan 8d3179f082 Fix races for post like/repost toggle (#2617) 2024-01-25 21:25:12 +00:00
dan 3b26b32f7f Derive shadow like count (#2616) 2024-01-25 21:21:07 +00:00
surfdude29 a588b0d548 add English name after endonym for languages (#2608) 2024-01-25 13:02:46 -08:00
dan 7f7b7492d6 Remove dead code for optimistic updates (#2615) 2024-01-25 12:19:25 -08:00
surfdude29 e4622e876e Update copyright year in LICENSE (#2606) 2024-01-25 12:15:40 -08:00
dan 63fbdede42 Clean up the post controls UI (#2614)
* Hide zeros on post ctrls

* Align buttons between posts

* Update loading placeholders

* Remove unused
2024-01-25 01:38:23 +00:00
dan e111a31c1d Capitalize screen headers consistently (#2612) 2024-01-24 15:21:43 -08:00
dan c2733bc2c0 Use consistent spinners for loading screens (#2611)
* Use consistent spinners for loading screens

* Consolidate into LoadingScreen
2024-01-24 23:01:22 +00:00
Samuel Newman 9ff74ff30a set icon colour to text colour (#2607) 2024-01-24 09:50:39 -08:00
Paul Frazee d87c643715 Re-enable german translation 2024-01-23 20:39:35 -08:00
Paul Frazee e628556d1f Merge branch 'main' of github.com:bluesky-social/social-app into main 2024-01-23 20:33:38 -08:00
Paul Frazee e273f4ed21 Merge branch 'snackpackwayne-patch-1' into main 2024-01-23 20:32:30 -08:00
Paul Frazee fe43f7a2a0 Merge branch 'patch-1' of https://github.com/snackpackwayne/social-app into snackpackwayne-patch-1 2024-01-23 20:31:40 -08:00
Samuel Newman 94f39bb3eb Scroll feed search bar to top of screen on focus (#2602)
* Scroll feed search bar to top on focus

* update comment
2024-01-23 20:22:22 -08:00
Paul Frazee 382383ca87 Merge branch 'quiple-fix-margin' into main 2024-01-23 20:17:08 -08:00
Paul Frazee 20e5c5b3f8 Move the leftnav back out 10px 2024-01-23 20:15:59 -08:00
Paul Frazee 8a59e5310e Merge branch 'fix-margin' of https://github.com/quiple/social-app into quiple-fix-margin 2024-01-23 20:14:09 -08:00
Paul Frazee 5cc20ac70c Disable scroll on the composer TextInput (close #2413) (#2603) 2024-01-23 19:38:28 -08:00
Paul Frazee c7647b47cf Merge branch 'mary-ext-feat/search-from-me' into main 2024-01-23 15:52:47 -08:00
Paul Frazee 68a439d570 Merge branch 'feat/search-from-me' of https://github.com/mary-ext/fork-bsky-app into mary-ext-feat/search-from-me 2024-01-23 15:52:34 -08:00
Mary 6076b8f730 fix: resolve handle in feed/list urls (#2497) 2024-01-23 15:11:07 -08:00
Paul Frazee 439f459cef Merge branch 'main' of github.com:bluesky-social/social-app into main 2024-01-23 14:16:32 -08:00
Paul Frazee a2b58852e7 Merge PR #2495 by haileyok
Squashed commit of the following:

commit 9d9c46ced116079add8ae1beaed854b38962d608
Author: Paul Frazee <pfrazee@gmail.com>
Date:   Tue Jan 23 14:12:32 2024 -0800

    Fix reference error on the web build

commit 1981621c5b6f2b63b3e3875b68721161487d7df0
Merge: cda4fe4a 0d9b6954
Author: Paul Frazee <pfrazee@gmail.com>
Date:   Tue Jan 23 12:43:51 2024 -0800

    Merge branch 'feat/selectable-text' of https://github.com/haileyok/social-app into haileyok-feat/selectable-text

commit 0d9b695447
Merge: 3c381f94 f1a7a571
Author: Hailey <153161762+haileyok@users.noreply.github.com>
Date:   Fri Jan 19 16:42:13 2024 -0800

    Merge branch 'main' into feat/selectable-text

commit 3c381f9470
Merge: f9510156 fb596e7f
Author: Hailey <153161762+haileyok@users.noreply.github.com>
Date:   Thu Jan 18 23:48:10 2024 -0800

    Merge branch 'main' into feat/selectable-text

commit f951015637
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 23:46:25 2024 -0800

    update readme

commit aa9b8b06ed
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 23:37:49 2024 -0800

    calculate line height

commit 9fe479630c
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 23:19:31 2024 -0800

    improve height calculation, render on prop changes

commit 209caffa7d
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 22:53:08 2024 -0800

    presses

commit 384c8ec3a8
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 21:57:56 2024 -0800

    line break mode

commit adfcf05fe4
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 21:50:21 2024 -0800

    onTextLayout event

commit e9ba104e6f
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 21:34:35 2024 -0800

    better naming

commit e335f5ab7f
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 21:31:38 2024 -0800

    remove android

commit 9e197934ba
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 21:28:28 2024 -0800

    remove expo module

commit 99882c7e39
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 21:27:43 2024 -0800

    handle presses

commit 18f818649e
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 18 21:14:38 2024 -0800

    make use of rctshadowview

commit 7134e1106e
Author: Hailey <me@haileyok.com>
Date:   Wed Jan 17 20:38:39 2024 -0800

    stop unnecessary layouts, resize container before setting text

commit 340b84f053
Author: Hailey <me@haileyok.com>
Date:   Wed Jan 17 11:17:36 2024 -0800

    handle prop changes for both children and root views

commit d906fe4fcf
Author: Hailey <me@haileyok.com>
Date:   Tue Jan 16 18:42:22 2024 -0800

    handle onpress better

commit b6b0964168
Author: Hailey <me@haileyok.com>
Date:   Tue Jan 16 16:57:31 2024 -0800

    resolve animation issue, animate alt text expansion

commit daedd1f671
Author: Hailey <me@haileyok.com>
Date:   Tue Jan 16 15:47:24 2024 -0800

    move getChildren to didMoveToWindow

commit 87d44e4b57
Author: Hailey <me@haileyok.com>
Date:   Mon Jan 15 18:48:36 2024 -0800

    simplify getPressed

commit d92584bad7
Author: Hailey <me@haileyok.com>
Date:   Mon Jan 15 17:56:43 2024 -0800

    just more cleanup

commit d39f7a937d
Author: Hailey <me@haileyok.com>
Date:   Mon Jan 15 17:03:19 2024 -0800

    remove unnecessary property for gesture recognizer

commit a35513a1d2
Author: Hailey <me@haileyok.com>
Date:   Mon Jan 15 16:55:36 2024 -0800

    remove debug line

commit 788956aa01
Author: Hailey <me@haileyok.com>
Date:   Mon Jan 15 16:33:44 2024 -0800

    typo

commit a3ba6e7825
Author: Hailey <me@haileyok.com>
Date:   Mon Jan 15 13:42:25 2024 -0800

    make alt text selectable

commit e5472a13da
Author: Hailey <me@haileyok.com>
Date:   Mon Jan 15 05:27:15 2024 -0800

    re-render on numberOfLines change

commit 9f5b7602c1
Author: Hailey <me@haileyok.com>
Date:   Mon Jan 15 04:57:35 2024 -0800

    more implementations

commit aa96bba066
Author: Hailey <me@haileyok.com>
Date:   Mon Jan 15 03:12:43 2024 -0800

    merge main in

    what are you doing there? go away

    fix recognizer to clear selected text on tap

    remove jank/hacks

    update readme

    remove android stuff

    (?) don't remove clipped subview on android for selection
    enable selection of alt text

    add numberOfLines
    properly apply container styles

    handle both selection and expand press events in alt text

    far better implementation

    revert link changes

    revert lightbox changes for now

    fix file name

commit ec8c05f3f0
Merge: 2435a252 12a0ceee
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 23:41:10 2024 -0800

    Merge branch 'main' into feat/selectable-text

    # Conflicts:
    #	src/view/com/util/Link.tsx

commit 2435a25257
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 23:30:13 2024 -0800

    cleanup

commit fdf75927f6
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 23:25:23 2024 -0800

    remove debug

commit 36d8cd82ef
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 23:25:17 2024 -0800

    reset text selection on text update

commit b8f7bc23c2
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 23:24:43 2024 -0800

    use textkit 1

commit 5216464458
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 22:50:15 2024 -0800

    properly handle link press events

commit 2802902c69
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 22:49:47 2024 -0800

    modify Link so that we can create the TextLink press handler outside

commit 860610e63a
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 19:17:51 2024 -0800

    always make sure we use the latest styles

commit 7f05d0141b
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 16:57:08 2024 -0800

    update readme with tech info

commit b8318446a3
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 16:34:35 2024 -0800

    remove all uitextview padding

commit 0f0b6aa131
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 16:34:28 2024 -0800

    cleanup imports

commit c9f0064836
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 16:18:08 2024 -0800

    update interface

commit 7dcac644ba
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 16:13:49 2024 -0800

    remove useless struct

commit 5174744213
Author: Hailey <me@haileyok.com>
Date:   Fri Jan 12 16:13:34 2024 -0800

    adjust deps

commit ce8b9ed62b
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 11 22:15:50 2024 -0800

    add readme, update info

commit 33c6e3b15c
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 11 22:04:53 2024 -0800

    remove unnecessary android/web stuff

commit fbca531bdf
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 11 22:02:30 2024 -0800

    simplify cast of string.index to int before i forget

commit 648552eafb
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 11 02:01:20 2024 -0800

    wip

commit c6d2e54923
Author: Hailey <me@haileyok.com>
Date:   Thu Jan 11 00:38:47 2024 -0800

    selectable text experiment
2024-01-23 14:15:47 -08:00
bnewbold a2f49bb08c more social card tweaks, and include in RSS as well (#2599)
* move link expander to new file, add test, refactor a bit

* text formatting: include indication if a quote post exists

* rss: include expanded links
2024-01-23 13:16:32 -08:00
Zach Lipton c58e65000d Include expanded urls in social cards (#2427)
* include expanded urls in social cards (#2427)

* break expandPostLinks into its own function, add bounds checking
2024-01-23 13:04:22 -08:00
Gargaj cdbdb37aac Ensure OG:Image is filled when post contains a record (#2586) 2024-01-23 13:02:53 -08:00
Paul Frazee cda4fe4a7f basic implementation of search history (#2597)
Co-authored-by: Ryan Skinner <ryanskinner@gmail.com>
2024-01-23 12:06:40 -08:00
Mary abac959d03 Resolve facets on list descriptions (#2485)
* feat: add strict/loose link mapping

* feat: resolve facets on list description
2024-01-23 10:39:13 -08:00
Minseo Lee 4942d0b7ac Update FeedItem.tsx 2024-01-23 21:11:41 +09:00
Minseo Lee c6f800f4d9 Adjust LeftNav 2024-01-23 10:31:09 +09:00
Minseo Lee 57ac782a2c Set left margin of new list buttons 2024-01-23 10:12:43 +09:00
Minseo Lee 1828bc9755 Update Korean localization (#2494)
* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update localizations

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po
2024-01-22 15:57:00 -08:00
Mary 55ad808785 fix: don't expose post content on no-unauthenticated (#2584) 2024-01-22 15:55:51 -08:00
Paul Frazee 7ca6ba2e1c Merge branch 'mary-ext-feat/image-dnd' into main 2024-01-22 15:54:36 -08:00
Paul Frazee f67812d09a Tweak positioning 2024-01-22 15:52:50 -08:00
Paul Frazee eda4dee3ab Merge branch 'feat/image-dnd' of https://github.com/mary-ext/fork-bsky-app into mary-ext-feat/image-dnd 2024-01-22 15:39:39 -08:00
Hailey 6569f8a870 use color scheme in in-app browser (#2580) 2024-01-22 15:17:56 -08:00
dan 010e94a6a9 Fix jump when opening last post in thread (#2591) 2024-01-22 15:13:14 -08:00
dan 21846ce52d Fix orphan replies in linear mode (#2578) 2024-01-22 15:10:06 -08:00
Paul Frazee d25b17ab19 Merge branch 'main' of github.com:bluesky-social/social-app into main 2024-01-22 15:04:41 -08:00
Paul Frazee ad018d8dbd Merge branch 'GID0317-main' into main 2024-01-22 15:04:19 -08:00
Paul Frazee df88cb672d Merge branch 'main' of https://github.com/GID0317/social-app into GID0317-main 2024-01-22 15:04:06 -08:00
Minseo Lee d51ad1fec9 Fix typos, improve localization and unify separators (#2502)
* Correct a typing error in `FeedItem.tsx` and replace the middle dot in `Drawer.tsx` with a bullet.

* Bullet to middle dot

* `liked your custom feed{0}` to `liked your custom feed {0}`

* Revert "`liked your custom feed{0}` to `liked your custom feed {0}`"

This reverts commit 43ae67bd03.

* Update FeedItem.tsx

* Update country-codes.ts
2024-01-22 14:55:56 -08:00
Noritada Kobayashi abacc51b50 Update Japanese localization based on the latest codebase (#2509)
* Update Japanese localization based on the latest codebase

* Improve translations based on suggestions in reviews

Co-authored-by: oboenikui <3191462+oboenikui@users.noreply.github.com>

* Update messages.po

Co-authored-by: Noritada Kobayashi <noritada.kobayashi@gmail.com>

* Make corrections and improvements suggested

Co-authored-by: L-tan <3786294+dolciss@users.noreply.github.com>

* Translate 9 new messages

* Improve a translation

* Translate 23 new messages

---------

Co-authored-by: oboenikui <3191462+oboenikui@users.noreply.github.com>
Co-authored-by: Hima <131072934+Hima-Zinn@users.noreply.github.com>
Co-authored-by: L-tan <3786294+dolciss@users.noreply.github.com>
2024-01-22 14:48:47 -08:00
Gildásio Filho 0877d2fc54 Update pt-BR translation (#2471)
* Update messages.po

Started reviewing and rewriting bad translations

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

Co-authored-by: Gleydson Rodrigues <gleydsonsr@gmail.com>

* Update messages.po

Co-authored-by: Gleydson Rodrigues <gleydsonsr@gmail.com>

* Update messages.po

Co-authored-by: Gleydson Rodrigues <gleydsonsr@gmail.com>

* Update messages.po

* Update messages.po

* Add missing untranslated entries

* Translation reviewed

Updated grammar, spelling and context of some strings.

Was not sure how to handle the translation of "legacy storage data"; open to suggestions.

* Update messages.po to 1.66

---------

Co-authored-by: Gleydson Rodrigues <gleydsonsr@gmail.com>
Co-authored-by: faeriarum <49880895+faeriarum@users.noreply.github.com>
2024-01-22 14:47:30 -08:00
dan f015229acf New Web Layout (#2126)
* Rip out virtualization on the web

* Screw around with layout

* onEndReached

* scrollToOffset

* Fix background

* onScroll

* Shell bars

* More scroll

* Fixes

* position: sticky

* Clean up 1

* Clean up 2

* Undo PagerWithHeader changes and fork it

* Trim down both versions

* Cleanup 3

* Memoize, lint

* Don't scroll away modal or lightbox

* Add content-visibility for rows

* Fix composer

* Fix types

* Fix borked scroll animation

* Fixes to layout

* More FlatList parity

* Layout fixes

* Fix more layout

* More layout

* More layouts

* Fix profile layout

* Remove onScroll

* Display: none inactive pages

* Add an intermediate List component

* Fix type

* Add onScrolledDownChange

* Port pager to use onScrolledDownChange

* Fix on mobile

* Don't pass down onScroll (replacement TBD)

* Remove resetMainScroll

* Replace onMainScroll with MainScrollProvider

* Hook ScrollProvider to pager

* Fix the remaining special case

* Optimize a bit

* Enforce that onScroll cannot be passed

* Keep value updated even if no handler

* Also memo it

* Move the fork to List.web

* Add scroll handler

* Consolidate List props a bit

* More stuff

* Rm unused

* Simplify

* Make isScrolledDown work

* Oops

* Fixes

* Hook up context scroll handlers

* Scroll restore for tabs

* Route scroll restoration POC

* Fix some issues with restoration

* Remove bad idea

* Fix pager scroll restoration

* Undo accidental locale changes

* onContentSizeChange

* Scroll to post

* Better positioning

* Layout fixes

* Factor out navigation stuff

* Cleanup

* Oops

* Cleanup

* Fixes and types

* Naming etc

* Fix crash

* Match FL semantics

* Snap the header scroll on the web

* Add body scroll lock

* Scroll to top on search

* Fix types

* Typos

* Fix Safari overflow

* Fix search positioning

* Add border

* Patch react navigation

* Revert "Patch react navigation"

This reverts commit 62516ed9c2.

* fixes

* scroll

* scrollbar

* cleanup unrelated

* undo unrel

* flatter

* Fix css

* twk
2024-01-22 14:46:32 -08:00
GID 305ced747a Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:44:59 +07:00
GID b3efa0ddd5 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:43:10 +07:00
GID 073762805f Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:42:39 +07:00
GID 965b838b50 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:42:14 +07:00
GID 956b0a14fe Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:41:56 +07:00
GID b5b274a1b8 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:41:38 +07:00
GID 4c9bf2be6f Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:41:03 +07:00
GID 18ae390f42 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:40:33 +07:00
GID 1ddb4d4731 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:40:16 +07:00
GID 09dfbd9f92 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:39:50 +07:00
GID 6a2d748689 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:39:28 +07:00
GID a93bfb616a Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:39:02 +07:00
GID b40f725bf3 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:38:38 +07:00
GID 5341c383ce Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:38:21 +07:00
GID 1eef59efe4 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:37:56 +07:00
GID e3360bddf8 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:37:36 +07:00
GID 05561711b0 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:33:55 +07:00
GID 4df5ef454d Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:33:22 +07:00
GID f589987357 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:33:05 +07:00
GID d0190b3d26 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:32:49 +07:00
GID cecece0f8e Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:31:58 +07:00
GID ef5241d80f Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:28:11 +07:00
GID b327700681 Update src/locale/locales/id/messages.po
Co-authored-by: oops-wtf <153840949+oops-wtf@users.noreply.github.com>
2024-01-21 17:27:39 +07:00
Mary 526411ab25 fix: firefox edge-case 2024-01-21 08:43:11 +07:00
Mary f5356c3d47 fix: design adjustments 2024-01-21 08:43:11 +07:00
Mary 88f2a73ad6 fix: always call preventDefault 2024-01-21 08:43:11 +07:00
Mary 854718c555 refactor: use right borderDark 2024-01-21 08:43:11 +07:00
Mary 90b6cfbb91 feat: new design 2024-01-21 08:43:11 +07:00
Mary fbf2970bae feat: web composer image drag and drop 2024-01-21 08:43:11 +07:00
surfdude29 cd02922b03 use ISO 3166-1 alpha-2 names for UK and Virgin Islands (US) (#2585) 2024-01-20 12:57:19 -08:00
GID 1cbbb6993c Update messages.po 2024-01-20 18:12:13 +07:00
GID 4c473bf51c Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:58:24 +07:00
GID 00e6312a14 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:57:53 +07:00
GID 8e6b033a09 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:57:29 +07:00
GID 5476799cb6 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:57:03 +07:00
GID 675d6a4de1 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:56:41 +07:00
GID 6ff8de9b8d Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:55:57 +07:00
GID 9e9ccbdc41 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:55:36 +07:00
GID 210bda0690 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:55:14 +07:00
GID 88ca4444fa Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:54:48 +07:00
GID cfa7cc94d4 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:54:15 +07:00
GID 909d88d050 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:53:56 +07:00
GID 1decec17d3 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:53:35 +07:00
GID cb85d81e40 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:53:07 +07:00
GID 490bd70cde Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:52:36 +07:00
GID f132d17afb Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:52:18 +07:00
GID 9bf0d90a7d Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:51:54 +07:00
GID 7cb74d6947 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:51:29 +07:00
GID 01b5159dbf Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:50:26 +07:00
GID 8c0e80d3c5 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:50:12 +07:00
GID 71e93839fd Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:49:55 +07:00
GID 8f4c01e4f0 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:49:41 +07:00
GID be5319e2d0 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:49:27 +07:00
GID 4f34bdf8d2 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:49:10 +07:00
GID c74e9f6e45 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:48:40 +07:00
GID 1239df36c2 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:47:56 +07:00
GID 8078613402 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:47:12 +07:00
GID 45894c03d4 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:46:12 +07:00
GID d77afb7cd8 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:45:42 +07:00
GID bc9cad9044 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:45:16 +07:00
GID 20899ae0ce Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:44:55 +07:00
GID b7cd31d8ca Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:44:36 +07:00
GID c9c0319681 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:44:20 +07:00
GID 0983861d32 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:43:53 +07:00
GID 5426a83dec Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:43:25 +07:00
GID 9ed455937b Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:42:43 +07:00
GID a7ab5cc8dc Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:42:10 +07:00
GID 4fdf0f51e3 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:41:36 +07:00
GID c2427ebaaa Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:40:56 +07:00
GID 9b93c0ebd9 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:40:47 +07:00
GID d0d5125375 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:40:34 +07:00
GID 1fbb3843b5 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:40:19 +07:00
GID 3fcf6dc86c Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:39:58 +07:00
GID c67eec8a0a Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:39:44 +07:00
GID a602c7c9bf Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:39:00 +07:00
GID 855ebb3243 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:38:42 +07:00
GID ee8f3ba280 Update src/locale/locales/id/messages.po
Co-authored-by: Fafin <151415765+kodebanget@users.noreply.github.com>
2024-01-20 17:38:31 +07:00
Paul Frazee f1a7a5717d 1.66 2024-01-19 16:33:22 -08:00
Hailey eb07b983bd properly shorten links in quote embeds (#2570)
* properly shorten links in quote embeds

* lint
2024-01-19 16:15:07 -08:00
Minseo Lee 920d48849e Update Step2.tsx (#2568) 2024-01-19 16:14:12 -08:00
Eric Bailey 9835996d73 Send error boundary exceptions to Sentry (#2573) 2024-01-19 16:13:47 -08:00
Hailey 89607d90aa set proper content style to fix background color (#2575)
* set the proper content style

* lint
2024-01-19 16:13:29 -08:00
Hailey 5522b581ec flex and truncate content hider text (#2569) 2024-01-19 16:12:10 -08:00
Paul Frazee e175984506 Improve country-code handling for text verification (#2579) 2024-01-19 16:11:18 -08:00
Hailey b96302beeb improve external link design (#2577)
* improve external link design

* slight changes

* use 1.91 aspect for images
2024-01-19 15:24:17 -08:00
Ivan Beà dafa0fb1e3 Update catalan messages.po (#2571)
* Update messages.po

Minor corrections spotted by another bluesky user

* Update messages.po

Apply corrections from @jordimas, changing all the occurrences of "discussió" for "debat"
2024-01-19 14:58:37 -08:00
GID 140834283e Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 17:51:58 +07:00
GID b2609e75d8 Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 17:49:53 +07:00
GID fd6be6b993 Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 17:49:42 +07:00
GID af1c34e72c Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 16:38:39 +07:00
GID 88abe598ac Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 16:38:11 +07:00
GID 2399ea4558 Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 16:38:01 +07:00
GID 0158f70270 Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 16:37:51 +07:00
GID 42784b9059 Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 16:35:57 +07:00
GID 4f275de00f Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 16:35:43 +07:00
GID fe2a1ef88f Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 16:35:21 +07:00
GID 462cc0d1a2 Update src/locale/locales/id/messages.po
Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
2024-01-19 16:35:04 +07:00
Jordi Mas fb596e7f79 Fixes msgfmt error in line 196 (#2567) 2024-01-18 22:40:22 -08:00
Mary 5b20ad1ebd Prevent close on backdrop for alt text edit modal (#2492)
* fix: don't close on backdrop for alt text edit

* fix: ignore esc key press if a modal is open
2024-01-18 22:25:03 -08:00
Paul Frazee 2f6c34d18d Merge branch 'mary-ext-feat/better-autocomplete-view' into main 2024-01-18 22:22:14 -08:00
Paul Frazee f58e1149c9 Change handling for mobile 2024-01-18 22:21:47 -08:00
Paul Frazee 809c534d32 Merge branch 'feat/better-autocomplete-view' of https://github.com/mary-ext/fork-bsky-app into mary-ext-feat/better-autocomplete-view 2024-01-18 22:10:33 -08:00
Kyrylo Pronskykh d514b13d62 fix: make alt text selectable in Lightbox (#2563) 2024-01-18 22:02:49 -08:00
Paul Frazee 34c1aebda6 Add catalan 2024-01-18 21:54:00 -08:00
Ivan Beà 0902b4ba41 Adding catalan localization (#2434)
* Create messages.po in catalan

* Apply suggestions from code review

Co-authored-by: Dario Castañé <d@rio.hn>

* Update messages.po

Change Estàs segur to Segur

* Update messages.po

Change "Estàs segur" to "Confirmes" "Ho confirmes" and keep using tuteo

* Update messages.po

adding suggestions by @jordimas

* Apply suggestions from code review

Co-authored-by: Dario Castañé <d@rio.hn>
Co-authored-by: Daniel Martí <mvdan@mvdan.cc>

---------

Co-authored-by: Dario Castañé <d@rio.hn>
Co-authored-by: Daniel Martí <mvdan@mvdan.cc>
2024-01-18 21:38:03 -08:00
Mary 4bd95b5ef2 Set start time on YouTube embeds (#2565)
* fix: set start time on yt embeds

* fix: re-encode to be on the safe side

* chore: fix embed tests
2024-01-18 21:25:57 -08:00
Takayuki KUSANO 0dfe740dd3 Remove excess l10n related markups (#2544)
* Remove excess l10n related markups

* One more correction pointed out by quiple
2024-01-18 21:23:12 -08:00
Mary 2be2733082 fix: exempt well-known paths from being handled (#2505) 2024-01-18 21:13:28 -08:00
Paul Frazee ddca849e0d Merge branch 'Signez-better-fr-l10n' into main 2024-01-18 21:12:55 -08:00
Paul Frazee 7fb8af0872 Merge branch 'better-fr-l10n' of https://github.com/Signez/bsky-social-app into Signez-better-fr-l10n 2024-01-18 21:12:06 -08:00
Minseo Lee 8af0d20f45 Update DiscoverFallbackHeader.tsx (#2537) 2024-01-18 20:59:38 -08:00
Eric Bailey 9803e17449 Use new palette values for main palette (#2566)
* Use new palette values for main palette

* Drawer bg in dark mode
2024-01-18 20:54:20 -08:00
Paul Frazee 95f70a9a6a Phone number verification in account creation (#2564)
* Add optional sms verification

* Add support link to account creation

* Add e2e tests

* Bump api@0.9.0

* Update lockfile

* Bump api@0.9.1

* Include the phone number in the ui

* Add phone number validation and normalization
2024-01-18 20:48:51 -08:00
Eric Bailey 89f4105082 Allow images to use specified aspectRatios (#2558) 2024-01-18 20:48:22 -08:00
Eric Bailey 66b8774ecb New component library based on ALF (#2459)
* Install on native as well

* Add button and link components

* Comments

* Use new prop

* Add some form elements

* Add labels to input

* Fix line height, add suffix

* Date inputs

* Autofill styles

* Clean up InputDate types

* Improve types for InputText, value handling

* Enforce a11y props on buttons

* Add Dialog, Portal

* Dialog contents

* Native dialog

* Clean up

* Fix animations

* Improvements to web modal, exiting still broken

* Clean up dialog types

* Add Prompt, Dialog refinement, mobile refinement

* Integrate new design tokens, reorg storybook

* Button colors

* Dim mode

* Reorg

* Some styles

* Toggles

* Improve a11y

* Autosize dialog, handle max height, Dialog.ScrolLView not working

* Try to use BottomSheet's own APIs

* Scrollable dialogs

* Add web shadow

* Handle overscroll

* Styles

* Dialog text input

* Shadows

* Button focus states

* Button pressed states

* Gradient poc

* Gradient colors and hovers

* Add hrefAttrs to Link

* Some more a11y

* Toggle invalid states

* Update dialog descriptions for demo

* Icons

* WIP Toggle cleanup

* Refactor toggle to not rely on immediate children

* Make Toggle controlled

* Clean up Toggles storybook

* ToggleButton styles

* Improve a11y labels

* ToggleButton hover darkmode

* Some i18n

* Refactor input

* Allow extension of input

* Remove old input

* Improve icons, add CalendarDays

* Refactor DateField, web done

* Add label example

* Clean up old InputDate, DateField android, text area example

* Consistent imports

* Button context, icons

* Add todo

* Add closeAllDialogs control

* Alignment

* Expand color palette

* Hitslops, add shortcut to Storybook in dev

* Fix multiline on ios

* Mark dialog close button as unused
2024-01-18 20:28:04 -06:00
GID cf7aa2642c Update messages.po 2024-01-17 15:45:39 +07:00
GID ad44926d23 Update messages.po 2024-01-17 15:43:23 +07:00
Eric Bailey 9cbd3c0937 Reduce some Sentry logs (#2549)
* Reduce some Sentry logs

* Update tests
2024-01-16 15:48:35 -08:00
Eric Bailey 64f7800bed Patch @lingui/core to fix unraw import resolution error (#2548) 2024-01-16 14:35:08 -08:00
Paul Frazee f1e58626fb 1.65 2024-01-16 10:05:11 -08:00
Paul Frazee 8372c0c261 Fix the fallback to discover behavior on the home feed (#2546) 2024-01-16 10:01:41 -08:00
Mary 6d0557c959 feat: better autocomplete view 2024-01-16 07:31:01 +07:00
Paul Frazee d35be77a11 Bump android version code 2024-01-15 15:31:56 -08:00
Paul Frazee 8c4e5b5f0b Bump ios build number 2024-01-15 15:19:05 -08:00
Paul Frazee a7d617c7a6 Add a new home feed-api wrapper and give a header indicating the fallback behavior (#2534)
* Add a new home feed-api wrapper and give a header indicating the fallback behavior

* Sneak in a quick fix: use the correct text color in the delete modal

* Use imported constant
2024-01-15 15:03:54 -08:00
Cooper Edmunds 7df0b7ade1 Add accept-language header (#2457) 2024-01-15 13:19:47 -08:00
bnewbold 1d3e20220d rss: filter out replies server-side (#2518) 2024-01-15 13:13:15 -08:00
Mary 921b57d1b7 feat: show muted/blocked status on list card (#2523) 2024-01-15 13:11:48 -08:00
Paul Frazee 12a0ceee8a 1.64 (#2521)
* bump expo

* 1.64

* Update locale files
2024-01-12 17:40:04 -08:00
Paul Frazee b3b818671e Bump react-native@0.73.2 (#2519)
* Bump react-native@0.73.2

* Remove old patch
2024-01-12 17:04:08 -08:00
Paul Frazee 8cc1bd0c40 Create a profile record on new user (#2520)
* Create a profile record on new user

* Dont hold up account creation for the profile
2024-01-12 17:01:14 -08:00
Stanislas Signoud (Signez) 46d0d911e1 Improve French localization thanks to reviews
Thanks to @fenarinarsa for all the review work!
2024-01-12 23:04:37 +01:00
Stanislas Signoud (Signez) 6734bc325d Translate more strings in French 2024-01-12 19:55:53 +01:00
Mary 40c757afa9 fix: truncate long email address (#2493) 2024-01-12 10:44:24 -08:00
Mary a0e345fa01 fix: set html lang according to app language (#2496) 2024-01-12 10:42:28 -08:00
Eric Bailey 11f6ff7cbe Ensure sessions and tokens are synced between tabs (#2498)
* Ensure sessions and tokens are synced between tabs

* Send clear account to sentry for monitoring
2024-01-12 10:39:21 -08:00
Eli Mallon c0261fc940 package.json: cp --verbose doesn't exist on macos (#2501) 2024-01-12 10:25:00 -08:00
Paul Frazee 95d771b3a5 Suggest post language correction (#2486)
* feat: suggested language

* fix: wording correction

* Factor out SuggestedLanguage into a separate component

* Tighten the language-suggestion confidence to avoid false positives

* Tweak the copy and UI

* Add function fallbacks for safari

---------

Co-authored-by: Mary <pineapplecreamcheese@skiff.com>
2024-01-12 10:20:17 -08:00
Paul Frazee 998ee29986 (optional) In app browser (#2490)
* add expo web browser + modal

* add in app browser option to settings

* don't show toggle on web

* Tweak browser-choice UIs

---------

Co-authored-by: Samuel Newman <mozzius@protonmail.com>
2024-01-12 10:19:56 -08:00
Stanislas Signoud (Signez) 73f4866f15 Extract new strings to translate in French 2024-01-12 16:47:52 +01:00
Mary 7f4d3dc999 feat: from:me search syntax 2024-01-12 09:56:14 +07:00
dan b147f7ae8a Toggle minimal shell on any scroll for web (#2499) 2024-01-11 10:44:56 -08:00
Foysal Ahamed 3662259c5b New report type, appeal (#2455) 2024-01-10 23:16:45 -08:00
Max Ignatenko 17f7c36edf Update Ukrainian translation (#2469)
Co-authored-by: Ukrainians <github-actions@github.com>
2024-01-10 23:16:16 -08:00
Mary ca7ec9eec0 fix: don't set autocomplete on search input (#2482) 2024-01-10 23:11:03 -08:00
Minseo Lee 5cc46241d7 Reorder the locales alphabetically and correct the name for Indonesian (#2483) 2024-01-10 23:07:47 -08:00
Mary 0b2daa787c Use the RichText facets when copying post text (#2481)
* feat: serialize rich text to string

* feat: wire richTextToString to copy post text
2024-01-10 22:56:45 -08:00
Eric Bailey f7b01c3542 Add expired log (#2456)
* Add expired log

* Add service
2024-01-10 22:52:46 -08:00
bnewbold 231c528c88 remove deprecated search.bsky.social code (#2461) 2024-01-10 22:52:22 -08:00
Paul Frazee ce1e6518a2 Increase the number of lines for quote posts from 6 to 20 (#2489) 2024-01-10 22:51:54 -08:00
Hailey 6ec6d522e8 fix rendering of external in quote embeds (#2464) 2024-01-10 22:36:47 -08:00
Paul Frazee 7ab4be6f7d Reduce polling (#2465)
* Move profile and preference polling to polls-on-foreground

* Refetch prefs on feeds screen refresh since polling no longer occurs

* Reduce notifications polling by 50% if there's already an unread

* Disable feed polling if we know we have content

* Disable the hard refresh after 1 hour in case it's the cause of the random feed refresh bug

* Fix types
2024-01-10 22:27:14 -08:00
Mary 0442dcc1a0 fix: add the appropriate color-scheme for dark mode (#2480) 2024-01-10 20:56:21 -08:00
Ansh c75771047c compile Post as an action (#2460) 2024-01-09 15:43:56 -08:00
Stanislas Signoud 008893b911 Internationalize more strings (#2440)
Co-authored-by: Ansh <anshnanda10@gmail.com>
2024-01-09 14:37:15 -08:00
Noritada Kobayashi aeeacd10d3 Mark more texts for localization (#2436) 2024-01-10 02:23:34 +05:30
Max Ignatenko 592133db58 Update Ukrainian translations (#2439) 2024-01-10 02:18:26 +05:30
Danni d7f4e1391c Add Indonesian localization (#2356)
* Add Indonesian (id) locale

* Add Indonesian translation messages

* Update team number and add some translation

* Update for better ID translation

* Apply suggestions from code review

Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
Co-authored-by: Mary <148872143+mary-ext@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>

* Apply suggestions from code review

Co-authored-by: Mary <148872143+mary-ext@users.noreply.github.com>

* Change translation post to postingan

* Update translation

* Fix error

* Apply suggestions from code review

Co-authored-by: Mary <148872143+mary-ext@users.noreply.github.com>

* Add Thinkbyte1024 and mary-ext to language team ID

* Update username to lowercase

---------

Co-authored-by: Aditya Dirgantara <ccoremapd@icloud.com>
Co-authored-by: Mary <148872143+mary-ext@users.noreply.github.com>
Co-authored-by: Ansh <anshnanda10@gmail.com>
2024-01-10 02:17:48 +05:30
Hailey dda5ca27fe add expandable context to composer when replying to post (#2419)
* add expand replyTo text with animation

* add images, quote to replyTo

* support withmedia

* adjust layout

* add embed to all needed openComposer calls

* adjust gap

* organize imports
2024-01-08 21:37:12 -08:00
Paul Frazee 153c25e1fe Add stable gutters to settings page 2024-01-08 20:51:56 -08:00
Paul Frazee bb3d9868f9 Merge branch 'settings-web' of https://github.com/rahulyadav5524/social-app into main 2024-01-08 20:46:52 -08:00
Eric Bailey a5b474895a Application Layout Framework (#1732)
* Initial library setup

* Add docblocks

* Some cleanup

* New storybook

* Playing around

* Remove silly test, use for...in

* Memo

* Memo

* Add hooks example

* Tweak colors, bit of cleanup

* Improve macro handling

* Add some more examples

* Rename for better diff

* Cleanup

* Add nested context example

* Add todo

* Less break more perf

* Buttons, you get the idea

* Fix test

* Remove temp colors

* Add a few more common macros

* Docs

* Perf improvements

* Alf go brrrr

* Update breakpoint handling

* I think it'll work

* Better naming, better code

* Fix typo

* Some renaming

* More complete pass at Tailwind naming

* Build out storybook

* Playing around with curves

* Revert "Playing around with curves"

This reverts commit 6b0e0e5c9d.

* Smooth brain

* Remove outdated docs

* Some docs, fix line-height values, export tokens
2024-01-08 19:43:56 -06:00
Eric Bailey 0ee0554b86 Do not nuke session on unknown backend errors (#2399)
* Do not nuke session on unknown backend errors

* Restore existing functionality

* Use new event

* Kick user out to sign in

* Remove unstable
2024-01-08 15:59:55 -08:00
Eric Bailey c1e8abfb77 Fix splash config (#2452)
* Don't use mask for android at all

* Handle reduced motion

* Add dark splash

* Add dark config

* Try more config

* Duplicate config

* Ensure splash config is applied
2024-01-08 14:55:47 -08:00
Hailey cb9ed35cf6 convert prefix to lowercase in actor autocomplete query (#2431) 2024-01-08 13:56:47 -08:00
Hailey 928a626c2e support intl tenor links (#2438)
* support intl tenor links

* update test cases
2024-01-08 13:55:48 -08:00
Eric Bailey 9eeff2cc5c Splash: reduce motion + dark mode (#2448)
* Don't use mask for android at all

* Handle reduced motion

* Add dark splash

* Add dark config

* Fix android version code

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2024-01-08 13:47:25 -08:00
Paul Frazee fcfebda469 Bump android app version code 2024-01-08 12:10:30 -08:00
Eric Bailey da575a6379 Don't use mask for android at all (#2445)
* Don't use mask for android at all

* Remove old Android check
2024-01-08 12:09:30 -08:00
Minseo Lee 15f3c679aa Update Korean localization (#2432)
* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po

* Update messages.po
2024-01-08 23:48:18 +05:30
Rahul Yadav e3e13a362f Fixed same issue 2024-01-07 20:21:15 +05:30
Rahul Yadav 9fabf28cab Fixed import issue 2024-01-07 20:17:45 +05:30
Rahul Yadav 66e5cccb87 Removed unused code 2024-01-07 19:53:00 +05:30
Rahul Yadav 218fdde8d9 Removed unused code 2024-01-07 19:50:12 +05:30
Rahul Yadav abc65a9347 Fixed scroll issue 2024-01-07 19:47:36 +05:30
Eric Bailey 56021ccda5 Use android mode, fix fallback (#2437) 2024-01-05 13:53:59 -06:00
Maison da Silva f65bbe36f5 Update for Version 1.63 Português (BR) (#2435)
* Update for Version 1.63

* Update Date
2024-01-05 23:33:12 +05:30
Max Ignatenko bc067295b8 New translations messages.po (Ukrainian) (#2422) 2024-01-05 17:22:04 +05:30
Noritada Kobayashi 98885656a3 Update Japanese localization (addition + language code correction) (#2423) 2024-01-05 17:20:54 +05:30
Paul Frazee 6e8650e2eb 1.63 2024-01-04 17:40:28 -08:00
Paul Frazee 0dae24e78f Additional embed sources and external-media consent controls (#2424)
* add apple music embed

* add vimeo embed

* add logic for tenor and giphy embeds

* keep it simple, use playerUri for images too

* add gif embed player

* lint, fix tests

* remove links that can't produce a thumb

* Revert "remove links that can't produce a thumb"

This reverts commit 985b92b4e6.

* Revert "Revert "remove links that can't produce a thumb""

This reverts commit 4895ded8b5.

* Revert "Revert "Revert "remove links that can't produce a thumb"""

This reverts commit 36d04b517b.

* properly obtain giphy metadata regardless of used url

* test fixes

* adjust gif player

* add all twitch embed types

* support m.youtube links

* few logic adjustments

* adjust spotify player height

* prefetch gif before showing

* use memory-disk cache policy on gifs

* use `disk` cachePolicy on ios - can't start/stop animation

* support pause/play on web

* onLoad fix

* remove extra pressable, add accessibility, fix scale issues

* improve size of embed

* add settings

* fix(?) settings

* add source to embed player params

* update tests

* better naming and settings options

* consent modal

* fix test id

* why is webstorm adding .tsx

* web modal

* simplify types

* adjust snap points

* remove unnecessary yt embed library. just use the webview always

* remove now useless WebGifStill 😭

* more type cleanup

* more type cleanup

* combine parse and prefs check in one memo

* improve dimensions of youtube shorts

* oops didn't commit the test 🫥

* add shorts as separate embed type

* fix up schema

* shorts modal

* hide gif details

* support localized spotify embeds

* more cleanup

* improve look and accessibility of gif embeds

* Update routing for the external embeds settings page

* Update and simplify the external embed preferences screen

* Update copy in embedconsent modal and add 'allow all' button

---------

Co-authored-by: Hailey <me@haileyok.com>
2024-01-04 17:37:36 -08:00
Paul Frazee db62f27241 Reduce web requests (#2420)
* Stop auto-refetching app passwords and invites on an interval

* Don't poll for posts or notifs if the app/tab isnt focused
2024-01-04 17:36:27 -08:00
Paul Frazee 8a4a8af61c New user home feed fixes (#2421)
* Readd discover to default feeds for new users

* Fallback just to discover in home when mergefeed is disabled

* Always provide a cursor with mergefeed (no 'end of feed' condition)
2024-01-04 17:34:10 -08:00
Paul Frazee 34817628e1 E2E runner fixes (#2428)
* Fix mock-server run script

* Bump detox

* Replace fetch with node-native api
2024-01-04 17:33:57 -08:00
Rahul Yadav 454973f3cc fixed lint issue 2024-01-04 23:56:58 +05:30
Maison da Silva 67e70918e3 Recompile all locales (#2411) (#2416) 2024-01-04 03:56:47 +05:30
Max Ignatenko 401b3401c7 Add Ukrainian localization (#2336) 2024-01-04 01:52:55 +05:30
Maison da Silva 1f38e9b197 Update Portuguese for Português (#2414) 2024-01-04 01:02:22 +05:30
Ansh 1fed517a17 Add Portuguese Localization (#2407)
* Create messages.

* Update helpers.test.ts

* Update helpers.ts

* Update i18n.ts

* Update i18n.web.ts

* Update languages.ts

* Update i18n.ts

* Update lingui.config.js

* Correct file name and remove unused variables!

* Update Language-Team

* Update Bump ios build

* Fix for Stop the user from posting before the link card finishes loading #2328

* Update based in model en

* Update last version lang

* Update messages.po tsx:160 and tsx:143

* Bump ios build number and android version code

* adjustment

* adjustment 100%

* Update Date

* Update Day for Merge

* Update Name Maison for Maison da Silva

* fix order of case

* fix lint

* add tag for BR portugese

* add tag for BR

* update `pt` to `pt-BR`

---------

Co-authored-by: Maison da Silva <maisonmdsgreen@hotmail.com>
2024-01-04 00:15:56 +05:30
Ansh 7299c730cf Recompile all locales (#2411) 2024-01-04 00:12:42 +05:30
Paul Frazee d49045b61b Fix to spanish localization file 2024-01-03 10:33:28 -08:00
Ansh 3bee621347 Enable Spanish Localization (#2405)
* add `es` to `lingui.config.js`

* update messages.po

* enable spanish localization
2024-01-03 10:14:36 -08:00
Eric Bailey 4baef7a2d5 Update IS_PROD check (#2337)
* Update IS_PROD check to work now and after federation

* Use correct sandbox PDS

* Just use simple check for now
2024-01-03 09:58:05 -08:00
Eric Bailey 1b0c73a2a3 Fix: Web design issues (#2377) (#2410)
* Fix web design issues

* Fix Right Nav width design issue

Co-authored-by: Rahul Yadav <52163880+rahulyadav5524@users.noreply.github.com>
2024-01-03 09:56:07 -08:00
Paul Frazee df277e5977 Multiple improvements to link cards and quote posts (#2398)
* fix canvas

* fix external link embed styles

* Use the same link-card style on web and mobile and give a little more height on desktop to the card images

* Use dark border on link embeds to match quote post style

* Fix the highlighting behavior on linkcards and quoteposts

---------

Co-authored-by: Hailey <me@haileyok.com>
2024-01-03 09:53:41 -08:00
Rahul Yadav 2c31e2a042 Fixed slider flicker issue when sliding in revese side (#2368) 2024-01-03 11:08:21 -06:00
Ansh a410aad23c Improve French Localization (#2404)
* update messages.po for french

* Update src/locale/locales/fr/messages.po

Co-authored-by: Stanislas Signoud <signez@stanisoft.net>

* change based on feedback

---------

Co-authored-by: Stanislas Signoud <signez@stanisoft.net>
2024-01-03 21:16:23 +05:30
Noritada Kobayashi 032a5bd8a7 Add and fix Japanese localization (#2374) 2024-01-03 20:20:41 +05:30
Stanislas Signoud 7f999d9ebd Improve French localization (#2393)
* Extract latest strings from the codebase

* Improve French translation

- Add missing translations
- Always use French guillemets («») when applicable
- Always add an article (le/la/l’) before nouns
- Use … character instead of three dots
- Change "Mettre en sourdine" into "Masquer", used in other products for "Mute" (and shorter)
- Change other usages of "Masquer" into its synonym "Cacher" to prevent confusion between concepts
- Shorten "Nouvelle publication" into "Nouv. publication" to prevent it overflowing in the main blue button
- Fixed other little errors

* Extract even newer strings from the codebase

* Translate latest new strings into French

* Move from publication to post in French localization
2024-01-03 20:09:45 +05:30
Noritada Kobayashi 61ef0a8242 Localize the option to make alt text mandatory (#2376) 2024-01-03 17:26:30 +05:30
Minseo Lee ffd08570a5 Add Korean localization (#2395)
* Create messages.po

* Add Korean localization
2024-01-03 17:04:21 +05:30
Hailey d4bb64c1e6 Fix various issues with screen dimension detection in external player (#2349)
* various dimension fixes

* use reactive hook for dimensions

* remove debug

* accurate dismissing of player
2024-01-02 22:36:43 -08:00
Mathieu Acthernoene db3bf784fb Remove splashscreen blink (#2378)
* chore: remove unused react-native-splash-screen package

* Fix splashscreen white blink
2024-01-02 22:21:17 -08:00
Eric Bailey 2f6f27c4fb Add some more logging (#2402)
* Add a few logs

* Report unknown create account errors separately

* Downgrade to warn

* Nvm
2024-01-02 22:11:04 -08:00
Paul Frazee d95972c9ff Rework alt-text input to use bottom sheet (#2355)
* Rework alt-text input to use bottom sheet

* Add translations
2024-01-02 15:14:09 -08:00
Paul Frazee 0842df3675 Merge branch 'haileyok-fix/android-image-picker-patch' into main 2024-01-02 12:54:06 -08:00
Paul Frazee 21f7cf216a Add patch explanation md 2024-01-02 12:53:52 -08:00
Paul Frazee eeafd03ddf Remove intermediate build files from patch 2024-01-02 12:52:36 -08:00
Paul Frazee bb17d2d23b Merge branch 'fix/android-image-picker-patch' of https://github.com/haileyok/social-app into haileyok-fix/android-image-picker-patch 2024-01-02 12:34:11 -08:00
Hailey c1dc0b7ee0 emoji picker improvements (#2392)
* rework emoji picker

* dynamic position

* always prefer the left if it will fit

* add accessibility label

* Update EmojiPicker.web.tsx

oops. remove accessibility from fake button
2024-01-02 12:16:28 -08:00
Paul Frazee e460b304fc Merge branch 'haileyok-fix/android-splash-hackfix' into main 2024-01-02 11:57:43 -08:00
Paul Frazee 43ac20881f Add comment 2024-01-02 11:57:27 -08:00
Hailey cb6e164cd2 adjust api level 2023-12-31 16:14:24 -08:00
Hailey 87245480d4 who the hell knows 2023-12-31 16:05:07 -08:00
Rahul Yadav d9e68d1604 Show setting header in web 2023-12-30 14:46:27 +05:30
Hailey 54e6ed8ebc ensure no more than four assets, show toast if more 2023-12-29 22:00:52 -08:00
Hailey a4aefcc8f8 allow multiple fix 2023-12-29 21:53:17 -08:00
Hailey 478defce6e patch expo-image-picker to support "browse" 2023-12-29 21:42:18 -08:00
Noritada Kobayashi 4e9e92f976 Localize options in "Thread Preferences" screen (#2373) 2023-12-30 01:15:13 +08:00
Paul Frazee 1f037a0b43 Bump ios build number and android version code 2023-12-28 19:05:50 -08:00
Paul Frazee b9fc152749 Remove the KeyboardAvoidingView in account creation (close #2333) (#2366)
* Remove the keyboardavoidingview in account creation (close #2333)

* Smaller pad on desktop/tablet
2023-12-28 19:05:17 -08:00
Paul Frazee 7634b581dd 1.62 2023-12-28 15:52:38 -08:00
Paul Frazee 9e330d2c6a Create account tweaks (#2365)
* Disable autocomplete, autocapitalize, and autocorrect in create account login

* Add username textContentType to login to try to prompt password manager more regularly

* Fix type
2023-12-28 15:48:55 -08:00
Paul Frazee 709b0b6002 Fix sizing of the leftnav new post btn (#2248) 2023-12-28 15:47:39 -08:00
Paul Frazee 759d3f11b8 Use memory caching for android lightbox (#2354) 2023-12-28 15:47:05 -08:00
Paul Frazee 2a369e7e47 Disable page-transition animations on android (#2352) 2023-12-28 15:46:50 -08:00
Paul Frazee 0d960c58ba Disable BlurView on android (#2351)
* A couple of small tweaks

* Force the UI to re-render by setting a key

* Disable to blurview on android

* Remove hackfix
2023-12-28 15:46:37 -08:00
Eric Bailey 705f9b61ef Handle birth dates as UTC, handle locale formatting (#2363)
* Enforce UTC for birthdate picker

* Handle locales

* Remove log

* Add a second snap point to the date input in case text is zoomed

* Guard against bad dates

* Log message

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-28 14:13:51 -08:00
Paul Frazee 23c9c8977b Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-12-28 13:43:01 -08:00
Paul Frazee c9704f447d Merge branch 'mozzius-web-search' into main 2023-12-28 13:42:18 -08:00
Paul Frazee 363929b1a7 Fix desktop styles a bit 2023-12-28 13:41:23 -08:00
Paul Frazee 47127ce0ab Merge branch 'web-search' of https://github.com/mozzius/bluesky-official-app into mozzius-web-search 2023-12-28 13:27:02 -08:00
Paul Frazee 6e7098e456 Disable spanish translation until it's more thoroughly reviewed (#2362)
* Disable spanish translation until it's more thoroughly reviewed

* missed a line
2023-12-28 13:03:54 -08:00
Hailey f0532865ce minor search screen ux improvements (#2264)
* handle taps while keyboard is displayed

* dismiss keyboard on drag when searching feeds

* dismiss on drag and persist taps on suggested follows

* add hitslop to clear button

* add hitslop to cancel button

* dismiss keyboard on drag when searching users

* hit slop for feed search clear button

* move import
2023-12-28 12:58:28 -08:00
Paul Frazee 40a110c541 Temporarily disable the german translation (#2360) 2023-12-28 12:07:08 -08:00
Eric Bailey b326e1d3bd Web dropdowns (#2358)
* Split out web dropdown

* Remove unused

* Remove unused style

* Close on escape

* Reduce chance of opening while scrolling

* Tune web dropdown styles

* Fix type

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-28 11:47:33 -08:00
SnackpackWayne 52cb777c94 Merge branch 'main' into patch-1 2023-12-27 22:38:01 +01:00
Noritada Kobayashi f402f33a02 Mark more text as translatable (#2284) 2023-12-27 09:27:32 -08:00
Eric Bailey c91b9efccb Remove patched color scheme code (#2340) 2023-12-27 09:19:47 -08:00
snek 929987f806 support multiple og:image tags (#2305) 2023-12-27 18:13:53 +01:00
Paul Frazee b5d53ef0b9 Fix missing avatar moderation in replies (#2325) 2023-12-27 08:53:39 -08:00
Paul Frazee e1ba649560 Fixes to feed load triggers (#2323)
* Add soft-reset support to ProfileFeed and ProfileList

* Fix: correctly unsubscribe the notifications soft-reset listener
2023-12-27 08:53:24 -08:00
Paul Frazee 8b6ecf6bff Protect against react key duplicates (close #2278) (#2309)
* Fix duplicate react keys in post search

* Protect against duplicate react keys in feeds
2023-12-27 08:49:39 -08:00
Paul Frazee 0c9dc2163a Fix: only show appeal CW item on moderated posts (#2312)
* Fix: only show appeal CW item on moderated posts

* Add appeal cw control to feed view o fposts
2023-12-27 08:48:23 -08:00
Paul Frazee 6e001dbf1c A couple notifications fixes (#2327)
* Clear the app badge notif count on markallread

* Fix like notifications on custom feeds
2023-12-27 08:47:45 -08:00
Paul Frazee 3b240db0c0 Stop the user from posting before the link card finishes loading (#2328)
* Stop the user from posting before the link card finishes loading

* Add localization of error messages
2023-12-27 08:47:26 -08:00
Noritada Kobayashi e27ffc850a Make Japanese localization improvements (#2285)
* Make Japanese l10n improvements

* Update messages.po

---------

Co-authored-by: Ansh <anshnanda10@gmail.com>
2023-12-27 20:39:15 +05:30
Paul Frazee b2b4ef858b Correctly load spanish localization (#2324) 2023-12-26 17:54:57 -08:00
SnackpackWayne 538c67cc33 Update messages.po
German translation updated.
2023-12-27 01:03:17 +01:00
Hailey 7e3e6caa10 use the window hostname on web for twitch embeds (#2311) 2023-12-26 12:02:37 -08:00
Paul Frazee cd7a25fd42 Bump android version code 2023-12-25 14:23:22 -08:00
Paul Frazee 614cb23489 Bump ios build number 2023-12-24 15:20:11 -08:00
Paul Frazee 51506efca6 Apply post-hide to quote posts (#2302) 2023-12-24 15:19:37 -08:00
Paul Frazee e3d9a4f782 Bump ios build 2023-12-24 14:33:24 -08:00
Paul Frazee bc5e28057a Update some brand assets (#2301) 2023-12-24 14:32:23 -08:00
Paul Frazee d2a4d580a8 Add policy links to left nav and settings page (#2300) 2023-12-24 14:29:23 -08:00
Eric Bailey b199405134 Hide posts tool (#2299)
* Set up hidden posts persisted state

* Wrap moderatePost

* Integrate hidden posts into moderation

* Complete hide-post behaviors

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-24 14:24:56 -08:00
Paul Frazee 28e0df595f Fix: dont incorrectly mark a feed empty based only on the first page (#2298) 2023-12-24 11:48:50 -08:00
Eric Bailey 2c37d47cf0 Patches and compiled i18n (#2297)
* Update patches

* Bump translations, remove ignored files
2023-12-24 11:32:25 -08:00
Paul Frazee fe0a35cbea Fix blank home screen (close #2281) (#2291) 2023-12-24 10:00:29 -08:00
Paul Frazee 64bad57eb3 1.61 (initial build) 2023-12-23 16:26:55 -08:00
Eric Bailey 93f5bb3b1f Bump react-native to 0.73.1, expo to 50 (#2214)
* Bump to react-native@0.73, bump expo@next

Includes bumps for all expo deps and dev dependencies. Updates
react-native patch and others, and removes the babel-preset-expo patch.

* Remove duplicate Splash ref

* Bump more deps

* Properly install expo-notifications

* Bump webview dep

* Bump packages according to expo fix; remove pager-view patch as it is no longer needed

* Don't access expo-camera from Web

* Fix crypto dep on web

* Fix some type issues

* Build esnext modules to support dynamic imports

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-23 15:44:38 -08:00
Paul Frazee 7d6b7d2fa6 Fix some account filtering behaviors (#2290)
* Fix: don't filter ProfileCards out of certain lists

* Fix: don't filter ProfileCards and autocomplete based on mutes
2023-12-23 15:16:23 -08:00
bnewbold b922b83820 yet more RSS tweaks (#2289)
* rss: full URL in RSS link; use request Host in URLs

Full URL syntax on request from third parties.

Using the actual request host should fix issues with non-bsky-production
deployments. It is HTTPS-only, so doesn't work perfectly for local dev.

* rss: make /profile/{handle}/rss an HTTP redirect

Motivation is easier discoverability of RSS feed.
2023-12-23 12:38:21 -08:00
bnewbold ee20092735 rss: isPermaLink (case-sensitive) (#2271) 2023-12-22 13:06:52 -08:00
Ansh c1d7d9a41b Add Spanish localization (#2267)
* add french localization

* get dynamic import to work

* fix broken strings

* fix bug

* fix tests

* build files again

* add german locale

* Add german translated strings

* update file details

* fix plural case errors

* make german translations work

* add 'es' as a locale option

* enable spanish translations

* fix spelling mistake
2023-12-22 23:30:39 +05:30
bnewbold a5c151c041 bskyweb: iterate on RSS format, based on feedback (#2269)
Thanks to Dave Winer (@scripting)!
2023-12-22 17:07:25 +01:00
Bryan Lumbantobing 64dc8ff342 Update localization.md (#2263) 2023-12-21 14:58:42 -08:00
dan bc31da47fd Consolidate List props a bit (#2216) 2023-12-21 14:56:45 -08:00
Eric Bailey 987c543727 Increase log dump to 500, dump everything in there (#2268) 2023-12-21 14:43:57 -08:00
Hailey fedb94dd70 3rd party embed player (#2217)
* Implement embed player for YT, spotify, and twitch

* fix: handle blur event

* fix: use video dimensions for twitch

* fix: remove hack (?)

* fix: remove origin whitelist (?)

* fix: prevent ads from opening in browser

* fix: handle embeds that don't have a thumb

* feat: handle dark/light mode

* fix: ts warning

* fix: adjust height of no-thumb label

* fix: adjust height of no-thumb label

* fix: remove debug log, set collapsable to false for player view

* fix: fix dimensions "flash"

* chore: remove old youtube link test

* tests: add tests

* fix: thumbless embed position when loading

* fix: remove background from webview

* cleanup embeds (almost)

* more refactoring

- Use separate layers for player and overlay to prevent weird sizing issues
- Be sure the image is not visible under the player
- Clean up some

* cleanup styles

* parse youtube shorts urls

* remove debug

* add soundcloud tracks and sets (playlists)

* move logic into `ExternalLinkEmbed`

* border radius for yt player on native

* fix styling on web

* allow scrolling in webview on android

* remove unnecessary check

* autoplay yt on web

* fix tests after adding autoplay

* move `useNavigation` to top of component

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-21 14:33:46 -08:00
Paul Frazee 7ab188dc1f Bump react-native-drawer-layout@4.0.0-alpha.3 (#2261) 2023-12-21 14:29:23 -08:00
Ansh df73f83538 Add French localization (#2265) 2023-12-22 03:30:24 +05:30
Paul Frazee d068cb1939 Web composer improvements (#2257)
* Keep the emoji picker in the tablet width (close #1880)

* Support pressing tab to select a mention (close #1831)
2023-12-20 16:55:29 -08:00
Paul Frazee 39a5a1e311 Fix the is13 check in account creation (close #2258) (#2259) 2023-12-20 13:44:52 -08:00
Kev 238ff58db9 Fix image is cropped in alt text modal (#1963) 2023-12-20 12:59:43 -08:00
Elie Michel 2a94e6a2ef Restore autofocus on emoji drop down (#1821) 2023-12-20 10:33:00 -08:00
Samuel Newman 4a93a5b6ad Invalid handle autocomplete (#2251)
* refactor invalid handle check from a previous PR to use util function

* add invalid handle check to `prefixMatch`
2023-12-20 09:50:50 -08:00
Samuel Newman 946b2c9163 add yarn intl:compile to postinstall hook (#2250) 2023-12-20 09:45:30 -08:00
Samuel Newman 71b6a447ab show search in centre column on desktop 2023-12-20 11:02:39 +00:00
Eric Bailey e87065f042 Try to fix scroll indicator on Feeds page (#2245)
* Try to fix scroll indicator on Feeds page

* Apply to List
2023-12-19 10:32:17 -08:00
Paul Frazee c00c5efb34 Bump build numbers for ios and android 2023-12-18 15:11:51 -08:00
Paul Frazee 7814106909 Bop it (#2244)
Co-authored-by: Eric Bailey <git@esb.lol>
2023-12-18 14:49:59 -08:00
Eric Bailey 14c77255dd Use same source for pinned feeds on Home and tab/sidebars (#2235) 2023-12-18 14:42:37 -08:00
Eric Bailey 8df4fd4d57 Move label appeal to post dropdown (#2236)
* Move appeal from post to dropdown

* Translate

* Tweak copy on the appeal label modal

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-18 14:38:59 -08:00
Eric Bailey 726bbd2b6d Add search button to logged out view (#2237) 2023-12-18 14:31:47 -08:00
Eric Bailey 699749cb75 Set numberOfLines for Android text input (#2238)
* Set numberOfLines for Android text input

* Let's go with 4
2023-12-18 14:28:29 -08:00
Eric Bailey d05658f224 Tweak splash speed (#2241) 2023-12-18 14:27:03 -08:00
Ansh 1cf5a0b0fc Fix 2231 Modal overlap on double modal open (#2239)
* add same multiple snapPoints to Confirm modal

* snapToIndex instead of confirm
2023-12-18 14:26:43 -08:00
Ansh 7af4825911 fix Create Account metrics (#2242) 2023-12-18 14:24:06 -08:00
bnewbold 3e3a72a366 basic public RSS feed for profiles (#2229)
* web: initial implementation of profile RSS feed

* re-work RSS feed to use DID in URL, not handle

Shouldn't have RSS feeds break when folks change handle.

* rss: tweak XML
2023-12-18 23:52:39 +04:00
Samuel Newman edc6bdb4d6 use s.likeColor everywhere (#2234) 2023-12-18 09:47:17 -08:00
Ansh 81fefabe1a Add credits to localization doc (#2233)
* change name of file to localization

* run `intt:build`
2023-12-18 09:24:31 -08:00
Eric Bailey 9ff1828437 Fix Logotype fill for dark mode (#2230)
* Fix fill of Logotype in dark mode

* Update default Logotype fill
2023-12-18 09:20:58 -08:00
Eric Bailey 47ff3e8e3f Hide label appeal on self-labeled posts (#2232)
* Hide appeal for self-labeled post, update copy

* Use correct logic
2023-12-18 09:16:33 -08:00
Hima 38e65fbe75 Fix & Add: Japanese Translation (3) (#2226) 2023-12-18 22:43:20 +05:30
bnewbold 8da5a375a5 tweak social card meta yet again (#2228)
- handle missing content (PWI opt-out) better
- use opengraph "article" and "profile" types, not just website for everything
- fix timestamps, and used indexed at not created at
2023-12-18 20:24:25 +04:00
bnewbold 0c47f6dc98 bskyweb: update golang indigo dep (from May!), and some small devex tweaks (#2227)
* bskyweb: update deps to current indigo

* bskyweb: refactor handles to flatten control flow, and update to current indigo

* go Makefile: remove --debug (not working)

* bskyweb: default to public appview API instance

* make: do internationalization build as part of build-web
2023-12-18 19:31:48 +04:00
Hima b942da162a Fix: Some display issues (#2219)
* Update LeftNav.tsx

* Update RightNav.tsx
2023-12-18 18:28:58 +05:30
Paul Frazee 9f82441c37 Update splash screen tagline, update translations, bump ios build number 2023-12-17 15:28:04 -08:00
Paul Frazee 77437194e0 Bump ios build number 2023-12-17 11:57:23 -08:00
Eric Bailey 25f0527ad6 Tweaks (#2225)
* Gradient

* Tweak animation speed

* Rotate

* Linear

* Linear
2023-12-17 11:55:47 -08:00
Paul Frazee aac13aafce 1.60 2023-12-15 15:57:06 -08:00
Paul Frazee 2a712630b4 Traffic reduction and tuned caching strats (#2215)
* Update the feed to only check latest on focus after 30s, but to do a full reset on focus after 1 hour to avoid very stale data

* Remove the isFeedPublic query

* Fix: avoid double next-page fetches

* Reduce some poll intervals to reduce server load

* Guard against double-fires of fetchNextPage

* Reduce polling on blurred screens
2023-12-15 15:49:07 -08:00
Eric Bailey dd074371cf Super secret changes don't look (#2218)
* Swap in new assets

* Refine
2023-12-15 15:40:22 -08:00
Eric Bailey ce6d3fa0e1 Fix android icon dims (#2213) 2023-12-14 15:55:53 -08:00
Eric Bailey a0d006a1ac Log post creation failures (#2205) 2023-12-14 15:55:35 -08:00
Eric Bailey 1111108efe Some brand, some pwi (#2212)
* Add logo to left nav in logged out

* Protect last routes

* Hide links in left nav, hide nav

* Replace bottom bar for pwi

* Remove same links from drawer

* Hide reply prompt

* Allow search
2023-12-14 15:46:27 -08:00
Eric Bailey 7897dd24a1 🤫 (#2211)
* Add new assets

* Add splashiness

* Add butter icon, spread it

* Cream together eggs, sugar, and vanilla

* Hi, I'd like to place and order. Yeah, none pizza with left beef, plz.

* test

* Refine animation

* tweak

* tweak

* tweak

* Tweak

* Simplify

* Cleanup

* Fix android logo

---------

Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
2023-12-14 14:48:40 -06:00
Paul Frazee 075ffdf583 PWI behavior updates (#2207)
* Enable PWI

* Disable access to feeds on PWI

* Remove feeds nav item from drawer when signed out

* Replace discover feed on home with a CTA

* Wire up the sign in and create account buttons to go straight to their respective screens

* Give a custom ScreenHider interface for no-pwi

* Add side borders on desktop to the screen hider

* Filter accounts in the autocomplete according to mod settings

* Trim replies in the post thread that are pwi opt-out

* Show 'learn more' on the content hider when no-override is enabled

* Apply the moderation filter on profile cards

* Disable post search on logged-out view

* Update locale files

* Bump api pkg

* Ensure feeds with no posts don't show as NSFPublic

* Fix types

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2023-12-14 10:31:49 -08:00
dan 7fd7970237 Make scroll handling contextual (#2200)
* Add an intermediate List component

* Fix type

* Add onScrolledDownChange

* Port pager to use onScrolledDownChange

* Fix on mobile

* Don't pass down onScroll (replacement TBD)

* Remove resetMainScroll

* Replace onMainScroll with MainScrollProvider

* Hook ScrollProvider to pager

* Fix the remaining special case

* Optimize a bit

* Enforce that onScroll cannot be passed

* Keep value updated even if no handler

* Also memo it
2023-12-13 18:48:20 -08:00
noriaki watanabe fa3ccafa80 Add i18n setup in build instructions (#2206) 2023-12-13 18:17:59 -08:00
Paul Frazee 5fa43530f6 Revert change to how notifications are loaded on mobile 2023-12-13 13:48:49 -08:00
Paul Frazee a713f77e03 1.59 2023-12-13 12:48:26 -08:00
Paul Frazee 8245e56747 Feed bugfixes (#2204)
* Dont show both an error and empty message in the feed

* Add a sanity check when attempting to fill the first 30
2023-12-13 12:17:14 -08:00
Paul Frazee e3ba014be0 More notifications improvements (#2198)
* On mobile, never replace the notifs under the user due to focus events

* Use the server's seenAt response to calculate isRead state locally
2023-12-13 12:16:55 -08:00
Paul Frazee eecf04489f Rework the rightnav overflow behavior to not obscure the scroll region (#2199) 2023-12-13 09:59:27 -08:00
Ansh 001bbb41bb Hotfix: Merge conflict in translation file (#2203)
* remove unused translation files

* re-run extract and compile
2023-12-13 19:48:53 +05:30
dan 0e3218db7d Memoize usePalette (#2201) 2023-12-13 07:09:07 +00:00
Eric Bailey b1f9454f1d Add fallback to email reminder modal (#2193)
* Add fallback to email reminder modal

* Add more debug
2023-12-12 15:18:38 -08:00
dan bf9cedb67b Clean up pager refs to fix crash (#2195) 2023-12-12 15:11:20 -08:00
dan 5c701f8e0b Re-rendering improvements for like/unlike (#2180)
* Add a few memos

* Memo PostDropdownBtn better

* More memo

* More granularity

* Extract PostContent

* Fix a usage I missed

* oops
2023-12-12 13:50:43 -08:00
Eric Bailey a5e25a7a16 Add largeHeap to AndroidManifest.xml (#2191) 2023-12-12 13:40:24 -08:00
Jaz bc42747297 Don't create embeds of profiles/posts from users who ask not to be sh… (#2189)
* Don't create embeds of profiles/posts from users who ask not to be shown in public views

* Formatting cleanup

* Bump workflow file to build an image for this branch
2023-12-12 13:10:13 -08:00
Ansh 9ab0ff6f1d add scrollview to moderation screen (#2187) 2023-12-12 13:07:59 -08:00
Ansh 1289b161a1 disable modal profile popup android (#2188) 2023-12-12 13:07:30 -08:00
Paul Frazee 870505cbe2 Go back to content-driven slice keys in feeds (#2190)
* Go back to deterministic react keys

* Quick fix to cases when custom feeds serve empty responses
2023-12-12 13:07:09 -08:00
Ansh 90647fe7cf Japanese localization (#2003)
* add japanese to list of languages

* add japanese translations

* change `jp` to `ja`

* minor changes to Japanese translation

* minor changes to Japanese translation

* update japanese strings with feedback

* Update languages.ts

* Extract translations

* Gitignore new compiled file

* allow switching to japanese

---------

Co-authored-by: Jake Gold <jake@blueskyweb.xyz>
Co-authored-by: Eric Bailey <git@esb.lol>
2023-12-13 01:12:19 +05:30
dan 27561ae79f Fix View Full Thread (#2181) 2023-12-12 11:31:02 -08:00
Eric Bailey 2f8e7b2656 Make right nav scrollable on short screens (#2186) 2023-12-12 11:20:06 -08:00
Eric Bailey e7141a77d8 Stub broadcast channel for unspported contexts (#2175) 2023-12-12 11:19:27 -08:00
Eric Bailey c6ab6e8b8e i18n settings improvements (#2184)
* Handle language selector

* Improve type safety

* Add a little more safety

* Update comment
2023-12-12 12:42:11 -06:00
Paul Frazee d82b1a1047 1.58 2023-12-11 15:52:56 -08:00
Paul Frazee c5f8909ecf Double the footer on the list members flatlist 2023-12-11 15:52:00 -08:00
Eric Bailey fc85901a46 Fix links in profiles (#2178)
* Resolve links in profile bios

* Improve solution

* On mobile, dont disable pointer events on the bio richtext

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-11 15:34:25 -08:00
Eric Bailey bae63f9bf0 Patch bad migration, sanitize bad value (#2179) 2023-12-11 15:34:18 -08:00
Paul Frazee 3592f6f50b Hide the mobile reply control if outside the threadgate (#2177) 2023-12-11 15:11:36 -08:00
Eric Bailey 9a59525b73 Revise FeedSourceCard load state to allow deletion for failures (#2172)
* Revise FeedSourceCard load state to allow deletion for failures

* Translate

* Remove test error feed

* Fix missing uri param

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-11 14:48:22 -08:00
Eric Bailey 586c2417a8 Handle failed pinned feed fetches when rendering list of pinned feeds (#2173) 2023-12-11 14:31:05 -08:00
dan 52ffd6aabb Don't validate embeds when traversing cache (#2174) 2023-12-11 14:30:32 -08:00
Ansh 0f7dbbba4a dismiss keyboard when threadgate settings are opened (#2161) 2023-12-11 13:55:40 -08:00
Eric Bailey f7ec7f700e Clarify MyList filter intent (#2167) 2023-12-11 13:55:14 -08:00
Paul Frazee 99cf6b626f Additional reductions in request traffic (#2169)
* Dont poll for new content on profiles

* Drop the whenAppReady query after new post to reduce traffic overhead

* Reduce getPosts calls in notifs to only use them when needed
2023-12-11 13:53:37 -08:00
dan ab04074197 Fix scroll on native (#2170) 2023-12-11 13:47:41 -08:00
dan 8929ff526f Fix scroll on profile lists/feeds (#2168) 2023-12-11 13:24:31 -08:00
Paul Frazee b82c5177b9 Reduce calls to getFeedGenerator and getFeed (#2166)
* Reduce calls to getFeedGenerator by the mergefeed

* Dont run end-of-follows mergefeed requests until actually at the end of the feed

* build AWS container

---------

Co-authored-by: Jake Gold <jake@blueskyweb.xyz>
2023-12-11 12:58:34 -08:00
Paul Frazee 3d229b5fd6 Bump ios and android build numbers 2023-12-10 12:25:14 -08:00
Paul Frazee f46b598ac6 Fix mock-server init 2023-12-10 12:04:24 -08:00
Paul Frazee 28fa5e4919 Add "Who can reply" controls [WIP] (#1954)
* Add threadgating

* UI improvements

* More ui work

* Remove comment

* Tweak colors

* Add missing keys

* Tweak sizing

* Only show composer option on non-reply

* Flex wrap fix

* Move the threadgate control to the top of the composer
2023-12-10 12:01:34 -08:00
Paul Frazee f5d014d4c7 Bump ios build 2023-12-09 17:21:03 -08:00
Eric Bailey 940a627996 Fix empty state width (#2157) 2023-12-09 15:10:53 -08:00
Eric Bailey 69a0a0bc41 Remove (#2156) 2023-12-09 15:10:29 -08:00
Eric Bailey 97b54b51c6 Add back isInitialLoad to session (#2155) 2023-12-09 15:10:12 -08:00
Paul Frazee 6b3eb401b0 Multiple notifications fixes (#2154)
* Dont reset notifications feed on push notification event

* Dont separate notifications by read state to avoid jank

* On notifications screen focus, check latest and only rerender if not scrolled down

* Reuse the cached notifs page when its not stale

* Bump ios build number

* Improve comments

* Change the 'mark all read' condition to avoid firing too early
2023-12-09 15:09:31 -08:00
Paul Frazee d854e88218 Bump ios build number 2023-12-08 16:31:08 -08:00
Paul Frazee 102094b10a Poll for new posts on app foreground (#2152) 2023-12-08 16:30:19 -08:00
Eric Bailey 9c0c18d5d0 Use new filter for Posts tab on profile (#2150)
* Use new filter for Posts tab on profile

* Update deps

* Remove log
2023-12-08 16:29:53 -08:00
Paul Frazee e1b1720cad Tweak the PWI opt-out copy again (#2153)
* Tweak the PWI ot-out copy again

* Update .po files
2023-12-08 16:26:20 -08:00
Eric Bailey 0270ada908 Fix quote post moderation check (#2149)
* Fix quote post moderation check

* Restore the ContentHider check

* Apply the content hider to quote posts

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-08 16:15:07 -08:00
Eric Bailey 1b8b1b2ed1 Await app view when handling blocks mutes for lists (#2151)
* Await app view when handling blocks mutes for lists

* Do it right this time
2023-12-08 15:55:35 -08:00
Paul Frazee 565979e71f Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-12-08 14:01:20 -08:00
dan 7b686b5592 Add manual per-page memoization to post select (#2146) 2023-12-08 13:57:00 -08:00
Eric Bailey 61fa3d506c Close account switcher before logging out (#2148)
* Close account switcher before logging out

* Add comment
2023-12-08 13:00:19 -06:00
Ansh 528b4b5017 Clear unused locales (#2147)
* add some missing intl strings

* remove locales that are not used
2023-12-09 00:15:05 +05:30
Paul Frazee 282879b645 Bump ios build number 2023-12-07 17:21:10 -08:00
Paul Frazee 7b50331188 Various search fixes (#2145)
* Add posts-search query to shadow cache search

* Update user search to use correct endpoint

* Fix: include cursor in post search
2023-12-07 17:20:17 -08:00
Paul Frazee 448a403c81 Stop using the cached notification page (#2142) 2023-12-07 17:16:39 -08:00
Paul Frazee 7de5c341a9 Update pwi opt-out language (#2143) 2023-12-07 17:16:23 -08:00
dan 00731f62fe Fix bad merge in translations (#2144) 2023-12-07 17:08:23 -08:00
Ansh 9d51886e43 Fixes issue with (#2119)
* Allow going directly to password input screen when switching accounts and password is required

* Revise state handling

* Handle logged out states, enable clearing requestedAccount

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2023-12-07 16:53:50 -08:00
Eric Bailey afca4bf701 Add more breadcrumbs (#2141) 2023-12-07 16:48:23 -08:00
Eric Bailey 1975f4936a Fix invites used order, adjust layout (#2139) 2023-12-07 16:30:41 -08:00
Paul Frazee 040ce03215 Grab-bag of post-feed improvements (#2140)
* Sanity check against cases where empty pages may occur

* Use the mergefeed as an emergency fallback to an empty feed

* Check for new posts on focus
2023-12-07 16:30:04 -08:00
Paul Frazee 52a0cb8fac Add label appeal tool to posts and accounts (#2124)
* Add label appeal tool to posts and accounts

* Fix translations
2023-12-07 14:45:50 -08:00
dan 794015aef8 Navigate Home on account switch (#2138) 2023-12-07 14:28:49 -08:00
Eric Bailey 1b5989ac51 Allow blocking/muting to curational lists, unpinning to modlists (#2121)
* Add un-pinning of modlist

* Allow muting/blocking of curational lists

* Tweak icon

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-07 14:00:09 -08:00
Eric Bailey b7a5294123 Improve account switching on mobile (#2135)
* Improve account switching on mobile

* Clarify comment
2023-12-07 13:44:59 -08:00
Eric Bailey 174a1622c9 Hoist moderation, attempt to fill feed up to 30 (#2134)
* Move moderatePost up to feed query

* Attemt to fill page up to 30

* Add the 'ensure full page' behavior to notifs

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-07 13:44:22 -08:00
Paul Frazee 940fc0ea5c Disable animation on scrollToTop for web (#2137) 2023-12-07 13:41:02 -08:00
Eric Bailey f115969f50 Fix double sep (#2136) 2023-12-07 13:06:41 -08:00
Paul Frazee aeafa3a8cd Fix: remove replies to deleted and blocked posts from feeds (#2130) 2023-12-07 13:04:22 -08:00
Paul Frazee 972bc1bd88 Increase the maximum ratio of images from 5:1 to 10:1 (#2131) 2023-12-07 13:03:34 -08:00
Paul Frazee 5b19e2b90b Completely disable the RQ cache in post-thread (#2133) 2023-12-07 13:02:51 -08:00
Eric Bailey cdc1d08267 Apply color theme to HTML page itself (#2132) 2023-12-07 11:00:44 -08:00
Paul Frazee 17c27581b6 Add PWI opt-out toggle (#2122)
* Add PWI opt-out toggle

* Bump @atproto/api@0.7.0

* Tweak copy

* Bump lockfile

* Fix layout on ios

* Tweak copy more

* Fix types

* Tweak copy some more
2023-12-07 10:32:55 -08:00
Eric Bailey 261a935747 More session improvements (#2129)
* More session improvements

* Drop resume session retries from 3 to 1

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-07 10:25:55 -08:00
Eric Bailey a0b9fd799b Disable sentry in dev (#2128) 2023-12-07 09:46:33 -06:00
Paul Frazee 80ada4d20a Increment ios build number 2023-12-06 22:18:26 -08:00
Paul Frazee 00e1e56a7d Treeview: more UI tweaks (#2125)
* Treeview: more UI tweaks

* Only show treeview when there are branching replies

* Fix types
2023-12-06 22:17:38 -08:00
Eric Bailey 818c6ae879 Add tests for migration and persisted state (#2118)
* Add tests for migrate

* Add test for persisted.init

* Add legacy transform test

* Set NODE_ENV for testing

* Mock logger

* Set expo var to test
2023-12-06 16:41:05 -08:00
dan 07fe058577 Move analytics out of critical path (#2117)
* Remove analytics provider, simplify hook

* Fix wrong import being used by feed

* Remove early bind

* Create client lazy on first use
2023-12-06 13:06:54 -08:00
Eric Bailey a924df4dcd Refetch some data on an interval (#2114)
* Match refetch intervals to stale time

* Lower refetch interval for own-profile
2023-12-06 12:31:54 -08:00
Paul Frazee 47771b9066 Update pwi endpoint (#2116) 2023-12-06 12:20:39 -08:00
dan 6335be14e1 Move analytics out of init (#2115)
* Remove listenSessionLoaded from analytics

* Move analytics init call to navigation ready

* Remove zod dependency from analytics

* Mirror changes on the web

* Delete listenSessionLoaded

* Only set up listeners once
2023-12-06 12:04:05 -08:00
dan 748212e000 Remove getSession waterfall (#2112) 2023-12-06 18:32:14 +00:00
dan 20a46c8cff Enable structural sharing for preference query (#2113) 2023-12-06 10:20:23 -08:00
dan de38595a7a Split notification init, add cleanup (#2102)
* Inline never-imported export

* Remove pretense at handling cleanup

* Extract per-session listener to a function

* Split notifications.init() from notifications.onSessionLoaded()

* Tweak forked code to be more similar

* Remove unnecessary guards

* Split notifications.onSessionLoaded in two

* Always use getAgent()

* Remove dep on listenSessionLoaded, add cleanup
2023-12-06 10:05:59 -08:00
dan 7d158f82fb Optimize Drawer re-renders (#2108) 2023-12-06 09:50:06 -08:00
Ansh 8e541d753a Check Analytics (#2106)
* fix sign in event tracking

* add missing analytics events

* add more missing analytics

* fix like and unrepost event tracking

* reset onEndReachedThreshold
2023-12-06 09:45:01 -08:00
dan 7229cda5a5 Throttle non-critical Sentry messages (#2110)
* Throttle non-critical Sentry messages

* Run all timers in tests
2023-12-06 16:32:47 +00:00
Paul Frazee df55c5fdeb Bump ios build number 2023-12-05 22:57:47 -08:00
Paul Frazee 2571432875 Disable react-native-screen freezing to test performance implications (#2109) 2023-12-05 22:56:20 -08:00
Paul Frazee 3107bb07c9 Bump ios build number 2023-12-05 21:07:20 -08:00
Ansh 78e459d06f Add missing translations and fix react key error in MyLists.tsx (#2103)
* add missing translations

* fix key errors in MyLists

* Update UserAddRemoveLists.tsx
2023-12-05 18:27:38 -08:00
Eric Bailey e6bda92b20 Surface raw server error if exists (#2096)
* Surface raw server error if exists

* Update copy

* Update translation files

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-05 18:25:32 -08:00
Eric Bailey 7f3324d4a4 Improve error handling in dev-only (#2095) 2023-12-05 18:23:48 -08:00
Eric Bailey 570b78c32e Fix self-threads filter logic (#2091) 2023-12-05 18:22:06 -08:00
Paul Frazee 41fd6eb95b Fix some types 2023-12-05 18:21:15 -08:00
Paul Frazee 2ad0d059ac More treeview UI tweaks (#2093)
* Improve tree-view spacing consistency and always include one reply bar level

* Reduce expanded post avi size
2023-12-05 18:18:53 -08:00
Paul Frazee 511d5d999b Update to actions/setup-node@v4 (#2105)
* Update to actions/setup-node@v4

* Add a retry to the yarn install step
2023-12-05 18:18:28 -08:00
Paul Frazee 712cd3fde5 Perf: Include quote posts in the post-thread placeholder (#2104) 2023-12-05 18:17:03 -08:00
Paul Frazee accb25ccf2 Perf: Dont initial-render full thread on mobile (#2101) 2023-12-05 18:02:33 -08:00
Paul Frazee 826b841e10 Fix: correctly identify if the screen is focused when handling soft resets on post feeds (#2100) 2023-12-05 18:01:08 -08:00
Eric Bailey 3c8036587e Improvements to persisted state migration (#2098)
* Fix session email/emailConfirmed types, update usage for safer access

* Handle fallback better, better errors

* Better handling, add test

* Add test for default data

* Remove fallback, not needed, update logs
2023-12-05 19:59:34 -06:00
Eric Bailey a915a57b10 Prevent invalid locale from being loaded (#2099) 2023-12-05 17:51:50 -08:00
dan fab9f839d0 Fix email confirmation dialog on startup (#2097)
* Move init time logging to a fn, add guard

* Fix email confirmation dialog on startup
2023-12-06 00:28:11 +00:00
Paul Frazee e7f973852f Signup flow minor UI fixes (#2094)
* Fix layout of no-policy notice

* Fix spacing
2023-12-05 13:35:42 -08:00
Eric Bailey 5f553c29df E2E 🟢 (#2092)
* Add logged out e2e ctrl, fix login test

* Fix log handling via env vars in expo

* Fix create account test

* Upgrade dev-env

* Fix home screen tests

* Fix composer tests

* Fix curate-lists tests, split in two

* Fix invite codes test

* Fix curate-lists tests

* Give up on mergefeed test

* Fix mod lists

* Fix app view url

* Fix profile tests

* Fix profile test with hack

* Keep using globals

* Fix two more

* Fix thread view

* Better skip for merge feed

* Revert debug code
2023-12-05 14:50:56 -06:00
dan ed5a97d0fa Fix jump when toggling suggestions (#2090) 2023-12-05 09:13:09 -08:00
Paul Frazee 37d94ca0e3 Bump ios build number 2023-12-04 18:01:49 -08:00
Paul Frazee 48f5cebc80 Update feeds on post created (#2085) 2023-12-04 17:58:45 -08:00
Paul Frazee bdb2bfdd83 Rename Posts & Replies to Replies (#2087) 2023-12-04 17:56:41 -08:00
Paul Frazee 74e0b73db5 Add back ignore-filters-for behaviors (#2086) 2023-12-04 17:54:39 -08:00
Paul Frazee d07ea64434 Fix: correctly partial-match when calling truncateAndInvalidate() (#2088) 2023-12-04 17:53:22 -08:00
Paul Frazee 160055e4f9 Merge branch 'CooperEdmunds-2047-last-active-tab' into main 2023-12-04 16:33:18 -08:00
Paul Frazee 81c525f2b2 Merge branch '2047-last-active-tab' of https://github.com/CooperEdmunds/social-app into CooperEdmunds-2047-last-active-tab 2023-12-04 16:30:08 -08:00
Paul Frazee f1b69a332a Tune treeview thread mode to have consistent spacing (#2078) 2023-12-04 16:25:17 -08:00
Eric Bailey 4f171be9bf Fix bottom space on feeds (#2081)
* Fix bottom space on feeds

* Translate

* Handle web better
2023-12-04 16:24:51 -08:00
Paul Frazee 6e2eaa746d Optimistically update the pager tab bar on swipe (#2083) 2023-12-04 16:06:15 -08:00
Paul Frazee 8e2cfa52de Typefix 2023-12-04 15:08:34 -08:00
Eric Bailey f1cfea5786 Add back pinning functionality to ProfileList (#2084) 2023-12-04 15:52:51 -06:00
Eric Bailey 094a58490f Handle feedgen 429 (#2066)
* Handle feedgen 429

* Translate
2023-12-04 13:27:48 -08:00
Cooper Edmunds 17c58d40ff Track active page using string instead of index 2023-12-04 16:10:03 -05:00
Paul Frazee 37cafb080b Fix: distinguish between post media and quotes with the moderation hider (#2075)
* Fix: distinguish between post media and quotes with the moderation hider

* Type fixes
2023-12-04 12:53:25 -08:00
Paul Frazee a46059ca46 Improve the post-hiders and the header alerts (#2074)
* Improve the post-hider and the header alerts

* Adjust the contenthider (icon, font size)
2023-12-04 12:51:08 -08:00
Paul Frazee 971c402788 Add PWI build flag (#2082) 2023-12-04 12:45:40 -08:00
dan a687d3f028 Allow scroll by dragging profile header (#2068) 2023-12-04 12:03:32 -08:00
Paul Frazee 9562a80908 Allow posts with just an external link (#2079) 2023-12-04 11:59:59 -08:00
Paul Frazee e47c3dbe0e Tweak the loading placeholders to use the full space and position better (#2072) 2023-12-04 11:59:27 -08:00
Paul Frazee a01497fed4 Hackfix to composer focus on web (#2057) 2023-12-03 18:45:25 -08:00
Paul Frazee 0ab19b45a2 Tweak layout a bit more 2023-12-02 17:56:04 -08:00
Paul Frazee 07afcab6b2 Merge branch 'fix-jump-in-suggested-follows-tabbar' of https://github.com/tarikfp/social-app into uiwork-reflow-issue 2023-12-02 17:52:21 -08:00
dan 2698a6b50b Fix show suggested button color (#2069) 2023-12-01 16:23:00 -08:00
dan bb22ebd588 Fix scroll jump on Back (#2067) 2023-12-01 14:05:10 -08:00
Eric Bailey 9dec9d7276 Only poll feed when feed page is focused (#2064)
* Do no poll when screen is not focused

* Avoid polling unless focused

* Handle homepage in background

* Fix the intl:check to ignore comments in diffs

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-12-01 13:40:50 -08:00
Cooper Edmunds 9a13fe50cc Use lastActiveTab from AsyncStorage for non-desktop 2023-12-01 15:18:25 -05:00
Eric Bailey f80bd30ef4 Better handle feed auth failures (#2060)
* Better handle feed auth failures

* Add comment
2023-12-01 09:29:50 -08:00
Eric Bailey edc9ac272c Add Lingui check to CI (#2058)
* Install lingui eslint plugin, ignore compiled files

* Add lingui step to Lint workflow

* Run check in other job

* Add compile step to web build

* Temp: add a new string to test with

* Add message

* Revert "Temp: add a new string to test with"

This reverts commit ef5459d00c.

* Un-track compiled files

* Add check scripts to package.json, build step

* Make sure to compile translations prior to test/typecheck

* Rename scripts
2023-12-01 09:14:10 -08:00
Paul Frazee b05cf9f3c1 Bump ios build number 2023-11-30 18:57:18 -08:00
Paul Frazee f8c46c08ca Improve unread notif tracking (#2056) 2023-11-30 18:56:55 -08:00
Paul Frazee 826cbbd4bf Maintain some feed data to avoid needless glimmers (#2054) 2023-11-30 18:49:23 -08:00
dan 9fa90bb8d9 Optimize pager rendering (#2055)
* Pull out and memoize PagerTabBar

* Avoid invalidating onScroll and add throttling

* Make isScrolledDown update non-blocking

* Fix types
2023-12-01 02:11:05 +00:00
Paul Frazee 23ad3ad98b Various fixes (#2053)
* Fix invite code translations (plural api not availabe in ios)

* Speed up the composer animation a smidge
2023-11-30 17:03:38 -08:00
Cλctys 5839d2a30c Fix scuffed web styles caused by overlapping viewport breakpoint boundaries (#1985)
* fixed lack of styles on 1300px web viewport width by adjusting tablet breakpoints

* fixed lack of styles on 800px web viewport width by adjusting mobile breakpoints

* changed `maxWidth` values in viewports to `n - 1` format
2023-11-30 16:14:36 -08:00
Paul Frazee 85b2b390df Merge branch 'mozzius-invite-code-warning' into main 2023-11-30 16:13:23 -08:00
Paul Frazee 1755c2e538 Merge branch 'invite-code-warning' of https://github.com/mozzius/bluesky-official-app into mozzius-invite-code-warning 2023-11-30 16:13:16 -08:00
Paul Frazee dcbceb5d9f Merge branch 'mozzius-copy-link' into main 2023-11-30 16:06:07 -08:00
Paul Frazee 21af10bc3d Merge branch 'copy-link' of https://github.com/mozzius/bluesky-official-app into mozzius-copy-link 2023-11-30 16:05:34 -08:00
Samuel Newman 9375532698 Add enter/exit animations to modals on web (#2042)
* add reanimated layout animations to modals

* reorder imports

* pass context to scroll handler patches
2023-11-30 16:02:46 -08:00
Eric Bailey abe61b7517 Disable OTA for now (#2052) 2023-11-30 15:48:07 -08:00
Eric Bailey 28f8999252 Beep boop (#2051) 2023-11-30 13:53:34 -08:00
Eric Bailey 76a3c66f54 Eric/profile feeds list (#2049)
* Fix profile feedgens view

* Fix profile lists view

* Translate
2023-11-30 13:40:49 -08:00
Eric Bailey 47b0d36b73 Hide normal mute if muted by list, and invalidate profile query upon list mute (#2048)
* Hide normal mute if muted by list, and invalidate profile query upon list mute

* Prevent profile flashing
2023-11-30 13:40:01 -08:00
dan 46b63accb8 Rewrite the shadow logic to look inside the cache (#2045)
* Reset

* Associate shadows with the cache

* Use colocated helpers

* Fix types

* Reorder for clarity

* More types

* Copy paste logic for profile

* Hook up profile query

* Hook up suggested follows

* Hook up other profile things

* Fix shape

* Pass setShadow into the effect deps

* Include reply posts in the shadow cache search

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-11-30 13:35:58 -08:00
Paul Frazee 143fc80951 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-11-30 12:47:48 -08:00
Paul Frazee ee82e78d5c Fix missing export in e2e version 2023-11-30 12:47:40 -08:00
dan cb193a827d Fix lag when switching tabs (#2046) 2023-11-30 19:57:54 +00:00
Samuel Newman b7599e5bea generate messages 2023-11-30 17:12:21 +00:00
Samuel Newman b164f151cc Merge remote-tracking branch 'upstream/main' into invite-code-warning 2023-11-30 17:11:51 +00:00
Samuel Newman ee5d7a63ce update messages 2023-11-30 17:09:59 +00:00
Samuel Newman c06611fb71 show informative message when token scope is wrong 2023-11-30 17:09:10 +00:00
Samuel Newman 5c78b2266f add "copy link" text 2023-11-30 16:40:19 +00:00
Paul Frazee fcd22d4ccb Adjust stale-caches and dont group read&unread notifs together (#2041)
* Dont group read & unread notifications together

* Remove and reduce some stale cache times

* Keep the staleTime on the post-feed

* Bring back the load-bearing staletime on profile
2023-11-29 20:27:39 -08:00
Paul Frazee c3e97fee1d Bump ios build number 2023-11-29 20:12:55 -08:00
Paul Frazee a03f57c8c3 Apply feed preferences (react-query refactor) (#2040)
* Actually implement the feed tuners hook

* Move feed-tuner pass into select() to have it apply immediately on change
2023-11-29 20:11:01 -08:00
Eric Bailey 3e1b2346ee Close modals if switching to unauthed account (#2039) 2023-11-29 19:28:18 -08:00
Eric Bailey b83fa95793 Handle nsfw feeds in public view (#2035)
* Handle nsfw feeds in public view

* Translate

* Refactor, new approach

* Translate

* Copy

* Translate

* Revert changes to Feed

* Remove unused retry

* Translate
2023-11-29 19:27:58 -08:00
Eric Bailey 005fc7cc38 Disable retrying globally (#2038) 2023-11-29 17:50:14 -08:00
Paul Frazee c07d27645f Merge branch 'CooperEdmunds-2011-link-in-feeds-tab-bar' into main 2023-11-29 17:49:46 -08:00
Paul Frazee 1140b05b83 Slightly less verbose variable 2023-11-29 17:37:15 -08:00
Paul Frazee 4c7b9652db Merge branch '2011-link-in-feeds-tab-bar' of https://github.com/CooperEdmunds/social-app into CooperEdmunds-2011-link-in-feeds-tab-bar 2023-11-29 17:35:57 -08:00
Paul Frazee dc53ef1ec1 Merge branch 'CooperEdmunds-2011-default-pin-feed-on-add' into main 2023-11-29 17:25:36 -08:00
Paul Frazee 6e30c339da Merge branch '2011-default-pin-feed-on-add' of https://github.com/CooperEdmunds/social-app into CooperEdmunds-2011-default-pin-feed-on-add 2023-11-29 17:25:29 -08:00
Paul Frazee 630637874d Fix state lifecycle management with post-feed query, solving the duplicate key issue (#2034)
* Assign keys to feed slices via a counter, to enable duplicate items in the feed if needed

* Move post-feed query state into the query's page params to consistently bind their lifecycles
2023-11-29 18:58:14 -06:00
Cooper Edmunds 3fbac466ac Update home-screen tests related to feeds 2023-11-29 19:28:35 -05:00
Eric Bailey a59d235e8b Improve feed reordering with optimistic updates (#2032)
* Optimisticaly update order of saved feeds

* Better show disabled state for pin button

* Improve loading/disabled states

* Improve placeholder

* Simplify loading components
2023-11-29 16:17:27 -08:00
Eric Bailey 3ca4bd805a Re-enable fetch monkey-patch (#2036)
* Re-enable fetch monkey-patch

* Reorder
2023-11-29 16:00:13 -08:00
Cooper Edmunds 34759798eb Stop adding whats-hot for new users 2023-11-29 15:24:14 -05:00
Cooper Edmunds 8ceabe2a11 Conditionally render feeds link in feeds tab bar 2023-11-29 14:49:18 -05:00
Cooper Edmunds ed391c346d Add hasPinnedCustomFeedOrList to usePinnedFeedsInfos hook 2023-11-29 14:23:19 -05:00
Paul Frazee 4b3ec54add Fix infinite query reloading behavior (reset, not invalidate) (#2031)
* Reset, not invalidate, notification queries

* Reset, not invalidate, feed queries
2023-11-29 11:15:35 -08:00
Paul Frazee 9239efac9c Refactor the notifications to cache and reuse results from the unread-notifs checks (#2017)
* Refactor the notifications to cache and reuse results from the unread-notifs checks

* Fix types
2023-11-29 10:20:14 -08:00
Ansh 620e002841 Show logged out view when adding accounts (#2020)
* show logged out view when adding accounts

* Handle existing signed-in account

* Show which account is currently logged in

* Fix showing toasts

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2023-11-29 10:11:06 -08:00
Paul Frazee 6fe2b52f68 Get more rigorous about getAgent() consistency (#2026)
* Get more rigorous about getAgent() consistency

* Update the feed wrapper API to use getAgent() directly
2023-11-29 10:10:04 -08:00
Cooper Edmunds ca357ecbcf Add pinOnSave and use it in discover feeds list 2023-11-29 09:05:26 -05:00
dan 9fb2c29c67 Disable RQ structural sharing (#2022) 2023-11-28 20:48:08 -08:00
Eric Bailey 6f7032d42b Full send Sentry (#2018)
* Update build profiles, sentry config

* Enable sentry

* Ok actually enable in dev

* Remove debug

* Add TF build

* Fix typo

* Remove debug

* Remove unecessary config

* Fix typo

* Set env in Expo

* Remove scripts

* Clarify

* Replace invalid character

* Align on release/dist

* Add build version

* Just use package version

* Align dist
2023-11-28 21:49:37 -06:00
dan b778017000 Fix memory leak on mobile web tab navigation (#2021)
* Add navigationAction prop to Link

* Bottom bar should use navigate() action
2023-11-28 22:48:00 +00:00
Eric Bailey bb9d340d42 Fix pinned feeds mutation issue (#2016) 2023-11-28 12:50:41 -06:00
Eric Bailey 0b2c85b967 Fix pinned feeds re-ordering (#2014) 2023-11-28 09:04:15 -08:00
Eric Bailey bdabfa9d38 Guard against following tab stub being used un-authed (#2013) 2023-11-28 08:44:25 -08:00
Eric Bailey cf1b0b1881 Handle other feed auth response (#2012) 2023-11-28 08:43:25 -08:00
Paul Frazee 60886b76c8 Bump ios build number 2023-11-27 17:46:13 -08:00
Eric Bailey 17a183514a Ensure we use following feed if merge is disabled (#2005) 2023-11-27 17:42:02 -08:00
Paul Frazee f580d4daf0 Restore post-thread caching behaviors (react-query refactor) (#2010)
* Rework resolve-did and resolve-uri queries to be smarter about cache reuse

* Precache handle resolutions

* Remove old unused code

* Load placeholder threads from the post-feed and notifications-feed queries

* Remove logs

* Fix bad ref

* Add loading spinners to the cache-loading thread view

* Scroll replies into view when loading threads

* Add caching within a thread

* Fix: dont show bottom border when the child spinner is active
2023-11-27 17:41:30 -08:00
Eric Bailey d4714baf13 [PWI] Home (#2007)
* Fix up home page

* Fix spacing

* Remove unused default tab

* Update logic
2023-11-27 17:17:09 -08:00
Eric Bailey a741a201b9 Don't check unread if session doesn't exist (#2008) 2023-11-27 16:40:20 -08:00
Eric Bailey 26bbe07068 Add more debugging to auth (#2009) 2023-11-27 16:39:53 -08:00
Eric Bailey 5fd2d36273 Filter out blocked posts from thread view (#2006) 2023-11-27 12:41:53 -08:00
Paul Frazee cd43adf698 Two fixes to react-key generation (#2004)
* Fix missing react keys in ListMembers

* Fix react key construction for the posts feed
2023-11-27 12:30:41 -08:00
Eric Bailey 1dc017367e Make sure logger serializes errors (#2001) 2023-11-27 10:28:21 -08:00
Eric Bailey 6758755316 Nav home after switch accounts (#2002) 2023-11-27 10:27:38 -08:00
Eric Bailey 828e53d533 Fix soft reset scroll on profile (#1998) 2023-11-27 09:43:05 -06:00
Ansh 0079030244 create build v1.57 (#2000) 2023-11-26 13:46:31 -08:00
Eric Bailey 08355e5166 Raise levels of some logs during pre-release (#1994) 2023-11-26 13:44:30 -08:00
Eric Bailey 4a59227459 Fix translation strings (#1995) 2023-11-26 13:44:17 -08:00
Eric Bailey 3007c1dc8a Fix bad references in account switcher (#1999) 2023-11-26 13:44:08 -08:00
Eric Bailey 486fb72798 Fix double border, improve load state (#1997) 2023-11-26 13:43:49 -08:00
Eric Bailey e9a11114d3 [PWI] Clarify different ways of clearing current account/logout (#1991)
* Clarify different ways of clearing current account/logout

* Reorder log
2023-11-24 17:41:42 -06:00
Eric Bailey 20b699a008 Fall back for non-public feeds (#1988) 2023-11-24 17:37:28 -06:00
Eric Bailey 1bcbc0cf2a Fix onboarding web layout (#1990) 2023-11-24 16:40:07 -06:00
dan f2d164ec23 PWI: Refactor Shell (#1989)
* Vendor createNativeStackNavigator for further tweaks

* Completely disable withAuthRequired

* Render LoggedOut for protected routes

* Move web shell into the navigator

* Simplify the logic

* Add login modal

* Delete withAuthRequired

* Reset app state on session change

* Move TS suppression
2023-11-24 22:31:33 +00:00
Ansh 4b59a21cac Allow dynamic locale imports for web (#1971)
* allow dynamic locale imports for web

* remove unnecessary file
2023-11-24 12:35:25 -08:00
dan 43c8fb6f03 Fix missing effect cleanup (#1986) 2023-11-24 19:22:00 +00:00
dan 7ccbd14d5f Show feeds in PWI (#1984) 2023-11-23 19:43:23 +00:00
dan 4272d291a9 PWI: Profile (#1982)
* PWI: Profile

* Show replies conditionally

* Dismiss modals on auth action
2023-11-23 00:30:49 +00:00
Eric Bailey edf3114e47 Fixes 1731, compare URLs case-insensitive (#1980) 2023-11-22 17:20:35 -06:00
Eric Bailey ec819f06ce [PWI] Clean up logged out screen (#1978)
* Clean up logged out screen

* Better responsive styles
2023-11-22 16:53:25 -06:00
Eric Bailey 95f8bd8ddb [PWI] Misc (#1977)
* PostDropdownBtn

* Hide reply prompt

* Hide FABs
2023-11-22 16:53:11 -06:00
dan 08333002cc Implement "scroll to top" for profile tabs (#1973)
* Hook up scroll to top handlers

* Scroll and invalidate Feeds/Lists

* Fix index calc due to conditional tabs

* Reorder lines for clarity
2023-11-22 04:25:11 +00:00
Eric Bailey 3de1d556a9 [PWI] Feeds (#1970)
* Feeds page

* Hide save buttons on Feeds page

* ProfileFeed
2023-11-21 17:36:29 -06:00
Eric Bailey 8da10a5edc Search page (#1969) 2023-11-21 17:35:53 -06:00
Eric Bailey 47d2d3cbf2 [PWI] Shell (#1967)
* Sidebars

* Bottom bar

* Drawer

* Translate

* Spacing fix

* Fix responsive regression

* Fix nit
2023-11-21 16:58:13 -06:00
dan 4c4ba553bd Shadow refactoring and improvements (#1959)
* Make shadow a type-only concept

* Prevent unnecessary init state recalc

* Use derived state instead of effects

* Batch emitter updates

* Use object first seen time instead of dataUpdatedAt

* Stop threading dataUpdatedAt through

* Use same value consistently
2023-11-21 22:42:30 +00:00
Eric Bailey f18b9b32b0 PWI Base (#1964)
* Base work for public view

* Make default moderation settings more restrictive

* Fix type

* Handle showing sign-in on authed actions

* Fix hoc logic

* Simplify prefs logic

* Remove duplicate method

* Add todo

* Clean up RepostButton.web

* Fix x button color

* Add todo

* Retain existing label prefs for now, use separate logged out settings

* Clean up useAuthedMethod, rename to useRequireAuth

* Add todos

* Move dismiss logic to withAuthRequired

* Ooops add web

* Block public view in prod

* Add todo

* Fix bad import
2023-11-21 10:57:34 -06:00
Eric Bailey 71b59021b9 Add dev-only button to clear storage (#1965)
* Add dev-only button to clear storage

* Add legacy storage clearing too

* Use try/catch
2023-11-21 10:16:22 -06:00
Eric Bailey 3a21c02b8a Re-wrap forgot pw success in layout (#1966) 2023-11-21 10:04:23 -06:00
Ansh c5b6f88e9a Hindi Internationalization (#1914)
* get basic hindi support to work

* get web app language switcher in

* Refactor i18n implementation and remove unused
code

* add missing strings

* add dropdowns and modals missing strings

* complete all hindi translations

* fix merge conflicts

* fix legeacy persisted state

* fix data in RecommendedFeeds

* fix lint
2023-11-20 13:29:27 -08:00
Eric Bailey 019aae5f01 Improve dedupe logic on search suggestions (#1958) 2023-11-17 12:15:14 -08:00
dan 7c51a3931a Optimize notifications rendering (#1957) 2023-11-17 17:51:44 +00:00
dan d1c14940fb Add missing type (#1955) 2023-11-17 09:47:36 -08:00
Eric Bailey 0dfc039a47 Fix some key errors (#1951) 2023-11-17 11:34:27 -06:00
dan c858b58307 Do less work (#1953) 2023-11-17 09:31:26 -08:00
Eric Bailey 9c8a1b8a31 Fix some type errors (#1952)
* Fix some low-hanging type errors

* Override scrollRef types on profile
2023-11-17 11:08:45 -06:00
dan 6c8f043e37 Freeze inactive screens (#1949) 2023-11-16 22:20:08 -08:00
dan a8aed2c38e Use non-reactive callbacks for some methods (#1948)
* Use non-reactive callbacks for some methods

* Remove unnecessary state

* Use non-reactive callbacks for modals
2023-11-16 22:18:37 -08:00
dan a10adf8908 Add some memoization (#1947) 2023-11-16 18:52:41 -08:00
Paul Frazee e358c3cc30 Improve notification load behaviors (#1943)
* Dont use the stale cache for notifs-feed

* Add a delay to marking all read to avoid marking upcoming posts as read

* Trigger automatic notifications refresh when navigating to the tab, in certain conditions
2023-11-16 18:27:05 -08:00
Paul Frazee 357c752a21 Move the current agent to a global and reset RQ queries on agent change (#1946) 2023-11-16 18:26:22 -08:00
dan 3043b32468 Fix jumpy modal regression (#1945) 2023-11-16 18:01:51 -08:00
Paul Frazee c03c744008 Notifs refresh improvement (#1941)
* Show loading state in notifications

* Fix invalidation of notifs

* Move spinner below header

* Fix: dont show spinner on initial load
2023-11-16 15:50:57 -08:00
Eric Bailey 6f57192bd5 Revise cache times (#1942)
(cherry picked from commit 1be2060a2b)
2023-11-16 15:43:53 -08:00
Paul Frazee 1952705ded Disable refetchOnWindowFocus on react-query (#1936) 2023-11-16 15:42:37 -08:00
Eric Bailey 6dfb2a232f Caching heuristics (#1938)
* Tempfix profile load

* First pass at staleTime
2023-11-16 15:28:50 -08:00
dan f89dc63801 Add profile loading shim (#1940) 2023-11-16 23:23:58 +00:00
dan 22df70b3cc Fix blank feed (#1935)
* Split feed into two components

* Rm unused

* Add a spinner
2023-11-16 14:37:48 -08:00
dan 8475312422 Add a mutation queue to fix race conditions in toggles (#1933)
* Prototype a queue

* Track both current and pending actions

* Skip unnecessary actions

* Commit last confirmed state to shadow

* Thread state through actions over time

* Fix the logic to skip redundant mutations

* Track status

* Extract an abstraction

* Fix standalone mutations

* Add types

* Move to another file

* Return stable function

* Clean up

* Use queue for muting

* Use queue for blocking

* Convert other follow buttons

* Don't export non-queue mutations

* Properly handle canceled tasks

* Fix copy paste
2023-11-16 14:01:01 -08:00
Paul Frazee 54faa7e176 Remove deprecated models and mobx usage (react-query refactor) (#1934)
* Update login page to use service query

* Update modal to use session instead of store

* Move image sizes cache off store

* Update settings to no longer use store

* Update link-meta fetch to use agent instead of rootstore

* Remove deprecated resolveName()

* Delete deprecated link-metas cache

* Delete deprecated posts cache

* Delete all remaining mobx models, including the root store

* Strip out unused mobx observer wrappers
2023-11-16 12:53:43 -08:00
Paul Frazee e637798e05 Refactor account-creation to use react-query and a reducer (react-query refactor) (#1931)
* Refactor account-creation to use react-query and a reducer

* Add translations

* Missing translate
2023-11-16 11:16:31 -08:00
Paul Frazee 9f7a162a96 Refactor app passwords to use react-query (#1932) 2023-11-16 11:11:56 -08:00
Eric Bailey 310a7eaca7 Some me model cleanup (#1928)
* Replace me model in post dropdown btn

* Replace delete account logic

* Replace me model in bottom bar web

* Replace me model in bottom bar

* Replace me model in reply prompt

* Better fallback

* Fix reference

* Fix bad ref in bottom bar
2023-11-16 10:54:03 -08:00
Eric Bailey a652b52b88 Refactor ChangeHandle modal (#1929)
* Refactor ChangeHandle to use new methods

* Better telemetry

* Remove unused logic

* Remove caching

* Add error message

* Persist service changes, don't fall back on change handle
2023-11-16 09:16:16 -08:00
Eric Bailey e6efeea7c0 Refactor invites modal (#1930)
* Refactor invites modal

* Replace in drawer

* Delete stuff from me model
2023-11-16 08:40:31 -08:00
Paul Frazee 8a1fd160e6 Update UserInfoText component (#1927) 2023-11-16 08:19:08 -08:00
Paul Frazee a84b2f9f2f Close active elems (react-query refactor) (#1926)
* Refactor closeAny and closeAllActiveElements

* Add close lightbox

* Switch to hooks

* Fixes
2023-11-16 08:18:59 -08:00
Eric Bailey 0de8d40981 Misc cleanup (#1925)
* Remove unused prefs

* Cleanup

* Remove my-follows cache

* Replace moderationOpts in ProfileCard comp

* Replace moderationOpts in FeedSlice

* Remove preferences model
2023-11-15 18:35:58 -08:00
Paul Frazee e749f2f3a5 Factor lightbox out into hook/context (#1919) 2023-11-15 18:17:03 -08:00
Paul Frazee 03b20c70e4 Fix memo params causing tuner to lose state (#1924) 2023-11-15 17:42:15 -08:00
Eric Bailey 952f5033d0 Fixes analytics init on web (#1923) 2023-11-15 17:37:55 -08:00
Eric Bailey 610eeecd26 Fix onboarding follows (#1922) 2023-11-15 17:37:32 -08:00
Eric Bailey 8857ba70c6 Improve types (#1921) 2023-11-15 17:23:59 -08:00
Eric Bailey d8b26edb56 Remove post thread (#1920)
* Delete post-thread model

* Remove post-thread-item

* Remove unused types
2023-11-15 17:18:45 -08:00
Paul Frazee 6616b2bff0 Shell behaviors update (react-query refactor) (#1915)
* Move tick-every-minute into a hook/context

* Move soft-reset event out of the shell model

* Update soft-reset listener on new search page

* Implement session-loaded and session-dropped events

* Update analytics and push-notifications to use new session system
2023-11-15 17:17:50 -08:00
Eric Bailey f23e9978d8 Update post embed fetching to use new methods (#1916)
* Update post embed fetching to use new methods

* Use session agent
2023-11-15 17:09:13 -08:00
Eric Bailey 9bcd00b831 No need to await follows anymore, fix cold load search (#1918) 2023-11-15 17:08:08 -08:00
Eric Bailey fe1a7183fc Translate some things on search (#1917) 2023-11-15 19:00:43 -06:00
Eric Bailey 22b76423a0 Search page (#1912)
* Desktop web work

* Mobile search

* Dedupe suggestions

* Clean up and reorg

* Cleanup

* Cleanup

* Use Pager

* Delete unused code

* Fix conflicts

* Remove search ui model

* Soft reset

* Fix scrollable results, remove observer

* Use correct ScrollView

* Clean up layout

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-11-15 15:55:28 -08:00
Paul Frazee d5ea31920c Autocomplete updates (react-query refactor) (#1911)
* Unify the autocomplete code; drop fuse

* Persist autocomplete results while they're in progress

* Commit lockfile

* Use ReturnType helper

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2023-11-15 14:39:22 -08:00
dan 839e8e8d0a Post PostLikedBy and PostRepostedBy to RQ (#1913)
* Port PostRepostedBy to RQ

* Port PostLikedBy to RQ
2023-11-15 14:04:25 -08:00
dan e699df21c6 Port Profile Followers/Follows to RQ (#1893)
* Port user followers to RQ

* Port user follows to RQ

* Start porting FollowButton to RQ

* Fix RQ key

* Check pending

* Fix shadow and pending states

* Rm unused

* Remove last usage of useFollowProfile
2023-11-14 17:55:54 -08:00
Eric Bailey d1cb74febe Desktop user autocomplete search (#1906)
* Fix notification provider order, add comments

* Remove log

* Add actor typeahead handling

* Trim down desktop search styles and hooks

* Clean up moderation
2023-11-14 17:51:23 -08:00
Eric Bailey ab1ce078ec Fix openCamera, openCropped, lightbox model, and image model usages (#1908) 2023-11-14 17:46:46 -08:00
Eric Bailey 7d5e01f433 Fix profile list (#1907) 2023-11-14 17:45:38 -08:00
Paul Frazee e08d06f263 Fix image order in 4-image post embeds (close #1895) (#1904) 2023-11-14 17:10:58 -06:00
Eric Bailey 68767d597e Fix notification provider order, add comments (#1905)
* Fix notification provider order, add comments

* Remove log
2023-11-14 16:54:02 -06:00
Eric Bailey ab6e3f2c5d Fix self mention, resolve handle (#1903)
* Fix self mention, resolve handle

* Use queryClient

* Fix type

* Remove staleTime
2023-11-14 14:16:56 -06:00
Paul Frazee 8e4a3ad5b6 Add Shadow type (#1900) 2023-11-14 12:10:39 -08:00
Eric Bailey 00f8c8b06d Fix root sibling context issue (#1902) 2023-11-14 10:46:37 -08:00
Paul Frazee 0a26e78dcb Composer update (react-query refactor) (#1899)
* Move composer state to a context

* Rework composer to use RQ

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2023-11-14 10:41:55 -08:00
Paul Frazee c687172de9 Fix poll latest loop (#1901)
* Avoid pollLatest loop

* Set poll interval on profile feeds
2023-11-14 12:33:05 -06:00
Eric Bailey 3fde1bea1b Handle end of feed (#1898)
* Handle end of feed

* Add isFetching
2023-11-14 11:28:40 -06:00
Eric Bailey 4355f0fd9a Refactor onboarding suggested follows (#1897)
* Refactor onboarding suggested follows

* Fix error state, track call

* Remove todo

* Use flatmap

* Add additional try catch

* Remove todo
2023-11-14 11:25:37 -06:00
Paul Frazee a81c4b68fa Update Muted and Blocked accounts screens (react-query refactor) (#1892)
* Add my-blocked-accounts and my-muted-accounts queries

* Update ProfileCard to use the profile shadow cache and useModerationOpts

* Update blocked accounts and muted accounts screens
2023-11-13 17:30:56 -08:00
Paul Frazee 0501c2be77 Profile cleanup (react-query refactor) (#1891)
* Only fetch profile tab content when focused

* Fix keys

* Add missing behaviors to post tabs

* Delete old profile mobx model
2023-11-13 15:12:41 -08:00
Paul Frazee 47204d9551 Update profile preview to use react-query (#1890) 2023-11-13 14:57:53 -08:00
Paul Frazee 9fca7b3af6 Add feedgens tab to profile (#1889) 2023-11-13 14:46:19 -08:00
Eric Bailey b04748e703 Factor out store from post-feed query (#1888) 2023-11-13 14:07:18 -08:00
Eric Bailey 06eb8b9a4c Factor our feed source model (#1887)
* Refactor first onboarding step

* Replace old FeedSourceCard

* Clean up CustomFeedEmbed

* Remove discover feeds model

* Refactor ProfileFeed screen

* Remove useCustomFeed

* Delete some unused models

* Rip out more prefs

* Factor out treeView from thread comp

* Improve last commit
2023-11-13 13:53:57 -08:00
Paul Frazee a01463788d More profile refactor updates (#1886)
* Update the profile avatar lightbox

* Update profile editor

* Add dynamic likes tab

* Add dynamic feeds and lists tabs

* Implement lists listing on profiles
2023-11-13 13:29:33 -08:00
dan 8217761363 Fix jump for web pager (#1884) 2023-11-13 13:03:47 -08:00
dan bb4ed3cd49 Fix lint on main (#1885) 2023-11-13 13:01:26 -08:00
dan e1938931e0 Refactor profile screen to use new pager and react-query (#1870)
* Profile tabs WIP

* Refactor the profile screen to use react-query (WIP)

* Add the profile shadow and get follow, mute, and block working

* Cleanup

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-11-13 10:35:15 -08:00
Eric Bailey c3edde8ac6 More prefs cleanup (#1882)
* Update useHomeTabs

* Use queryClient to fetch

* Replace useHomeTabs and useDesktopRightNavItems

* Fix type error

* Some cleanup
2023-11-13 10:21:53 -08:00
Eric Bailey 37a2204483 Update clear account behavior, ensure agent is set (#1881) 2023-11-13 08:20:38 -08:00
Paul Frazee b445c15cc9 Refactor notifications to use react-query (#1878)
* Move broadcast channel to lib

* Refactor view/com/post/Post and remove temporary 2 components

* Add useModerationOpts hook

* Refactor notifications to use react-query

* Fix: only trigger updates in useModerationOpts when the values have changed

* Implement unread notification tracking

* Add moderation filtering to notifications

* Handle native/push notifications

* Remove dead code

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2023-11-12 18:13:11 -08:00
Eric Bailey c584a3378d Refactor My Feeds (#1877)
* Refactor My Feeds screen

* Remove unused feed UI models

* Add back PTR
2023-11-12 16:26:02 -08:00
Paul Frazee d9e0a927c1 Refactor lists to use new queries (#1875)
* Refactor lists queries to react-query

* Delete old lists-list model

* Implement list, list-members, and list-memberships react-queries

* Update CreateOrEditList modal

* First pass at my-follows and actor-autocomplete queries

* Update ListAddUserModal to use new queries, change to ListAddRemoveUsersModal

* Update UserAddRemoveLists modal

* Remove old TODO

* Fix indent, autocomplete query

* Add a todo

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2023-11-12 12:45:25 -08:00
Eric Bailey 05b728fffc Eric/preferences (#1873)
* Add initial preferences query, couple mutations

* Remove unused

* Clean up labels, migrate getModerationOpts

* Add birth date handling

* Migrate feed prefs

* Migrate thread view prefs

* Migrate homeFeed to use existing key name

* Fix up saved feeds in response, no impl yet

* Migrate saved feeds to new hooks

* Clean up more of preferences

* Fix PreferencesThreads load state

* Fix modal dismissal

* Small spacing fix

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-11-12 11:31:11 -08:00
Paul Frazee c8c308e31e Refactor feeds to use react-query (#1862)
* Update to react-query v5

* Introduce post-feed react query

* Add feed refresh behaviors

* Only fetch feeds of visible pages

* Implement polling for latest on feeds

* Add moderation filtering to slices

* Handle block errors

* Update feed error messages

* Remove old models

* Replace simple-feed option with disable-tuner option

* Add missing useMemo

* Implement the mergefeed and fixes to polling

* Correctly handle failed load more state

* Improve error and empty state behaviors

* Clearer naming
2023-11-10 15:34:25 -08:00
dan 51f04b9620 Use min height for pager lists and increase it (#1869) 2023-11-10 22:29:12 +00:00
dan 86b4842d67 Fix initial pager gap after fast scroll (#1868) 2023-11-10 21:23:17 +00:00
dan 91f8a23fbc Scroll sync in the pager without jumps (#1863) 2023-11-10 19:54:33 +00:00
dan 65def37165 Push useAnimatedScrollHandler down everywhere to work around bugs (#1866)
* Move useOnMainScroll handlers to leaves

* Force Feed to always take handlers

* Pass handlers from the pager
2023-11-10 19:00:46 +00:00
Eric Bailey e0e5bc8fd8 Fix type errors (#1867) 2023-11-10 18:20:33 +00:00
Eric Bailey 6513055d02 Merge pull request #1860 from bluesky-social/eric/startup
Web login/signup and shell
2023-11-10 11:31:36 -06:00
Eric Bailey 436a14eabb Pare down session as much as possible 2023-11-10 09:59:04 -06:00
Eric Bailey d0d93168d4 Clean up isDirty handling 2023-11-10 08:59:39 -06:00
dan 8d7475c130 Work around web stale closure bug in Reanimated (#1865) 2023-11-10 14:58:13 +00:00
Eric Bailey 499021229a Remove error states, just best effort 2023-11-10 08:53:23 -06:00
Eric Bailey 60386f8f07 Swap order 2023-11-10 08:48:15 -06:00
Eric Bailey b0c9cce5c3 Follow conventions for query, use isDirty flag in session store to avoid unneccessary writes 2023-11-10 08:46:45 -06:00
Eric Bailey 742f53d1ec Comments 2023-11-09 20:46:45 -06:00
Eric Bailey 2d7b89c6a1 Cleanup getProfile 2023-11-09 20:39:54 -06:00
Eric Bailey ab878ba9a6 Web login/signup and shell 2023-11-09 20:35:17 -06:00
dan 487d871cfd Pull useAnimatedScrollHandler back up (#1858)
* Revert "Pull animated scroll handler down from pager"

This reverts commit ecebb78e40.

* Only handle onScroll for current page
2023-11-09 23:47:54 +00:00
Paul Frazee fb4f5709c4 Refactor post threads to use react query (#1851)
* Add post and post-thread queries

* Update PostThread components to use new queries

* Move from normalized cache to shadow cache model

* Merge post shadow into the post automatically

* Remove dead code

* Remove old temporary session

* Fix: set agent on session creation

* Temporarily double-login

* Handle post-thread uri resolution errors
2023-11-09 15:35:25 -08:00
Eric Bailey 625cbc435f First pass at a session handler (#1850)
* First pass at a session handler

* TODOs

* Fix recursion

* Couple more things

* Add back resume session concept

* Handle ready

* Cleanup of initial loading states

* Handle init failure

* Cleanup

* Remove account

* Add updateCurrentAccount

* Remove log

* Cleanup

* Integrate removeAccount

* Add hasSession

* Add to App.native, harden migration

* Use effect to persist data
2023-11-09 15:14:51 -08:00
dan 664e7a91a9 Fix tab alignment on the web (#1857) 2023-11-09 21:56:25 +00:00
dan c627a766cd Show tabs when swiping feeds (#1856) 2023-11-09 21:45:31 +00:00
dan 7a55ca6133 Sync top/bottom bar disappearance to the scroll (#1855)
* Disable existing code that toggles shell

* Make shell mode a float

* Translate based on the gesture

* Track header and footer heights

* Add web support

* Fix types and cleanup

* Add back isScrolled logic

* Add comments
2023-11-09 12:15:05 -08:00
Ansh 1dcf882619 Hotfix internationalization on mobile (#1854)
* hotfix internationalization on mobile

* remove comment
2023-11-09 10:49:46 -08:00
Ansh 4c7850f8c4 Internationalization & localization (#1822)
* install and setup lingui

* setup dynamic locale activation and async loading

* first pass of automated replacement of text messages

* add some more documentaton

* fix nits

* add `es` and `hi`locales for testing purposes

* make accessibilityLabel localized

* compile and extract new messages

* fix merge conflicts

* fix eslint warning

* change instructions from sending email to opening PR

* fix comments
2023-11-09 10:04:16 -08:00
dan 82059b7ee1 Hide/show header and footer without re-renders, take two (#1849)
* Remove callsites using the state value

* Remove unused code

* Change shell mode without re-renders

* Adjust "write your reply" for mode
2023-11-09 00:25:27 +00:00
Eric Bailey bd531f2344 Pull language methods into api context (#1847)
* Pull language methods into api context

* Rename for consistency
2023-11-08 11:55:38 -08:00
Eric Bailey f18b15241a Add modal state provider, replace usage except methods (#1833)
* Add modal state provider, replace usage except methods

* Replace easy spots

* Fix sticky spots

* Replace final usages

* Memorize context objects

* Add more warnings
2023-11-08 10:34:10 -08:00
Paul Frazee 5eadadffbf State layer cleanup: move alt-text-required into preferences and fix a bug in reminders (#1845)
* Move alt-text-required into preferences

* Fix bug: reminders now using new onboarding state
2023-11-08 09:46:07 -08:00
Paul Frazee 5843e212c0 Move language preferences to new persistence + context (#1837) 2023-11-08 09:38:28 -08:00
Paul Frazee e75b2d508b Move invite-state to new persistence + context and replace the notifications with just showing uses in the modal (#1840) 2023-11-08 09:10:59 -08:00
Paul Frazee 74f8390f1d Move muted threads to new persistence + context (#1838) 2023-11-08 09:08:42 -08:00
Paul Frazee 4afed4be28 Move onboarding state to new persistence + reducer context (#1835) 2023-11-08 09:04:06 -08:00
Paul Frazee 3a211017d3 Move require alt-text to new persistence + context (#1839) 2023-11-08 08:52:01 -08:00
tarikpnr bc64c86b12 Fix jump in suggested follows tab (Native) 2023-11-08 17:07:32 +03:00
Paul Frazee 2acc88e78d Move reminders to new persisted state layer (#1834) 2023-11-07 16:39:13 -08:00
Eric Bailey 96d8faf4b0 Add persistent state provider (#1830)
* Add persistent state provider

* Catch write error

* Handle read errors, update error msgs

* Fix lint

* Don't provide initial state to loader

* Remove colorMode from shell state

* Idea: hook into persisted context from other files

* Migrate settings to new hook

* Rework persisted state to split individual contexts

* Tweak persisted schema and validation

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-11-07 14:06:17 -08:00
Eric Bailey bfe196bac5 Extract shell state into separate context (#1824)
* WIP

* Add shell state

* Integrate new shell state for drawer and minimal shell mode

* Replace isDrawerSwipeDisabled

* Split shell state into separate contexts to avoid needless re-renders

* Fix typo

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-11-07 11:37:47 -08:00
Noritada Kobayashi 7158157f5f Correct meta tag attributes (#1829) 2023-11-07 09:56:44 -08:00
dan 7b2a7db83c Pull animated scroll handler down from pager (#1827) 2023-11-07 08:46:39 -08:00
dan fa821943da Use Sentry only for errors (#1776)
* Use Sentry only for errors

* Fix merge
2023-11-07 04:30:00 +00:00
Eric Bailey 7ffbee18b5 Fix removal of old lists from saved feeds (#1823)
* Fix removal of old lists from saved feeds

* Fix saved feed removal race condition
2023-11-06 18:51:46 -08:00
dan a4baf14e4b Fix accidental unwrapped strings (#1826) 2023-11-06 14:42:25 -08:00
dan d715246e26 Fix sticky pager jumps (#1825)
* Defer showing pager content until its header settles

* Introduce the concept of headerOnlyHeight

* Keep headerOnlyHeight in state, make headerHeight derived

* Hide content until *both* header (only) and tabbar are measured

* Hide tabbar to read its layout earlier

* Give consistent keys to pages
2023-11-06 22:30:10 +00:00
dan 4c00fc576d Fix minor list layout bugs (#1810)
* Fix accidental border on mobile

* Fix lists list to take full screen
2023-11-06 17:15:01 +00:00
Eric Bailey 95b5e642dc Merge pull request #1814 from bluesky-social/eric/replace-logger
Remove old logger
2023-11-04 14:00:38 -05:00
Eric Bailey f6fe980a64 Remove old logger 2023-11-04 13:43:28 -05:00
Eric Bailey f51351e80d Replace all logs with new logger 2023-11-04 13:42:36 -05:00
Eric Bailey e49a3d8a56 Merge pull request #1813 from bluesky-social/eric/app-903-extract-logger-into-singleton
Add new logger
2023-11-04 13:12:46 -05:00
Eric Bailey 0c76866757 Add logDump tests, ensure Log screen is reversed 2023-11-04 13:09:12 -05:00
Eric Bailey 7e29ebbadb Fix other error logs while I'm at it 2023-11-04 12:58:50 -05:00
Eric Bailey df0dcf32f9 Fix immediate TS errors 2023-11-04 12:42:27 -05:00
Eric Bailey 5fd41ad5a2 Comment out sentry in prod for now 2023-11-04 12:28:30 -05:00
Eric Bailey fd93bf2146 Add new logger 2023-11-04 12:18:56 -05:00
Paul Frazee 46c2564e65 Increment iOS buildnumber & android version code for release 2023-11-03 16:44:59 -07:00
Paul Frazee ebad6d2b1a ListAddUser modal UX improvements (#1809)
* typo

* Add loading state to ListAddUser

* Improve UI/UX of ListAddUser
2023-11-03 16:44:00 -07:00
Paul Frazee 4de852ded8 Refresh on scroll-to-top by active section press (#1807) 2023-11-03 14:53:47 -07:00
Paul Frazee 445f976881 Improved list and feed errors (#1798)
* Fix error-state rendering of ProfileList

* Unsave/unpin lists on delete

* Improve handling of failing feedgens

* Only show 'remove' btn on feed DNE
2023-11-03 14:18:44 -07:00
Eric Bailey 691af26895 Add subpath imports (#1808) 2023-11-03 14:17:40 -07:00
Paul Frazee 047f74c67d Fix copyright report link (#1799) 2023-11-02 22:09:31 -07:00
Paul Frazee 9437d743e2 Bump ios build number 2023-11-02 19:55:15 -07:00
Paul Frazee 846c130706 Lookup did for my profile at screen to avoid bad actor error (#1800) 2023-11-02 19:54:43 -07:00
dan 8747c215b1 Work around a startup stall caused by expo-image on low-end Android (#1801)
* Use plain RN image for startup-blocking UI

* Add comments
2023-11-02 19:33:18 -07:00
Paul Frazee 5e2025e60a Bump @atproto/api@0.6.23 2023-11-02 18:27:20 -07:00
Eric Bailey f258289be9 Treat PHP pages as HTML (#1797) 2023-11-02 15:16:31 -07:00
Paul Frazee 0f4bfcb05d Replace draglist due to upstream errors (#1795)
* Replace draggable flatlist with simple sort buttons

* Remove react-native-draggable-flatlist dep

* Fix hitslops

* Update lockfile

* Remove bad flex:1
2023-11-02 12:09:57 -07:00
dan 0e8723c3bb Patch facebook/metro#1130 to profile module init (#1796) 2023-11-02 18:48:07 +00:00
Paul Frazee 237bce391b Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-11-02 09:43:47 -07:00
Paul Frazee c8b9407e0e Merge branch 'flicknow-make-choose-account-scrollable' into main 2023-11-02 09:43:37 -07:00
Paul Frazee b782cd0d06 Fix max-height issues 2023-11-02 09:42:29 -07:00
Paul Frazee 4e5a99d4d3 Merge branch 'make-choose-account-scrollable' of https://github.com/flicknow/social-app into flicknow-make-choose-account-scrollable 2023-11-02 09:34:49 -07:00
Spandan Tripathy d7744c2590 Update build.md (#1785) 2023-11-02 09:27:31 -07:00
Paul Frazee 29bfed78f7 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-11-01 21:14:47 -07:00
Paul Frazee 232e90c0a0 1.56 2023-11-01 21:14:39 -07:00
Paul Frazee 59271663b5 Store saved feeds on the root store so we can load on init (#1793) 2023-11-01 18:45:59 -07:00
flicknow 5f135aa021 Make choose account form scrollable 2023-11-01 20:55:06 -04:00
Paul Frazee f57a8cf8ba Lists updates: curate lists and blocklists (#1689)
* Add lists screen

* Update Lists screen and List create/edit modal to support curate lists

* Rework the ProfileList screen and add curatelist support

* More ProfileList progress

* Update list modals

* Rename mutelists to modlists

* Layout updates/fixes

* More layout fixes

* Modal fixes

* List list screen updates

* Update feed page to give more info

* Layout fixes to ListAddUser modal

* Layout fixes to FlatList and Feed on desktop

* Layout fix to LoadLatestBtn on Web

* Handle did resolution before showing the ProfileList screen

* Rename the CustomFeed routes to ProfileFeed for consistency

* Fix layout issues with the pager and feeds

* Factor out some common code

* Fix UIs for mobile

* Fix user list rendering

* Fix: dont bubble custom feed errors in the merge feed

* Refactor feed models to reduce usage of the SavedFeeds model

* Replace CustomFeedModel with FeedSourceModel which abstracts feed-generators and lists

* Add the ability to pin lists

* Add pinned lists to mobile

* Remove dead code

* Rework the ProfileScreenHeader to create more real-estate for action buttons

* Improve layout behavior on web mobile breakpoints

* Refactor feed & list pages to use new Tabs layout component

* Refactor to ProfileSubpageHeader

* Implement modlist block and mute

* Switch to new api and just modify state on modlist actions

* Fix some UI overflows

* Fix: dont show edit buttons on lists you dont own

* Fix alignment issue on long titles

* Improve loading and error states for feeds & lists

* Update list dropdown icons for ios

* Fetch feed display names in the mergefeed

* Improve rendering off offline feeds in the feed-listing page

* Update Feeds listing UI to react to changes in saved/pinned state

* Refresh list and feed on posts tab press

* Fix pinned feed ordering UI

* Fixes to list pinning

* Remove view=simple qp

* Add list to feed tuners

* Render richtext

* Add list href

* Add 'view avatar'

* Remove unused import

* Fix missing import

* Correctly reflect block by list state

* Replace the <Tabs> component with the more effective <PagerWithHeader> component

* Improve the responsiveness of the PagerWithHeader

* Fix visual jank in the feed loading state

* Improve performance of the PagerWithHeader

* Fix a case that would cause the header to animate too aggressively

* Add the ability to scroll to top by tapping the selected tab

* Fix unit test runner

* Update modlists test

* Add curatelist tests

* Fix: remove link behavior in ListAddUser modal

* Fix some layout jank in the PagerWithHeader on iOS

* Simplify ListItems header rendering

* Wait for the appview to recognize the list before proceeding with list creation

* Fix glitch in the onPageSelecting index of the Pager

* Fix until()

* Copy fix

Co-authored-by: Eric Bailey <git@esb.lol>

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2023-11-01 16:15:40 -07:00
dan f9944b55e2 Simplify loading emoji data (#1790) 2023-11-01 17:49:07 +00:00
dan 9fb20517ae Remove unused Intl.Segmenter polyfill (#1789) 2023-11-01 16:52:34 +00:00
Eric Bailey 4bf1719092 Merge pull request #1788 from bluesky-social/eric/app-899-remove-icons-from-startup-code
Revise icons startup code
2023-11-01 10:38:37 -05:00
dan 85c26fb5a8 Instrument module init in DEV (#1787) 2023-11-01 15:31:33 +00:00
Eric Bailey b42806a6e0 Revise icons startup code 2023-11-01 10:15:37 -05:00
Samiksha Mishra adb5ce2961 Updated the mistake (#1777)
Corrected the typo error
2023-10-31 08:39:35 -07:00
Tarık b5f36dc7a3 UI/UX improvements in Edit profile screen (#1767)
* Remove cropped area in Edit profile screen iOS

* Hide cancel button when saving changes in EditProfile

* Disable fadeOut animation cancel button for web in EditProfile screen

Since react-native-reanimated is not configured for web support (https://docs.swmansion.com/react-native-reanimated/docs/2.x/fundamentals/web-support/), we are enabling fade out animation for iOS and android solely
2023-10-30 21:01:25 -07:00
Igor Shevchenko b2d4771b5f chore: fix typos in testing.md (#1764) 2023-10-30 20:40:30 -07:00
Eric Bailey ddf0a1cced Filter non-self threads from profile view (#1757) 2023-10-30 20:40:06 -07:00
Paul Frazee 40752982da Merge branch 'main' of https://github.com/haideralipunjabi/social-app into main 2023-10-30 19:26:23 -07:00
Leo Lamprecht 68c809b09a Use more beautiful title separator (#1728) 2023-10-30 19:25:19 -07:00
Pouria Delfanazari 21f7a2a247 Allow back navigation to home on profile header (#1717)
Navigate back to home if there is no navigation history.
2023-10-30 19:23:41 -07:00
Paul Frazee 97ce9a73d2 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-10-30 19:18:34 -07:00
Paul Frazee 33ea9ccef7 Merge branch 'Tanza3D-improve-post-button' into main 2023-10-30 19:18:24 -07:00
Paul Frazee 33a87ca22e Yep, one pixel 2023-10-30 19:18:02 -07:00
dan ef1d6ee490 Log time to first paint (#1775)
* Log time to first paint

* Fix TS
2023-10-31 02:07:14 +00:00
Paul Frazee 1eb623ee2f Merge branch 'improve-post-button' of https://github.com/Tanza3D/social-app into Tanza3D-improve-post-button 2023-10-30 18:54:29 -07:00
Paul Frazee d5c7b8ceb8 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-10-30 18:07:33 -07:00
Paul Frazee bae429202a Merge branch 'liby-fix/step2-waitlist-link-accessibility' into main 2023-10-30 18:06:58 -07:00
Paul Frazee 0747193977 Fix a11y prop 2023-10-30 18:06:31 -07:00
dan 4a4106ba45 Don't inline-require Babel runtime helpers (#1774) 2023-10-31 00:59:00 +00:00
Paul Frazee 2577cbf252 Merge branch 'fix/step2-waitlist-link-accessibility' of https://github.com/liby/social-app into liby-fix/step2-waitlist-link-accessibility 2023-10-30 17:50:44 -07:00
Paul Frazee 9f33badfff Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-10-30 17:50:31 -07:00
Paul Frazee e18e7ce34a Merge branch 'liby-bugfix/desktop-web-text-link-media-query-issue' into main 2023-10-30 17:45:07 -07:00
Paul Frazee 9826e7c7b9 Rename component to match new behavior 2023-10-30 17:44:58 -07:00
dan 515c9d5529 Don't compile Hermes-supported features with Babel (#1773)
* Don't transpile Hermes-supported features

* Disable the object spread plugin

We're using Hermes, and Hermes supports object spread.
We can remove this patch when we upgrade Expo because it'll be conditional there.
2023-10-31 00:23:01 +00:00
Paul Frazee 871ded193c Merge branch 'bugfix/desktop-web-text-link-media-query-issue' of https://github.com/liby/social-app into liby-bugfix/desktop-web-text-link-media-query-issue 2023-10-30 17:11:17 -07:00
Paul Frazee e1dcedd87e Merge branch 'elijah-wright-patch-1' into main 2023-10-30 17:08:15 -07:00
Paul Frazee 1acf4969c5 Fix lint 2023-10-30 17:08:07 -07:00
Paul Frazee dbbd71c6d0 Merge branch 'patch-1' of https://github.com/elijah-wright/social-app into elijah-wright-patch-1 2023-10-30 17:03:34 -07:00
dan 84ee64025f Let Metro handle import/export instead of Babel (#1772)
* Let Metro handle import/export instead of Babel

* Keep using Babel for ESM->CJS in tests
2023-10-30 21:54:23 +00:00
Paul Frazee 6c11c0b81d 1.55 2023-10-30 09:58:58 -07:00
dan 7ebf1ed371 Initialize screen modules lazily (#1763)
* Initialize screen modules lazily

* Use getComponent (thanks @ecreeth for the tip)
2023-10-27 19:06:28 +01:00
dan 53afafb04f Remove redundant linking listeners (#1760) 2023-10-26 21:05:48 -07:00
dan 3e5a64b454 Fix white flash on startup (#1759) 2023-10-27 04:06:40 +01:00
dan 46f3265936 Enable inline requires (#1756) 2023-10-26 17:54:15 -07:00
Paul Frazee a1a61ef2e5 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-10-26 10:40:35 -07:00
Ansh 927cee18d9 Update Analytics (#1743) 2023-10-26 08:37:14 -07:00
Haider Ali Punjabi 7fa0708e0e Added show more for long posts 2023-10-26 19:38:39 +05:30
Ansh c13b6946ba 1721 Update support link (#1722)
* change support page copy

* fix grammar
2023-10-25 10:00:46 -07:00
Ansh ee80cae75f add scroll indicator on web to profile suggested follows card (#1724) 2023-10-25 09:54:52 -07:00
Ansh 1781b3aab7 allow enter key to trigger waitlist signup (#1723) 2023-10-25 09:54:04 -07:00
elliot 3426b24f67 Fixed CropImage modal aspect ratio buttons visibility in dark mode (#1730) 2023-10-25 09:41:56 -07:00
dan 4a4be1de1a Remove MobX from Link (#1745)
* Remove MobX from Link

* Keep memo() though

We previously had observer() apply it automatically, so re-add it
2023-10-25 08:47:21 -07:00
dan 32fbb9dba7 Simplify the avatar component (#1744)
* Copypaste UserAvatar to EditableUserAvatar

* Swap usages with onSelectNewAvatar to EditableUserAvatar

* Split prop types into UserAvatarProps and EditableUserAvatarProps

* Remove dead branches from EditableUserAvatar

* Remove dead branches from UserAvatar
2023-10-25 04:57:34 +01:00
dan c6e28f88e5 Fix four gallery images for Firefox (#1710) 2023-10-18 15:08:12 -04:00
Tanza3D db0de651ba Fix wonky comment 2023-10-18 14:14:45 +01:00
Tanza3D 6848ade046 Shrink to 16 again 2023-10-18 13:53:55 +01:00
Tanza3D de94acb6c8 Improve New Post button 2023-10-18 13:53:00 +01:00
Bryan Lee 78b374b43d Improved accessibility and interaction for waitlist Link in Step2 component 2023-10-15 06:26:56 +08:00
Paul Frazee 01e25c912c 1.54 2023-10-14 10:32:11 -07:00
Ansh 8e9cf182c2 Performance optimization (#1676)
* upgrade sentry to support profiling monitoring

* remove console logs in production builds

* feeds tab bar and bottom bar animation centralized

* refactor FeedPage out of Home

* add script to start in production mode

* move FAB inner to reanimated

* move FABInner back to `Animated` RN animation

* add perf commands

* add testing with Maestro and perf with Flashlight

* fix merge conflicts

* fix resourceClass name in eas.json

* fix onEndReachedThreshold in Feed

* memoize styles

* go back to old styling for LoadLatestBtn

* remove reanimated code from useMinimalShellMode

* move shell animations to hook/reanimated for perf

* fix empty state issue

* make shell animation feel smoother

* make shell animation more smooth

* run animation with autorun

* specify keys for tab bar properly

* remove comments

* remove already imported dep

* fix lint

* add testing instructions

* mock sentry-expo for jest

* fix jest mocks

* Fix the load-latest button on desktop and tablet

* Fix: don't move the FAB in tablet mode

* Fix type error

* Fix tabs bar positioning on tablet

* Fix types

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-10-13 18:54:35 -07:00
dan 9042f503c2 Scope drawer drag workaround to feed pagers (#1694) 2023-10-13 15:15:36 -07:00
dan abfd9a8c0b Toggle lightbox controls on tap (#1687)
* Make the lightbox controls animation smoother

* Toggle controls on tap

* Disable pointer events when hidden
2023-10-13 20:10:27 +01:00
dan f447eaa669 Fix profile preview jump (#1693)
* Add top inset for profile preview to match target screen

* Avoid flicker by waiting for profile screen navigation

* Fix glimmer to align with the content

* A more reliable (but non-scientific) fix for the flash

* Lower the timeout
2023-10-13 20:10:15 +01:00
dan d5ccbd76d5 Disable events on hidden bars (#1686) 2023-10-13 15:29:50 +01:00
dan eba9f8a166 Fix profile layout shift (#1690) 2023-10-13 15:25:16 +01:00
dan 2a1edab6d4 Don't re-render bars when showing/hiding them (#1691)
* Don't re-render bars when showing/hiding them

* Fix more cases

* Use autorun instead of reaction to fix first render
2023-10-13 15:24:28 +01:00
dan 4431cfe2d2 Fix crash when scrolling down on the web (#1684) 2023-10-12 13:15:19 -07:00
dan 997918547c Make shell hide/show animation smoother (#1683)
* Make shell hide/show animation smoother

* Also animate "load latest"
2023-10-12 21:02:17 +01:00
dan c2a1cf4e56 Fix layout shift for multi-image posts (#1673)
* Fix layout shift for multi-image posts

* Add a comment for the hack

* Use margins instead of gap

* Move alt label
2023-10-12 19:14:27 +01:00
Jake Gold d98e3a8b45 bskyweb: add rate limiting to reduce DoSability 2023-10-11 13:00:59 -07:00
Eric Bailey d40d931d86 use new zeed-dom version (#1671) 2023-10-11 09:04:06 -07:00
Paul Frazee 5dd673d1ff 1.53 2023-10-10 17:32:19 -07:00
Eric Bailey 10deddd0ad resolve fork of zeed-dom (#1663) 2023-10-10 16:23:12 -07:00
dan a48c213af5 Port remaining lightbox code to Reanimated (#1669)
* Port remaining lightbox code to Reanimated

* Fix  memoization
2023-10-10 23:48:31 +01:00
Paul Frazee 0b44af38ea Update testrunner to use new dev-env [WIP] (#1575)
* Update testrunner to use new dev-env

* Fix label testcase

* Vendor the dev-infra scripts from the atproto repo for the dev-env server runner

* Bump detox to fix the ios sim control issue

* Use iphone 15 pro for tests

* Ensure the reminders never trigger during tests

* Skip the shell tests due to a crash bug with detox and the drawer
2023-10-10 15:46:27 -07:00
dan aad8d12ede Fix MobX crash for Android lightbox (#1668)
* Fix MobX crash for Android lightbox

* Reorder props to match between forks
2023-10-10 23:02:00 +01:00
dan 209d8b683c Change lightbox to use Pager (#1666)
* Change lightbox to use Pager

* Fix crash issue on ios

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-10-10 22:37:28 +01:00
Ansh aa085b0b14 make empty feed required (#1667) 2023-10-10 14:32:00 -07:00
Paul Frazee 4d450da194 Only warn on links to bsky.app if it represents itself as another url (#1662)
* Only warn on links to bsky.app if it represents itself as another url (close #1652)

* Clean up
2023-10-10 14:02:50 -07:00
Paul Frazee e878da04a1 Fix keyboard double pad issue in email change & verify modals (#1664) 2023-10-10 14:02:31 -07:00
Eric Bailey fc28fc639f Don't highlight tags in composer yet (#1665) 2023-10-10 13:44:27 -07:00
Paul Frazee d68b4ca856 Fix: fetch follows on desktop search for typeahead (#1660) 2023-10-10 12:27:32 -07:00
dan 60c0db03f7 Remove duplicate modal container (#1661) 2023-10-10 11:57:14 -07:00
dan d47ff542da Drive-by lightbox refactors (#1659)
* Remove dead code from lightbox

* Rename imageIndex prop to initialImageIndex

* Rename currentImageIndex to imageIndex
2023-10-10 11:07:21 -07:00
Paul Frazee bc2c44cb98 Only prompt users once to verify email (according to local storage) close #1657 (#1658) 2023-10-10 10:57:09 -07:00
Paul Frazee 098f4b526e Revert "Fix invite codes flash on desktop, use loading placeholder (#1591)" (#1656)
This reverts commit 9278822088.
2023-10-10 10:08:04 -07:00
dan f452ce74f4 Refactor iOS lightbox to Reanimated (#1645)
* Remove unnecessary transform logic

* Switch iOS swipe-to-dimiss to Reanimated
2023-10-10 10:04:38 +01:00
Paul Frazee 832b05b64a Bump package.json to 1.52 2023-10-09 15:24:23 -07:00
Paul Frazee acb003d7e1 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-10-09 14:58:40 -07:00
dan ce0f796008 Remove unnecessary opacity logic (#1646) 2023-10-09 22:29:56 +01:00
Muneyuki Noguchi b12cfbe90b Fix typo in image.ts (#1638) 2023-10-09 12:29:16 -07:00
Raku d85bbc1a28 fix typo README.md (#1631) 2023-10-09 11:55:15 -07:00
Toni Alatalo c43a0d8160 Typo fix in README.md: "small about" -> "small amount" (#1639) 2023-10-09 11:48:57 -07:00
Elijah Wright c39352f859 readd hint 2023-10-08 14:30:57 -07:00
Elijah Wright 0122cdb0b6 fix accessibility in AutoSizedImage 2023-10-08 14:29:20 -07:00
Paul Frazee 9aff2597cf Bump build revision 2023-10-06 18:02:22 -07:00
Paul Frazee 77b21dfb1c Fix bug that prevents unfollowing (#1633) 2023-10-06 18:01:57 -07:00
Paul Frazee 9cff82448f 1.52 2023-10-06 08:48:39 -07:00
bnewbold 34f9d12987 README: tweaks to high-level context (#1625) 2023-10-06 08:45:41 -07:00
dan d2f11f8e36 Fix stuck lightbox header after double tap (#1627) 2023-10-05 20:22:32 -07:00
Paul Frazee 3b78d3227f Fix: add padding to the spinner bottom while loading threads (#1626) 2023-10-05 20:10:43 -07:00
dan 64153067e3 Rewrite Android lightbox (#1624) 2023-10-05 19:54:36 -07:00
Paul Frazee 8366fe2c4a Dont trim before posting (close #1621) (#1622)
* Dont trim before posting (close #1621)

* Tweak: do trim end
2023-10-05 19:08:20 -07:00
Paul Frazee b74a0e0fe2 Only listen to back button on android (#1623) 2023-10-05 18:29:41 -07:00
Paul Frazee bd7db8af26 Improve typeahead search with inclusion of followed users (temporary solution) (#1612)
* Update follows cache to maintain some user info

* Prioritize follows in composer autocomplete

* Clean up logic and add new autocomplete to search

* Update follow hook
2023-10-05 16:44:05 -07:00
Paul Frazee 19f8389fc7 Slightly smaller highlighted post text (#1608) 2023-10-05 16:13:49 -07:00
Paul Frazee 0168aada37 Pull upstream bugfixes to bottom-sheet (#1606)
* Bump bottom-sheet to latest for bugfixes

* Small tweak to the account switcher
2023-10-05 15:55:31 -07:00
dan 4ec5fabdd1 Fix animations and gestures getting reset on state updates in the lightbox (#1618)
* Fix translation resetting on state update

* Copy getImageStyles into iOS and Android forks

* Fix opacity resetting on state update
2023-10-05 15:52:04 -07:00
dan 260b03a05c Remove unused lightbox options (#1616)
* Inline lightbox helpers

* Delete unused useImagePrefetch

* Delete unused long press gesture

* Always enable double tap

* Always enable swipe to close

* Remove unused onImageIndexChange

* Inline custom Hooks into ImageViewing

* Declare LightboxFooter outside Lightbox

* Add more TODO comments

* Inline useDoubleTapToZoom

* Remove dead utils, move utils used only once
2023-10-05 15:28:56 -07:00
Paul Frazee eb7306b165 Profile UI tweaks (#1607)
* Use inverted color instead of primary color for press state

* Fix: add missing border to empty state
2023-10-04 13:28:07 -07:00
Patroll 9278822088 Fix invite codes flash on desktop, use loading placeholder (#1591)
* Fix invite codes flashing untrue value before loaded

* Add loading placeholder for right nav invites
2023-10-04 10:31:43 -07:00
Paul Frazee 2ba0c6a711 Update to react-native@0.72.5 (#1599)
* Update to react-native@0.72.5

* Fix the patch
2023-10-04 10:17:13 -07:00
Baasbase c6da98c818 Fixed a typo on the onboarding recommended screen (#1604) 2023-10-04 08:58:01 -07:00
Paul Frazee b1a1bae02e Onboarding & feed fixes (#1602)
* Fix: improve the 'end of feed' detection condition

* Fix the feeds link on mobile in the empty state

* Align the following empty state better on web

* Dont autofocus the search input in the search tab

* Fix the error boundary render

* Add 'end of feed' CTA to following feed

* Reduce the default feeds to discover now that we have feed-selection during onboarding

* Fix case where loading spinner fails to stop rendering in bottom of feed

* Fix: dont show loading spinner at footer of feed when refreshing

* Fix: dont fire reminders during onboarding

* Optimize adding feeds and update to mirror the api behaviors more closely

* Use the lock in preferences to avoid clobbering in-flight updates

* Refresh the feed after onboarding to ensure content is visible

* Remove the now-incorrect comment

* Tune copy
2023-10-04 08:57:23 -07:00
Bryan Lee 2ca673d7f5 Replace isDesktop with isWeb in DesktopWebTextLink component
- Replaced `useWebMediaQueries().isDesktop` with `isWeb` in `DesktopWebTextLink` component to fix inconsistent behavior due to media query changes.
- `isWeb` doesn't rely on media queries, offering stable judgement and avoiding fluctuation when adjusting the browser window.
2023-10-04 21:47:19 +08:00
Paul Frazee a76fb78d53 Improve time to content in the search page (#1603)
* Improve time to content in the search page

* Improve loading state clarity
2023-10-03 20:01:09 -07:00
Paul Frazee 847d4d19b5 Fix a potential reference error in bottombarweb (#1600) 2023-10-03 19:55:44 -07:00
Paul Frazee 6598fca79d Fix: only use scroll-positioning control on thread when looking at replies (#1587) 2023-10-03 19:55:28 -07:00
Paul Frazee 588659380a Add an illustration to the email verification reminder (#1586)
* Add an illustration to the email verification reminder

* Set height on svg to avoid overflow issues in android
2023-10-03 19:51:57 -07:00
Paul Frazee 001b29a7e3 Fix bad reference when image picker is canceled (#1598) 2023-10-03 17:19:21 -07:00
Paul Frazee fd5bbb2769 Warn the user on links that dont match their text (#1573)
* Add link warning modal when URLs do not match their text

* Simplify the misleading link case for clarity

* Fix typecheck

* fix dark mode

* Give a stronger visual indication of the root domain in the link warning

* More rigorous URL mismatch logic

* Remove debug

---------

Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
2023-10-02 14:47:39 -07:00
Ansh 2f157c152a fix styling when on FeedsTab (#1574) 2023-10-02 13:28:18 -07:00
Paul Frazee 90b18cf004 Fix alt text selectability in lightbox on web (close #1548) (#1571) 2023-10-02 13:25:41 -07:00
Paul Frazee 64410efafe Small sizing tweaks to the web modal (#1568) 2023-10-02 09:28:04 -07:00
Manish 72e3763446 Add the build step for atproto (#1579)
Co-authored-by: Manish <manish.nayal@nium.com>
2023-10-02 09:18:34 -07:00
Ansh 04fda0f142 Fix 1405 handle android back button in composer (#1446)
* handle android back button in composer

* improve backHandler error handling

* simplify composer onClose functionality
2023-09-29 07:49:59 +04:00
Paul Frazee 1f60e1a748 Fix warning 2023-09-28 20:45:11 -07:00
Bryan Lee 2aae37d67b Improve Device Detection For Better Responsiveness (#1512)
* Refactor `useOnMainScroll` function to use responsive device detection

- Replace static `isDesktopWeb` with `useWebMediaQueries` hook to enable dynamic device type detection.
- Create `useDeviceLimits` hook to dynamically determine `DY_LIMIT_UP` and `DY_LIMIT_DOWN` based on device type.
- Update dependency arrays for the `useCallback` hooks to include new dynamic variables.

* Refactor styles to be responsive to device type

- Create `useStyles` hook that generates styles object based on device type detected from `useWebMediaQueries`.
- Replace static styles object with dynamic styles object generated from `useStyles` hook in components.
- This allows `paddingLeft` values for 'ul' and 'ol' styles to adapt to device type dynamically.
- This allows `maxWidth` values for 'metaItem'' styles to adapt to device type dynamically.

* Remove `isDesktopWeb` in favor of `useWebMediaQueries().isDesktop`

* Refactor `SplashScreen` component for responsive design

* Revision based on review results

* Fix isNative check

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-09-28 12:47:34 -07:00
Paul Frazee 2e5f73ff61 Account quick switch modal (#1567)
* quick switch menu

* Some small tweaks and fixes to the account switch modal

* Factor out the account switcher logic to a hook

* Add haptic feedback on account switcher open

* Fix bad merge

---------

Co-authored-by: Samuel Newman <mozzius@protonmail.com>
2023-09-28 12:41:44 -07:00
Gabriel Donadel Dall'Agnol 3e340b336e Add example google-services file (#1545)
* Add example google-services file

* Update build.md
2023-09-28 12:22:23 -07:00
Paul Frazee 65b83e0d6b Merge branch 'Tanza3D-small-pfp-desktop-2' into main 2023-09-28 12:12:03 -07:00
Paul Frazee f5a78c2c86 Slightly larger desktop leftnav pfp 2023-09-28 12:11:09 -07:00
Paul Frazee d4a234d5ce Merge branch 'small-pfp-desktop-2' of https://github.com/Tanza3D/social-app into Tanza3D-small-pfp-desktop-2 2023-09-28 12:08:39 -07:00
Paul Frazee cd3b0e54fb Email verification and change flows (#1560)
* fix 'Reposted by' text overflow

* Add email verification flow

* Implement change email flow

* Add verify email reminder on load

* Bump @atproto/api@0.6.20

* Trim the inputs

* Accessibility fixes

* Fix typo

* Fix: include the day in the sharding check

* Update auto behaviors

* Update yarn.lock

* Temporary error message

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2023-09-28 12:08:00 -07:00
Paul Frazee 16763d1d41 Handle long feed listings on the right nav with scrolling (#1562) 2023-09-28 10:33:14 -07:00
Paul Frazee cc1c9ab305 Merge branch 'mozzius-expand-author-pressable' into main 2023-09-28 10:32:55 -07:00
Paul Frazee d57c8f7bca Fix pointer 2023-09-28 10:32:34 -07:00
Paul Frazee 1aa1b69a94 Merge branch 'expand-author-pressable' of https://github.com/mozzius/bluesky-official-app into mozzius-expand-author-pressable 2023-09-28 10:27:24 -07:00
Paul Frazee e181bae9a6 Merge branch 'left-padding-on-sidebar' of https://github.com/Tanza3D/social-app into main 2023-09-28 10:25:38 -07:00
Tanza 83bb5c1710 Move sidebar by 10px for more even padding (#1543) 2023-09-28 10:24:46 -07:00
Samuel Newman a427010629 Don't render a pressable if there's only one notification author 2023-09-28 11:03:52 +01:00
Eric Bailey b030d94a64 fix link highlighting with mention present (#1544) 2023-09-27 09:15:50 -07:00
Eric Bailey 6d4ad59416 Merge pull request #1553 from mozzius/refreshed-web-repost-dropdown
Use refreshed dropdown style for repost/quote post dropdown
2023-09-27 11:14:56 -05:00
Paul Frazee d87c232660 Improve image cropping on android and introduce aspect ratio field (#1525)
* Fix image cropping on android

* Store and use aspect ratio field in post images (close #1392)
2023-09-27 09:08:21 -07:00
Eric Bailey 6325eff938 Improvements to auto-mentioning users from their profiles (#1556)
* Don't automatically mention users with invalid handles

* don't mention when using did urls

* resolve profile from cache

* a little clearer

---------

Co-authored-by: Samuel Newman <mozzius@protonmail.com>
2023-09-27 09:06:33 -07:00
Samuel Newman 5d59ab2ac0 replace dropdown component 2023-09-27 11:32:42 +01:00
Tanza3D e941da646d Move sidebar by 10px for more even padding 2023-09-26 22:12:22 +01:00
Tanza3D 1185ac4053 Small PFP on desktop 2023-09-26 22:07:56 +01:00
Eric Bailey 42723dfaf6 fix 'Reposted by' text overflow (#1535) 2023-09-26 12:24:05 -07:00
dan 95736a5168 Add instructions for running on device (#1541) 2023-09-26 11:46:46 -07:00
Foysal Ahamed b0873cae97 💄 Remove report option on my own post (#1537) 2023-09-26 10:48:07 -07:00
Paul Frazee 83b3b5e1c0 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-09-25 13:50:44 -07:00
Sasha Mansurov 5f476851a3 Fix gallery image size (#1474)
Fixes #1323
2023-09-25 13:50:29 -07:00
Paul Frazee be2f319a34 Bump android version code 2023-09-22 18:13:07 -07:00
Paul Frazee e9f30894b1 Bump ios build number 2023-09-22 18:08:50 -07:00
Paul Frazee 150fe421d6 Fixes to tests (#1518) 2023-09-22 17:49:41 -07:00
Paul Frazee 41b53ca37b Trim whitespace on invite code (#1517) 2023-09-22 17:04:58 -07:00
Paul Frazee b7697f08d6 Accessibility fixes: add missing labels, dynamically scale home header (#1516)
* Improve labels

* Dynanically adjust home header to account for font scaling
2023-09-22 17:04:47 -07:00
Paul Frazee 88b95df200 Update backend routes to match frontend (#1515) 2023-09-22 17:04:36 -07:00
Eric Bailey 1b3b4c6692 Merge pull request #1513 from bluesky-social/eric/app-855-update-language-settings-in-app
update translator link show logic
2023-09-22 10:22:28 -05:00
Eric Bailey 28f5a8e44d bool 2023-09-22 09:46:46 -05:00
Eric Bailey 4fa576cb30 update translator link show logic 2023-09-22 09:24:48 -05:00
Paul Frazee 146132a080 Bump ios buildnumber 2023-09-21 21:01:15 -07:00
Paul Frazee 8584009bae Move home feed and thread preferences to server (#1507)
* Move home feed and thread preferences to server

* Fix thread usage of prefs

* Remove log

* Bump @atproto/api@0.6.16

* Improve type usage
2023-09-21 21:00:32 -07:00
Paul Frazee 28b692a118 Switch the date input web version to the date-input web control (#1510)
* Switch the date input web version to the date-input web control

* Fix types
2023-09-21 17:41:09 -07:00
Paul Frazee 1abe5270dd Wrap the post thread screen in an observer (#1509) 2023-09-21 17:36:50 -07:00
Paul Frazee 44985d2312 Dont reposition load latest button on desktop (#1508) 2023-09-21 17:36:33 -07:00
Paul Frazee 8aabbb9b6f Minor alignment fix 2023-09-21 15:07:56 -07:00
Paul Frazee 7931787dd7 Tune the treeview mode to use larger immediate-children (#1506)
* Tune the treeview mode to use larger immediate-children

* Fix display name alignment
2023-09-21 13:47:42 -07:00
Eric Bailey 8a5f9cd43d Language settings updates, new primary language setting (#1471)
* move content languages to screen

* add dropdown library, style primary lang select

* update settings button

* show selected langauges in button

* use primary language in translator link

* update copy

* lint
2023-09-21 11:33:19 -07:00
Paul Frazee 335061f763 Bump ios build number 2023-09-20 19:48:40 -07:00
Eric Bailey e837a499f3 add suggested follows metrics (#1503) 2023-09-20 19:48:03 -07:00
Paul Frazee 5a945c2024 Prefilter the mergefeed to ensure a better mix of following and custom feeds (#1498)
* Prefilter the mergefeed to ensure a better mix of following and custom feeds

* Test suite improvements & tests for the mergefeed (#1499)

* Disable invite codes test for now

* Update test sim to latest iphone

* Introduce TestCtrls driver

* Add mergefeed tests
2023-09-20 19:47:56 -07:00
Paul Frazee 68dd3210d1 Improve consistency of floating button positioning (#1501) 2023-09-20 19:45:05 -07:00
Bryan Lee f5e9e4af89 Updates InviteCodes modal to use dynamic/responsive styles on web (#1502) 2023-09-20 19:16:33 -07:00
Eric Bailey 6df1bcad31 add suggested follow section to profile header (#1481)
* add suggested follow section to profile header

* fix button overflow

* don't even render on preview

* fix useFollowDid and FollowButton race condition

* add section header, close button, active state

* lighten icon
2023-09-20 19:16:11 -07:00
Paul Frazee 498c3e2c27 Tune the treeview UI a bit more (#1494) 2023-09-20 19:13:54 -07:00
Paul Frazee acc98ac1ab Dont show the reply prompt if minimal shell mode triggers (#1495) 2023-09-20 19:12:40 -07:00
Paul Frazee 95e8a6bf41 Even less intrusive status line for posts (#1496) 2023-09-20 19:11:28 -07:00
Paul Frazee 8f8bed9a1c Fix a mobx complaint about mutations (#1500) 2023-09-20 19:11:07 -07:00
dan d33aaf57ad Add a tip about Android emulator memory limit (#1492) 2023-09-20 12:03:07 -07:00
Eric Bailey a1c040cd79 Merge pull request #1476 from bluesky-social/bnewbold/bump-api-dep
yarn: bump @atproto/api to remove redundant deps
2023-09-20 11:07:13 -05:00
Eric Bailey 5665968f72 Merge remote-tracking branch 'origin' into bnewbold/bump-api-dep
* origin:
  Allow touch at the top of the lightbox (#1489)
  Bump ios build number
  Feeds tab fixes (#1486)
  Nicer 'post processing status' in the composer (#1472)
  Inline createPanResponder (#1483)
  Tree view threads experiment (#1480)
  Make "double tap to zoom" precise across platforms (#1482)
  Onboarding recommended follows (#1457)
  Add thread sort settings (#1475)
2023-09-20 11:03:57 -05:00
dan cd96f8dcc8 Allow touch at the top of the lightbox (#1489) 2023-09-20 12:41:18 +01:00
Paul Frazee 6db7113108 Bump ios build number 2023-09-19 21:45:03 -07:00
Paul Frazee 971c8025e6 Feeds tab fixes (#1486)
* Bold the saved feeds on mobile

* Improve the saved feeds loading state

* Add soft reset handler to feeds page

* Show feed descriptions in profile listing

* Add an 'about this feed' modal

* Fix type assertion
2023-09-19 21:44:23 -07:00
Paul Frazee 753fb8bfbc Nicer 'post processing status' in the composer (#1472) 2023-09-19 20:40:58 -07:00
dan 8b8fba7284 Inline createPanResponder (#1483) 2023-09-20 03:46:59 +01:00
Paul Frazee 1af8e83d53 Tree view threads experiment (#1480)
* Add tree-view experiment to threads

* Fix typo

* Remove extra minimalshellmode call

* Fix to parent line rendering

* Fix extra border

* Some ui cleanup
2023-09-19 19:08:11 -07:00
dan d2c253a284 Make "double tap to zoom" precise across platforms (#1482)
* Implement double tap for Android

* Match the new behavior on iOS
2023-09-19 18:32:44 -07:00
Ansh 859588c3f6 Onboarding recommended follows (#1457)
* upgrade api package

* add RecommendedFollows as a step in onboarding

* add list of recommended follows from suggested actor model

* remove dead code

* hoist suggestedActors into onboarding model

* add comments

* load more suggested follows on follow

* styling changes

* add animation

* tweak animations

* adjust styling slightly

* adjust styles on mobile

* styling improvements for web

* fix text alignment in RecommendedFollows

* dedupe inserted suggestions

* fix animation duration

* Minor spacing tweak

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com> and Eric Bailey <git@esb.lol>
2023-09-20 01:18:50 +05:30
Paul Frazee da8499c881 Add thread sort settings (#1475)
* Add thread sorting preferences

* UI tweaks

* Tweak settings

* Tune the copy
2023-09-19 12:24:58 -07:00
bryan newbold 63527493fd yarn: bump @atproto/api to remove redundant deps 2023-09-18 18:39:26 -07:00
Paul Frazee 9c4374f66a 1.51 2023-09-18 14:34:41 -07:00
Foysal Ahamed 3c4899b3c4 🐛 Handle middle mouse click on feed list items (#1469)
* 🐛 Handle middle mouse click on feed list items

* ♻️ Refactor the event listener and turn it into a dedicated hook for web

* 🧹 Cleanup unnecessary Link changes

* Fix import

* Create native version of useAuxClick

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-09-18 14:34:12 -07:00
Paul Frazee 255beb0c1f Various release fixes (#1470)
* Fix error state for recommended feeds

* Handle failure to set default feeds more safely

* Dont return undefined within react-query

* Update yarn.lock
2023-09-18 13:38:33 -07:00
Paul Frazee 157daad605 Update yarn.lock 2023-09-18 12:05:18 -07:00
Paul Frazee ea885339cf Feed UI update working branch [WIP] (#1420)
* Feeds navigation on right side of desktop (#1403)

* Remove home feed header on desktop

* Add feeds to right sidebar

* Add simple non-moving header to desktop

* Improve loading state of custom feed header

* Remove log

Co-authored-by: Eric Bailey <git@esb.lol>

* Remove dead comment

---------

Co-authored-by: Eric Bailey <git@esb.lol>

* Redesign feeds tab (#1439)

* consolidate saved feeds and discover into one screen

* Add hoverStyle behavior to <Link>

* More UI work on SavedFeeds

* Replace satellite icon with a hashtag

* Tune My Feeds mobile ui

* Handle no results in my feeds

* Remove old DiscoverFeeds screen

* Remove multifeed

* Remove DiscoverFeeds from router

* Improve loading placeholders

* Small fixes

* Fix types

* Fix overflow issue on firefox

* Add icons prompting to open feeds

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>

* Merge feed prototype [WIP] (#1398)

* POC WIP for the mergefeed

* Add feed API wrapper and move mergefeed into it

* Show feed source in mergefeed

* Add lodash.random dep

* Improve mergefeed sampling and reliability

* Tune source ui element

* Improve mergefeed edge condition handling

* Remove in-place update of feeds for performance

* Fix link on native

* Fix bad ref

* Improve variety in mergefeed sampling

* Fix types

* Fix rebase error

* Add missing source field (got dropped in merge)

* Update find more link

* Simplify the right hand feeds nav

* Bring back load latest button on desktop & unify impl

* Add 'From' to source

* Add simple headers to desktop home & notifications

* Fix thread view jumping around horizontally

* Add unread indicators to desktop headers

* Add home feed preference for enabling the mergefeed

* Add a preference for showing replies among followed users only (#1448)

* Add a preference for showing replies among followed users only

* Simplify the reply filter UI

* Fix typo

* Simplified custom feed header

* Add soft reset to custom feed screen

* Drop all the in-post translate links except when expanded (#1455)

* Update mobile feed settings links to match desktop

* Fixes to feeds screen loading states

* Bolder active state of feeds tab on mobile web

* Fix dark mode issue

---------

Co-authored-by: Eric Bailey <git@esb.lol>
Co-authored-by: Ansh <anshnanda10@gmail.com>
2023-09-18 11:44:29 -07:00
Eric Bailey 3118e3e933 improve drawer reflow for large text (#1464) 2023-09-15 15:18:09 -07:00
Paul Frazee 754663e5c3 Add findlast shim for outdated browsers (#1463)
* Add findlast shim for crappy browsers

* Fix types
2023-09-15 14:40:15 -07:00
Paul Frazee 0672451ddc Sanitize BIDI characters from display names (#1462) 2023-09-15 14:05:45 -07:00
Paul Frazee 763a50692f Readd hitslop to post controls (#1461)
* Readd hitslop to post controls

* Bigger hitslop on bigger controls
2023-09-15 14:01:44 -07:00
Eric Bailey e3de91788e Merge pull request #1452 from bluesky-social/eric/update-image-picker
bump picker deps
2023-09-15 14:06:55 -05:00
Eric Bailey 8593f41f36 don't thread a self-repost of a self-reply (#1450)
* don't thread a self-repost of a self-reply

* typo
2023-09-15 09:34:12 -07:00
Ansh 188d4893f9 add React Query and hook up to existing functionality (#1358)
* add React Query and hook up to existing functionality

* wire in remote data, add error message

* remove hard-coded feeds

* oops fix logic

* add loading state

* fix loading on mobile

---------

Co-authored-by: Eric Bailey <git@esb.lol>
2023-09-15 09:32:44 -07:00
Eric Bailey 84b7edd9db Merge pull request #1451 from bluesky-social/eric/theme-switching-web
fix theme switching on web without refresh
2023-09-15 11:06:06 -05:00
Eric Bailey 0e8d564555 link out to more context 2023-09-15 11:00:06 -05:00
Eric Bailey 01870883d6 clean up into hook 2023-09-14 18:15:17 -05:00
Ansh 50f811666a Fix Profile link from drawer on Mobile Web (#1437)
* 🗺️ fix an issue where web devices that see the Drawer couldn't access Profile from said Drawer

* fix routes on web

* handle profile button active state

* add hack for web navigation

* fix comment

---------

Co-authored-by: Micah Maligie <kerosuppi@gmail.com>
2023-09-14 16:10:59 -07:00
Eric Bailey e643c43459 add build:apk and apk config (#1454) 2023-09-14 16:06:25 -07:00
bnewbold 37252e90b4 update Bluesky PBLLC to PBC (Public Benefit Corporation) (#1453) 2023-09-14 14:51:06 -07:00
Eric Bailey bd8dac0154 bump picker deps 2023-09-14 15:17:57 -05:00
Eric Bailey 9a86f0dae4 simplify logic 2023-09-14 13:23:20 -05:00
Eric Bailey a88ac217c2 fix theme switching on web without refresh 2023-09-14 12:55:47 -05:00
Ansh b9268d503a wrap impersonation text (#1447) 2023-09-13 11:12:58 -07:00
Ansh 9c72fcc9b4 share mute list link with did not handle (#1438) 2023-09-12 15:35:34 -07:00
Ansh 4977a5d2a3 Fix 651 Make followers and following button into a <Link> (#1429)
* make followers and following button into a Link

* make buttons into `<a>` tags
2023-09-12 13:47:55 -07:00
Paul Frazee 2b6fe4cb50 1.50 2023-09-11 18:23:40 -07:00
Paul Frazee 9b5bd53f84 Remove accessibilityRole=button on dropdown mask, it causes issues on firefox (#1436) 2023-09-11 18:09:02 -07:00
Paul Frazee 9e8b14f710 Add birth date gating to moderation settings (#1435)
* Add birth date preference, modal to set, link in settings, and age gate in moderation

* Styling fixes for android

* Fix types
2023-09-11 18:04:09 -07:00
Paul Frazee 0090371011 Paginate the PostThread to avoid rendering too many posts and crashing the app on large threads (#1432) 2023-09-11 17:41:00 -07:00
Eric Bailey 21371081c6 fix theme flashing (#1417)
* fix theme flashing

* remove memo

* use AppState listener
2023-09-11 14:39:31 -07:00
Paul Frazee f8c611118e Separate list deletion into chunks (close #1430) (#1431) 2023-09-11 14:28:30 -07:00
Paul Frazee 977f9228f8 Revert "Fix 1338 mark notifications read with timeout and on app state change (#1340)" (#1433)
This reverts commit d2e65d2a7f.
2023-09-11 14:28:13 -07:00
Paul Frazee 57c10cbcab Bump @atproto/api@0.6.12 (#1434) 2023-09-11 14:28:02 -07:00
Ansh 27cb1bd276 make sure click events on the emoji picker don't bubble up to the mask (#1427) 2023-09-11 13:31:14 -07:00
Ansh bcd63e710c Lytic analytics migration (#1428)
* add new api event proxy

* add new apiHost for analytics web
2023-09-11 11:41:27 -07:00
Ansh 01775e5bff add new api event proxy (#1400) 2023-09-11 22:36:49 +05:30
uakci 731d84faaa composer: inhibit Cmd-Enter from inputting newline (#1421) 2023-09-11 09:02:14 -07:00
Bossett 775aa87540 Update time.ts to handle very small or negative time differences (#1390)
* Update time.ts to handle very small or negative time differences

Right now, posts can appear to be from the future with a negative time difference (i.e. -3s appears). This change defines 'NOW' as less than 5 seconds old, and returns 'now' in that case.

It's not clear how localisation is handled - this may need translation.

* Add test for 'now' in time/ago(...)

Add tests for ago() for right now (i.e. 'now') and 10s ago to ensure the seconds case is still tested
2023-09-08 08:57:22 -07:00
dan 6d73ed96e1 Make Sentry optional (#1416)
* Move app.json -> app.config.js

* Make Sentry optional
2023-09-08 08:47:01 -07:00
dan adc5b75b2b Fix autocomplete avatar alignment (#1414) 2023-09-08 16:30:42 +01:00
dan 44a00e1b7e Set crop mode to None by default (#1415)
Fixes #1263

Previously, opening the crop tool had 1:1 selected by default. So if you opened it and pressed Done without changing anything, it would format the image as 1:1.

After this change, None is selected by default. So if you open the crop tool and press Done without changing anything, nothing will change.
2023-09-08 16:30:00 +01:00
Micah Maligie c10cb8e972 💅 disallow overflow outside of post content area(s) (#1395) 2023-09-07 18:13:28 -07:00
dan 8a93321fb1 Give explicit names to MobX observer components (#1413)
* Consider observer(...) as components

* Add display names to MobX observers

* Temporarily suppress nested components

* Suppress new false positives for react/prop-types
2023-09-07 17:36:08 -07:00
dan 69209c988f Update build instructions (#1406)
- Use pnpm
- Clarify when prebuild is needed
2023-09-07 17:29:16 -07:00
dan a5b89dffa6 Add ESLint React plugin (#1412)
* Add eslint-plugin-react

* Enable display name rule
2023-09-07 16:38:57 -07:00
Ansh 00595591c4 Hotfix: Fix unable to enter invite code (#1409)
* Remove accessibilityRole from invite code input

* remove unused styles
2023-09-07 13:50:24 -07:00
Paul Frazee 2963fb4c6d Fix scrollbar gutters on web (#1401)
* Fix scrollbar gutters on web

* Fix typecheck
2023-09-07 09:32:14 -07:00
dan 138e6d9b97 Fix lint-staged not allowing edits to Markdown files (#1402)
* Remove unnecessary overrides config

* Only lint-staged code files
2023-09-07 02:06:07 +01:00
dan 82a17db594 Always prebuild cleanly (#1399) 2023-09-06 17:21:48 -07:00
Eric Bailey b76b56b4a4 Merge pull request #1397 from bluesky-social/eric/fix-startup-error
prevent error screen on startup
2023-09-06 16:33:56 -05:00
Eric Bailey fdc4ae1f7b prevent error screen on startup 2023-09-06 16:27:44 -05:00
Minseo Lee b6d239aa37 Update ProfileHeader.tsx (#1389) 2023-09-06 13:45:50 -07:00
Ansh 63f0b2f0e5 fix text color on waitlist join (#1387) 2023-09-06 09:37:07 -07:00
dan dd5697329f Remove unnecessary deps from package.json (#1393) 2023-09-06 09:36:45 -07:00
dan 19adb10de1 Use frozen lockfile for CI workflows (#1394) 2023-09-06 09:26:19 -07:00
Paul Frazee 565c1a0510 1.49 2023-09-05 14:04:36 -07:00
Paul Frazee 52f3810e81 Update tests 2023-09-05 14:03:39 -07:00
Paul Frazee 411c1581f6 Fix thread positioning on load (#1385)
* Fix minIndex for consistent positioning on thread view

* Enable maintainVisibleContentPosition on android now that it's supported
2023-09-05 13:40:38 -07:00
Eric Bailey e3e91816d1 Upgrade to Expo 49 (#1331)
* update to expo 49

* update expo-camera to fix console erorrs

* run doctor again

* fix ts errors

* patch @sentry/react-native

Getting `cannot read property 'ignoreLogs' of undefined` in this file.
Ironically, this may be a cyclical imports problem. LogBox isn't enabled
in production, so this patch should only affect dev/test.

* fix type error

* reinstall newer reanimated

* pin expo-dev-client to fix reanimated dev-build issue

* fix type errors, fix bad conflict res

* Fix to notifications badge z-index on desktop

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-09-05 12:23:22 -07:00
dan 9a3fa512eb Enable Fast Refresh for web (#1383) 2023-09-05 11:13:42 -07:00
Paul Frazee 764c7cd569 Updates to use dynamic/responsive styles on web (#1351)
* Move most responsive queries to the hook

* Fix invalid CSS value

* Fixes to tablet render of post thread

* Fix overflow issues on web

* Fix search header on tablet

* Fix QP margin in web composer

* Fix: only apply double gutter once to flatlist (close #1368)

* Fix styles on discover feeds header

* Fix double discover links in multifeed
2023-09-05 10:42:19 -07:00
dan be8084ae10 Fix mismatching button label for speech recognition (#1372)
* Fix mismatching a11y label

* Update all new post button labels to match
2023-09-05 16:55:39 +01:00
dan 161746519c Fix caret jumps for web composer (#1374)
* Fix caret jumps for web composer

* Autofocus at the end on mount
2023-09-05 08:21:10 +01:00
Paul Frazee 419ac2d0df Improved mute alerting (#1355)
* Use a simpler mute alert when viewing a post by a muted user

* Dont mute self-QPs when we're overriding a mute

* Fix types
2023-09-01 12:30:02 -07:00
Paul Frazee 3e96373903 Sort thread replies by likes (#1356)
* Sort replies by likes

* Types fix
2023-09-01 11:54:51 -07:00
Ansh 4cd3ddecad refresh when empty (#1354) 2023-08-31 16:45:18 -07:00
Samuel Newman f16cc9537a show images in notification if post also has record embed (#1349) 2023-08-31 16:44:42 -07:00
Eric Bailey ba393cd642 encode all unsafe characters in post text for translate URL (#1345) 2023-08-31 16:39:18 -07:00
Ansh d2e65d2a7f Fix 1338 mark notifications read with timeout and on app state change (#1340)
* mark notifications read with timeout and on app state change

* fix type
2023-08-30 18:06:02 -07:00
Ansh 4ac82536c9 Fix 1304 refresh notifications when a notif is clicked or received (#1339)
* refresh notifications when a notif is clicked

* make notification syncing smarter

* allow enabled appview proxy on mobile

* put back syncqueue code
2023-08-30 18:04:33 -07:00
Ansh 4bec7c1d85 Fix #1328 fix emoji picker scroll on firefox and chrome (#1332)
* fix emoji picker scroll on firefox and chrome

* click outside emoji picker to dismiss

* dynamically position emoji picker

* dynamically placing picker
2023-08-30 17:58:24 -07:00
Paul Frazee 04992f14f1 Improvements to UI in web logged-out views (#1341)
* Add LoggedOutLayout for desktop/tablet web

* Avoid screen flash in the transition to onboarding

* Fix comment
2023-08-30 17:55:01 -07:00
Ansh a498acab6e fix types for breakpoints on mobile (#1342) 2023-08-30 17:02:23 -07:00
Paul Frazee f9cab178b9 Merge branch 'ansh/app-812-add-custom-feed-discovery-to-onboarding' into main 2023-08-30 16:18:21 -07:00
Paul Frazee 59dcedeea2 Fix: remove bottom bar during onboard 2023-08-30 16:15:06 -07:00
Paul Frazee 8bc8dcc094 Simplify the RecommendedFeeds with breakpoint components 2023-08-30 16:13:09 -07:00
Paul Frazee 3fa9b6daba Fix types and remove dead code 2023-08-30 15:30:26 -07:00
Ansh 9446c67880 Move PreferencesHomeFeed to a screen instead of a modal (#1335)
* move `PreferencesHomeFeed` to a screen instead of a modal

* add web route for home feed preferences

* upgrade `@miblanchard/react-native-slider` to fix lint

* fix web route naming

* fix desktop web styling

* add `react-native-slider` mock
2023-08-30 15:21:12 -07:00
Paul Frazee a29f10aefe Moderation settings fixes (#1336)
* Default isAdultContentEnabled to false on all devices.

The original intent of setting the default based on the device was
to make the maximally-permissive choice. It turns out this was a
mistake as it created sync issues between devices; users would be
confused by the lack of congruity between them. We have to go with
false by default to ensure sync is retained.

* Update preferences model to use new sdk api

* Delete dead code

* Dont show the iOS adult content warning in content filtering settings if adult content is enabled

* Bump @atproto/api@0.6.8

* Codebase style consistency
2023-08-30 15:19:19 -07:00
Paul Frazee 8ed6e72ea4 More fixes to mobile onboard 2023-08-30 15:15:10 -07:00
Paul Frazee 05d1d8d8a4 Fix onboarding on mobile web 2023-08-30 14:57:03 -07:00
Paul Frazee cd8ae1298e Tweak dark mode on web 2023-08-30 10:56:07 -07:00
Paul Frazee b847917969 Tweaks to mobile onboard 2023-08-29 23:02:37 -07:00
Paul Frazee 5e765bf1cb Rework web onboarding 2023-08-29 22:56:13 -07:00
Paul Frazee 5d9534ca72 Move onboarding to the withAuthRequired HOC 2023-08-29 20:20:51 -07:00
Eric Bailey 3a90b479fd fix lightbox on search page (#1330)
* fix lightbox on search page

* add styles to mobile web too
2023-08-29 17:41:50 -07:00
Eric Bailey 22b7964b5e Merge pull request #1334 from bluesky-social/eric/fix-android-perms-noop
handle stuck state with granular android permissions
2023-08-29 19:27:43 -05:00
Eric Bailey 5710140a73 handle stuck state with granular android permissions 2023-08-29 17:09:38 -05:00
Ansh Nanda bf37913701 fix onboarding on web 2023-08-29 12:16:26 -07:00
Eric Bailey 6bee7d518b bump yarn (#1329) 2023-08-29 11:01:14 -07:00
bnewbold 461c1da6de update golang to v1.21; set GOEXPERIMENT=loopvar (#1256)
* golang: update to v1.21, and set GOEXPERIMENT=loopvar

* golang: go mod tidy
2023-08-28 19:35:23 -07:00
Paul Frazee 40e030793a 1.48 2023-08-28 19:11:15 -07:00
Paul Frazee 2619c55c10 Test fixes 2023-08-28 19:10:36 -07:00
Ansh Nanda 742440c22d add more tracking 2023-08-28 18:55:40 -07:00
Ansh Nanda 8f0f3be8fb start onboarding only for new account creations 2023-08-28 18:53:58 -07:00
Ansh Nanda bcef7400db simplify onboarding model function naming 2023-08-28 18:47:56 -07:00
Eric Bailey 1c460c40f4 Make posts behave more like links (#1316)
* use cursor for post cards

* ignore type error

* handle meta keys on non native links

(cherry picked from commit daccafea0b7ab21af6572767e496d20f32ead353)

* remove cursor on non-post notifications, not quite right

* Simplify link handling

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-08-28 18:41:28 -07:00
Paul Frazee cc2838761b Replace web editor link behavior (#1319)
* Replace web editor link behavior (close #1293) (close #1292)

* Update link decorator to match rich text link detector
2023-08-28 18:40:45 -07:00
Patroll 2c60a0328d Fix: Don't flash default profile avatar and link in nav (#1287) 2023-08-28 17:58:14 -07:00
Paul Frazee 5ee754e6f9 Improvements to feed assembly to avoid possible state issues (#1318)
* Avoid potential dropped posts due to pruning when checking for latest

* Add a sanity check to ensure dup react keys never occur (close #1315)
2023-08-28 17:54:59 -07:00
Ansh Nanda a231fdf64e track onboarding steps 2023-08-28 17:51:26 -07:00
Ansh Nanda b38629b9b5 Merge branch 'main' into ansh/app-812-add-custom-feed-discovery-to-onboarding 2023-08-28 17:49:14 -07:00
Paul Frazee e2f0770b88 Remove ability for Post component to load from URI (close #1302) (#1317) 2023-08-28 17:08:21 -07:00
Ansh Nanda b2dd4ea0f5 fix onboarding stuck on welcome 2023-08-28 15:50:51 -07:00
Ansh Nanda 3f1b313fa4 add custom feed discovery to onboarding 2023-08-28 15:41:02 -07:00
Ansh Nanda c4cf288296 remove logs 2023-08-28 13:39:24 -07:00
Ansh Nanda edfd326069 move onboarding to screens 2023-08-28 13:37:44 -07:00
Ansh Nanda 84e065667a update packages 2023-08-28 13:36:34 -07:00
Eric Bailey c77fd588e9 wrap mutation in runInAction (#1305) 2023-08-28 11:55:56 -07:00
Ansh Nanda 0ca28ccca6 Merge branch 'main' into ansh/app-812-add-custom-feed-discovery-to-onboarding 2023-08-25 14:53:03 -07:00
Ansh Nanda 08fe7fb084 create onboarding model 2023-08-25 14:36:10 -07:00
Paul Frazee a3cb12f584 Move the web composer to the top of the screen (#1282) 2023-08-25 10:30:15 -07:00
Eric Bailey b15a435069 Eslint updates (#1281)
* eslint: Update eslintrc

* eslint: Strings must use singlequote  quotes

* eslint: expected { after if-condition

* eslint: update warnings

* a little cleanup

* remove conflicted file

---------

Co-authored-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-08-25 08:48:38 -07:00
Eric Bailey a0dca81a74 don't mention own user from composer (#1279) 2023-08-25 08:47:47 -07:00
Eric Bailey 953ae9c096 Update/fix ChangeHandle form (#1280)
* fix well-known did copy value

* s/Domain/Host in change handle form
2023-08-25 08:47:12 -07:00
Paul Frazee 37a70f0a67 1.47 build 3 2023-08-24 16:29:44 -07:00
Eric Bailey 462022741d Use Pressable for most links/embeds (#1181)
* delay press on all links

* use Pressable for all accessible links
2023-08-24 16:28:26 -07:00
Eric Bailey 4654a9a45e defer loading of feeds until visible (#1271)
* defer loading of feeds until visible

* Fix: use existing hasLoaded

* Fix: dont query for latest during initial load

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-08-24 16:26:29 -07:00
Paul Frazee a5981e127f Fixes to the feed discovery page (#1238)
* Bump yarn.lock for... reasons

* Restyle DiscoverFeeds empty state (close #1236)

* Fix: maintain search state in feed discovery (close #1204)

* tsconfig fixes

* Tweaks to yarn.lock
2023-08-24 16:16:14 -07:00
Ansh 7410bcd888 setup isAuthenticatedUser in profileUiModel inside an action (#1272) 2023-08-24 16:13:42 -07:00
Paul Frazee c6f321862b Add analytics event for when the app is opened from a notification (#1270)
* Add analytics event for when the app is opened from a notification

* Tweak notification ID
2023-08-24 16:07:16 -07:00
bnewbold a115c17a09 bskyweb: switch from PDS backend to AppView backend (#1065)
* bskyweb: replace PDS with AppView (no auth)

* bskyweb: update example .env files for appview
2023-08-24 16:00:45 -07:00
Paul Frazee 766521486c Increment build number 2023-08-23 17:14:30 -07:00
Paul Frazee c1c02f480b A couple quick notifications fixes (#1262)
* Create separate .easignore to ensure google-services.json goes to eas

* Set the notifications serviceDid according to the session host

* Fix types
2023-08-23 17:10:00 -07:00
Paul Frazee 93d5ba1820 Fix eas.json 2023-08-23 16:35:01 -07:00
Paul Frazee 9bd9d40306 1.47 2023-08-23 16:30:33 -07:00
Ansh 6487a87542 [APP-836] Emoji picker for web (#1254)
* add emoji-mart package for emoji dropdown picker

* remove emoji picker modal

* load emoji mart data not as part of the main bundle

* remove @emoji-mart/data

* setup emoji insertion with events

* get emoji data from local static assets

* close emoji picker after one emoji has been inserted

* Switch emoji picker trigger to an icon

* Update emoji-mart-data.js

* make grabbing emoji data work on more browsers

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-08-23 16:29:23 -07:00
Ansh 8ab5eb6583 [APP-786] Native notifications (#1095)
* move `notifee.ts` to notifications folder

* install expo notifications

* add UIBackgroundMode `remote-notifications` to app.json

* fix notifee import in Debug.tsx

* add `google-services.json`

* add `development-device` class to eas.json

* Add `notifications.ts` for native notification handling

* send push token to server

* update `@atproto/api`

* fix putting notif token to server

* fix how push token is uploaded

* fix lint

* enable debug appview proxy header on all platforms

* setup `notifications.ts` to work with app view notifs

* clean up notification handler

* add comments

* update packages to correct versions

* remove notifee

* clean up code a lil

* rename push token endpoint

* remove unnecessary comments

* fix comments

* Remove old background scheduler

* Fixes to push notifications API use

* Bump @atproto/api@0.6.6

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-08-23 16:28:51 -07:00
Ansh 32b9648931 Fixes #1252 fix alt text setting description toggle (#1261)
* make toggle border width slightly larger

* change copy
2023-08-23 16:16:55 -07:00
Eric Bailey b6317d4ce7 Improve handling of unselecting languanges in composer language menu (#1093)
* allow toggling off/on multiple from main composer lang menu

* fix dropdown styles for long labels

* udpate model to use new string field

* update language UI

* save langs to history on submit

* remove edit

* clean up use new fields

* default to deviceLocales

* fix default valu

* feedback

* use radio icon
2023-08-23 13:40:15 -07:00
Eric Bailey acad8cb455 Merge pull request #1260 from bluesky-social/eric/fix-window
fix bad reference on native
2023-08-23 14:34:41 -05:00
Eric Bailey 473a9fc73e fix bad reference on native 2023-08-23 14:31:08 -05:00
Jake Gold b4931fa185 bskyweb: cache /static/{images,js} for 1 week, other files for 1 hour 2023-08-23 09:23:09 -07:00
Paul Frazee 8e1d0b0396 Change Handle modal DNS instruction tweaks for clarity (#1245)
* Remove potentially confusing period from subdomain in changehandle (close #1004)

* Clarify dns instructions further (close #1087)
2023-08-22 16:37:04 -07:00
Paul Frazee 54706a0437 Fix: update posts rendered in notifs on refresh (close #1196) (#1243) 2023-08-22 16:36:49 -07:00
Paul Frazee fcea27ea0b Fix: include link-meta abort signal for timeout (close #1214) (#1240) 2023-08-22 16:36:36 -07:00
Paul Frazee 54118fe478 Fix feed empty state (close #1235) (#1239) 2023-08-22 16:36:23 -07:00
Eric Bailey 2b13dc0f3a Add likes tab (#1227)
* add likes tab

(cherry picked from commit 6c5ffd964ca0b185ddfc37088d82712a006a1163)

* only show Likes tab to authenticated user

(cherry picked from commit ecc1254411d760158b6d7a4c5f05d940db872dfc)

* Bump @atproto/api@0.6.5

* fix types

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-08-22 12:30:51 -07:00
Eric Bailey 548ec6c82d add title attr to text text links (#1228)
* add title attr to text text links

* Revert "add title attr to text text links"

This reverts commit c028cd184e.

* use css tooltips

* add to expanded post state

* handle theming

* add to bskyweb
2023-08-22 11:04:17 -07:00
Ansh 16b265a861 [APP-834] Allow @ing someone in post directly from profile (#1241)
* setup `initMention` for mobile

* setup creating post with profile tagged on web
2023-08-22 11:01:00 -07:00
Ansh 3aadc43c89 [APP-835] trim end of email during login (#1242)
* trim end of email during login

* Switch trimEnd() to trim()

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-08-22 10:52:59 -07:00
Paul Frazee fb1199e21d Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-08-22 10:50:45 -07:00
Paul Frazee 0a50df1cce Minor formatting 2023-08-22 10:50:19 -07:00
Paul Frazee 17fcc2f25c Merge branch 'fix-empty-search' of https://github.com/darnfish/social-app into darnfish-fix-empty-search 2023-08-22 10:49:53 -07:00
Eric Bailey 13c11801b9 fix thread double border (#1251) 2023-08-22 10:49:03 -07:00
Eric Bailey 09a445d804 do not thread author media filtered feed (#1253) 2023-08-22 10:46:49 -07:00
William Gibson d3f525ab28 Don't submit search if query is empty 2023-08-22 04:27:46 -04:00
Ansh 88357d5c82 add profiles sampling to sentry (#1237) 2023-08-21 16:49:59 -07:00
Eric Bailey 4cc2695d84 allow handles to start with a number (#1231)
* allow handles to start with a number

* don't allow leading hyphen
2023-08-21 13:37:57 -07:00
Paul Frazee 257c15ec1f ios buildNumber 2 2023-08-17 18:59:55 -07:00
Paul Frazee 2198aab8b2 Fix to post meta overflow in highlighted post (#1211)
* Fix to post meta overflow in highlighted post

* Give more space to desktop web
2023-08-17 18:59:25 -07:00
Paul Frazee ee9cf7402f Bump react-native-gesture-handler@2.12.1 2023-08-17 18:30:08 -07:00
Paul Frazee 4342d0f84c 1.46 2023-08-17 18:13:32 -07:00
Paul Frazee 26f4e313ad Bump detox 2023-08-17 18:09:18 -07:00
Paul Frazee c7cad72368 Fix android postmeta alignment 2023-08-17 17:48:45 -07:00
Ansh c219fbe57a upgrade react-native-reanimated (#1198) 2023-08-17 17:47:10 -07:00
Paul Frazee 43d1f002f5 Dont suggest users that are muted or blocked (close #1185) (#1209) 2023-08-17 17:44:48 -07:00
Eric Bailey 55ad56f689 default translate to device language (#1207) 2023-08-17 15:45:36 -07:00
Paul Frazee 4a59178cd2 Update the web composer textinput to an emitter (close #1193) (#1205)
The tiptap useEditor() hook creates an awkward challenge for passing
event handlers into its plugins and native events. By introducing a
memoized editor, we should be able to shuttle events out of tiptap
without retriggering the useEditor hook. The emitter can then change
its registered handlers with each state update.
2023-08-17 13:39:59 -07:00
Paul Frazee 5e63d3164b A set of composer fixes (#1187)
* Don't insert a newline on cmd+entrl (close #1173)

* Don't linkify selected text on url-paste (close #1149)

* Disable the adult content controls if there is no media on the post (close #1169)
2023-08-16 10:46:52 -07:00
Paul Frazee 819340dd3c Shorten links in composer to reduce char usage (#1188)
* Modify toShortUrl() to always include the full domain

* Shorten links in the composer to save on characters

* Apply some limits to the link card suggester
2023-08-16 10:22:50 -07:00
Paul Frazee 5379561934 Tune link card font sizes on desktop 2023-08-16 10:10:39 -07:00
Paul Frazee 79a6819769 Tune up the link card to look nicer, show more info, and layout horizontally on web to user space more nicely (#1190) 2023-08-16 10:02:41 -07:00
Paul Frazee 884e5c9294 Fix to "Load new posts" showing sometimes when there's nothing new to show (#1191)
* Fix to feed item react key value (hopefully)

* Fix false-firing of load more (close #1028)
2023-08-16 10:00:22 -07:00
Jerry Chen b0282865fa Require bluesky-social/social-app for .github/workflows/build-and-push-* (#1152) 2023-08-15 18:50:19 -07:00
Paul Frazee 6ccfb1375a Fix tap target size of post dropdown menus (#1180) 2023-08-15 15:49:52 -07:00
Eric Bailey 0576caae36 use greater of indexedAt or machine clock (#1182)
* use greater of indexedAt or machine clock

* correct mobx usage
2023-08-15 15:18:35 -07:00
Paul Frazee 6964382bad Remove view selector offsetting (close #1174) (#1183)
* Remove view selector offsetting (close #1174)

* Remove horizontal scroll indicator in view selector
2023-08-15 15:13:40 -07:00
Paul Frazee ce1d75e164 Fix link color in dark mode (close #1170) (#1184) 2023-08-15 15:09:54 -07:00
Foysal Ahamed abbc6543f4 Repurpose report post modal and re-use for list reporting (#1070)
*  Repupose report post modal and re-use for list reporting

*  Allow reporting a feed generator

*  ♻️ Refactor report modal into one shared component for reporting different collections

*  Adjust report option selector in tests

*  Add test for list reporting

* ♻️  Refactor reason options and add options for list and feedgen

* 🧹 Cleanup remaining todo

* Fix to mutelist react keys

* Fix regression from rebase

* Improve customfeed mobile header

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-08-15 14:32:06 -07:00
Paul Frazee a5762c2d7d Clear caches on session change (#1179) 2023-08-15 12:55:51 -07:00
Eric Bailey 331c506728 fix prefetching lightbox images (#1163)
* fix prefetching lightbox images

* use array signature

* fix other RN native image usage

* delay prefetching to allow UI to re-render
2023-08-15 12:53:03 -07:00
Ansh 77178844fd [APP-798] add key to ProfileCardPills render method (#1158)
* add key to `ProfileCardPills` render method

* More reliable key generation

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-08-15 11:32:57 -07:00
Paul Frazee 94527a4d9e 1.45 2023-08-15 10:08:07 -07:00
Paul Frazee f4891a47a1 Fix to feeds view in profiles (#1171)
* Fix load of feeds tab

* Add e2e test for profile feeds
2023-08-15 09:59:49 -07:00
Eric Bailey a3af2a2b85 use user.handle response from getProfile, not getSession (#1165) 2023-08-15 09:59:34 -07:00
Ansh 4d953f0504 Fixes #1124: Trim alt text before saving (#1159)
* trim alt text before setting

* Drop `trim` from helpers.ts
2023-08-14 11:41:44 -05:00
Paul Frazee 003a75fd8e Build increment 2023-08-11 08:50:59 -07:00
Paul Frazee 993026cbc4 Fix: close keyboard when viewing the self-label modal (#1153) 2023-08-11 08:50:24 -07:00
Paul Frazee 821b9ba6e6 1.44 2023-08-10 16:54:52 -07:00
Paul Frazee c8bc3a1822 Test fix 2023-08-10 16:54:13 -07:00
Paul Frazee 79d78b5f59 Fix: set background color of the view selector (#1151) 2023-08-10 16:47:34 -07:00
Paul Frazee e5b7a894a3 More useful block-state information in embeds (#1150)
* More useful block-state information in embeds

* Tune copy
2023-08-10 16:25:11 -07:00
Paul Frazee ac6f6eef66 Replace the emojis in the self-labeler with a remove button (#1147) 2023-08-10 12:54:27 -07:00
Eric Bailey cc3fcb1645 Adds profile media tab (#1137)
* add media tab

* fix loading state

* cleanup

* update naming

* upgrade api package

* fix load state

* add scroll view to tabs

* fix overflow on mobile web
2023-08-10 10:50:37 -07:00
Paul Frazee 03d152675e Add self-labeling controls (#1141)
* Add self-label modal

* Use the shield-exclamation icon consistently on post moderation

* Wire up self-labeling

* Bump @atproto/api@0.6.0

* Bump @atproto/dev-env@^0.2.3

* Add e2e test for self-labeling

* Fix types
2023-08-09 17:34:16 -07:00
Eric Bailey 48813a96d6 wait for list memberships to load before becoming interactive (#1140)
* wait for list memberships to load before becoming interactive

* add spinner

* remove secondary spinner
2023-08-09 15:50:40 -07:00
Paul Frazee b5511e1450 Bump @atproto.api@0.5.4 2023-08-08 16:24:19 -07:00
Paul Frazee bbe9861eef Add alerts to embeds (#1138)
* Add alerts to embeds

* Add images to the mock data

* Fix types
2023-08-08 15:54:36 -07:00
Paul Frazee e51dbefd0a Fix to feed discovery (#1134)
* Fixes to debounce

* Less aggressive debounce
2023-08-08 11:56:34 -07:00
Paul Frazee 72e459f3e2 Fix rendering of feed and list post-embeds (close #1131) (#1135) 2023-08-08 11:34:33 -07:00
Paul Frazee 3c29a1be4d Fix to react-key uniqueness in feeds (#1136) 2023-08-08 11:34:19 -07:00
Eric Bailey 872a7f93f4 Merge pull request #1133 from bluesky-social/eric/fix-thread-ui
fix thread spacing and reply lines
2023-08-08 12:32:44 -05:00
Eric Bailey c48ff1855c remove unused styles 2023-08-08 11:36:48 -05:00
Eric Bailey 8cb076f5fd fix thread spacing and reply lines 2023-08-08 11:34:48 -05:00
Eric Bailey f7a0ea3e13 Merge pull request #1132 from bluesky-social/eric/fix-reply-line
fix long thread styling
2023-08-08 10:21:21 -05:00
Eric Bailey 85b4de701b fix long thread styling 2023-08-08 10:08:57 -05:00
Paul Frazee 7bbaccad1c Fix: dont use profile preview modal on mobile web (#1125) 2023-08-07 15:01:26 -07:00
Paul Frazee 89fc975a15 Perf: switch to stable react keys (#1113) 2023-08-05 11:29:55 -07:00
Eric Bailey d53cbb91bb fix post thread feedback regression (#1109) 2023-08-04 13:48:22 -07:00
Paul Frazee f63ed57e3b Fix repeated firing of scroll into view on large threads (#1108) 2023-08-04 13:48:07 -07:00
Paul Frazee 5d2d0976ba Increment ios build number 2023-08-04 12:14:53 -07:00
Paul Frazee d9cf37aecf Collection of small UI fixes & improvements (#1104)
* Fix black bar appearing in link card images

* Include QPs in posts cache

* Fix like color for feed likes in notifications

* Fix post embed spacing
2023-08-04 12:14:21 -07:00
Eric Bailey c42b9c1b4e fix feed UI alignment issues (#1106)
* fix feed alignment issues

* fix reason line alignment
2023-08-04 12:13:41 -07:00
Paul Frazee c4459ec4e8 Simplify the after-post logic to avoid a UI bug (#1105) 2023-08-04 09:26:09 -07:00
Paul Frazee b154d3ea21 Labeling & moderation updates [DRAFT] (#1057)
* First pass moving to the new labeling sdk (it compiles)

* Correct behaviors around interpreting label moderation

* Improve moderation state rendering

* Improve hiders and alerts

* Improve handling of mutes

* Improve profile warnings

* Add profile blurring to profile header

* Add blocks to test cases

* Render labels on profile cards, do not filter

* Filter profiles from suggestions using moderation

* Apply profile blurring to ProfileCard

* Handle blocked and deleted quote posts

* Temporarily translate content filtering settings to new labels

* Fix types

* Tune ContentHider & PostHider click targets

* Put a warning on profilecard label pills

* Fix screenhider learnmore link on mobile

* Enforce no-override on user avatar

* Dont enumerate profile blur-media labels in alerts

* Fixes to muted posts (esp quotes of muted users)

* Fixes to account/profile warnings

* Bump @atproto/api@0.5.0

* Bump @atproto/api@0.5.1

* Fix tests

* 1.43

* Remove log

* Bump @atproto/api@0.5.2
2023-08-03 22:08:30 -07:00
Jake Gold 3ae5a6b631 bskyweb: publish Bluesky IPs 2023-08-03 11:02:34 -07:00
Paul Frazee 96280d5f1a Improve the profile preview with "swipe up to view" and local cache optimization (#1096)
* Update the ProfilePreview to use a swipe-up to navigate

* Use the profile cache to optimize load performance

* Hack to align the header in the profile preview against the screen view

* Fix profiles cache logic to ensure cache is used

* Fix dark mode on profile preview
2023-08-03 10:25:17 -07:00
Eric Bailey 1211c353d0 resolve did before loading feed (#1092)
* resolve did before loading feed

* add loader

* wrap with authRequired, handle errors
2023-08-03 10:00:38 -07:00
Paul Frazee a63f97aef2 Use a post and handle-resolution cache to enable quick postthread loading (#1097)
* Use a post and handle-resolution cache to enable quick postthread loading

* Fix positioning of thread when loaded from cache and give more visual cues

* Include parent posts in cache

* Include notifications in cache
2023-08-03 09:44:43 -07:00
William 7256169506 Change button based on option (#1077) 2023-08-02 09:56:47 -07:00
Ansh f33fdb97b6 change copy in `InviteCodes.tsx (#1082) 2023-08-02 09:34:39 -07:00
Emily Liu 869cc3aaae update readme (#1083)
Co-authored-by: Emily Liu <emilyliu732l@gmail.com>
2023-08-02 09:32:13 -07:00
Paul Frazee 4effa88aec 1.42 2023-07-28 21:14:02 -05:00
Paul Frazee 1195f28992 Fix keyboard support on the dropdown (#1073)
* Fix: dropdown now supports accessibility labels and keyboard controls

* Fix event propagation around the post dropdown
2023-07-28 18:12:21 -05:00
Paul Frazee 45da8a86c9 Fix to tests 2023-07-28 16:32:55 -05:00
Ansh 3b8b562268 [APP-737] Accessible native dropdown menu (#988)
* fix comments

* add zeego package

* get basic native dropdown working

* add separator and icon components

* refined native dropdown component

* add android build properties to app.json

* move `PostDropdownBtn` to its own component

* fix selectors issue

* move `PostDropdownBtn` to its own component

* fix hitslop

* fix post dropdown hitslop

* fix android dropdown icons

* move `UserAvatar.tsx` to native dropdown

* use native dropdown in `ProfileHeader.tsx`

* use native dropdown in `PostThreadItem.tsx`

* use native dropdown in `UserBanner.tsx`

* use native dropdown in `CustomFeed.tsx`

* replace `testId` with `testID` (which is what is used everywhere)

* move `Settings.tsx` to use native dropdown

* create jest mocks for zeego

* create jest mock for `zeego/dropdown-menu`

* web styles for native dropdown

* remove example native dropdown

* adjust web styles

* fix propagation

* fix pressable in `Settings.tsx`

* animate dropdown on web

* add keyboard nav and hover styles

* add hitslop to constants

* add comments to NativeDropdown component

* temporarily removed android icons

* add testID to PostDropdownBtn

* add testID back to all NativeDropdown button implementations

* add postDropdownBtn testID

* add testID to dropdown items

* remove testID from dropdown menu item

* refactor home-screen tests for native dropdown

* refactor profile-screen tests for native dropdown

* refactor thread-muting tests for native dropdown

* refactor thread-screen tests for native dropdown

* fix dropdown color for post dropdown button

* remove icons from android dropdown menu

* fix `create-account.test.ts`

* fix `invite-codes.test.ts`
2023-07-28 16:00:37 -05:00
Foysal Ahamed eec300d772 List cleanup on remove (#1069)
* 💄 Hide Add to List option on own profile

*  Remove Lists tab when last list is removed

*  Add listener to list delete on profile screen

*  Only show save changes in list modal when changes are made
2023-07-28 11:04:27 -05:00
Ansh 38d78e16bf Search custom feeds (#1031)
* paginate custom feeds

* basic search

* update `@atproto/api`

* use search from the API

* debounce search for 200ms
2023-07-28 10:29:37 -05:00
Foysal Ahamed 8e9b8b6b36 💄 Hide Add to List option on own profile (#1068) 2023-07-27 13:07:02 -05:00
Paul Frazee 49356700c3 [APP-782] Support invalid handles correctly (#1049)
* Update profile link construction to support handle.invalid

* Update list links  to support using handles

* Use did for isMe check to ensure invalid handles dont distort the check

* Shift the red (error) colors away from the pink spectrum

* Add ThemedText helper component

* Add sanitizedHandle() helper to render invalid handles well

* Fix regression: only show avatar in PostMeta when needed

* Restore the color of likes

* Remove users with invalid handles from default autosuggests
2023-07-27 10:50:12 -05:00
Steven 5a0899b989 fix: invisible url when only a protocol (#1059)
* fix: invisible url when only a protocol

- Fixes https://github.com/bluesky-social/social-app/issues/1058

* fix: handle more cases when url is not http/https
2023-07-27 10:49:37 -05:00
David Buchanan 44b3929240 Update icons.tsx - Simplify SatelliteDishIcon paths (#1048)
This prevents rendering jank
2023-07-25 10:21:17 -05:00
GitStart c1580dae1f fix: ALT text entered in the compose dialog is erased when you press "Edit" again (#1054) 2023-07-25 09:47:26 -05:00
Logan Rosen 806be6f722 Bump react-native-paste-input; remove hack (#1051) 2023-07-25 09:45:38 -05:00
Ansh bb99a234e1 [APP-720] Paginate custom feeds (#1030)
* paginate custom feeds

* Fix loading state bug

* DRY code up
2023-07-21 17:39:06 -05:00
Eric Bailey bf00d49863 #995 use asAnchor on external embeds (#1043)
* use asAnchor on external embeds

* add noFeedback back, fix TouchableWithoutFeedback anchor handling
2023-07-21 17:17:35 -05:00
Ansh 7e1dac0439 fix mute list overflow bug (#1041) 2023-07-20 11:48:23 -07:00
Ansh 30ac9259c7 [APP-775] Add Welcome screen after account creation (#1038)
* add comments to step 1-3

* add onboarding screen

* add analytics for onboarding tracking

* fix useEffect

* change text

* change icon size

* put onboarding into bottom sheet modal instead of react navigation

* wip

* Simplify the type validation

* Fix: only trigger onboarding modal when account creation succeeds

* Add the 'session-ready' event which fires when the new session is stable

* Use the 'session-ready' event to trigger the onboarding modal

* update copy

* update copy

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-07-19 23:50:42 -07:00
Ansh 3517d9fa28 Hotfix mobile web styling issues (#1039)
* remove hardcoded height for bottom bar

* prevent overflow of tab bar on mobile web
2023-07-19 15:00:40 -07:00
Eric Bailey 302490cb31 wrap interval in runInAction (#1037) 2023-07-19 14:24:35 -05:00
Eric Bailey 0ae52e91ce #984 Updating indexedAt timestamps (#1024)
* add TimeElapsed util component, integrate into PostThreadItem

* integrate into posts

* use consistent naming

* use mobx and single interval for TimeElapsed
2023-07-19 12:16:57 -05:00
Eric Bailey 4515559b1a #929 Wrap PasteInput updates in a setTimeout (#1033)
* wrap PasteInput updates in a setTimeout

* just wrap the whole callback
2023-07-19 12:08:40 -05:00
Sam Brownstone abd2c8e695 Fix cursor not being a pointer on profile back button (#1022)
* Fix cursor not being a pointer on profile back button

* Change TouchableOpacity to Pressable

* switch back to TouchableWithoutFeedback

---------

Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
2023-07-18 15:40:36 -07:00
Eric Bailey a6bb38ee51 Merge pull request #1032 from bluesky-social/fix-1001-modal-scrolling
#1001 Modal content overflow
2023-07-18 16:46:22 -05:00
Eric Bailey 8a66af11ae Merge pull request #1011 from bluesky-social/eric/app-741-add-pre-commit-hook
add pre commit hook for linting/formatting
2023-07-18 16:45:24 -05:00
Eric Bailey 9ef54814f0 fix lint 2023-07-18 15:26:04 -05:00
Eric Bailey 1ca5792165 create explicit relationship between values 2023-07-18 15:18:56 -05:00
Eric Bailey 17deaaa7e7 use calc 2023-07-18 15:15:02 -05:00
Ansh Nanda b59ca5f343 undo commit 2023-07-18 13:05:17 -07:00
Ansh Nanda e0f30c716a test 2023-07-18 13:04:29 -07:00
Eric Bailey ea567362a1 Merge pull request #1025 from GitStartHQ/BLUESKY-OSS-8
[Web] A lot of post content in a modal causes parts of modal to become inaccessible
2023-07-18 14:57:21 -05:00
Paul Frazee 8d47e6f112 Merge branch 'therealjeffg-term_violation_addition' into main 2023-07-18 11:47:22 -05:00
Paul Frazee 9ac820baac Tweak copy 2023-07-18 11:47:10 -05:00
Paul Frazee ff61fc3c1d Merge branch 'term_violation_addition' of https://github.com/therealjeffg/social-app into therealjeffg-term_violation_addition 2023-07-18 11:43:14 -05:00
gitstart dea8b74580 fix hidden parts on modal 2023-07-18 07:05:57 +00:00
Eric Bailey aa4b79e77a handle failed custom feeds on home screen (#1012)
* handle failed custom feeds on home screen

* remove unnecessary edit

* make sure edits to pinned feeds are handled and reloaded

* fix lint
2023-07-17 17:31:56 -05:00
Paul Frazee bfed96bd7b Bump ios build number 2023-07-17 16:17:49 -05:00
Paul Frazee ad15ee31f3 [APP-773] Change waitlist explainer copy (#1021)
* Change waitlist explainer copy

* Restore the waitlist modal snap point to 80% to account for smaller phones

* Tune copy further
2023-07-17 16:17:14 -05:00
Jeff Griffiths 76aa792afd adds additional reason for reporting an account profile 2023-07-14 09:50:55 -07:00
Eric Bailey 2f63afc92e fix typo 2023-07-13 17:39:43 -07:00
Eric Bailey c75383bf9c move eslint dep to devDeps 2023-07-13 15:56:29 -07:00
Eric Bailey 5a2401ada9 conditionally install husky 2023-07-13 15:55:30 -07:00
Eric Bailey c83573bf97 set up lint-staged via husky
(cherry picked from commit 98151fafbd9b248fce62f013cecd3d20d4d17006)
2023-07-13 15:35:56 -07:00
Paul Frazee 3bd891b01a 1.41 2023-07-07 12:01:31 -05:00
Paul Frazee 237e957d16 Fixes and improvements to the Profile Preview modal (#992)
* Fix: use more reliable navigation method

* Fix: show lightbox over the active modal

* Fix: close the profile preview on navigation

* Factor out UserPreviewLink and add preview behavior to notifications

* Fix postmeta overflow on web

* Fix lint
2023-07-07 12:00:17 -05:00
Paul Frazee d8aded7b15 1.40 2023-07-06 21:24:01 -05:00
Paul Frazee 6f69157269 Post UI updates (Profile Preview on mobile) (#990)
* Update postmeta to put the timestamp on the right side on mobile

* Drop the two-line PostMeta mode

* Add ProfilePreview modal

* Tune PostMeta to give the best behavior possible for a given platform

* Remove old showFollowBtn attributes

* Fix style issue

* Switch the follow button in the profile header to use the inverted color for consistency with the rest of the app

* Fix lint

* Fix darkmode

* Tune the profile preview footer

* Better analytics choice
2023-07-06 21:12:54 -05:00
Ansh df7552135a [APP-703] Android horizontal scroll registers as tap (#960)
* use Touchables from react-native-gesture-handler

* upgrade `react-native-gesture-handler` to latest version

* add FixedTouchableHighlight for android

* add workaround comment

* wait for animations to complete before loading data

* downgrade RNGH back to the version we had
2023-07-06 20:41:27 -05:00
Paul Frazee bf1785765d [APP-729] Replace the ImageHider blurring effect with a simpler and more reliable card (#959)
* Replace the ImageHider blurring effect with a simpler and more reliable card

* A few improvements to ImageHider layout

* Simplify the ImageHider a bit more

* Small web layout tweak
2023-07-06 20:29:52 -05:00
Ansh b06304a253 [APP-28] add status page link (#987)
* add status page to mobile

* add status page URL to super slow loading screen

* store STATUS_PAGE_URL in constants.ts
2023-07-06 20:29:18 -05:00
Paul Frazee 831b367eb9 [APP-736] Clarify hate-group moderation as it's currently used (#985)
* Clarify hate-group moderation as it's currently used

* Update src/lib/labeling/const.ts

Co-authored-by: Emily Liu <emilyliu7321@gmail.com>

---------

Co-authored-by: Ansh <anshnanda10@gmail.com>
Co-authored-by: Emily Liu <emilyliu7321@gmail.com>
2023-07-06 20:28:31 -05:00
Paul Frazee e14c9783e0 [APP-735] Post language improvements (#982)
* Fix composer character-counter bouncing around UI elements

* Fix composer toolbar padding when keyboard is dismissed on iOS

* Use the full name of the language in the composer footer

* Add headings to the DropdownButton

* Update the composer language control to use a simpler dropdown

* Fix lint

* Add translate link to Post component used in notifications

* Fix lint
2023-07-06 20:28:10 -05:00
Jonty Wareing f05c2f06d6 Fix missing post text in noscript post view (#981) 2023-07-06 12:12:00 -05:00
Paul Frazee edb37e2c06 1.39 2023-07-05 21:22:04 -05:00
Paul Frazee d442b1cd4c Update support links (#977)
* Add the new zendesk feedback form URL

* Dont wrap handle or display name in the drawer

* Add help link

* Tune drawer footer layout

* Type fixes

* make helpdesk urls more composable for future

* fix typo

---------

Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
2023-07-05 19:58:29 -05:00
Paul Frazee 3a6073abb8 Added instructions for .well-known method (supersedes #887) (#979)
* Added instructions for .well-known method

* Factor out SelectableBtn

* Rework the ChangeHandle modal to be a little clearer

* Fix lint

* Fix desktop layout

---------

Co-authored-by: Haider Ali Punjabi <haiderali@cyberservices.com>
Co-authored-by: Haider Ali Punjabi <haideralipunjabi@hackesta.org>
2023-07-05 19:56:42 -05:00
Ansh fe32730025 [APP-702] Render Custom Feed likes properly (#980)
* render href for custom feed likes properly

* fix custom feed text in push notification

* fix custom feed accessibility title

* fix lint
2023-07-05 19:56:26 -05:00
Ændra Rininsland 99aa38e3ca Fixes vertical alignment in feed tab bar (#974)
The tab bar items need `justify-content: center` on them or else they can appear unaligned when a feed name has an emoji character in it.
2023-07-05 18:26:18 -05:00
Ikko Eltociear Ashimine 3498c1d239 fix: typo in feed-manip.ts (#967)
prefered -> preferred
2023-07-05 09:49:45 -07:00
Paul Frazee 9750c393a0 1.38 2023-07-03 19:05:54 -05:00
Paul Frazee c8eeb6ba1c Fix: re-add the scroll boundary to avoid minimal shell at top of screen (#956) 2023-07-03 18:36:49 -05:00
Ansh 40a872612f don't throw, but log OTA listener errors (#958) 2023-07-03 18:17:28 -05:00
Ansh 269c0687fd track successful account creation (#955) 2023-07-03 18:17:03 -05:00
Paul Frazee 343154a403 Fix reply-root reference (fixes thread muting) (#957) 2023-07-03 17:54:09 -05:00
Paul Frazee 696bffe832 Add alt text validation option to user preferences (supersedes #913) (#914)
* Add alt text validation option to user preferences

* Fix typos/linting issues

* Update accessibility setting to match styles

* Update the required alt text reminder to go away once it's added

---------

Co-authored-by: Emma Fuller <emma@emmafuller.dev>
2023-07-03 15:58:07 -05:00
Paul Frazee bc55241c9a [APP-724] Collection of accessibility fixes (#949)
* Fix: include alt text on the web lightbox image

* a11y: Dont read the 'ALT' label

* a11y: remove a wrapper behavior from posts

This appears to have been introduced with the goal of creating meta
actions on posts, but the behavior seems counter-productive. The
accessibility inspector was unable to access individual items within
the post and therefore most content was simply skipped.

There may be a way to support the post actions without losing the
ability to access the inner elements but I couldnt find it. -prf

* a11y: apply alt tags to image wrappers so they get read

* a11y: set Link accessibilityLabel to the title if none set

* a11y: skip the SANDBOX watermark

* a11y: improve post meta to not read UI and give a useful date

* ally: improve post controls

* a11y: add labels to lightbox images on mobile

* fix types
2023-07-03 15:57:53 -05:00
Paul Frazee 0163ba0af8 Fix: let images on desktop web take more vertical space (#953) 2023-07-03 15:57:39 -05:00
Ansh edff1992b1 Add permission checks before saving image (#945)
* catch permission errors when saving image to album

* Save photos to media library alone (not an album)

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-07-03 13:17:12 -05:00
Paul Frazee 7cf0db7d14 Fix saved feeds screen layout on web (close #920) (#943) 2023-07-02 15:59:07 -05:00
Markus Amalthea Magnuson 1ea2a94b9b Fix keyboard navigation on settings page. (#923) 2023-07-02 15:18:42 -05:00
Markus Amalthea Magnuson 6768e3ff71 Make sidebar avatar keyboard-clickable. (#921) 2023-07-02 15:07:39 -05:00
Paul Frazee 97f0d3431c fix: stabilize minimalShellMode toggling by introducing modified thresholds (supersedes #938) (#942)
* add separate scroll up/down thresholds to prevent rapid state changes

* set `DY_LIMIT_DOWN` to 150

* Use a different scroll dy limit on web/mobile

---------

Co-authored-by: Sehyun Chung <sehyun.chung@icloud.com>
2023-07-02 15:03:16 -05:00
Ansh 7ee7d968e5 [APP-708] Onboarding revamp (#939)
* Move Discover New Feeds button to the top of the MultiFeed

* add discover custom feeds to empty following page
2023-07-02 13:30:02 -05:00
Dylan Smith 2be2498940 Use consistent font weight for repost count (#940) 2023-07-02 13:25:47 -05:00
Paul Frazee 7597fab290 1.37 2023-07-01 14:30:36 -05:00
Paul Frazee 2e93e4a919 Performance improvement (#937)
* Perf: Wait until a feed is visible in the home screen before fetching data

* perf: update feed checkForLatest to use limit=1

* Fix lint
2023-07-01 14:25:13 -05:00
Paul Frazee 93689ad73d Fix: correctly handle the case where the user has no languages configured 2023-06-30 12:21:30 -05:00
Paul Frazee 948b324cd8 1.36 2023-06-30 12:07:46 -05:00
Paul Frazee d50ba22820 Fix: reset navigation state on account switch (#933) 2023-06-30 11:38:37 -05:00
Paul Frazee 010588ee7c Fix thread muting (#932) 2023-06-30 11:38:22 -05:00
Paul Frazee ed5a88d9d8 [APP-718] Improvements and fixes to language handling (#931)
* Add locale helpers for narrowing languages

* Add a translate link to posts in a different language

* Update language filtering to use narrowing when multiple declared

* Fix a few more RTL layout cases

* Fix types
2023-06-30 11:35:29 -05:00
Paul Frazee 48844aa4c7 Include a notice during account creation for under-18 users (#927) 2023-06-30 11:34:52 -05:00
Paul Frazee c72e24f841 [APP-716] Add 'save image' button to the lightbox (#926)
* Add 'save image' button to the lightbox

* Fix types

* Fix types
2023-06-30 11:34:04 -05:00
Paul Frazee 5fcca17129 1.35 2023-06-28 13:41:42 -05:00
Paul Frazee eb05c4cd6f [APP-692] Accessibility font-scaling fixes (#922)
* Fix: enable font scaling in the composer text input

* Fix: cancel button in search no longer wraps

* Fix: report modals no longer clip off the bottom with scaled fonts

* Fix scrolling on android

* Allow wrapping in dropdown items until we can handle proper sizing
2023-06-28 13:38:21 -05:00
Paul Frazee df3589f207 Fix: hide the keyboard before showing the discard modal (#925) 2023-06-28 13:37:19 -05:00
Paul Frazee 8d32f3de37 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-06-28 09:59:16 -05:00
Paul Frazee c98bdcf86d 1.34 2023-06-27 20:56:45 -05:00
Paul Frazee f8d218e11a Simulator fixes (#918)
* Update the mock server to use the dev-env to manage the server

* Fix list testIDs

* Fix the invite test construction

* Remove leftover test hardcode
2023-06-27 20:55:46 -05:00
Paul Frazee dce80be075 Fix copy and dark mode styles in the home feed preferences (#915) 2023-06-27 15:00:00 -05:00
Paul Frazee 0921dd4335 Fix some broken links on policy docs (#916) 2023-06-27 14:59:42 -05:00
Paul Frazee a733b5b9f4 Revert change to the cancel button in the composer (#917) 2023-06-27 11:56:26 -07:00
Paul Frazee 1024f37a54 Merge branch 'benharri-forks-skip-confirmation-for-empty-post' into main 2023-06-27 11:04:33 -05:00
Paul Frazee 0f9429605d Merge branch 'skip-confirmation-for-empty-post' of https://github.com/benharri-forks/social-app into benharri-forks-skip-confirmation-for-empty-post 2023-06-27 11:01:25 -05:00
Ansh a8bbaa06c7 [APP-705] Metrics revamp pt2 (#896)
* export track function from analytics.tsx

* fix create account tracking

* fix tracking sign in

* add custom feed events

* fix type errors

* refactor create post event

* add profile follow & unfollow events

* refactor PostsFeedSliceModel into its own file

* refactor PostThreadItemModel into its own file

* reorganize code a lil bit

* refactor post-thread-item to use post-feed-item model under the hood

* add post events

* add post reply tracking

* track custom feed load more

* track list subscribe and unsubscribe
2023-06-27 10:11:05 -05:00
Paul Frazee bfaa6d73f3 Improvements to the alt text behaviors in the composer (#910)
* Add an image preview in the alt modal

* Composer: add info about alt text and a green checkmark when done

* Shrink the alt visual indicator a bit so it doesnt obscure the image

* Fix typo

* Fix: avoid requiring multiple tabs to save alt text

* update react-native-screens

* Improve the alt text help tip

* Remove redundant hints

---------

Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
2023-06-27 09:52:49 -05:00
Ansh 25b3e14926 make discard btn more apparent in UI (#912) 2023-06-26 17:10:04 -07:00
Paul Frazee cd21a7dfc9 Fix Voice Control input on iOS (closes #891) (#911)
* Add patch to fix issue with VoiceControl on iOS

* Fix .patch
2023-06-26 18:53:35 -05:00
Ben Harris 2e082b6977 fix cancel post behavior
- prompt now appears for the cancel button
- no prompt when post is empty
- appease eslint
2023-06-26 16:28:28 -04:00
Ansh b9abd444e5 [APP-657] Add share list functionality (#863)
* replace delete list button text with icon

* fix mute list styling on desktop

* add share button to nav bar on a list

* fix styling when on profile

* bug: add key to ImageHorzList

* clean up code & refactor

* fix styling for ListItems

* create a reusable ListActions component for actions on a list

* remove dead styles

* add keys to ListActions

* add helpers to set list embed

* render list embeds

* fix list sharing on web

* make style prop optional in ListCard

* update `@atproto/api` to `0.3.13`
2023-06-26 12:15:39 -05:00
Markus Amalthea Magnuson 1666a747eb Add a11y details to profile page compose button. (#909)
This adds accessibility role, label and hint to the compose button on profile pages, to match the same button in all other views.
2023-06-26 12:14:51 -05:00
Ansh 08804f265e [APP-690] better handling of post languages language filtering (#893)
* add SelectLangBtn

* memoized objects that are created to reduce re-creation on re-render

* add langs when uploading post

* only send the top 3 languages otherwise backend will throw error

* mv ContentLanguagesSettings to folder

* add post languages settings modal and state

* fix typos

* modify feed manip to also check langs label on post

* Fix tests

* Remove log

* Update feed-manip.ts

* Fix syntax errors

* UI tuneups

* Show the currently selected languages in the composer

* fix linting

* Use a bcp-47 matching function

* Fix a duplicate language issue

* Fix web

* Dont include lang in prompt

* Make select language btn an observer

* Keep device languages on top of language selection UIs

* Fix android build settings

* Enforce a max of 3 languages in posts

* Fix tests

* Fix types

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-06-23 12:48:52 -05:00
Logan Rosen 9b19a95e63 Bump @types/react to ^18 and adjust types (#889) 2023-06-22 12:40:32 -04:00
Paul Frazee 180697b66b 1.33 2023-06-16 16:28:46 -05:00
Paul Frazee 46c65958bc Merge branch 'estrattonbailey-eric/reply-settings-toggle' into main 2023-06-16 16:02:56 -05:00
Paul Frazee 20cdede5e1 Small style fixes 2023-06-16 16:02:26 -05:00
Paul Frazee 31c9e02c0a Update feed settings icon 2023-06-16 15:56:27 -05:00
Eric Bailey 20f77ae7b7 feat: styling/copy cleanup 2023-06-16 15:17:09 -05:00
Eric Bailey 73c6afc7fb fix: comment 2023-06-16 15:16:30 -05:00
Eric Bailey 896aea9837 feat: add home feed preferences settings modal and tuners 2023-06-16 15:01:43 -05:00
Ansh 17e7590bcd [APP-511] metrics overhaul: frontend work (#506)
* WIP

* fix types and update imports

* wip

* tagged events that should be server side

* remove server-side analytics

* remove useless import

* add additional profile header events

* remove useless import

* track follow/unfollow clicks

* add missing types
2023-06-15 16:45:14 -05:00
Paul Frazee 1695ae34db 1.32 2023-06-14 23:17:25 -05:00
Paul Frazee 56ec3bf89e Move policy docs to blueskyweb.xyz (#881) 2023-06-14 20:00:28 -05:00
Paul Frazee 3663ee57f3 Add testnet warning (#880)
* Add testnet warning

* Add watermarks to posts

* Call the test environment the Sandbox
2023-06-14 20:00:16 -05:00
Ansh 775b5e6578 add checks to make sure we are on web (#879) 2023-06-14 17:20:46 -05:00
Tymoteusz Boba 272ddeb7e2 Upgrade Reanimated from 2.14.4 to 3.1.0 (#753)
* Update Reanimated API to v3

* Fix failing tests after updating Reanimated

* Include changes from package.json in Reanimated library to patch

* upgrade reanimated to 3.3.0

* remove patch

* upgrade bottom sheet

---------

Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
2023-06-14 16:35:06 -05:00
Ansh 9b9f339e3e [APP-686] Fix mobile web styling (#876)
* fix desktop window size

* fix desktop window size

* add listener for resize events

* fix when going from mobile to web

* only add eventListener for web
2023-06-14 15:26:44 -05:00
Ansh 71af9fd04b add error handling to updateCache for saved-feeds (#878) 2023-06-14 15:14:56 -05:00
Markus Amalthea Magnuson c060cd4158 Various case and text fixes. (#757)
* Various case and text fixes.

* Update some labels per requested changes.

---------

Co-authored-by: Ansh <anshnanda10@gmail.com>
2023-06-13 11:35:13 -07:00
Ivan Silvestre 37782ae60b Desktop: prevent unnecessary X scroll between 1230px and 1260px (#828)
* Desktop: prevent unnecessary X scroll between 1230px and 1260px

* imports structure without changes

* re add dot to text
2023-06-13 11:29:36 -07:00
GitStart c20f8937cb UX: account deletion dialogue does not tell me which account I'm deleting (#835)
* fix: account deletion dialogue does not tell me which account I'm deleting

* update styles and display name
2023-06-13 11:24:57 -07:00
Paul Frazee 1a12fa5775 Add temporary appview-proxy header toggle (#874) 2023-06-13 13:10:42 -05:00
Paul Frazee 6efbe820d9 Merge branch 'loganrosen-loganrosen/heading-elements' into main 2023-06-12 17:26:17 -05:00
Paul Frazee bc2bf20e08 Update info screen titles to use H1 2023-06-12 17:25:52 -05:00
Paul Frazee 9c8e0ab33a Merge branch 'loganrosen/heading-elements' of https://github.com/loganrosen/social-app into loganrosen-loganrosen/heading-elements 2023-06-12 17:06:39 -05:00
Paul Frazee abdb4aace6 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-06-12 17:06:17 -05:00
Markus Amalthea Magnuson 571285c2b4 Fix image-only posts not being visible in custom feeds. (#871) 2023-06-12 17:05:31 -05:00
Logan Rosen 9232daba7a Move useWebMediaQueries() above return (#872) 2023-06-11 20:12:50 -07:00
Markus Amalthea Magnuson 8f74c7b949 Fix image-only posts not being visible in custom feeds. 2023-06-12 01:40:59 +02:00
Logan Rosen 55cf53cfd5 Use native heading elements 2023-06-10 19:12:26 -04:00
Paul Frazee 8d03ab9399 1.31 2023-06-09 17:32:40 -05:00
Logan Rosen 9ac8c44a6a Use Linking.openSettings() so it works on Android (#865) 2023-06-08 20:47:24 -07:00
Logan Rosen cae615769c Link to instructions for creating Sentry auth token (#864) 2023-06-08 19:54:37 -07:00
Ansh 6a967cce00 make build version text copy on press (#862) 2023-06-08 14:40:20 -05:00
Ansh b3e7801796 Revert "show date after 7 days closes #754" (#860) 2023-06-08 11:32:56 -05:00
Ansh 007d12e182 push instead of navigate (#861) 2023-06-07 17:55:25 -05:00
Ansh 0be14a1b46 [APP-680] Allow users to add details when reporting (#854)
* allow user to add text when reporting post

* add DMCA override

* increase modal size

* fix dark mode text color

* re-organize components

* add details option when reporting account

* hard-code modal size so it works on smaller devices

* fix modal on web

* Remove outline from textarea focus

* Tweak some styles

* Fix lint

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-06-07 11:11:04 -05:00
Ansh fc12a1205c allow image to clicked to go to post in notificaitons (#858) 2023-06-07 09:57:49 -05:00
Logan Rosen bdcdb4e4dc Use expo-image-picker on Web (#847) 2023-06-06 09:38:58 -05:00
Keith Cirkel a67eaa6ace remove X-UA-Compatible meta tag (#857)
This meta tag allows Internet Explorer 7 through 11 to change which document mode they would use. As of 2013, however, [Microsoft Edge would ignore this value except under strict circumstances](https://learn.microsoft.com/en-gb/archive/blogs/ie/living-on-the-edge-our-next-step-in-helping-the-web-just-work). This meta tag is ignored in modern versions of Edge (Chromium based).

[Internet Explorer 11 reached EOL in June 2022](https://blogs.windows.com/windowsexperience/2022/06/15/internet-explorer-11-has-retired-and-is-officially-out-of-support-what-you-need-to-know/) and today makes up an exceedingly small proportion of internet traffic.

It's unlikely that anyone is browsing on Internet Explorer, and less
likely that they're browsing on IE<11, which makes this tag redundant.

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-06-06 09:33:23 -05:00
Keith Cirkel b33626c3c7 remove trailing / on meta tags (#856)
* remove trailing / on meta tags

Meta tags are [void elements](https://html.spec.whatwg.org/multipage/syntax.html#void-elements) which means they are self closing, and do not require a closing tag, nor a trailing `/`.

The trailing `/` is something that was required in XHTML but [is ignored
in HTML](https://html.spec.whatwg.org/multipage/syntax.html#start-tags). Quoth the spec:

> On void elements, [the trailing slash] does not mark the start tag as self-closing but instead is unnecessary and has no effect of any kind. For such void elements, it should be used only with caution — especially since, if directly preceded by an unquoted attribute value, it becomes part of the attribute value rather than being discarded by the parser.

* remove trailing / on link tags
2023-06-06 09:32:30 -05:00
Ansh bf36101bf2 [APP-655] Password autocomplete when logging in (#838)
* remove unused styles

* refine login form to autofill password from password manager
2023-06-06 09:31:50 -05:00
Logan Rosen 8cc89a5a16 Fix dark mode detection on mobile (#852) 2023-06-05 09:40:13 -07:00
Paul Frazee 48637246c7 1.30 2023-06-02 15:38:49 -05:00
Paul Frazee 75b729a670 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-06-02 15:29:36 -05:00
Paul Frazee a2721ceb95 Fix to simulator tests 2023-06-02 15:29:27 -05:00
Ansh ba4bb46c3f [APP-107] OTA updates (#587)
* add 1000ms fallbackToCacheTimeout

* add listener via useOTAUpdate hook and show modal if update is available

* finish expo-updates setup

* setup useOTAUpdate hook

* add 1000ms fallbackToCacheTimeout

* add listener via useOTAUpdate hook and show modal if update is available

* finish expo-updates setup

* setup useOTAUpdate hook

* add OTA updates

* Update build.md

* temporarily disable ota updates

* refactor useOTAUpdate code
2023-06-02 13:27:59 -07:00
Paul Frazee ad4eaf5ed2 Move suggested follow recommendations to the server (#836)
* Move suggested follow recommendations to the server

* fix search results color in dark mode

---------

Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
2023-06-02 15:01:16 -05:00
Paul Frazee e8843ded5b Fix a bunch of type errors and add a type-check to the github workflows (#837)
* Add yarn type-check

* Rename to yarn typecheck

* Fix a collection of type errors

* Add typecheck to automated tests

* add `dist` to exluded folders tsconfig

---------

Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
2023-06-02 15:01:04 -05:00
Logan Rosen 46c9de7c18 Don't show Remove button for nonexistent avatar/banner (#833) 2023-06-02 09:51:11 -05:00
Paul Frazee 3217c7ff32 More custom-feed behavior fixes [APP-678] (#831)
* Remove extraneous custom-feed health check

* Fixes to custom feed preference sync

* Fix lint

* Remove dead code (client-side suggested posts constructor)

* Enforce the feed-fetch limit in the client if the generator fails to observe the parameter

* Bump the number of items fetched in the multifeed per feed from 5 to 10

* Reset the currently active feed when the pinned feeds change

* Some fixes to icons

* Add a prompt to load latest to the multifeed

* Remove debug
2023-06-02 09:48:53 -05:00
Paul Frazee e9c84a192b Fixes to feed preference and state sync [APP-678] (#829)
* Remove extraneous custom-feed health check

* Fixes to custom feed preference sync

* Fix lint

* Fix to how preferences are synced to enable membership modifications
2023-06-01 14:46:13 -05:00
Jake Gold f416798c5f bskyweb: add security.txt 2023-06-01 11:47:59 -07:00
Kadi Kraman d4e7355cca fix: support scroll to top on profile screen (#725)
* Support scroll to top on profile screen

* Refactor types

* Remove async

* Improve types
2023-06-01 11:00:00 -05:00
Michi Hoffmann 792d7e1a55 Fix line breaks on side bar links (#815) 2023-06-01 10:51:42 -05:00
Samuel Newman 88212eb065 translate to primary language rather than just english (#814) 2023-06-01 10:50:18 -05:00
Ansh 1fc694d488 [APP-656] make alt text expandable (#821)
* make alt text expandable

* clean code
2023-06-01 10:47:17 -05:00
Ansh 5c25d670d0 move early return to after all hooks (#823) 2023-06-01 10:41:27 -05:00
Ansh 54e5e30945 [APP-674] Fix search results tab bar (#822)
* fix search results tab bar

* Fix spacing on web

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-06-01 10:40:26 -05:00
Jake Gold 49840f3a27 bskyweb: gzip HTTP responses + some other minor improvements (#826)
* bskyweb: gzip HTTP responses + JSON logging + minor refactoring

* reduce timeout and max header size

* add a security.txt
2023-06-01 10:22:02 -05:00
Ansh 8fde55b59b simplify how x position is calculated for scrollTo in TabBar (#820) 2023-06-01 10:19:15 -05:00
bnewbold 31a41d9b09 bskyweb: run-dev-bskyweb in debug mode (#827) 2023-05-31 20:44:50 -07:00
Ansh 189fdb1789 fix linting & type errors (#819) 2023-05-31 17:19:08 -07:00
LW 7d7410942f fix: make DesktopLeftNav not overflow screen (#762)
* fix: make DesktopLeftNav not overflow screen

* scroll: auto
2023-05-30 21:18:00 -05:00
Ansh 3cb8169a4f Fix deeplink when app is suspended (#812)
* Update Navigation.tsx

Missing If statement within the Deep Linking function that broke the ability to change state to hometab

* Updated the function correctly, I missed a bracket

* format

* add pre-existing home state when unspecified path

* Remove unnecessary log

---------

Co-authored-by: Gai <68623807+that-gai-gai@users.noreply.github.com>
Co-authored-by: that-gai-gai <kgai@protonmail.com>
2023-05-30 21:16:29 -05:00
Paul Frazee 421f29ad98 Merge branch 'ericvolp12-inherit_system_theme' into main 2023-05-30 21:13:34 -05:00
Paul Frazee 2413549fa5 Tune sizing of appearance control 2023-05-30 21:13:18 -05:00
Jaz 09ade363fd Merge branch 'main' into inherit_system_theme 2023-05-30 18:25:29 -07:00
38elements e224569a11 Remove lodash.clonedeep in package.json (#652) 2023-05-30 20:19:09 -05:00
Matin Zadeh Dolatabad fa9351534b perf: enable lazy loading for tab navigation (#711) 2023-05-30 20:16:30 -05:00
Markus Amalthea Magnuson 7d47b342d6 Make terms and notices dates less ambiguous. (#713) 2023-05-30 20:09:35 -05:00
Ollie H c0ca27b7ce Use proxy for fetching link meta (#716)
* Use proxy for fetching link meta

* Remove link meta test due to hitting proxy

* setup different staging and prod proxy URLs

---------

Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-30 20:08:49 -05:00
Bartosz Kaszubowski 2018558585 feat(Login): allow submitting on password field (#720) 2023-05-30 19:56:13 -05:00
Ben Harris 037713321d show package.json version on web (#717) 2023-05-30 19:53:23 -05:00
Ollie H a9a661ab58 Add ability to reply, repost (without quote post), and like posts using VoiceOver (#765)
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-30 19:50:56 -05:00
Ben Harris 7458b6f600 Move MAX_GRAPHEME_LENGTH to constants.ts (#735) 2023-05-30 19:41:56 -05:00
skipness 0239225796 fix: content trimmed in server input modal (#733) 2023-05-30 19:41:21 -05:00
Okechukwu Somtochukwu 8258317c38 [typo] correct typo was 'fo' instead of 'to' (#721) 2023-05-30 17:26:40 -07:00
Ollie H 072682dd9f Rework scaled dimensions and compression (#737)
* Rework scaled dimensions and compression

* Unbreak image / banner uploads

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-30 19:23:55 -05:00
Ollie H deebe18aaa Use non-pipe translation link (#740) 2023-05-30 18:54:47 -05:00
Ansh a911250ea8 add instructions to removing sentry in build.md (#749)
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-30 18:50:52 -05:00
David Buchanan 1ca40cf1fd Update HomeIconSolid: widen the front door (#756) 2023-05-30 18:49:03 -05:00
Ben Harris ca34364cf0 Support arrow key navigation for Lightbox.web.tsx (#761)
* Support arrow key navigation for Lightbox.web.tsx

renames onEscape to onKeyDown

* appease eslint

* appease eslint again

* wrap onPressLeft and onPressRight in useCallback
2023-05-30 18:45:49 -05:00
MohammadReza Mahmoudi 442d453600 Fix profile load issue + enhancement of profile isCurrent style (#764)
* fix profile isActive issue

* fix myProfile load issue when visiting other profiles first

* fix lint issues

* change currentRouteName to currentRouteInfo
2023-05-30 18:42:22 -05:00
Paul Frazee 5d0a3e6c65 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-05-30 18:35:18 -05:00
Seth Arnold 1e5c4609a8 Update ProfileHeader.tsx (#810)
Change error message from "failed to blocK" to "failed to unblock"
2023-05-30 18:32:46 -05:00
Paul Frazee a11a1b7657 Merge branch 'show_timestamp_after_7d' of https://github.com/benharri-forks/social-app into main 2023-05-30 18:20:26 -05:00
Paul Frazee 762ab3d385 Update yarn.lock 2023-05-30 18:20:11 -05:00
Ben Harris 439135944c make eslint happy 2023-05-30 18:30:12 -04:00
Ben Harris f2cf1d8c79 show date after 7 days, closes #754
adjust the behavior of ago() to show the date after a week
2023-05-30 18:22:22 -04:00
Ollie H 234e04c396 Update follower/following a11y hints and labels (#755)
* Update follower/following a11y hints and labels

* Update ProfileHeader.tsx

---------

Co-authored-by: Ansh <anshnanda10@gmail.com>
2023-05-30 13:39:50 -07:00
Ben Harris 09c515d273 fix web links to no longer point to staging (#758)
* fix web link in README.md

* missed one
2023-05-30 13:34:14 -07:00
Josh Soref c808721938 Spelling (#772)
* spelling: account

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: activated

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: additional

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: appropriate

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: bskyweb

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: description

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: display

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: highlighted

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: javascript

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: locally-hosted

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: notification

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: occurring

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: parenthetical

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: preexisting

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: prefetched

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: punctuation

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

* spelling: simplicity

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>

---------

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2023-05-30 14:46:43 -05:00
Ansh 724951e2f0 stick to bottom sheet version 4.4.5 (#777) 2023-05-30 14:37:40 -05:00
GitStart 69bcb72061 update delete app password confirmation modal (#803) 2023-05-30 13:56:30 -05:00
Logan Rosen a89129fcf6 Fix button to find people to follow (#806) 2023-05-30 13:55:06 -05:00
Paul Frazee 19ea6b6ae7 Merge branch 'ivansilvestre-main' into main 2023-05-30 13:53:46 -05:00
Paul Frazee e77c616970 Hide both the left and right nav on desktop when logged out 2023-05-30 13:53:33 -05:00
Paul Frazee 7a7b99d033 Merge branch 'main' of https://github.com/ivansilvestre/social-app into ivansilvestre-main 2023-05-30 13:45:44 -05:00
bnewbold a51d5dc7e2 labels: add 'corpse' to 'violent' category (#802)
Overlooked this when the label was added earlier.
2023-05-30 13:43:37 -05:00
Ivan Silvestre caab6309df Desktop: hide the left panel and the invite codes from the main page if you are not logged in 2023-05-30 13:54:23 +01:00
Jake Gold e58fe2e204 add/serve .well-known files (both files) 2023-05-26 17:59:25 -07:00
Jake Gold c98b65f6a9 add/serve .well-known files 2023-05-26 17:49:58 -07:00
Paul Frazee 7b6948e617 Merge branch 'custom-algos' into main 2023-05-25 21:17:11 -05:00
Paul Frazee e832352e98 Bump build numbers 2023-05-25 21:14:45 -05:00
Paul Frazee 62b309be5b Include follow button in posts on the multifeed 2023-05-25 21:13:30 -05:00
Paul Frazee 93984277c9 Simulator fixes 2023-05-25 21:10:44 -05:00
Ansh Nanda bcedbbc8b3 error for custom feed when it is not valid or offlien 2023-05-25 19:01:37 -07:00
Paul Frazee 11262ffc83 Merge branch 'custom-algos' of github.com:bluesky-social/social-app into custom-algos 2023-05-25 20:49:16 -05:00
Paul Frazee 229153a26c Fix tsc 2023-05-25 20:48:43 -05:00
Ansh Nanda fa9b91f793 Merge branch 'custom-algos' of https://github.com/bluesky-social/social-app into custom-algos 2023-05-25 18:48:41 -07:00
Ansh Nanda 4cd9a4493e add empty state for custom feed 2023-05-25 18:48:40 -07:00
Paul Frazee 25153f1f4d Fix lint 2023-05-25 20:45:35 -05:00
Paul Frazee 68332bc877 UI tune ups 2023-05-25 20:44:37 -05:00
Paul Frazee 27ff9ce43b Remove sorting in feed-manip 2023-05-25 20:32:12 -05:00
Paul Frazee 9da5a1a780 Merge branch 'custom-algos' of github.com:bluesky-social/social-app into custom-algos 2023-05-25 20:28:01 -05:00
Paul Frazee 0a1f912ece Fixes & updates for mobile web 2023-05-25 20:27:55 -05:00
Ansh Nanda 2c970781b7 replace profile with hamburger menu in search as well 2023-05-25 18:25:31 -07:00
Paul Frazee 651f3abc1f Tune up custom feed uis on web 2023-05-25 20:19:49 -05:00
Paul Frazee 216d301191 Fix bad import 2023-05-25 20:12:49 -05:00
Paul Frazee 767f5353ea Merge branch 'custom-algos' of github.com:bluesky-social/social-app into custom-algos 2023-05-25 20:02:41 -05:00
Paul Frazee 257686f360 Add feeds tab 2023-05-25 20:02:37 -05:00
Ansh Nanda 202a56cff6 small tweak to tab bar positioning 2023-05-25 16:23:32 -07:00
Paul Frazee df6d249e85 Small tweak to feed tab bar positioning 2023-05-25 17:53:57 -05:00
Paul Frazee dd1bbcfb0b Add scrollview to drawer 2023-05-25 17:26:34 -05:00
Paul Frazee 8fa33ac928 Add my feeds to the drawer 2023-05-25 17:13:32 -05:00
Paul Frazee 7916c2e02e Add 'popular with friends' to default feeds 2023-05-25 17:10:00 -05:00
Paul Frazee bf056cf622 Visually unify the home header with other screens 2023-05-25 17:09:23 -05:00
Paul Frazee cc6ead42d0 Switch to new satellite icon on the header 2023-05-25 17:00:39 -05:00
Paul Frazee 20ef1b8b7b Add custom satellite-dish icons 2023-05-25 16:51:12 -05:00
Paul Frazee 0f30f743cb Use the bars icon on the viewheader 2023-05-25 15:56:29 -05:00
Paul Frazee e33dad8b72 Merge branch 'custom-algos' of github.com:bluesky-social/social-app into custom-algos 2023-05-25 15:56:19 -05:00
Ansh Nanda 881be748d5 increase save custom feed btn hitslop 2023-05-25 13:54:43 -07:00
Ansh Nanda bce6c8d5ec rename Algos to Feeds on profile 2023-05-25 13:51:08 -07:00
Ansh Nanda a9027cfb45 turn of auto correct and capitalize on search 2023-05-25 13:50:59 -07:00
Ansh Nanda 14619cf8a3 fix type errors on Custom Feed screen 2023-05-25 13:46:17 -07:00
Ansh Nanda be2beae1f1 delete old My Feeds / Saved Feeds screen 2023-05-25 13:46:06 -07:00
Ansh Nanda f891305185 fix padding on Discover Feeds screen 2023-05-25 13:42:26 -07:00
Ansh Nanda 8bb3f40a59 add saved feeds to left nav on desktop 2023-05-25 13:14:40 -07:00
Ansh Nanda 6e5078e0c1 Merge branch 'custom-algos' of https://github.com/bluesky-social/social-app into custom-algos 2023-05-25 13:00:16 -07:00
Paul Frazee a39a06ba09 Tune the saved feeds ui 2023-05-25 14:58:04 -05:00
Paul Frazee f03ac9fd56 Tune the UI layout of the feed tab header 2023-05-25 14:56:23 -05:00
Ansh Nanda db63442360 adjust styling for feeds tab bar on mobile 2023-05-25 12:54:31 -07:00
Ansh Nanda 524f8b6abd Merge branch 'custom-algos' of https://github.com/bluesky-social/social-app into custom-algos 2023-05-25 00:18:00 -07:00
Ansh Nanda 0bdb0ac006 put user avatar on bottom bar and replace with hamburger menu on top 2023-05-25 00:17:57 -07:00
Ansh Nanda 007c523010 add top bar and link to new SavedScreen 2023-05-25 00:08:44 -07:00
Paul Frazee 93e9fa8edf Restore the 'load more' button on web 2023-05-25 01:53:37 -05:00
Paul Frazee e89103915d Update load latest to show when there's new activity with an indicator 2023-05-25 01:30:48 -05:00
Paul Frazee 6f02548bca Make load-latest button same on web 2023-05-25 00:20:49 -05:00
Paul Frazee 0262ed11ea Fix the 'dancing header' problem on web 2023-05-25 00:10:48 -05:00
Paul Frazee 5124be33ad Tune the footer text ui a bit 2023-05-24 23:59:37 -05:00
Paul Frazee b00e0d71ef Bump build number for ios 2023-05-24 22:10:14 -05:00
Paul Frazee dfb39e7c4f Add feed discovery page 2023-05-24 22:09:39 -05:00
Paul Frazee 12c7f6d6a5 Tune the custom feeds header a bit more 2023-05-24 19:27:04 -05:00
Paul Frazee 629ca24e90 Tune the custom feed header 2023-05-24 19:03:59 -05:00
Paul Frazee 2ba4d9bfbf Add compose fab to custom feed screen 2023-05-24 18:50:19 -05:00
Paul Frazee 0a18229784 Merge branch 'custom-algos' of github.com:bluesky-social/social-app into custom-algos 2023-05-24 18:46:55 -05:00
Paul Frazee 4e1876fe85 Refactor the scroll-to-top UX 2023-05-24 18:46:27 -05:00
Ansh Nanda 32c9dabb74 make tab bar scroll view draggable on web 2023-05-24 15:04:30 -07:00
Ansh Nanda 7e555ecc1b fix lint errors 2023-05-24 15:00:36 -07:00
Ansh Nanda 04468eb1b7 make prettier and eslint work together 2023-05-24 14:59:42 -07:00
Ansh Nanda 9673225f78 fix scrollToTop for web 2023-05-24 14:18:49 -07:00
Ansh Nanda 58a0489ce3 add isWeb check to disable haptics on web 2023-05-24 13:59:53 -07:00
Ansh Nanda 858ec6438d show scroll to top button when scrolling stops 2023-05-23 15:48:14 -07:00
Ansh Nanda 0fd5c9294a refactor load latest btn 2023-05-23 15:33:27 -07:00
Ansh Nanda fc9e28ca72 slight performance improvements 2023-05-23 15:28:46 -07:00
Ansh Nanda b561a51ed9 add button to reset preferences in dev mode 2023-05-23 14:18:35 -07:00
Ansh Nanda 52a8879754 update pinned feed from custom feed view 2023-05-22 20:07:40 -07:00
Ansh Nanda 8a2349c55f increase pin button hitslop 2023-05-22 19:14:10 -07:00
Ansh Nanda 512c918c03 decrease long press time required to reoreder pinned feed 2023-05-22 19:10:03 -07:00
Ansh Nanda dfcdd37087 add haptics to save, like, and pin actions on feed 2023-05-22 18:46:36 -07:00
Ansh Nanda 64e303d911 optimistic updates for liking custom feeds 2023-05-22 16:35:37 -07:00
Ansh Nanda 762bd15ed6 fix prod default feeds not working 2023-05-22 16:12:05 -07:00
Ansh Nanda 7cad7d12f1 add refreshControl to tab ViewSelector 2023-05-19 18:32:21 -07:00
Ansh Nanda 8bcbbb869a fix dark mode color for creator handle on CustomFeed screen 2023-05-19 18:30:24 -07:00
Ansh Nanda 48a9e1b1dd fix refresh control color in ViewSelector.tsx 2023-05-19 18:27:13 -07:00
Ollie H 15c1b6ee15 Merge pull request #744 from bluesky-social/ollie/693
Update labels for avatar
2023-05-18 21:09:39 -07:00
Paul Frazee 91ae0d7775 1.29 testflight 2023-05-18 21:06:00 -05:00
renahlee 2a5ac1a6de Update labels for avatar 2023-05-18 17:31:57 -07:00
Paul Frazee 37acc9e930 A few more UX tweaks 2023-05-18 18:22:46 -05:00
Paul Frazee 0b8dd95f2a Bump deps again 2023-05-18 18:22:34 -05:00
Paul Frazee da6fa2dede Bump deps 2023-05-18 18:04:32 -05:00
Paul Frazee 4fa4c67cc5 Some fixes 2023-05-18 17:36:16 -05:00
Paul Frazee 46ed910cda Add list-type avatar 2023-05-18 17:10:42 -05:00
Paul Frazee 324c9209dc Only show algos and lists on profiles if there are items 2023-05-18 17:01:48 -05:00
Paul Frazee ad8778ab10 Add server-side routes 2023-05-18 16:55:50 -05:00
Paul Frazee 3c89dd40f9 Fix lint 2023-05-18 16:54:17 -05:00
Paul Frazee 1ecf0da81b Add feed sharing 2023-05-18 16:22:11 -05:00
Paul Frazee 84990c509e Drop the hard-coded what's hot algo 2023-05-18 15:12:18 -05:00
Paul Frazee 2f4408582b Set default feeds 2023-05-18 15:06:32 -05:00
Paul Frazee 9c9e4e5691 Merge branch 'custom-algos' of github.com:bluesky-social/social-app into custom-algos 2023-05-18 14:39:12 -05:00
Paul Frazee 5537d19e55 Update saved feeds to use preferences 2023-05-18 14:39:04 -05:00
Jake Gold 211fce47ce Fix /api/waitlist API (#726)
* move /waitlist to /api/waitlist where its expected

* parse waitlist API request as JSON, duh
2023-05-18 11:56:09 -07:00
Ansh Nanda f1d2166c29 fix spacing when user has no feeds 2023-05-18 10:36:16 -07:00
Ansh Nanda 571fc37a99 fix error & empty state when rendering custom feeds on profile 2023-05-18 10:34:34 -07:00
Paul Frazee acea0e074d Tab bar fixes 2023-05-18 12:05:32 -05:00
Paul Frazee 754496b957 Fix custom feed header on desktop web 2023-05-18 11:57:49 -05:00
Paul Frazee 7691fe4f48 Store/sync pinned feeds on the server 2023-05-18 11:51:25 -05:00
Paul Frazee d88c27a419 Improve web titles 2023-05-17 23:36:36 -05:00
Paul Frazee 5a20e0fafa Add web titles 2023-05-17 23:33:59 -05:00
Paul Frazee 129fc42e95 Improve pinned feed management 2023-05-17 23:32:19 -05:00
Jaz 7f76c2d67e Merge branch 'main' into inherit_system_theme 2023-05-17 21:19:20 -07:00
Jaz ac3a95dc72 Remove unused imports 2023-05-17 21:15:37 -07:00
Jaz 3c15f6ba02 Move appearance settings to settings page 2023-05-17 21:14:26 -07:00
Paul Frazee bec94ed82c Desktop styling fixes 2023-05-17 22:58:53 -05:00
Paul Frazee ed7293ea66 Remove redundant component 2023-05-17 22:15:44 -05:00
Paul Frazee a2c89b47a1 Add custom feed liked by screen 2023-05-17 22:12:14 -05:00
Paul Frazee 998879d6d6 Remove redundant feed-settings page 2023-05-17 22:04:01 -05:00
Paul Frazee 177df36330 Fixes to the tab bar 2023-05-17 21:54:40 -05:00
Paul Frazee 6bf8e72157 Usability improvements to feeds 2023-05-17 21:23:32 -05:00
Paul Frazee f0003d1931 Add 'my feeds' tab 2023-05-17 20:33:58 -05:00
Paul Frazee c55ce6de02 Rework the UI for the custom feed view 2023-05-17 15:52:11 -05:00
Paul Frazee 0f5b3808f8 Remove a focus-effect that was triggering a rerender loop 2023-05-17 15:03:19 -05:00
Paul Frazee 2fd3b4ca04 Clean up the custom-feed model 2023-05-17 14:55:04 -05:00
Paul Frazee 9c02fbb925 Unify the display name fallback behavior 2023-05-17 14:38:23 -05:00
Paul Frazee 4e56d24a9d Dont show save button in embed cards 2023-05-17 14:34:37 -05:00
Paul Frazee fb03bbf288 Fix some palette issues 2023-05-17 14:26:23 -05:00
Paul Frazee a4c6dd6b1e Tune up the custom feed card rendering 2023-05-17 14:24:27 -05:00
Paul Frazee 3d09008bfd Reorganize custom feeds in the view layer 2023-05-17 14:03:08 -05:00
Paul Frazee b672006f7e Reorganize custom-feed state models and add the missing _reactKey attribute 2023-05-17 13:52:16 -05:00
Paul Frazee a2b089d315 Add 'algo' variant of avatars 2023-05-17 13:42:29 -05:00
Paul Frazee 85910cdbea Fix missed change in merge 2023-05-17 13:42:16 -05:00
Paul Frazee df3b988157 Update yarn.lock 2023-05-17 13:42:09 -05:00
Paul Frazee 7aa1d9010e Merge branch 'main' into custom-algos 2023-05-17 12:30:54 -05:00
Ollie H 0ca096138a Merge pull request #692 from bluesky-social/ollie/unread-notifications
Update hint for notifications
2023-05-17 09:37:54 -07:00
renahlee d6ca8e918a Update to empty hint if no notifications 2023-05-17 09:13:06 -07:00
renahlee f7f0db65d3 Update hint for notifications 2023-05-17 09:12:09 -07:00
Paul Frazee 562faa76cc feat: add basic visual feedback on Button interactions (#708)
* feat: add basic visual feedback on Button interaction

* Use a more efficient approach to providing visual feedback

* Fix some lint issues left over from another PR

---------

Co-authored-by: Simek <gosimek@gmail.com>
2023-05-17 11:10:51 -05:00
LW 41f3a05515 style: remove useUnreadCountLabel hack from 50c1841 (#655) (#686)
I just realized how `mobx` works (never used before lol) and now I feel
dumb.
2023-05-17 09:50:28 -05:00
Ollie H 656baa7239 Close active elements on state change (#677) 2023-05-17 09:46:10 -05:00
Richard Gordon 09bb2f5208 hidereport button on own post (#676) 2023-05-17 09:43:08 -05:00
William d7826a3334 Properly set isInputFocused (#666) 2023-05-17 09:41:54 -05:00
Mohammad Reza Mahmoudi 6dde5ede34 fix theme opposite labels (#700) 2023-05-17 09:33:05 -05:00
Pedro b132ff7a76 Update build.md - minor typo (#696)
This is not the smallest PR in the world, this is just a tribute.

(actually, it's just one byte, so it might be the smallest PR in the world)
2023-05-17 09:27:02 -05:00
LW b1c5794190 docs: update e2e mock server command (#662) 2023-05-17 09:21:34 -05:00
Matin Zadeh Dolatabad c1fe12f5bf chore: update expo-image to 1.2.3 (#664)
Issue: https://github.com/expo/expo/pull/22491
2023-05-17 09:19:59 -05:00
Ansh Nanda 52c72d6532 cleanup package.json 2023-05-16 23:46:29 -07:00
Ansh Nanda 90adc19415 fix re-rendering issue 2023-05-16 23:45:14 -07:00
Ansh Nanda 1378ab46e9 make sure TabBar re-rerenders when pinned feeds changes 2023-05-16 23:40:51 -07:00
Ansh Nanda 3501fda015 allow changing pinned feed order on web 2023-05-16 23:38:34 -07:00
Jaz b2ef6bde00 Unstage open post in new tab changes, oops 2023-05-16 23:22:18 -07:00
Jaz f4327aff69 Fix mobile layout at least for mobile web 2023-05-16 23:11:29 -07:00
Jaz 85dfef87ab Use a three-state radio button for color mode 2023-05-16 23:06:08 -07:00
Jaz da0ed7e002 Feat: Use system default color mode, but allow user override 2023-05-16 21:36:43 -07:00
Ansh Nanda 99d66679b3 use uri instead of rkey to get feed data 2023-05-16 19:09:19 -07:00
Ansh Nanda 59c1b545fa fix routing on web 2023-05-16 19:04:47 -07:00
Ansh Nanda ff3cc3b84d fix dark mode styling 2023-05-16 18:39:02 -07:00
Ansh Nanda 53ca0cd626 drag to rearrange pinned items 2023-05-16 18:28:44 -07:00
Ansh Nanda 139027ac5f bad fix to the tab bar animation 2023-05-16 17:27:46 -07:00
Jacques Favreau 404b2f043c fix: Add vendor prefix for web blur. (#678) 2023-05-16 18:39:15 -05:00
Michi Hoffmann b7f081d6e4 Fix line break in New Post button (#657) 2023-05-16 18:38:06 -05:00
Ansh Nanda 532bc88ecc fix edge case when feed is liked only by one person 2023-05-16 16:31:35 -07:00
Ansh Nanda 5397447ca7 fix unliking 2023-05-16 16:30:14 -07:00
Ansh Nanda 1e54125f7f reload AlgoItem on focus via prop 2023-05-16 16:27:38 -07:00
Ansh Nanda 3f41d3db26 make sure state is being synced across components 2023-05-16 16:07:07 -07:00
Ansh Nanda f2e39d8ad2 allow for pinning saved feeds 2023-05-16 15:50:52 -07:00
Ollie H 5f66adc9a6 Replace image picker with expo-image-picker (#649)
* Replace image picker with expo-image-picker

* Fix cropper & picker on web

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-16 17:38:32 -05:00
Ansh Nanda dd788550be add heart icon to AlgoItem 2023-05-16 13:57:29 -07:00
Ansh Nanda 58e9c30abe link to user who created custom feed from preview 2023-05-16 13:56:59 -07:00
Ansh Nanda 25a9013380 add react-native-draggable-flatlist package 2023-05-16 13:41:14 -07:00
Ansh d5bec4ff37 Update build instructions (#639)
* Create .env.example

* Update build.md

* Update eas.json

* Update build.md

* Update build.md

* Update build.md

* Update docs/build.md

Co-authored-by: Caleb Jasik <calebjasik@jasik.xyz>

---------

Co-authored-by: Caleb Jasik <calebjasik@jasik.xyz>
2023-05-16 13:14:02 -05:00
LW 50c1841a06 feat: Update HTML title on web #626 #599 (#655)
For any `Screen` that shows on desktop, `title` is "(1) ... - Bluesky"
where "(1)" is the unread notification count.

The titles are unlocalized and the string "Bluesky" is hardcoded,
following the pattern of the rest of the app.

Display names and post content are loaded into the title as effects.

Tested:
* all screens
* screen changes / component mounts/unmounts
* long posts with links and images
* display name set/unset
* spamming myself with notifications, clearing notifications
* /profile/did:... links
* lint (only my changed files), jest, e2e.

New utilities: `useUnreadCountLabel`, `bskyTitle`,
`combinedDisplayName`, `useSetTitle`.

resolves: #626 #599
2023-05-16 13:13:05 -05:00
LW a5838694bd test: detox needs tapReturnKey after typeText (#663)
Without this, all `yarn e2e:run` tests get hung on the "input custom
service" step when logging in.

Only used one machine to repro, so an additional repro could be useful.
2023-05-16 12:48:54 -05:00
Markus Amalthea Magnuson 924e18e644 Remove surrounding spaces in parentheses. (#667) 2023-05-16 12:44:30 -05:00
Ansh Nanda 8071ae313d like/unlike improvements WIP 2023-05-15 22:39:47 -07:00
Ansh Nanda c4a666c221 new design for custom feed preview 2023-05-15 17:59:36 -07:00
Ollie H a891f4c326 Merge pull request #631 from aarongustafson/patch-1
Remove max scale from viewport config `meta`
2023-05-15 17:07:44 -07:00
Aaron Gustafson 255bba5fb8 Remove max scale from viewport config meta
Maximum scale creates accessibility issues for folks who need to zoom in
2023-05-15 15:44:10 -07:00
Ollie H e2055dfb78 Image editor mobile layout update (#613)
* Image editor mobile layout update

* Minor viewport fix
2023-05-15 16:54:14 -05:00
Tierney Cyren aa786068cf Create LICENSE file and point to it from README.md (#623)
* Create LICENSE

adds a LICENSE file that can be picked up by first- and third-party tooling

* Update README.md to point to LICENSE file
2023-05-15 16:02:41 -05:00
Paul Frazee 952af3473a Prepare for open-sourcing (#619)
* Add issue templates

* Update readme and docs for contributors

* Tune up the README.md

* Tune language a bit

* Tune copy
2023-05-15 15:45:52 -05:00
Paul Frazee 5e8e0ad680 Update the default suggested users list to match recent activity 2023-05-15 15:27:58 -05:00
Ollie H 628d877325 Use dropdown for web reposting and quote posting (#607)
* Use dropdown for web reposting and quote posting

* Remove collateral damage

* Tune the repost dropdown positioning

* Move postctrls into their own folder

* Factor out repost button into native/web build

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-15 15:18:39 -05:00
Ansh Nanda 6249bb16ca remove tab bar underline animation 2023-05-15 12:31:27 -07:00
bnewbold 0a0afdf2c2 reporting: anti-social option; alert emoji around urgent option (#617)
* reporting: new anti-social post report option

* reporting: alarm emoji on urgent report option

* reporting: appease 'make lint'

I originally had text on a separate line, but that failed, so I put
text+tags on a line and thought that worked, but failed again? Seems
inconsistent, but trying again.

* Remove emojis and increase report post height

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-15 14:25:50 -05:00
Ollie H 824a2313b1 Style cleaning and initial text size audit (#618)
* Style cleaning and initial text size audit

* Put file back
2023-05-15 13:14:45 -05:00
Ollie H 841ad692d3 Make autocomplete pressable (#620) 2023-05-15 13:12:38 -05:00
Ansh Nanda d7e39bde12 saved feeds in tab bar 2023-05-15 11:00:54 -07:00
Ansh Nanda 5010861160 custom feed screen 2023-05-15 10:42:23 -07:00
Ansh Nanda 61ea37ff81 renamed page to savedfeeds 2023-05-14 18:37:18 -07:00
Ansh Nanda 6105314f15 add empty view to CustomAlgorithms screen 2023-05-14 15:38:38 -07:00
Ansh Nanda 8948118d5c view all saved algos in settings 2023-05-13 12:25:06 -07:00
Ansh Nanda 047024a5ac create algo-item model and redefine data models 2023-05-13 11:59:08 -07:00
Ansh Nanda c24389df87 custom feed embed 2023-05-12 19:46:50 -07:00
Ansh Nanda 760b5309e0 show algos by user on profile 2023-05-12 19:32:39 -07:00
Ansh Nanda fa4af20764 remove unncessary code from actorFeedModel 2023-05-12 17:22:53 -07:00
Ansh Nanda 06ce42158e actor feeds model 2023-05-12 17:21:17 -07:00
Ansh Nanda be6d48a57e bookmarked feeds model 2023-05-12 17:21:11 -07:00
Ansh Nanda 370d52bd1f add custom algorithm screen to settings under moderation 2023-05-12 14:40:58 -07:00
Ansh Nanda 678f75b495 add window dimensions to global styles 2023-05-12 13:51:07 -07:00
Paul Frazee 5f074a21c9 Tune hand icon 2023-05-12 10:21:09 -05:00
Paul Frazee 0a7bb43644 Replace the moderation hand icon with a better icon 2023-05-12 10:10:29 -05:00
Paul Frazee 60cfdb197c Bump version numbers 2023-05-11 18:14:32 -05:00
Paul Frazee 6a37043801 Tests fix 2023-05-11 18:13:50 -05:00
Paul Frazee 75007d8fae [APP-643] Account preferences server sync (#615)
* Bump deps

* Bump deps

* Add server sync of content preferences and an adult content toggle
2023-05-11 17:52:38 -05:00
Ollie H c2a8713ff4 a11y cleanup for mute lists (#614) 2023-05-11 16:30:27 -05:00
Paul Frazee ebcd633386 [APP-635] Mutelists (#601)
* Add lists and profilelist screens

* Implement lists screen and lists-list in profiles

* Add empty states to the lists screen

* Switch (mostly) from blocklists to mutelists

* Rework: create a new moderation screen and move everything related under it

* Fix moderation screen on desktop web

* Tune the empty state code

* Change content moderation modal to content filtering

* Add CreateMuteList modal

* Implement mutelist creation

* Add lists listings

* Add the ability to create new mutelists

* Add 'add to list' tool

* Satisfy the hashtag hyphen haters

* Add update/delete/subscribe/unsubscribe to lists

* Show which list caused a mute

* Add list un/subscribe

* Add the mute override when viewing a profile's posts

* Update to latest backend

* Add simulation tests and tune some behaviors

* Fix lint

* Bump deps

* Fix list refresh after creation

* Mute list subscriptions -> Mute lists
2023-05-11 16:08:21 -05:00
bnewbold 34d8fa5991 top-level Makefile (#597)
* top-level Makefile

The primary motivation here is the `build-web` command, which calls the
yarn build and then also copies over JS files. The Dockerfile does this
and I always forget when doing it manually.

* build-web: cp bundles in yarn command, not Makefile+Dockerfile
2023-05-11 13:22:56 -07:00
bnewbold d624b7cf58 bskyweb: iterate on HTML card metadata (#609)
Probably still not perfect, but better.

- don't user avatar image. use banner for profile and post img, or
  nothing
- most twitter metadata fields were redundant; twitter will parse out
  opengraph ("og:"), so don't duplicate those
- add regular HTML description (for google, etc)
- include URI
- actually include text
2023-05-11 10:41:47 -05:00
Ollie H 19d6ded631 Prevent reply to from cascading (#610) 2023-05-11 10:38:54 -05:00
Ollie H 0192923ef3 Only allow one close draft confirmation at a time (#611)
* Only allow one close draft confirmation at a time

* lint
2023-05-11 10:38:10 -05:00
bnewbold c2fb4d4b4b small label updates (#612)
* labels: fix 'consentual' typo

This label has never been applied, so safe to just change it.

* labels: new 'nsfl' label, under both porn and gore categories

* labels: new account-security label (always warn)

* labling: re-word spam subtitle
2023-05-11 10:37:26 -05:00
Ollie H b0ebb6c9d1 Update web image editor (#588)
* Update web image editor

* Delete type-assertions.ts

* Re-add getKeys

* Uncomment rotation code

* Revert "Uncomment rotation code"

This reverts commit 6269f3b928.

* Shuffle dependencies and update mobile resolution

* Update ImageEditor modal layout for mobile

* Avoid accidental closes of the EditImage modal

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-09 14:55:44 -05:00
Ollie H 8f6b5d3df9 Add avatar to mobile autocomplete and create grapheme hook (#602)
* Add avatar to mobile autocomplete and create grapheme hook

* Remove comment, update filename, cut out redundant logic
2023-05-09 12:13:23 -05:00
bnewbold 9a91b0c538 bskyweb: middleware to remove trailing / (#598) 2023-05-09 12:03:42 -05:00
Ollie H bf3ea67442 Add time to app password and fix related text wrapping (#604) 2023-05-09 12:02:55 -05:00
Ansh 28f7ff76a4 add target="_blank" prop to LinkText for safari (#606) 2023-05-09 12:01:42 -05:00
Ollie H cfdfd8f395 Add text wrapping to profile header (#603) 2023-05-09 12:00:54 -05:00
Paul Frazee d0990e9b49 Bump ios build number 2023-05-09 00:45:33 -05:00
Paul Frazee b756a27958 [APP-639] Improve nsfw handling & force hidden on iOS (#605)
* Identify adult content labels and handle them more specifically

* Change adult content defaults to more conservative settings

* Add an adultcontentenabled override that prohibits access on iOS

* Improve usability of the content hider

* Fix lint
2023-05-09 00:43:20 -05:00
Paul Frazee 7a176b3fdf [APP-615] COPPA-compliant signup (#570)
* Rework account creation to be COPPA compliant

* Fix lint

* Switch android datepicker to use the spinner mode

* Fix type signatures & usages
2023-05-08 17:25:57 -05:00
Ollie H cdfb1c7abf Visual improvements to web autocomplete (#591)
* Visual improvements to web autocomplete

* Remove stray styling
2023-05-08 16:09:15 -05:00
Ollie H 84046f42d5 Format count and fix type warning (#600) 2023-05-08 16:02:19 -05:00
Ansh 6124e52836 add theme to SafeAreaView and preventAutoHide SplashScreen (#592) 2023-05-08 15:05:36 -05:00
bnewbold 249d166811 bskyweb: re-work HTML meta tags, for share cards (#596) 2023-05-08 15:03:03 -05:00
bnewbold 6d9e23b1be bskyweb: update robots.txt (#595)
This is to make crawling more explicitly allowed, communicating
expectations.

If we ever end up with "expensive" routes on this service, will want to
add Crawl-Delay.
2023-05-07 12:19:56 -07:00
Ollie H 0c604ff1c2 Merge pull request #593 from bluesky-social/ollie/fix-hardbreak
Fix hardbreak formatting
2023-05-05 16:53:12 -07:00
renahlee 2f61fc31fd Fix hardbreak formatting 2023-05-05 16:36:48 -07:00
Paul Frazee b3b1fa1707 1.28 2023-05-05 00:55:33 -05:00
Paul Frazee ce89b2fae1 Add account information to the top of settings (#583) 2023-05-05 00:41:31 -05:00
Ansh 646eddad5a make haptic feedback weaker on android (#584) 2023-05-05 00:41:08 -05:00
Ansh 99ecb17739 useLegacyImplementation in Android (#585) 2023-05-05 00:40:16 -05:00
Ansh f28405f928 sanitize app passwords name (#589) 2023-05-05 00:27:05 -05:00
Ollie H 8d78e8581c Move href back to link (#590)
* Move href back to link

* Fix cmd/ctrl click on left nav

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-05 00:25:52 -05:00
Ansh d3e8bd3e9a [APP-547] Universal links & deeplinking (#555)
* added ios scheme and intentFilters for deep linking

* added intentFilters for android deep linking

* add .env files to .gitignore

* add autoVerify for android deep links
2023-05-04 16:18:27 -05:00
bnewbold c8af784328 Updates indigo golang packages post-lex-refactor (!), which fixes XRPC calls (#582)
* bskyweb: update modules

* bskyweb: fix XRPC string type

* gitignore: yarn web build output in bskyweb
2023-05-04 13:56:17 -05:00
Paul Frazee 7a008c987c 1.27 2023-05-04 01:21:08 -05:00
Paul Frazee 49f9df6355 [APP-633] Improve some behaviors around desktop leftnav (#581)
* Make leftnav elements act as anchor tags (bonus feature in this pr)

* Add screen reset behavior to the desktop left nav

* Move the leftnav link into the text
2023-05-04 01:20:23 -05:00
Paul Frazee 2749b8e371 Rework alt image modal to be fullscreen due to android bugs with the bottomsheet and keyboard (#577) 2023-05-04 00:55:57 -05:00
Paul Frazee ab3074fdee Add the !filter and !warn imperative labels (#580) 2023-05-04 00:55:33 -05:00
Ollie H 33bf9c3869 Remove focus outline on composer (#572) 2023-05-04 00:54:59 -05:00
Paul Frazee d97e75c62f [APP-539] Rework lightbox and alt-image behaviors (#573)
* Replace the long press on the lightbox with footer controls

* Remove long-press from images in the feed

* Tune the lightbox footer control ui

* Replace the AltImageRead modal with the ability to view all alt text in the lightbox footer

* Tune lightbox footer for iOS

* Add alt text to the web lightbox

* Fix lint

* a11y slight changes

---------

Co-authored-by: renahlee <renahlee@outlook.com>
2023-05-04 00:54:35 -05:00
Ollie H 4ef853ef6c Remove text underline from lists (#574) 2023-05-04 00:54:22 -05:00
Ollie H 011baa78c1 a11y label cleanup (#576) 2023-05-04 00:53:49 -05:00
Paul Frazee 0f68e6a6ff Add mock data to test unknown labels (#578) 2023-05-04 00:24:14 -05:00
Paul Frazee 7f88845c9b Add icon-intolerant and behavior-intolerant to the political hategroup category (#579) 2023-05-04 00:22:54 -05:00
Ollie H e2d2bbb0d5 Merge pull request #575 from bluesky-social/ollie/README
Update README with Go instructions
2023-05-03 20:47:04 -07:00
Ollie H aed54822a3 Update README.md 2023-05-03 20:39:49 -07:00
renahlee 13586ec6ef Update README with Go instructions 2023-05-03 20:20:52 -07:00
Paul Frazee 906b906eb1 Remove the attempts to make the language filter more lenient (#569) 2023-05-03 11:49:46 -05:00
Jake Gold 204c6729e7 add required security HTTP headers (#568) 2023-05-03 07:14:29 -07:00
Paul Frazee 14e9719bcc Increment android versioncode 2023-05-03 00:45:19 -05:00
Paul Frazee feff19f705 1.26 2023-05-02 23:56:01 -05:00
Paul Frazee 12a2144232 Remove some confusing horizontal lines in threads (#566) 2023-05-02 23:32:29 -05:00
Paul Frazee 883700e090 [APP-601] Add muted accounts list (#565)
* Add muted accounts list

* Fix icon for muted accounts
2023-05-02 23:32:16 -05:00
Paul Frazee 2eb0d8c095 [APP-611] Add nice date to expanded post view (#567)
* Add nice date to expanded post view

* Fix styles
2023-05-02 23:29:16 -05:00
Paul Frazee 6f1c4ec9a9 [APP-549] Language controls for Whats Hot (#563)
* Add a content-language preference control

* Update whats hot to only show the selected languages and to refresh on lang pref changes

* Fix lint

* Fix tests

* Add missing accessibility role
2023-05-02 23:06:55 -05:00
Ollie H 95f8360d19 Add keyboard shortcuts: new, escape, and hard break (#552)
* Add keyboard shortcuts: new, escape, and hard break

* Add preferences modal

* Remove code accidentally re-added due to rebase

* Fix incorrect copy and lint

* Put stuff back so diffs are clearer

* Re-add invite codes to settings

* Address comments

* Tune the copy

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-02 23:00:18 -05:00
Paul Frazee af905947bc Fix confirm profile sizing for blocks (#564) 2023-05-02 22:52:58 -05:00
Paul Frazee 8c675248d4 Fix replies with <2 likes showing in the following feed 2023-05-02 21:51:25 -05:00
Paul Frazee d225e857b5 [APP-610] Make the language filter more lenient (#562)
* Tune the language filter to accept posts when a determination cant be made

* use j instead of i since i has been declared in upper scope

* use j instead of i since i has been declared in upper scope

* Pass the j man

---------

Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
2023-05-02 20:03:01 -05:00
Paul Frazee ddb8ebb412 Fix image sharing on iOS (#561) 2023-05-02 20:00:22 -05:00
Ollie H bd80db619b Pre-web image changes refactor (#560)
* Pre-web image changes refactor

* Remove unneeded async behavior
2023-05-02 16:27:00 -05:00
Ollie H 74fbb47979 Strip whitespaces from tokens (#558) 2023-05-01 23:29:13 -05:00
Ollie H 83959c595d React Native accessibility (#539)
* React Native accessibility

* First round of changes

* Latest update

* Checkpoint

* Wrap up

* Lint

* Remove unhelpful image hints

* Fix navigation

* Fix rebase and lint

* Mitigate an known issue with the password entry in login

* Fix composer dismiss

* Remove focus on input elements for web

* Remove i and npm

* pls work

* Remove stray declaration

* Regenerate yarn.lock

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-01 20:38:47 -05:00
Ansh c75c888de2 [APP-527] setup sentry (#532)
* setup sentry

* add sentry to transformIgnorePatterns to fix jest issues

* update README with sourcemap instructions

* only enable integrations on native

* fix sentry web

* remove testing code

* fix sentry authToken

* Switch over to paul's auth tokens temporarily (lol)

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-01 14:42:31 -05:00
Ollie H dbb3c5c155 Image alt text view modal (#551)
* Image alt text view modal

* Minor style tweaks

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-05-01 13:59:17 -05:00
Ollie H 0ec98c77ef Format large numbers (#556) 2023-05-01 13:31:00 -05:00
Paul Frazee 7171d0404e App store fixes (permission descriptions) (#557)
* Fix permission usage descriptions on iOS

* Bump ios build number
2023-05-01 13:13:58 -05:00
Paul Frazee 9b50c3ddbb 1.25 2023-04-28 20:03:55 -05:00
Paul Frazee a95c03e280 Implement blocks (#554)
* Quick fix to prompt

* Add blocked accounts screen

* Add blocking tools to profile

* Blur avis/banners of blocked users

* Factor blocking state into moderation dsl

* Filter post slices from the feed if any are hidden

* Handle various block UIs

* Filter in the client on blockedBy

* Implement block list

* Fix some copy

* Bump deps

* Fix lint
2023-04-28 20:03:13 -05:00
Ollie Hsieh e68aa75429 Merge pull request #553 from bluesky-social/ollie/APP-581
Up Android snap point
2023-04-28 17:20:33 -07:00
renahlee b754ed0e5a Up Android snap point 2023-04-28 17:12:17 -07:00
Paul Frazee 173e06f866 Fix to embed labels lookup (#550)
* Fix to embed labels lookup

* Fix lint

* Fix lint
2023-04-27 15:01:38 -05:00
Paul Frazee 301c2e5beb Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-04-27 13:15:04 -05:00
Paul Frazee da06b608f2 1.23.0 build 2 2023-04-27 13:14:54 -05:00
Paul Frazee 1d50ddb378 Refactor moderation to apply to accounts, profiles, and posts correctly (#548)
* Add ScreenHider component

* Add blur attribute to UserAvatar and UserBanner

* Remove dead suggested posts component and model

* Bump @atproto/api@0.2.10

* Rework moderation tooling to give a more precise DSL

* Add label mocks

* Apply finer grained moderation controls

* Refactor ProfileCard to just take the profile object

* Apply moderation to user listings and banner

* Apply moderation to notifications

* Fix lint

* Tune avatar & banner blur settings per platform

* 1.24
2023-04-27 12:38:23 -05:00
Ollie Hsieh 51be8474db Update invite code copy (#549) 2023-04-27 12:31:03 -05:00
Ollie Hsieh 7a2c21026d Load previous state in alt text modal (#546) 2023-04-27 09:51:47 -05:00
Ollie Hsieh c8e51a7d48 Fix Android sharing (#545) 2023-04-27 09:38:28 -05:00
Ollie Hsieh 62b07f93fd Support Ctrl + Enter for non-Mac (#544) 2023-04-27 09:31:14 -05:00
Ollie Hsieh 996dba7595 Close lightbox on web with escape key (#543)
* Close lightbox on web with escape key

* Lint
2023-04-27 09:30:47 -05:00
Ollie Hsieh afd87a6390 Add undo to web composer (#542) 2023-04-27 09:27:33 -05:00
Paul Frazee a81158bd2a Tune some copy 2023-04-26 09:33:56 -05:00
Paul Frazee 8d8b3f53a0 1.23 2023-04-25 21:26:33 -05:00
Paul Frazee c8541a7243 Fix e2e 2023-04-25 21:25:49 -05:00
Paul Frazee fc19ffba38 Update report modal to use new groupings (close [APP-567]) (#533) 2023-04-25 21:04:50 -05:00
Paul Frazee 9b86cb5c36 Fix: dont request more than 25 posts at a time (close [APP-561]) (#534) 2023-04-25 20:47:37 -05:00
Paul Frazee f33a355a1a [APP-562] Persist 'copied' state of invite codes (#535)
* Persist 'copied' state of invite codes (close APP-562)

* Dont show copied message if invite used
2023-04-25 20:47:07 -05:00
Paul Frazee e1fd50d014 Add web network failure error detection (close APP-83) (#537) 2023-04-25 20:46:47 -05:00
Ansh e99c324f14 add pal.text to onboarding screens (#538) 2023-04-25 20:46:34 -05:00
Paul Frazee ae895155fd Fix to error screen and postthread loading state (#540)
* Fix loading state on postthread

* Improve error screen rendering

* Dark mode exclamation in error screen

* Fix lint
2023-04-25 20:45:59 -05:00
Ollie Hsieh 8f3915e0a5 Merge pull request #541 from bluesky-social/ansh/app-569-make-sure-android-is-not-allowing-more
[APP-569] Only allow selecting 4 pics max
2023-04-25 14:52:53 -07:00
Ansh Nanda fa612fade6 only allow selecting 4 images max 2023-04-25 14:45:41 -07:00
Ansh c8a7f27d43 Merge pull request #536 from bluesky-social/ansh/app-558-share-profile-and-post-broken-on-android
[APP-558] Sharing refactor
2023-04-25 14:04:56 -07:00
Ansh Nanda d0d24ea248 consolidated share code to shareUrl 2023-04-25 13:45:46 -07:00
Ansh 01410ad4bf create Alert.tsx and Alert.web.tsx and replace uses (#513) 2023-04-25 14:01:47 -05:00
Ansh Nanda 3463f601a3 add dev menu opening instructions by platform 2023-04-25 11:59:11 -07:00
Ollie Hsieh b00365c196 Prevent keyboard from blocking alt image modal (#531)
* Prevent keyboard from blocking alt image modal

* Tune padding of altimage modal on desktop web

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-04-25 13:34:06 -05:00
Paul Frazee 3ef7504f91 1.22 2023-04-24 20:08:37 -05:00
Paul Frazee 26cef73b5c If adding the user's post when empty, just refresh (#530) 2023-04-24 20:07:58 -05:00
Paul Frazee f4da2f4442 Tune feed loading behavior (#528)
* Never autoload home feed on focus

* On web, just check for new notifications on focus

* Switching tab in the home feed now checks for latest
2023-04-24 19:41:27 -05:00
Paul Frazee 7a10762716 Rework how recently-created posts are added to the feed (repeat posts issue) (#527)
* Rework new-post behavior to just add the user's created post to the top

* Only add post to top when not a reply

* Fix: run update in action
2023-04-24 19:41:16 -05:00
Paul Frazee df1791bde2 Update hardcoded suggested actors (#524)
* Update the hardcoded suggested follows

* Update the suggested actors to just use hardcoded list since there's now the foaf system
2023-04-24 18:49:11 -05:00
Ansh c5222db38b memoize things, clean code, and replace deprecated resizeMode with contentFit (#526) 2023-04-24 18:45:02 -05:00
Paul Frazee 1b356556c9 Performance fixes with new getPosts (#525)
* Update notifications to fetch in a batch using getPosts

* Improve search perf with getPosts

* Bump @atproto/api@0.2.9

* Just use post uri for key
2023-04-24 17:02:58 -05:00
Paul Frazee da8af38dcc Android & visual fixes: color themes, repost icon, navigation, back handler, etc (#519)
* Switch android to use slide left/right animations on navigation

* Bump the repost icon down by a pixel

* Tune theme colors for contrast and darker bg on darkmode

* Move back handler to a point in the init flow that leads to more consistent capture of events

* Fix image share flow on android

* Fix lint

* Add todo about sharing not available

* Drop the android slide animation because it's too slow

* Fix 'flashes of white' in dark mode android
2023-04-24 16:36:05 -05:00
Ollie Hsieh 9d8600c213 Merge pull request #522 from bluesky-social/ollie/staging-link
Update client staging URL
2023-04-24 11:06:05 -07:00
renahlee 57c87ba7cf Update client staging URL 2023-04-24 10:55:35 -07:00
Ollie Hsieh df8059bf9a Increase alt text limit to 1000 (#521) 2023-04-24 12:44:42 -05:00
Paul Frazee 36eca53b87 1.21 2023-04-22 19:29:54 -05:00
Paul Frazee c7600fe0c2 Web fixes (#517)
* Fix scroll behaviors on web

* Remove headers on web to avoid scroll overflow

* Fix follow button press in cards
2023-04-22 19:08:41 -05:00
Paul Frazee 5085861b9a Feed fixes: repeat posts & nonreplies showing up in the wrong place (#516)
* Fix the repeat posts issue on the home feed

* Fix: replies no longer show up in the no-replies feed
2023-04-22 18:35:12 -05:00
Paul Frazee d35f7c1f1a Android fixes (#515)
* Fix profile screen performance on android and remove dead code

* Correctly handle android hardware back btn

* Fix EditProfile modal for android

* Fix lint
2023-04-22 17:14:20 -05:00
Ollie Hsieh eb6b36be61 Merge pull request #514 from bluesky-social/ollie/ap-dark-mode
Fix App Passwords iOS dark mode modal
2023-04-22 06:22:08 -07:00
renahlee 7d43e25933 Fix App Passwords iOS dark mode modal 2023-04-21 22:15:59 -07:00
Paul Frazee 2b96279103 Fix link opening (#512) 2023-04-21 20:28:19 -05:00
Paul Frazee af2fd3cf29 More hotfixes to app passwords (#511)
* Fix app passwords modal on web

* Fix delete app password on web
2023-04-21 19:58:42 -05:00
Paul Frazee 16124b5081 1.20.0 2023-04-21 19:41:59 -05:00
Paul Frazee bbc2ab334d Hotfix feed sizing (#510)
* Fix home feed sizing on web

* Bump api@0.2.8
2023-04-21 19:34:07 -05:00
Ansh 38eb299011 [APP-522] Create & revoke App Passwords within settings (#505)
* create and delete app passwords

* add randomly generated name

* Tweak copy and layout of app passwords

* Improve app passwords on desktop web

* Rearrange settings

* Change app-passwords route and add to backend

* Fix link

* Fix some more desktop web

* Remove log

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-04-21 18:55:29 -05:00
Ollie Hsieh aa56f4a5e2 Move border positioning to FlatList and ScrollView (#509)
* Move border positioning to FlatList and ScrollView

* Fix mobile web tab bar border
2023-04-21 16:40:41 -05:00
Ollie Hsieh f0706dbe9f Add alt text support and rework image layout (#503)
* Add alt text support and rework image layout

* Add additional BottomSheet implementation to account for nested Composer modal

* Use mobile gallery layout on mobile web

* Missing key

* Fix lint

* Move altimage modal into the standard modal system

* Fix overflow wrapping of images

* Fixes to the alt-image modal

* Remove unnecessary switch

* Restore old imagelayoutgrid code

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-04-21 16:20:06 -05:00
Paul Frazee 0f5735b616 Fix profile link 404s on session change & handle change [APP 523] (#507)
* Use DID to link to the user profile to gracefully handle... handle changes

* Reset nav state on active profile change
2023-04-21 12:21:38 -05:00
Paul Frazee 9f9bd314b3 1.19 2023-04-20 17:43:01 -05:00
Paul Frazee e02c926c8a Improvements to notifications screen [APP-520] (#501)
* Refresh or sync notifications when the tab is navigated to

* Fix to bad textnode render

* Speed up initial session load

* Fix lint

* Restore updateSessionState() on session resumption
2023-04-20 17:36:25 -05:00
Paul Frazee f2fe4abdce Fix positioning of the load more button (#502) 2023-04-20 17:34:45 -05:00
Paul Frazee 22884b53ad Thread muting [APP-29] (#500)
* Implement thread muting

* Apply filtering on background fetched notifs

* Implement thread-muting tests
2023-04-20 17:16:56 -05:00
Ollie Hsieh 3e78c71018 Share profile and post (#499) 2023-04-20 13:08:30 -05:00
Ansh 74a1910e12 [APP-514] Fix weird scrollbar position on profile screen (#497)
* add scrollIndicatorInset to ViewSelector FlatList

* Update ViewSelector.tsx

* Update ViewSelector.tsx
2023-04-20 12:32:49 -05:00
Paul Frazee 04e0ebe8fc Feed and notifs improvements (#498)
* Reduce frequency of the notifications sync

* Reduce frequency of home feed polling

* Ensure loading spinner is visible in notifications

* Render notifications loading spinner in the flatlist

* Fixes and performance improvements to notifications

* Render 30+ on notifications if at max

* Fix issue with repeating posts in home feed

* Dont check for unread notifs if we're already at max
2023-04-19 20:11:10 -05:00
Ollie Hsieh b24ba3adc9 Add cursor to clickable elements (#491)
* Add cursor to clickable elements

* Add cursor to clickable elements

* Update per comments

* Fix word wrap in notifications

* Center the web login-load screen

* Add hover states on web

* Fix lint

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-04-19 20:05:10 -05:00
Ansh 1472bd4f17 #420: add updateDataOptimistically utility to disallow like counter out of sync (#446)
* add isLikedPressed flag to disallow like counter out of sync

* create revertible helper for updateDataOptimistically

* test implementation

* Update updateDataOptimistically() and apply to reposts

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-04-19 15:58:24 -05:00
Paul Frazee be83d2933c 1.18 2023-04-19 14:28:49 -05:00
Paul Frazee b40287e4be [APP 513] Label tuning (#496)
* Label updates: break out sexual into 3 categories; tune defaults; improve descriptions

* Fix misapplication of warning in notifications
2023-04-19 14:27:54 -05:00
Ollie Hsieh 3cc0fb1d67 Merge pull request #494 from bluesky-social/ollie/APP-91
[APP-91] Support CMD + Enter to publish post
2023-04-19 12:27:43 -07:00
renahlee 31df05825c Support CMD + Enter to publish post 2023-04-19 11:58:04 -07:00
Paul Frazee 8917cf77a0 Fix: consistently give suggestions in search (#493) 2023-04-19 12:43:34 -05:00
Paul Frazee 192f842ebd Update android version code 2023-04-18 19:00:46 -05:00
Paul Frazee 3e29121f32 1.17 2023-04-18 18:32:47 -05:00
Paul Frazee 75fd653be3 Rework search suggestions for performance (#492) 2023-04-18 18:29:54 -05:00
Paul Frazee 1ab8f31517 Fix user avatar and banner selector on web (#490) 2023-04-18 15:27:42 -05:00
Ansh c8157d6d38 Update README.md (#487)
Update README with new build instructions since we are no longer using the ios and android folders. So, ideally, devs will never need to open XCode and Android Studio (thank the gods)
2023-04-18 13:06:38 -05:00
Ansh 737235f5e0 add edges to ImageViewing component (#471) 2023-04-18 13:06:09 -05:00
Ollie Hsieh c2a4ffc99f Quote post legibility (#486) 2023-04-18 12:53:47 -05:00
Ansh 10621e86e4 APP-70 give profile its own tab mobile (#469)
* add prebuild command to package.json

* add ProfileTab navigator and screen

* add prop to remove back button from profile

* fix MyProfileTabNavigatorParams type

* fix dep array for rendering ProfileHeader

* just added ts-ignore

* enable opening drawer in profile tab

* clean up useNavigationTabState

* clean up code

* fix hideBackButton code flow
2023-04-18 11:19:37 -05:00
Ollie Hsieh 2509290fdd Split image cropping into secondary step (#473)
* Split image cropping into secondary step

* Use ImageModel and GalleryModel

* Add fix for pasting image URLs

* Move models to state folder

* Fix things that broke after rebase

* Latest -- has image display bug

* Remove contentFit

* Fix iOS display in gallery

* Tuneup the api signatures and implement compress/resize on web

* Fix await

* Lint fix and remove unused function

* Fix android image pathing

* Fix external embed x button on android

* Remove min-height from composer (no longer useful and was mispositioning the composer on android)

* Fix e2e picker

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-04-17 15:41:44 -07:00
Paul Frazee 91fadadb58 Fix web home feed sizing and related issues (close #432) (#475)
* Fix web home feed sizing (close #432)

* Fix lint

* Fix positioning of profile not found error

* Fix load latest on mobile

* Fix overflow issues on mobile web (visible in postthread)

* Fix bottom pad on mobile web

* Remove old comment
2023-04-15 10:15:30 -07:00
Paul Frazee a79dcd3d38 Fix: sanitize URLs before placing them on the page (#488) 2023-04-15 09:24:03 -07:00
Paul Frazee a6634ec45d Update bskyweb html styles 2023-04-13 16:36:08 -07:00
Paul Frazee f917c426a0 Web darkmode fixes (#474)
* Change dark mode borders to be slightly lighter than the bg rather than slightly darker

* Add dark mode styling to web composer

* Fix editprofile darkmode
2023-04-13 16:10:27 -07:00
Paul Frazee 5caa6a5e08 Update the bskyweb routes (#468) 2023-04-13 10:12:35 -07:00
Paul Frazee 8aabc70fa9 Update config 2023-04-12 20:49:36 -07:00
Paul Frazee d70182a996 Bump deps 2023-04-12 20:29:33 -07:00
Ansh Nanda c88903dad4 fix composer SafeAreaView 2023-04-12 20:28:01 -07:00
Paul Frazee 0d22767609 1.16 2023-04-12 18:59:35 -07:00
Ansh f2f73e414a temporary android fix for image picker issue (#466) 2023-04-12 18:50:49 -07:00
Ansh ec0510d1d9 add scrollIndicatorInset right: 1 to fix (#464) 2023-04-12 18:50:04 -07:00
Ansh f50f07f562 #435 web dark mode (#455)
* add ThemeProvider to App.web.tsx

* make FlatNavigator use themed color

* fix extra padding on top in web

* add observer to App.web.tsx to make it react to theme changes

* fix TS for useColorSchemeStyle

* add dark mode toggle button to web LeftNav

* fix index.web.tsx border colors for web

* Move the darkmode desktop web toggle to the right nav column

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-04-12 18:49:40 -07:00
Ansh 05e4e4ff93 add maxHeight of 100vh to web modal to stop overflow (#463) 2023-04-12 18:28:45 -07:00
John Fawcett f6769b283f Mobile Web (#427)
* WIP

* WIP

* Fix header offset on web

* Remove debug

* Fix web mobile feed and FAB layout

* Fix modals on mobile web

* Remove dead code

* Remove ios config that shouldnt be committed now

* Move bottom bar into its own folder

* Fix web drawer navigation and state behaviors

* Remove dark mode toggle from web drawer for now

* Fix search on mobile web

* Fix the logged out splash screen on mobile web

* Fixes to detox simulator

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-04-12 18:27:55 -07:00
Paul Frazee 2fed6c4021 Add first round of labeling tools (#467)
* Rework notifications to sync locally in full and give users better control

* Fix positioning of load more btn on web

* Improve behavior of load more notifications btn

* Fix to post rendering

* Fix notification fetch abort condition

* Add start of post-hiding by labels

* Create a standard postcontainer and improve show/hide UI on posts

* Add content hiding to expanded post form

* Improve label rendering to give more context to users when appropriate

* Fix rendering bug

* Add user/profile labeling

* Implement content filtering preferences

* Filter notifications by content prefs

* Update test-pds config

* Bump deps
2023-04-12 18:26:38 -07:00
Ansh a20d034ba5 Expo Updates (#426)
* install expo-updates

* configure expo-updates
2023-04-11 12:14:28 -07:00
Ansh 76132ca4dc make unfollow button light colored button (#429) 2023-04-11 12:13:38 -07:00
Paul Frazee a683c9e15f replace react-native-fast-image with expo-image (#452) 2023-04-11 12:12:34 -07:00
Ansh 14c8473210 [DRAFT] Android (#424)
* add android & ios folders to .gitignore

* delete android and ios dirs

* fix android build errors

* fix status bar color

* fix top cutoff on composer in android

* fix weird whitespace issue in post

* fix greyed out header android

* fix main feed getting cut off android

* fix swiping on main feed

* fix profile tabs switching on android

* A few app.json config items for iOS

* Update app.json for bgfetch

* make swiping work on android

* make splash screen cover

* add eas.json

* fix image container on android

* fix android status bar color

* use expo-splash-screen instead of react-native-splash-screen

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-04-09 18:02:44 -07:00
Paul Frazee 362ea7240d 1.15 2023-04-07 12:39:45 -05:00
Paul Frazee 0c9935f125 Filter out bad mentions instead of erroring during post (close #391) (#422) 2023-04-07 11:51:20 -05:00
Paul Frazee 0407e93ef8 Fix load spinner positioning (close #415) (#421) 2023-04-07 11:46:26 -05:00
Paul Frazee e27cd0098f Fix: correctly track when profile state was last updated 2023-04-07 11:10:03 -05:00
Paul Frazee ab11f206d8 Stripe checkmark emojis from display names (close #396) (#419) 2023-04-07 11:09:25 -05:00
Paul Frazee 4b98992257 Update AtUri import to use official package with fix for usernames that start with numbers (close #414) (#418) 2023-04-07 10:30:58 -05:00
Paul Frazee b84533090d Small fix: run in action 2023-04-07 08:59:32 -05:00
Paul Frazee 15478a8f0c 1.14 2023-04-06 23:38:16 -05:00
Paul Frazee 2f519bd66e Add tos, community guidelines, and copyright policy (#410)
* Add tos, community guidelines, and copyright policy

* Fix lint
2023-04-06 22:53:58 -05:00
Paul Frazee a74919ef33 Readd the ios universal links config (close #371) (#408) 2023-04-06 19:54:00 -05:00
Paul Frazee 7c99df33ad Fix to post overflow on web (close #395) (#407) 2023-04-06 17:12:48 -05:00
Paul Frazee 1fa9402453 Fix darkmode placeholder text in composer (#406)
* Remove old comment

* Fix darkmode placeholder text in composer (close #401)
2023-04-06 16:48:05 -05:00
Paul Frazee b7648cfe73 Fix repost rendering (#405) 2023-04-06 16:28:45 -05:00
Paul Frazee 4f886f712c Fix web sidebar listing of invite codes 2023-04-05 20:43:11 -05:00
Paul Frazee ea04c2bd33 Add user invite codes (#393)
* Add mobile UIs for invite codes

* Update invite code UIs for web

* Finish implementing invite code behaviors (including notifications of invited users)

* Bump deps

* Update web right nav to use real data; also fix lint
2023-04-05 18:56:02 -05:00
Paul Frazee 8e28d3c6be Analytics fixes (closes #386) (#387)
* Only send analytics events when the user is logged in

* Only send analytics events when the user is logged in (web)

* Add analytics identify() call
2023-04-05 11:15:22 -05:00
bnewbold 92b80ff048 bskyweb: bump indigo version (#383) 2023-04-05 10:17:46 -05:00
Paul Frazee f717ff6719 Add analytics to the web build (close #233) (#385)
* Add analytics to the web build (close #233)

* Use bsky endpoint for analytics
2023-04-04 13:01:38 -05:00
Paul Frazee b100abca0e 1.13 2023-04-03 19:52:58 -05:00
Paul Frazee 25cc5b997f Rework the me.follows cache to reduce network load (#384) 2023-04-03 19:50:46 -05:00
Paul Frazee 50f7f9877f Give the unfiltered view if the language filter yields no results (close #358) (#382) 2023-04-03 16:33:14 -05:00
Paul Frazee 9102af6b07 More darkmode fixes (#381)
* Update confirm modal to use theming system (close #347)

* Add dark mode styles to serverinput modal

* Fix lint
2023-04-03 16:19:22 -05:00
Paul Frazee 59e6b308c6 Fix: don't let the toast take pointer events (close #374) (#380) 2023-04-03 16:00:00 -05:00
Paul Frazee b12cd53a4d Improve "Load more" error handling in feeds (#379)
* Add explicit load-more error handling to posts feed

* Add explicit load-more error handling to notifications feed

* Properly set hasMore to false after an error
2023-04-03 15:57:17 -05:00
Paul Frazee 2045c615a8 Reorganize state models for clarity (#378) 2023-04-03 15:21:17 -05:00
John Fawcett 9652d994dd Fix click targets for post controls (#332) (#363)
* Fix click targets for post controls (#332)

* Add padding to the right side of the post controls

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-04-03 12:32:35 -05:00
John Fawcett 180e373b6f Fix full thread SVG dots not rendering (#346) (#364) 2023-04-03 12:18:57 -05:00
Paul Frazee 9d178c7e15 Fix unit tests (#377)
* Fix unit tests

* Remove excess lint and prettier checks from gh actions
2023-04-03 12:11:06 -05:00
Paul Frazee 70abcc48b8 Fixes & updates for xcode 14.3 (#369) 2023-04-03 10:32:19 -05:00
bnewbold 95fb65093a golang: update deps (minor) (#367)
* golang: minor deps update

* golang: update deps for latest indigo
2023-04-03 09:43:08 -05:00
Paul Frazee cc7b2a246e Lex refactor fixes (#368)
* Fix: handle validation failures correctly in feed-view

* Fix: convert the off-spec feed view to lex objects

* Fix to fetching all follows during init

* Bump @atproto/api@0.2.1

* Fix: properly group together like notifications

* 1.12
2023-04-02 14:20:19 -05:00
bnewbold 14965d4d97 ci: golang version as string, not number (#361) 2023-04-02 09:56:41 -07:00
Jake Gold a0435cf3d4 update for lex refactor 2023-04-02 08:34:37 -07:00
Paul Frazee a3334a01a2 Lex refactor (#362)
* Remove the hackcheck for upgrades

* Rename the PostEmbeds folder to match the codebase style

* Updates to latest lex refactor

* Update to use new bsky agent

* Update to use api package's richtext library

* Switch to upsertProfile

* Add TextEncoder/TextDecoder polyfill

* Add Intl.Segmenter polyfill

* Update composer to calculate lengths by grapheme

* Fix detox

* Fix login in e2e

* Create account e2e passing

* Implement an e2e mocking framework

* Don't use private methods on mobx models as mobx can't track them

* Add tooling for e2e-specific builds and add e2e media-picker mock

* Add some tests and fix some bugs around profile editing

* Add shell tests

* Add home screen tests

* Add thread screen tests

* Add tests for other user profile screens

* Add search screen tests

* Implement profile imagery change tools and tests

* Update to new embed behaviors

* Add post tests

* Fix to profile-screen test

* Fix session resumption

* Update web composer to new api

* 1.11.0

* Fix pagination cursor parameters

* Add quote posts to notifications

* Fix embed layouts

* Remove youtube inline player and improve tap handling on link cards

* Reset minimal shell mode on all screen loads and feed swipes (close #299)

* Update podfile.lock

* Improve post notfound UI (close #366)

* Bump atproto packages
2023-03-31 13:17:26 -05:00
bnewbold 19f3a2fa92 CI: run on all PRs, and on main (after merge/push) (#355) 2023-03-27 10:19:26 -05:00
John Fawcett def8be2137 Fixes the lightbox image index not being passed through to the web version (#306) (#324) 2023-03-27 10:18:14 -05:00
bnewbold 2789d5c056 Basic golang CI setup (#360)
* bskyweb: Makefile and dev env

This matches the setup for local dev testing in atproto and indigo
repos.

* gitignore: don't ignore self and .github/

* CI: golang build+test and lint actions

* bskyweb: better use of godotenv

A recent change from indigo.

* prettier: ignore top-level app.json

* CI: bump from golang 1.19 to 1.20

* bskyweb: update to golang 1.20
2023-03-27 10:16:17 -05:00
Paul Frazee 4fbe0e267c 1.10.0 2023-03-23 10:17:24 -05:00
Paul Frazee a14c2ede39 Fix layout issues with search on Web (close #345) (#357) 2023-03-22 15:49:49 -05:00
Paul Frazee f6f1fe2558 Feed updates (Closes #344) (#356)
* Rework feed polling to correctly detect when new content is available (close #344)

* Tweak how the tuner works for consistency

* Improve the feed-update behavior after posting

* Load latest notifications when opening the tab
2023-03-22 15:46:49 -05:00
Paul Frazee 449f9243f3 Filter content by your device's configured languages (#354) 2023-03-22 13:23:12 -05:00
Paul Frazee a369e07956 Fix tsc 2023-03-22 11:07:00 -05:00
Paul Frazee a8a747ebcb Fix bad reference (close 348) (#353) 2023-03-22 10:49:39 -05:00
Paul Frazee 2dc774788b Move the feed selector to the header (#352)
* Reorg pager components into their own folder

* Move the feed selector to the header

* Fix lint
2023-03-22 10:46:09 -05:00
Paul Frazee 4f814207bc Merge the suggested actors model with the general suggestion system (#343) 2023-03-21 19:18:15 -05:00
Paul Frazee f20fb92dc3 1.9 2023-03-21 17:59:37 -05:00
Paul Frazee a7e3ce2585 Add fulltext search for posts and profiles (closes #340) (#342)
* Refactor mobile search screen

* Remove 'staleness' fetch trigger on search

* Implement a temporary fulltext search solution

* Add missing key from profile search result

* A few UI & UX improvements to the search suggestions

* Update web search suggestions

* Implement search in web build
2023-03-21 17:58:50 -05:00
Paul Frazee 48e18662f6 Fix bug in checking for latest 2023-03-21 13:51:27 -05:00
Paul Frazee eab855ffff A few fixes to ensure threads show up as often as possible 2023-03-21 13:47:17 -05:00
Paul Frazee b542f0f7f8 Merge branch 'main' of github.com:bluesky-social/social-app into main 2023-03-21 13:36:39 -05:00
Paul Frazee 1e34e62259 Elide long threads in the feed (close #333) 2023-03-21 13:36:27 -05:00
Paul Frazee b692f29773 Raise the bar a bit more for showing replies in the feed 2023-03-21 13:26:13 -05:00
Paul Frazee 35fae5ab25 Fix duplicates showing up in the feed due to reply parents 2023-03-21 13:20:35 -05:00
Paul Frazee 92d9267805 Fix: don't incorrectly assemble threads when somebody replies multiple times to the same post 2023-03-21 13:13:36 -05:00
Paul Frazee 08d513e8c1 Fix default-banner sizing & positioning (#336) 2023-03-21 13:03:25 -05:00
Paul Frazee 858d4c8c88 Introduce an image sizes cache to improve feed layouts (close #213) (#335)
* Introduce an image sizes cache to improve feed layouts (close #213)

* Clear out resolved promises from the image cache
2023-03-21 12:59:10 -05:00
Paul Frazee c1d454b7cf Fix sizing on the composer text input (#331) 2023-03-20 19:08:48 -05:00
Jake Gold 67e4882bb3 bskyweb additions (#296)
Add some minor bskyweb improvements, Mailmodo endpoint, Dockerfile for bskyweb, container image push
2023-03-20 14:41:15 -07:00
Paul Frazee d8f4475696 Fix default banner sizing 2023-03-20 16:20:29 -05:00
Paul Frazee 91b360fd19 Fix: poll for unread notifications globally (close #303) (#330) 2023-03-20 16:18:42 -05:00
Paul Frazee 8a3601c07c Fix visibility of the mentions autocomplete in the composer (#326) (#329)
* Improve layout in composer to ensure the mentions autocomplete is visible (closes #326)

* Dont dismiss the keyboard in the composer
2023-03-20 16:10:29 -05:00
Paul Frazee df6a712834 Request permissions properly on mobile (closes #308) (#328) 2023-03-20 15:16:56 -05:00
Paul Frazee 4f9e9e609e Darkmode fixes (#301) (#327)
* 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
2023-03-20 14:53:59 -05:00
Paul Frazee d9ed13ea90 Fix Podfile.lock 2023-03-19 19:46:49 -05:00
Paul Frazee 1dcd7e5735 Merge branch 'onboarding-and-discovery' into main 2023-03-19 19:45:59 -05:00
Paul Frazee 994332af91 Add missing deps and an atob polyfill 2023-03-19 19:02:55 -05:00
Paul Frazee 1de724b24b Add custom feeds selector, rework search, simplify onboarding (#325)
* 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
2023-03-19 18:53:57 -05:00
Paul Frazee 4787c8383d Add language filtering to goodstuff 2023-03-19 18:47:49 -05:00
Paul Frazee a811c57480 Pin deps to make expo happy 2023-03-19 18:11:45 -05:00
Paul Frazee 23e8484986 Implement pager and tabbar for desktop web 2023-03-19 18:11:33 -05:00
John Fawcett c31ffdac1b Fixes the lightbox not having a close button on web (#306) (#323) 2023-03-19 17:39:37 -05:00
John Fawcett db6b198d18 Fixes profile edit image selection not prompting users on web (#309) (#321)
* Fixes profile edit image selection not prompting users on web (#309)

* Fixes linting erros
2023-03-19 17:38:53 -05:00
John Fawcett ea2b2583b8 Fixes character counter missing on web (#300) (#322) 2023-03-19 17:37:59 -05:00
Paul Frazee 7a754850bc Go to whats-hot by default if you have no follows 2023-03-19 17:30:58 -05:00
Paul Frazee 6578d2bfad Swap the tab bar items and rename suggested to what's hot 2023-03-19 16:25:42 -05:00
John Fawcett 30c54aa265 Fixes quote post not showing up in quote post composer (#315) (#318) 2023-03-18 19:44:39 -05:00
Paul Frazee 5def9eb238 Fix for dev & staging 2023-03-17 18:40:26 -05:00
Paul Frazee a2462498c0 1.8 2023-03-17 18:39:31 -05:00
Paul Frazee 808affc78b Switch to the off-spec goodstuff route 2023-03-17 18:38:16 -05:00
Paul Frazee 8364e1a081 Fix backgrounds 2023-03-17 18:11:57 -05:00
Paul Frazee 025681c2f2 Fall back to who to follow 2023-03-17 18:09:27 -05:00
Paul Frazee ff39b072f3 Add foaf-based follow discovery 2023-03-17 18:01:53 -05:00
Paul Frazee 6af2585f32 Choose good stuff based on service 2023-03-17 15:20:34 -05:00
Paul Frazee 308b1e8beb Remove explicit 'onboarding' flow 2023-03-17 15:18:46 -05:00
Paul Frazee b711a49df9 Add soft reset on tap selected in tab bar 2023-03-17 15:17:28 -05:00
Paul Frazee 201c21df6d Reduce home polling to the currently active page; also reuse some code 2023-03-17 15:14:17 -05:00
Paul Frazee 93b334cce4 Use the native driver on the tabbar indicator to improve perf 2023-03-17 15:02:43 -05:00
Paul Frazee 4a16b179e2 Add the view header as a feed item 2023-03-17 14:53:58 -05:00
Paul Frazee 44fcdca06a Fix to 'new posts' poll 2023-03-17 14:41:04 -05:00
Paul Frazee c3ed0dc44c Move the feed selector to the footer 2023-03-17 14:03:16 -05:00
Paul Frazee 244b06c19d Visual tune-up 2023-03-16 22:02:44 -05:00
Paul Frazee 71209bb3ac Implement popular & following views on home screen 2023-03-16 21:47:11 -05:00
Paul Frazee ad9da82612 Add tab bar to pager 2023-03-16 19:54:32 -05:00
Paul Frazee f01d43f9e8 Get home screen's swipable pager working with the drawer 2023-03-16 19:09:19 -05:00
Paul Frazee c50a20d214 Refactor feed manipulation and rendering to be more robust (#297) 2023-03-16 15:54:06 -05:00
Paul Frazee 93df983692 Disable the drawer and reset the nav when the user logs out or switches accounts 2023-03-16 11:41:59 -05:00
Paul Frazee 64c8689a29 Update team handles and fetch more data in discovery 2023-03-15 17:29:38 -05:00
Paul Frazee 53fc5bf336 Remove ipad support that somehow crept in 2023-03-15 16:55:56 -05:00
Paul Frazee 4f20a17b6e Tune up notification badge rendering 2023-03-15 16:39:45 -05:00
Paul Frazee 474b4b7840 Optimize and refactor profile rendering a bit 2023-03-15 15:46:39 -05:00
Paul Frazee 8a279b8d2c Temporarily disable swipe gesture on profiles 2023-03-15 15:34:57 -05:00
Paul Frazee 3c05a08482 Logout bug hunt (#294)
* 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
2023-03-15 15:05:13 -05:00
Paul Frazee 94741cdded Temporary hackfix for desktop search 2023-03-14 17:35:58 -05:00
Paul Frazee 8d2e649b4d Create build step for the web server (#289)
* Create build step for the web server

* Update bskyweb routes and 404 behavior
2023-03-14 17:30:15 -05:00
bnewbold 8629e167cd bskyweb: proof-of-concept golang daemon to serve SPA (#275)
* gitignore: /dist/

* bskyweb: initial work-in-progress

* bskyweb: import icons from bluesky-website

* bskyweb: switch to pongo2 templates; iterate on views

* bskyweb: example.env (and docs)

* bskyweb: go fmt

* bskyweb: remove plan file

* bskyweb: README: tweak formatting

* prettier: ignore /dist/, bskyweb templates

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-03-14 15:00:44 -05:00
Paul Frazee 528e14fe90 Handle logged out mobile web better 2023-03-14 14:59:37 -05:00
Paul Frazee 41f4385db9 Fix multiline input in composer 2023-03-14 14:38:02 -05:00
Paul Frazee 5bbb980250 Fix mentions in web 2023-03-14 14:36:31 -05:00
Paul Frazee b4e5179c9c A couple small fixes 2023-03-14 13:34:05 -05:00
Paul Frazee 617d93fb48 Add waitlist signup 2023-03-14 13:30:20 -05:00
Paul Frazee b838c786e0 Delete dead code 2023-03-14 13:14:56 -05:00
Paul Frazee 1b7292e1db Fix lint, tsc; delete dead code 2023-03-14 13:13:46 -05:00
Paul Frazee c73d1e80b1 Remove dead code 2023-03-14 13:12:42 -05:00
Paul Frazee 4eb9eb006c Fix redundant filename 2023-03-14 13:12:13 -05:00
Paul Frazee 7ff4e91363 Move the shell-ui model to the ui folder 2023-03-14 13:11:46 -05:00
Paul Frazee cf30c66c33 Move the profile-ui model to the new ui folder 2023-03-14 13:11:04 -05:00
Paul Frazee acf0f80de2 Rework account creation and login views 2023-03-14 13:03:43 -05:00
Paul Frazee d55780f5c3 Tune the logged out web view 2023-03-14 08:37:34 -05:00
Paul Frazee 774fb83719 Rework logged out state to preserve routing and work for web 2023-03-13 23:30:12 -05:00
Paul Frazee b5c64a03b6 Notification count fixes 2023-03-13 21:46:16 -05:00
Paul Frazee 6533d7dd08 Add /support and /support/privacy 2023-03-13 20:34:01 -05:00
Paul Frazee 56cf890deb Move to expo and react-navigation (#288)
* 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
2023-03-13 16:01:43 -05:00
Paul Frazee 503e03d91e No longer a beta 2023-03-08 13:03:59 -06:00
Paul Frazee ff20981288 Fix lint 2023-03-07 17:18:49 -06:00
Paul Frazee 181121b451 Another set of UI updates (FAB returns, a few others) (#281)
* 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)
2023-03-07 17:17:44 -06:00
Paul Frazee e74f94bc72 Big batch of UI updates (#276)
* 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
2023-03-07 15:52:24 -06:00
Paul Frazee 2f3fc4fe4e Handle-change modal with custom domain support (#273)
* 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)
2023-03-06 21:37:48 -06:00
Paul Frazee 20de7782ba Fix typo 2023-03-06 15:46:44 -06:00
Paul Frazee bb6bd905c2 Fix: fetch follows before everything else to avoid rendering follow buttons wrongly 2023-03-06 15:40:52 -06:00
Paul Frazee e069bde75c Tune the menu's dark mode bg color 2023-03-06 15:39:58 -06:00
Paul Frazee 6980bb0827 Fix the darkmode icon in the menu 2023-03-06 15:38:52 -06:00
Paul Frazee 36791e68b3 Onboarding tweaks (#272)
* 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
2023-03-06 15:34:22 -06:00
Paul Frazee 74c30c60b8 Show replies in the main feed if they have 2 or more upvotes (#269) 2023-03-06 14:49:42 -06:00
Paul Frazee f84a379376 Factor out the bottom bar and layer it under the side menu (close #243) (#268) 2023-03-06 11:59:06 -06:00
Paul Frazee c2a931f49c 1.6 2023-03-06 10:55:45 -06:00
Paul Frazee eeac64cc88 Look & feel updates: replace the "FAB" with a footer menu item, update the side menu (#263)
* 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
2023-03-06 10:54:56 -06:00
Paul Frazee 159615990d 1.5 2023-03-03 14:44:00 -08:00
Paul Frazee c7560ae2f7 Add an x button to the search to clear the input 2023-03-03 14:38:59 -08:00
Paul Frazee 8e22ce8e2a Turn links to posts into quote posts (#262)
* Turn links to posts into quote posts

* Fix lint
2023-03-03 16:30:33 -06:00
arcalinea d74ff9c219 New user constants (#260)
* 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>
2023-03-03 15:37:17 -06:00
Paul Frazee 69d6774277 Move the translate item to the top of the menu 2023-03-03 13:19:00 -08:00
Paul Frazee a9920d9630 Add translate link to post menu (#261)
* Add a google translate menu item to posts

* Fix: make sure the dropdown menu is always visible (when low on the screen)
2023-03-03 15:13:31 -06:00
Paul Frazee c2bfa111ac Remove replies from the home feed (#259)
* Remove replies from the home feed (close #252)

* Increase the 'load more' threshhold
2023-03-03 14:43:18 -06:00
Paul Frazee b1fa1b633f Fix dark mode ellipsis on posts 2023-03-03 12:05:38 -08:00
Paul Frazee fd9d6327b4 Edit profile fixes (#258)
* Fix: only clear banner or avi when requested in edit profile

* Set the default snap points to 90% to ensure the modal never fails to raise
2023-03-03 14:02:40 -06:00
Paul Frazee 36b8f011a4 1.4 2023-03-02 17:02:46 -08:00
Ansh e592e59f4e 72-delete-avatar-and-cover (#255)
* allow to delete profile pic

* allow for removing banner
2023-03-02 18:53:18 -06:00
Ansh aeb04a2ed0 make authorAvatar optional prop (#254) 2023-03-02 18:51:13 -06:00
Paul Frazee 403c187cf5 Minor improvements to web autocomplete in composer 2023-03-02 16:43:19 -08:00
Ansh 75174a6c37 73-post-embeds (#253)
* 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>
2023-03-02 18:09:48 -06:00
Paul Frazee f539659ac8 Quick fixes to dark mode character counter colors 2023-03-02 13:59:44 -08:00
Paul Frazee ea4ec26683 Increase network timeouts (closes #248) (#249)
* Increase network timeouts (close #248)

* Fix: on post error only update the ext link card if it's in use
2023-03-02 13:31:16 -06:00
Paul Frazee 06e09facfe Trim whitespace from the invite code (close #245) (#247) 2023-03-02 12:42:52 -06:00
Ansh bd9386d81c New onboarding (#241)
* 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>
2023-03-02 12:21:33 -06:00
Paul Frazee 9b46b2e6a9 A couple various fixes (#242)
* Fix: set the status bar color for dark mode when logging in

* Add some logging

* Improve read/unread tracking behaviors in notifications
2023-03-01 16:54:50 -06:00
Paul Frazee 1fd2942b9b 1.3 2023-03-01 09:13:43 -08:00
Paul Frazee df712a89d3 Fixes to dark mode (#238) 2023-03-01 10:35:56 -06:00
Paul Frazee d054b1baf8 Fix tests for march 1st 2023-03-01 08:35:25 -08:00
Paul Frazee dc7b5a34e7 Add a temporary lexicon refactor guard (#235)
* Add a temporary lexicon refactor guard

* Fix test

* Fix tsconfig formatting
2023-02-28 11:57:49 -06:00
Paul Frazee fcd8c7b037 Remove leftover log 2023-02-28 09:08:36 -08:00
Paul Frazee dcfc13f8d0 Add analytics identify() call with hashed email 2023-02-28 09:03:44 -08:00
Paul Frazee d375a45859 Fix analytics in native build 2023-02-27 11:08:01 -06:00
Paul Frazee f7d2a8935c Better fix to native modals 2023-02-27 10:59:19 -06:00
Paul Frazee be121da134 Fix to native modals 2023-02-27 10:54:44 -06:00
Paul Frazee fb4e28e713 Fix tsconfig for jsx 2023-02-27 10:52:22 -06:00
Paul Frazee 0bbdaa9ea4 Fix import 2023-02-27 10:47:39 -06:00
Paul Frazee dc6cdeae60 Fix lint 2023-02-27 10:45:59 -06:00
Paul Frazee fb4419786e Fix tests 2023-02-27 10:44:42 -06:00
Paul Frazee 55a8a8fa4c Sync browser navigation with app 2023-02-24 17:47:53 -06:00
Paul Frazee dcd396153c Clean up desktop web header search 2023-02-24 12:25:02 -06:00
Paul Frazee 70e74efe69 Hold off on customizing web feed rendering for now 2023-02-24 11:51:35 -06:00
Paul Frazee 9bda3b72d0 Simplify the desktop search screen 2023-02-24 11:49:25 -06:00
Paul Frazee d97e233518 Fixes to lineheight on web to counteract emoji issues 2023-02-24 11:40:43 -06:00
Paul Frazee 80bd3398d7 Remove the desktop right column for now 2023-02-24 11:29:27 -06:00
Paul Frazee fa115c1cba Fix region sizing on web 2023-02-24 10:10:21 -06:00
Paul Frazee 3e19728618 Replace some old modal models that got missed 2023-02-24 10:07:01 -06:00
Michael Staub 58b187ce7c fix: webpack flags 2023-02-23 16:35:11 -08:00
Michael Staub 693cbb9f18 Merge branch 'rnw' of github.com:bluesky-social/social-app into rnw 2023-02-23 16:34:25 -08:00
Michael Staub 23f07d8def fix: commit yarn.lock file 2023-02-23 16:33:06 -08:00
Michael Staub c173cffd62 fix: webpack hot reloading 2023-02-23 16:32:56 -08:00
Michael Staub e11f360376 feat: implement DesktopSearch component 2023-02-23 16:32:46 -08:00
Paul Frazee bbd0b03a46 Update modal com name 2023-02-23 17:29:34 -06:00
Paul Frazee 154c34e915 Rework modals to support multiple active 2023-02-23 17:22:03 -06:00
Paul Frazee b4f2a6979a Add setImmediate polyfill to web, fixing dropdown items 2023-02-23 16:42:52 -06:00
Paul Frazee 4182edfd7e Implement image uploading in the web composer 2023-02-23 16:02:31 -06:00
Michael Staub f709c50809 fix: browser history 2023-02-23 13:52:12 -08:00
Paul Frazee 0f293ecf95 Show a 'not available for mobile web' screen (temporary) 2023-02-23 12:39:10 -06:00
Paul Frazee a014b4e6cb Tweak approach to the viewheader 2023-02-23 12:26:25 -06:00
Paul Frazee ac655a0cf4 Web: go lighter for now, ditch the composer prompt in feed 2023-02-23 10:48:50 -06:00
Paul Frazee 86652c071a Missed in last commit 2023-02-23 10:25:24 -06:00
Paul Frazee 5f92180058 Move all of the web left-nav shell into the header 2023-02-23 10:19:21 -06:00
Paul Frazee 9bf48ed595 Change web shell to use permanent header 2023-02-23 09:38:02 -06:00
Paul Frazee e828f380e7 Update web header and search 2023-02-23 01:07:20 -06:00
Paul Frazee c5f28376c8 Rework web shell ui 2023-02-22 23:37:14 -06:00
Paul Frazee 9bfffadd88 Fix temporary web useAnalytics hook 2023-02-22 21:23:22 -06:00
Paul Frazee 2db7ad8ef3 Fix ref forwarding in web 2023-02-22 21:21:17 -06:00
Paul Frazee f28334739b Merge main into the Web PR (#230)
* 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>
2023-02-22 14:23:57 -06:00
Paul Frazee 7916b26aad Break out the web/native image picking code and make some progress on the web version 2023-01-27 15:51:24 -06:00
Paul Frazee 0673129b20 Fix import paths 2023-01-27 00:19:58 -06:00
Paul Frazee 99360f7bd9 Implement basic web composer 2023-01-27 00:16:07 -06:00
Paul Frazee 5961c26800 Update 'load latest' btn for web 2023-01-26 23:24:37 -06:00
Paul Frazee e6b63e3f53 Update compose prompts for web 2023-01-26 23:04:38 -06:00
Paul Frazee cd96c94d3a Add the user profile to the left nav 2023-01-26 22:40:39 -06:00
Paul Frazee 4b33cdb7ec Implement modals for web 2023-01-26 22:25:38 -06:00
Paul Frazee 24559599f3 Implement web toast 2023-01-26 22:08:10 -06:00
Paul Frazee 20eaac6acd Add lightbox for web 2023-01-26 21:54:47 -06:00
Paul Frazee 883d5749ed Update login/create-account and onboard for web 2023-01-26 21:03:50 -06:00
Paul Frazee df57c69f06 Update layouts on a bunch of views 2023-01-26 20:33:47 -06:00
Paul Frazee 9659625e8e Fix background in web scroll elements and update settings screen for web 2023-01-26 20:16:37 -06:00
Paul Frazee f7e3b1451e Add web version of the header 2023-01-26 20:04:11 -06:00
Paul Frazee a3df8840ea Fix repost icon on web 2023-01-26 19:50:04 -06:00
Paul Frazee f51ad28025 Add right column of web shell and tweak left column 2023-01-26 19:49:16 -06:00
Paul Frazee c24d0254bc Add left column of web shell 2023-01-26 19:06:46 -06:00
Paul Frazee 20ccb03427 Fix to blurviews 2023-01-26 18:15:43 -06:00
Paul Frazee d04a6d7539 Add web layout components 2023-01-26 17:55:15 -06:00
Paul Frazee 57d876a530 Fix: move imports and constants for the api-polyfill over from their old location 2023-01-26 17:38:25 -06:00
Paul Frazee a3d2db9645 Get MVP of web app running 2023-01-26 12:53:46 -06:00
Paul Frazee 751dfb20fd Add web polyfills 2023-01-26 12:36:27 -06:00
Paul Frazee d6ec627c8c Update web build and web-specific components; RNW now builds 2023-01-26 12:12:27 -06:00
Paul Frazee 7e3f6f0306 Fix all type errors 2023-01-26 11:25:52 -06:00
Paul Frazee c4ba5e7fd5 Bump podfile.lock 2023-01-26 09:51:05 -06:00
Paul Frazee 32be661d87 Brand tuning: switch from "blueprint B" to "cloud imagery" (#96)
* Switch app icon to bluesky image

* Update splash screen to clouds

* Update login screen to use branding

* Lighten the shadows in the brand imagery
2023-01-25 19:01:16 -06:00
Paul Frazee 67e9b3596d Fix: dont dedup reposts that are in threads, as that can cause rendering issues (close #71) 2023-01-25 17:57:53 -06:00
Paul Frazee e08a46f0c6 Add a sanity check to avoid bad references, close #77 2023-01-25 17:49:22 -06:00
Paul Frazee 1090783f91 Fix pagination and rendering of suggested follows (#95) 2023-01-25 17:46:14 -06:00
Aryan Goharzad eb33c3fa81 Saves image on long press (#83)
* 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
2023-01-25 17:25:34 -06:00
Aryan Goharzad adf328b50c Adds darkmode support for "Liked by" screen (#94)
* Adds darkmode support for "Liked by" screen

* changes based on feedback

* variable naming
2023-01-25 16:54:22 -06:00
Paul Frazee 5f18931915 Push notification & session management cleanup (#92)
* 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
2023-01-25 11:31:09 -06:00
Paul Frazee 079e1dbe18 Fix missing config for background fetch 2023-01-24 19:59:40 -06:00
Paul Frazee 869f6c4e0e Initial pass at push notifications + some fixes to the session management (#91)
* 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()
2023-01-24 19:32:24 -06:00
Paul Frazee 21f5f4de15 Add basic analytics (#89)
* Add basic analytics

* Fix: add mock for analytics
2023-01-24 13:58:35 -06:00
Paul Frazee f36c956536 Resolve all remaining lint issues (#88)
* 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
2023-01-24 13:00:11 -06:00
Aryan Goharzad 3a90114f3a more prettier and lint cleanup (#82)
* more prettier and lint cleanup

* Fixes more lint issues

* lint

* ignore more files

* remove todos

* lint
2023-01-24 11:03:18 -06:00
Paul Frazee 9027882fb4 Account switcher (#85)
* 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
2023-01-24 09:06:27 -06:00
Aryan Goharzad 439305b57e Removes white space from around images (#81)
* Removes white space from around images

* Add a subtle border
2023-01-23 20:17:37 -06:00
Aryan Goharzad 06e41167d0 Lints some errors and warnings (#76) 2023-01-20 13:43:28 -06:00
Aryan Goharzad 2fce1637b4 Fixes embed links for twitter and tiktok (#74) 2023-01-20 12:54:30 -06:00
Paul Frazee d4b9ef3b0a Only use cursors supplied by the server (ref #59) 2023-01-20 10:39:00 -06:00
Paul Frazee c4cca8cf6c Sanity check selector swipes 2023-01-20 10:15:59 -06:00
Paul Frazee 56747263df More layout fixes in notifications 2023-01-20 08:40:41 -06:00
Paul Frazee db4109a5ea Spacing fix of expanded notifications 2023-01-20 08:36:15 -06:00
Paul Frazee c2e7dd8f48 Fix font color of expanded notifs 2023-01-20 08:35:35 -06:00
Paul Frazee 620d5bb102 Fix text color in composer 2023-01-19 20:08:43 -06:00
Paul Frazee 142b5dfc1b Fix a case where the 'aborted' error message was getting through 2023-01-19 17:55:00 -06:00
Paul Frazee ddcc719192 Fix: taps on images in the composer now register even when input is focused 2023-01-19 17:46:45 -06:00
Paul Frazee 41f76a68e3 Fix: new post doesnt open images selector 2023-01-19 17:37:24 -06:00
Paul Frazee 570b76a71d Add the ability to paste images into the composer (#56) 2023-01-19 17:36:49 -06:00
Paul Frazee 15589d216f Fix error logs 2023-01-19 17:05:36 -06:00
Paul Frazee 6dcf9f8d5b Fixes to likes list 2023-01-19 16:54:30 -06:00
Paul Frazee a24b29d64b Fixes to reposted-by list 2023-01-19 16:50:16 -06:00
Paul Frazee c11bfc7541 Fixes to follows listing 2023-01-19 16:39:40 -06:00
Paul Frazee aec0f1c3ba Fixes to the followers list view 2023-01-19 16:38:12 -06:00
Paul Frazee 88ab1f171a Update podfile.lock 2023-01-19 16:37:21 -06:00
Paul Frazee 80f58cf9f3 Fix: ensure all views can scroll to the bottom 2023-01-19 15:21:06 -06:00
Paul Frazee 2972fd8372 Update load latest to match sizing and aesthetic better 2023-01-19 15:10:15 -06:00
Paul Frazee 90d6d75af1 Fix html extraction tests 2023-01-19 14:30:33 -06:00
Paul Frazee 8d7566f200 Visual tweaks to post prompts 2023-01-19 14:28:11 -06:00
Paul Frazee 39e996ed8e Fix weird bar at top of composer in dark mode 2023-01-19 14:17:15 -06:00
Paul Frazee 43ef1756c1 Fix bad ref 2023-01-19 14:17:00 -06:00
Paul Frazee 3f95f98ef9 Change post prompt to a set of buttons (#55) 2023-01-19 14:08:53 -06:00
Aryan Goharzad f10a8308d9 Fixes youtube embed issues (#50)
* 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
2023-01-19 12:53:11 -06:00
Paul Frazee 9230d52ff5 Improve link meta fetching for bsky links (#54)
* Add share dropdown item to profiles

* Temporary improvement for links to content on the network

* Enlarge text slightly on embed cards
2023-01-19 12:30:28 -06:00
Aryan Goharzad 0536a6afcf Adding action for linting (#51)
* Adding action for linting

* Configuring eslint

* Update lint.yml

* Update lint.yml

* Update lint.yml

* adds yarn jest to package.json

* test report

* debugging tests

* trying force exit

* force exit

* test1

* forceexit

* using another reporter

* jest debugging

* separated lints & tests

* test

* Cleanup

* Add  /src/third-party, /ios, and /android to ignore list
2023-01-19 12:28:52 -06:00
Paul Frazee f969e746f7 Clean up the settings page 2023-01-19 11:49:53 -06:00
Paul Frazee 1c5c2622bf Improve the 'expand avis' animation in the notifications 2023-01-19 11:41:24 -06:00
Paul Frazee d2db9baacc Fix missing key in list 2023-01-19 11:35:37 -06:00
Paul Frazee 74ab6530d4 Add the ability to expand/collapse users in notifications 2023-01-19 11:34:07 -06:00
Paul Frazee 1ed82b6c59 Tune the empty state visuals 2023-01-19 10:50:21 -06:00
Paul Frazee f47751ad42 Tweak compose prompt spacing 2023-01-19 10:40:55 -06:00
Paul Frazee 2798250489 Post layout tweaks (#53)
* 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
2023-01-19 10:35:57 -06:00
Paul Frazee 6588961d2e Update composer to preview external link cards (#52)
* Fetch external link metadata during compose so the user can preview and remove the embed

* Add missing mocks

* Update tests to match recent changes
2023-01-18 18:14:46 -06:00
Paul Frazee 27ee550d15 Enlarge avatars in the notifications 2023-01-18 17:06:17 -06:00
Paul Frazee bda32c1ceb Remove log 2023-01-18 16:52:00 -06:00
Paul Frazee ebc2033d18 Handle post deletions by removing from active views (close #37) 2023-01-18 16:45:48 -06:00
Paul Frazee ace0e6bfd9 Fix image compression (close #41) 2023-01-18 14:54:55 -06:00
Paul Frazee 1898d5dbaa Keep the composer image selector open after choosing an image 2023-01-18 14:47:59 -06:00
Paul Frazee d0364c09ad Hackfix around 'images too large' issue 2023-01-18 14:47:42 -06:00
Paul Frazee bf03167ca6 Update compose prompt for isual balance and to include image button 2023-01-18 13:57:53 -06:00
Paul Frazee 9d6c4698a1 Lighten the button gradients a bit 2023-01-18 13:30:50 -06:00
Paul Frazee c97045a21a Fix to text consistency in composer 2023-01-18 13:22:34 -06:00
Paul Frazee 726ff6bb01 Focus the text input on tap during the composer 2023-01-18 13:21:23 -06:00
Paul Frazee 302acaccb6 Remove all links from post meta to ensure taps are more consistent 2023-01-18 13:10:08 -06:00
Paul Frazee 6a01e0529b Prettier profile headers (no standard header) 2023-01-18 12:56:53 -06:00
Paul Frazee 990c824648 Move the grays from a red undertone to blue 2023-01-18 12:40:51 -06:00
Paul Frazee a51354e6e6 Update gradients to use a more consistent blue theme 2023-01-18 12:32:48 -06:00
Paul Frazee 77580ab6a4 Rework all typography 2023-01-18 11:15:40 -06:00
Paul Frazee df4acbd683 Merge branch 'improved-lightbox' into main 2023-01-17 21:18:25 -06:00
Paul Frazee 7328e80825 Fix an issue that caused the shelf menu to show up at random 2023-01-17 21:01:52 -06:00
Paul Frazee 80e035cede Remove leftover code 2023-01-17 20:47:43 -06:00
Paul Frazee 065d7ef629 Improve lightbox... and update to React Native 0.71.0 (#49)
* Switch to a better lightbox implementation (close #42)

* Upgrade to react-native 0.71.0

* Update (or remove low-value) tests
2023-01-17 20:40:02 -06:00
Paul Frazee a3e9a0691e Update (or remove low-value) tests 2023-01-17 20:38:15 -06:00
Paul Frazee a13f9bf091 Upgrade to react-native 0.71.0 2023-01-17 20:21:11 -06:00
Paul Frazee b449ab842f Switch to a better lightbox implementation (close #42) 2023-01-17 19:34:12 -06:00
Paul Frazee 61682d5846 Add images to the post in the right order 2023-01-17 18:35:48 -06:00
Paul Frazee bccc8a64d0 Give a more sensible default crop in the post image picker (related #39) 2023-01-17 18:35:37 -06:00
Paul Frazee fb334b1b3f Add profile menuitem to main menu (close #47) 2023-01-17 16:55:43 -06:00
Paul Frazee 5da45cd8cd Fix to extraneous home feed polling 2023-01-17 16:49:11 -06:00
Paul Frazee 41337f6d17 Visual improvements to post embeds for external links 2023-01-17 16:42:32 -06:00
Paul Frazee 90ac2fe1fc Group together notifications more aggressively 2023-01-17 16:25:10 -06:00
Paul Frazee 5a5835f561 Fix left-alignment on notifications 2023-01-17 16:22:34 -06:00
Paul Frazee 40d769e854 Increase the profile bio line-count cutoff significantly to only catch very silly newline abuse (close #48) 2023-01-17 16:18:41 -06:00
Paul Frazee c80c63cda5 More adjustments to the repost icon 2023-01-17 13:25:04 -06:00
Paul Frazee 65fef125ce Enlarge repost icon arrows 2023-01-17 13:21:11 -06:00
Paul Frazee e3e2831d11 Rework repost icon to match line widths 2023-01-17 13:17:38 -06:00
Paul Frazee 798622b307 Refer to upvotes as 'likes' in the UI (will change in the protocol soon) 2023-01-17 12:35:47 -06:00
Paul Frazee ee8d311795 Fix notification descriptions and render images for your own posts in notifs 2023-01-17 12:12:17 -06:00
Paul Frazee b9778b7943 Lighten post controls a little in light-mode and add them to the theme 2023-01-17 11:20:07 -06:00
Paul Frazee b574607466 Lighten borders slightly 2023-01-17 11:14:47 -06:00
Paul Frazee 050df83db7 Fix an issue that caused the feed to rearrange on loadmore 2023-01-17 10:58:51 -06:00
Paul Frazee e5ec07b919 Remove duplicate posts caused by reposts 2023-01-17 10:45:37 -06:00
Paul Frazee e11d53b67d Add loading spinners to lightbox views (close #38) 2023-01-17 10:40:09 -06:00
Paul Frazee 4e312d1d24 Shrink the header back down but use bolder title text 2023-01-17 10:32:40 -06:00
Paul Frazee bf1092ad86 Remove scenes (#36)
* 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
2023-01-17 10:11:30 -06:00
João Ferreiro 5abcc8e336 Unit Testing (#35)
* add testing lib

* remove coverage folder from git

* finished basic test setup

* fix tests typescript and import paths

* add first snapshot

* testing utils

* rename test files; update script flags; ++tests

* testing utils functions

* testing downloadAndResize wip

* remove download test

* specify unwanted coverage paths;
remove update snapshots flag

* fix strings tests

* testing downloadAndResize method

* increasing testing

* fixing snapshots wip

* fixed shell mobile snapshot

* adding snapshots for the screens

* fix onboard snapshot

* fix typescript issues

* fix TabsSelector snapshot

* Account for testing device's locale in ago() tests

* Remove platform detection on regex

* mocking store state wip

* mocking store state

* increasing test coverage

* increasing test coverage

* increasing test coverage on src/screens

* src/screens (except for profile) above 80% cov

* testing profile screen wip

* increase coverage on Menu and TabsSelector

* mocking profile ui state wip

* mocking profile ui state wip

* fixing mobileshell tests wip

* snapshots using testing-library

* fixing profile tests wip

* removing mobile shell tests

* src/view/com tests wip

* remove unnecessary patch-package

* fixed profile test error

* clear mocks after every test

* fix base mocked store values (getters)

* fix base mocked store values
(hasLoaded, nonReplyFeed)

* profile screen above 80% coverage

* testing custom hooks

* improving composer coverage

* fix tests after merge

* finishing composer coverage

* improving src/com/discover coverage

* improve src/view/com/login coverage
fix SuggestedFollows tests
adding some comments

* fix SuggestedFollows tests

* improve src/view/com/profile coverage
extra minor fixes

* improve src/view/com/notifications coverage

* update coverage ignore patterns

* rename errorMessageTryAgainButton
increase SuggestedFollows converage

* improve src/view/com/posts coverage

* improve src/view/com/onboard coverage

* update snapshot

* improve src/view/com/post coverage

* improve src/view/com/post-thread coverage
rename ErrorMessage tests
test Debug and Log components

* init testing state

* testing root-store

* updating comments

* small fixes

* removed extra console logs

* improve src/state/models coverage
refactor rootStore
rename some spies

* adding cleanup method after tests

* improve src/state/models coverage

* improve src/state/models coverage

* improve src/state/models coverage

* improve src/state/models coverage

* test setInterval in setupState

* Clean up tests and update Home screen state management

* Remove some tests we dont need

* Remove snapshot tests

* Remove any tests that dont demonstrate clear value

* Cleanup

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-01-17 10:06:00 -06:00
Paul Frazee 11c861d2d3 Remove the avi from the compose prompt 2023-01-16 17:37:18 -06:00
Paul Frazee dac9bc24d1 Enlarge the view header 2023-01-16 17:21:35 -06:00
Paul Frazee 46a8dbdee1 Dark mode color fixes 2023-01-16 17:11:15 -06:00
Paul Frazee 00b7189d5d Readd the FAB for composing new posts 2023-01-16 17:07:33 -06:00
Paul Frazee f7d7c78611 Round the corners on single-image embeds a bit more 2023-01-16 16:58:30 -06:00
Paul Frazee 158945bbf6 More spacing and sizing tweaks, including larger post controls 2023-01-16 16:54:35 -06:00
Paul Frazee 1a69235cf0 Enlarge post text slightly 2023-01-16 16:42:07 -06:00
Paul Frazee 0c9ffd99d8 More spacing fixes, especially for the repost info 2023-01-16 16:34:52 -06:00
Paul Frazee 6d4431b777 Spacing fixes 2023-01-16 16:30:05 -06:00
Paul Frazee c659f0ef9f Fix visual consistency of 'reply to' in post and use display name 2023-01-16 16:24:16 -06:00
Paul Frazee e5e31e5fe2 Fix missing metrics in post threads 2023-01-16 16:22:24 -06:00
Paul Frazee 7f8f53b087 Move menu controls into post footers and improve meta info rendering 2023-01-16 16:09:51 -06:00
Aryan Goharzad 0e85b33276 Readme Cleanup (#40)
* Readme Cleanup

Updates instructions for starting the dev/staging servers

* Update README.md

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2023-01-16 15:40:34 -06:00
Paul Frazee 1b5c347667 Fix: remove duplicates in the TL caused by rendering reply parents 2023-01-16 14:49:58 -06:00
Paul Frazee 29020fbcee Fix image compression for avis and banner images 2023-01-12 15:07:32 -06:00
Paul Frazee 7215da135b Add scrolling to menu 2023-01-03 14:35:33 -06:00
Paul Frazee 429cc1abf1 Bump deps to pull in some bugfixes 2023-01-03 14:31:12 -06:00
Paul Frazee 87a824429c Indicate images in notifications 2023-01-03 13:14:10 -06:00
Paul Frazee b9b0965000 Implement validation and proper type detection 2023-01-03 13:08:56 -06:00
Paul Frazee 1acef14a1c Improve handling around connection failures during login 2023-01-03 12:17:07 -06:00
Paul Frazee 06de0129af Add 'is 13' checkbox to account creation 2023-01-03 11:49:40 -06:00
Paul Frazee 147b85c7fb Fix to feed update 2023-01-03 11:26:51 -06:00
Paul Frazee 42d7dc1c6c Fix session hydration during load 2023-01-03 11:08:39 -06:00
Paul Frazee 08d38c219d Fix bug in error handling 2023-01-03 11:08:29 -06:00
Paul Frazee d262393992 Introduce error boundaries around all screens 2023-01-02 21:49:14 -06:00
Paul Frazee 4eabc2d65a Improve error logging 2023-01-02 21:39:15 -06:00
Paul Frazee 6885fb2b41 Bump api@0.0.5 and use the type guard helpers 2023-01-02 20:56:35 -06:00
Paul Frazee f6a0e634d7 Implement logging system 2023-01-02 17:38:13 -06:00
Paul Frazee 99cec71ed7 Dont mute posts for a user when viewing their profile 2023-01-02 13:45:27 -06:00
Paul Frazee 8cd2b4a721 Implement account muting 2023-01-02 13:40:14 -06:00
Paul Frazee 3972706c54 Fix to loading state 2022-12-30 15:58:28 -06:00
Paul Frazee 8f59957fab Fix the status bar coloring 2022-12-30 15:56:54 -06:00
Paul Frazee a90fd5d26f Add dark mode toggle 2022-12-30 15:48:34 -06:00
Paul Frazee 53267d755b Integrate composer into design system 2022-12-30 15:42:09 -06:00
Paul Frazee 5eddbcea16 Various small fixes 2022-12-30 15:32:07 -06:00
Paul Frazee 3d91cf3137 Integrate search into suggested follows 2022-12-30 15:21:09 -06:00
Paul Frazee a7a310a06b Dont autofocus the search input 2022-12-30 15:12:36 -06:00
Paul Frazee 62c6da3b9f Integrate settings into design system and some various fixes/tweaks 2022-12-30 15:11:47 -06:00
Paul Frazee d952c550ea Integrate menu into design system 2022-12-30 15:08:10 -06:00
Paul Frazee 58a591f314 Integrate notifications into the design system 2022-12-30 13:34:10 -06:00
Paul Frazee 9084e0e4a8 Integrate profile listings into design system 2022-12-30 13:20:55 -06:00
Paul Frazee 10f613475a Update profile header to use design system 2022-12-30 13:13:10 -06:00
Paul Frazee 5e07b5bbc3 Integrate the shell into the design system 2022-12-30 12:49:07 -06:00
Paul Frazee efaf8a54b8 Integrate ViewSelector into design system 2022-12-30 12:40:16 -06:00
Paul Frazee b47714fb11 Integrate composer prompt into design system 2022-12-30 12:35:37 -06:00
Paul Frazee 434d874598 Integrate ViewHeader into the design system 2022-12-30 12:29:11 -06:00
Paul Frazee 55ca7dcce1 Update threads to use design system 2022-12-30 12:19:45 -06:00
Paul Frazee 55500e2f66 Improve image layout 2022-12-30 11:55:25 -06:00
Paul Frazee f609794bd2 Tune post controls 2022-12-28 19:37:30 -06:00
Paul Frazee 607203134e Update posts in feed to use the theming system 2022-12-28 19:20:02 -06:00
Paul Frazee 8f55e3149e Update notifications 2022-12-28 15:53:06 -06:00
Paul Frazee 23e7ae49d4 Tighten up spacing and dividers 2022-12-28 15:50:28 -06:00
Paul Frazee 84e74d5ee4 Fix letter spacing 2022-12-28 15:08:14 -06:00
Paul Frazee 7e31645e9a Add a design system (#34)
* 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
2022-12-28 14:06:01 -06:00
Paul Frazee cc63660982 Increase image resolutions 2022-12-26 17:41:12 -06:00
Paul Frazee 838fc601c1 Start with highest quality compression and find a suitable size (#33) 2022-12-26 12:01:40 -06:00
Paul Frazee 8652b74a38 Bump @atproto/api@0.0.3 2022-12-22 14:43:54 -06:00
João Ferreiro 7517b65dcd Unit testing (#32)
* add testing lib

* remove coverage folder from git

* finished basic test setup

* fix tests typescript and import paths

* add first snapshot

* testing utils

* rename test files; update script flags; ++tests

* testing utils functions

* testing downloadAndResize wip

* remove download test

* specify unwanted coverage paths;
remove update snapshots flag

* fix strings tests

* testing downloadAndResize method

* increasing testing

* fixing snapshots wip

* fixed shell mobile snapshot

* adding snapshots for the screens

* fix onboard snapshot

* fix typescript issues

* fix TabsSelector snapshot

* Account for testing device's locale in ago() tests

* Remove platform detection on regex

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
2022-12-22 09:32:39 -06:00
Paul Frazee 4913a07e33 Unvendor the api and switch to @atproto/api 2022-12-22 09:17:07 -06:00
Paul Frazee 7f4a54ff0d Fix issue which caused parent posts to fail at mobx reactivity 2022-12-21 14:37:22 -06:00
Paul Frazee e7d971410f Update to use new getTimeline, getAuthorFeed, and getPostThread output models 2022-12-20 22:54:56 -06:00
Paul Frazee 4f3bf401da Replace removed hasIndexes behavior 2022-12-20 16:32:04 -06:00
Paul Frazee d83571a59e Get the composer into a passable visual state on android when the keyboard is open 2022-12-20 14:55:50 -06:00
Paul Frazee 297664bfe2 Fix post-meta truncation on android 2022-12-20 14:50:04 -06:00
Paul Frazee 0a2c3e6b51 Fixes to text input colors on android 2022-12-20 14:29:50 -06:00
Paul Frazee abcfc11fe0 Wrap all <Text> in a helper that ensures black color is applied by default 2022-12-20 12:49:44 -06:00
Paul Frazee 74d76fbc6a Use consistent rendering of avis and post metas in threads 2022-12-20 10:33:56 -06:00
Paul Frazee 99a28c0aae Proper fix to the previous panic fix: put threads at the end when they should be there 2022-12-20 09:20:53 -06:00
Paul Frazee 71e4b3d756 Fix to error condition that breaks the feed 2022-12-20 09:02:38 -06:00
Paul Frazee 0401dfc5d3 A couple more android updates 2022-12-19 19:43:28 -06:00
João Ferreiro 19d5496bfc rn-fetch-blob android setup 2022-12-19 19:26:54 -06:00
João Ferreiro 723bad1a28 minor fix 2022-12-19 19:26:54 -06:00
João Ferreiro 469b05c4be fixing remaining text colors on android 2022-12-19 19:25:58 -06:00
João Ferreiro 982f46376b fixing modal & keyboard interaction on android 2022-12-19 19:23:24 -06:00
João Ferreiro 70f4debc0b initial android fixes 2022-12-19 19:20:44 -06:00
João Ferreiro 0a3e7e63b2 fix camera permissions 2022-12-19 19:19:00 -06:00
João Ferreiro affe2c8508 fix android runtime 2022-12-19 19:19:00 -06:00
João Ferreiro 0726350570 fix android build 2022-12-19 19:19:00 -06:00
Paul Frazee 0d7385a41a Remove prefetch of feed (it wasnt working) 2022-12-19 19:16:56 -06:00
Paul Frazee 7b974acc7a Tighten up the post control hit regions 2022-12-19 19:13:26 -06:00
Paul Frazee c9b209c6fd Tighten up the home feed 2022-12-19 19:12:43 -06:00
Paul Frazee 3ae5f2886b Enable image-only posts 2022-12-19 18:51:13 -06:00
Paul Frazee e99eb7bfad Fix to thread ordering in the feed: correctly identify the starts of threads when adjacent 2022-12-19 13:22:18 -06:00
Paul Frazee ae3099dfca Improve thread rendering 2022-12-18 18:54:05 -06:00
Paul Frazee 69b86255c6 Add WIP 'report account' modal 2022-12-18 17:45:23 -06:00
Paul Frazee 66a0f8e848 Add WIP 'report post' modal 2022-12-18 17:28:28 -06:00
Paul Frazee 36dc1c7525 Reduce confusing visual feedback while scrolling 2022-12-18 16:43:18 -06:00
Paul Frazee c3caf4826e Add zooming to the lightbox 2022-12-16 16:32:54 -06:00
Paul Frazee d7e71e079f Prefetch feed refreshes to speed up 'load more posts' 2022-12-16 15:37:13 -06:00
Paul Frazee 4ef3afb604 Fixes to the composer UX around images and scrolling 2022-12-16 14:48:37 -06:00
Paul Frazee 3aded6887d Add swipe gestures to the lightbox 2022-12-16 11:57:45 -06:00
Paul Frazee 3a44a1cfdc Implement 'forgot password' flow 2022-12-15 17:45:03 -06:00
Paul Frazee 0d54f6e126 Split login screen into component files 2022-12-15 14:06:05 -06:00
Paul Frazee 356870ef60 Just do full renders of parent posts in the feed 2022-12-15 11:43:05 -06:00
Paul Frazee c5ac23047a Dont use ??= 2022-12-15 10:21:25 -06:00
Paul Frazee d0a437f8fb Improve handling of connection loss 2022-12-14 16:03:10 -06:00
Paul Frazee 568ff92582 Fix state-tracking 2022-12-14 15:49:45 -06:00
Paul Frazee 7181a75bfb Reset feeds on login 2022-12-14 15:49:38 -06:00
Paul Frazee 9f27af6199 Add haptic feedback to likes and reposts 2022-12-14 15:46:21 -06:00
Paul Frazee 4966b2152e Add post embeds (images and external links) 2022-12-14 15:35:15 -06:00
Paul Frazee 345ec83f26 Move posts feed to root store (me) and ensure new posts always update the feed 2022-12-13 15:52:18 -06:00
Paul Frazee ebfa6e5581 Fix: avoid dup keynames in posts feed 2022-12-13 15:51:54 -06:00
Paul Frazee b5a50478d9 Enlarge feed avis slightly 2022-12-13 15:40:55 -06:00
Paul Frazee 9ad9bc5c0e Ensure load more is always visible 2022-12-13 15:36:05 -06:00
Paul Frazee 135628baf2 Use avatar in viewheader when cant go back 2022-12-13 15:35:45 -06:00
Paul Frazee ac97667206 Fix: avoid duplicate key names in notifications 2022-12-13 15:35:11 -06:00
Paul Frazee 8af8d782c7 Fix issue that caused repost & trend data to get lost on feed updates 2022-12-13 15:17:18 -06:00
Paul Frazee 9a99c9c8c8 Hide main menu drawer on click outside 2022-12-13 15:01:14 -06:00
Paul Frazee e8eb3e131c Use full available screen 2022-12-13 14:58:25 -06:00
Paul Frazee e4ee6e5bb6 Fix: show avatars in all notifications 2022-12-13 14:53:00 -06:00
Paul Frazee 9e1bb898f0 Debug: disable feed reordering to isolate bugs 2022-12-13 11:15:32 -06:00
Paul Frazee e37ac91bee Reposition 'load latest' based on minimal shell mode 2022-12-13 11:15:18 -06:00
Paul Frazee 1aec0ee156 Hide footer on scroll down (minimal shell mode) 2022-12-12 16:04:14 -06:00
Paul Frazee 470f444eed Improvements to service selection during login 2022-12-12 15:13:45 -06:00
Paul Frazee b2239228e7 Add profile image lightbox 2022-12-12 14:54:56 -06:00
Paul Frazee b32bf69be7 Improve session management 2022-12-12 14:39:02 -06:00
Paul Frazee 693d6bfd0a Add banner image upload to profiles 2022-12-12 13:47:18 -06:00
Paul Frazee 22ddfaa2b5 Improvements to 'edit profile' error messages 2022-12-12 13:17:40 -06:00
Paul Frazee 8501cf1c7d Add 'loading more' spinner to feeds 2022-12-12 11:22:54 -06:00
Paul Frazee 2b27be31e6 Tune the swipe gesture to detect more easily 2022-12-12 11:11:37 -06:00
Paul Frazee 03d9fd3179 More aesthetic and perf improvements to the menu drawer 2022-12-12 10:48:36 -06:00
Paul Frazee 5fa3c16d0d Fix duplicate 'end of feed' issue 2022-12-12 09:56:19 -06:00
Paul Frazee 9e5940f0ab Improve aesthetic of main menu swipeout (use screen mask) 2022-12-09 11:46:49 -06:00
Paul Frazee fbf8e5fa14 Add main menu button 2022-12-09 11:22:19 -06:00
Paul Frazee 356297cace Show 'processing' spinner in edit profile modal 2022-12-08 16:08:15 -06:00
Paul Frazee e73c7cee39 Turn the main menu into a 'drawer' instead of a screen in the history 2022-12-08 15:34:22 -06:00
Paul Frazee 53b8f0d040 Switch to temporary 'fixed tabs' model for default and notifications 2022-12-08 14:21:28 -06:00
Paul Frazee 539bf5d350 Add avatar images and fix some type signatures 2022-12-08 13:45:23 -06:00
Paul Frazee 273e6d2973 Replace reanimated for tabs selector 2022-12-07 17:08:49 -06:00
Paul Frazee efbef238a8 Cleanup 2022-12-07 16:59:10 -06:00
Paul Frazee f5d1a5c38d Replace navigational 'back swipe' gesture with new HorzSwipe util 2022-12-07 16:56:14 -06:00
Paul Frazee 9ce02dff5b Add HorzSwipe gesture and integrate it into the ViewSelector 2022-12-07 15:51:06 -06:00
Paul Frazee 79d5708b69 Switch to react-native default animation tools for composer and post controls 2022-12-06 17:43:54 -06:00
Paul Frazee ae522c86fe Fix mention-creation and implement mentions in notifications 2022-12-06 13:47:52 -06:00
Paul Frazee 1a11c13fce Better empty state in profiles 2022-12-06 13:09:18 -06:00
Paul Frazee e042bd33ef Ensure all feed views can refresh 2022-12-06 13:04:40 -06:00
Paul Frazee 588aface7c Add build version to menu 2022-12-06 12:40:40 -06:00
Paul Frazee 246b0e19e1 Add context to replies when appearing in the feed 2022-12-06 12:29:13 -06:00
Paul Frazee d60de5e214 Implement terms-of-service and privacy-policy links in signup 2022-12-06 11:39:46 -06:00
Paul Frazee 5c1519b9ee Update API build 2022-12-06 11:39:30 -06:00
João Ferreiro 84a60592a8 Upload profile image (#29)
* 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>
2022-12-06 10:57:15 -06:00
Paul Frazee 4cc90b8ac9 Fix to unicode zero-width characters in expanded posts 2022-12-06 10:15:59 -06:00
Paul Frazee 8d3d26134f Never allow undefined values in me model 2022-12-06 10:11:45 -06:00
Paul Frazee 474c4f9b5d Rework the 'main menu' to be a screen that's always in history 2022-12-06 10:11:32 -06:00
Paul Frazee 70cfae56e2 Add missing usage descriptions for ios 2022-12-06 10:08:27 -06:00
Paul Frazee 5821975be6 Enlarge the small emoji-only replies 2022-12-05 15:40:33 -06:00
Paul Frazee 7561b19f3d Dismiss keyboard in search on scroll 2022-12-05 15:22:23 -06:00
Paul Frazee bbe6bf8fc2 Add 'copy post text' tool 2022-12-05 15:03:42 -06:00
Paul Frazee 73c84f6f64 Better sized and more informative character counter 2022-12-05 13:59:13 -06:00
Paul Frazee 39bab0bb08 Switch to System font to fix emoji rendering 2022-12-05 13:44:24 -06:00
Paul Frazee 65e5f2ac86 Fix: never attempt update on 0 items 2022-12-05 13:36:13 -06:00
Paul Frazee 26b2797e2c Increase touch-size of the 'load new posts' button 2022-12-05 13:33:31 -06:00
Paul Frazee f27e32e54c Ensure the UI always renders, even in bad network conditions (close #6) 2022-12-05 13:25:04 -06:00
Paul Frazee 59363181e1 Merge branch 'upload-image' into main 2022-12-05 11:25:33 -06:00
Paul Frazee 5d7c4ddd90 Remove loading-placeholder animation; according to some issues, animated linear-gradients may cause crashes 2022-12-05 10:50:46 -06:00
Paul Frazee 662a4ef23b Fix 'swipe back to nothing' bug 2022-12-05 10:39:34 -06:00
Paul Frazee b08afc12fe Make 'backswipe' a little easier to trigger 2022-12-05 10:25:53 -06:00
Paul Frazee f3f3bfb335 Enlarge click targets for post controls and view header 2022-12-05 10:18:38 -06:00
Paul Frazee 8a43040ec6 Hide images behind a build flag until ready 2022-12-02 10:48:57 -06:00
João Ferreiro 67c4dcff37 Upload image in composer (#27)
* 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>
2022-12-02 10:41:01 -06:00
Paul Frazee ea27b9ed08 Cleanup 2022-12-02 10:40:22 -06:00
João Ferreiro 90942ae146 moving placeholder condition 2022-11-29 18:32:07 +00:00
João Ferreiro 6ba5d15cb6 crop every photo;
make use of useCallback
2022-11-29 18:26:16 +00:00
João Ferreiro 68e1abf4a9 react-hooks/exhaustive-deps fixes 2022-11-29 17:51:06 +00:00
João Ferreiro 1f16c75121 use runInAction in getPhotos model 2022-11-29 17:46:55 +00:00
João Ferreiro 3b899bfc66 change post test with photo attached;
remove auto linking settings
2022-11-29 16:45:44 +00:00
João Ferreiro 58aa4f0436 Merge branch 'main' into upload-image 2022-11-29 16:19:38 +00:00
João Ferreiro d08e877b3a fix typescript issue; force mediatype photo 2022-11-29 16:19:15 +00:00
João Ferreiro 87d37f9df9 fixing add photo using camera 2022-11-29 16:11:17 +00:00
Paul Frazee 7ae1bac620 Improvements to link and mention detection regarding surrounding punctuation 2022-11-29 10:01:57 -06:00
João Ferreiro 23ea592987 move show carousel out of the component 2022-11-29 16:00:21 +00:00
João Ferreiro dcb361329e Merge branch 'main' into upload-image 2022-11-29 15:36:26 +00:00
João Ferreiro 31be6fbbac further refactoring code into different components 2022-11-29 15:35:49 +00:00
Paul Frazee 2ccbe4f702 Relax the requirement that post entities match their value 2022-11-29 09:35:10 -06:00
Paul Frazee 57f2d1d59f Decode html entities in link embeds 2022-11-29 09:29:57 -06:00
João Ferreiro 0102e91f3a revert android changes 2022-11-29 15:25:32 +00:00
João Ferreiro acfdea2518 reafctor image carousel into new component;
fix photo overlapping text in composer
2022-11-29 10:59:32 +00:00
João Ferreiro 77ea3bfd0a Merge branch 'main' into upload-image 2022-11-29 10:29:19 +00:00
Paul Frazee 88c868dd80 Improve handling of deleted posts 2022-11-28 16:37:39 -06:00
Paul Frazee bf7b0be23d Fixes to edit profile modal 2022-11-28 14:51:49 -06:00
Paul Frazee 39aaa13468 Fix jank in notifications loading-state rendering 2022-11-28 14:22:19 -06:00
Paul Frazee 9051aecdcb Use a persistent notifications model to improve load times of the notifications view 2022-11-28 14:19:49 -06:00
Paul Frazee 1aa1f77049 Improve unread notification styling 2022-11-28 13:56:05 -06:00
Paul Frazee 6ec33dd89f Batch notification loads to avoid layout reflows due to async 2022-11-28 13:45:49 -06:00
João Ferreiro 3ce113f107 fix android compile 2022-11-28 16:56:23 +00:00
João Ferreiro c5f3200d6b Merge branch 'main' into upload-image 2022-11-28 16:56:05 +00:00
João Ferreiro 5ea750599d upload images in composer v1 2022-11-28 16:46:58 +00:00
Paul Frazee b9c9895c45 Slow down and enlarge post-ctrl animations (close #11) 2022-11-28 10:40:25 -06:00
Paul Frazee 0e6237e58c Fix toast positioning (close #9) 2022-11-28 10:38:16 -06:00
Paul Frazee c86ff23757 Set a page-size on notifications 2022-11-28 10:22:52 -06:00
Paul Frazee bcb1ad98de Fix a couple incorrect link detections ('e.g.' and 'foo.jpg') (close #13) 2022-11-28 10:22:08 -06:00
Paul Frazee 8723b51693 Remove the 'warning color' from the character counter 2022-11-28 09:58:40 -06:00
Paul Frazee 490a3bb751 Tune post-thread expanded view: add reply prompt, fix spacing and sizing 2022-11-28 09:49:41 -06:00
Paul Frazee b978a2f18b Enlarge the 'load more posts' prompt 2022-11-28 09:30:31 -06:00
Paul Frazee 1784a4912d Enlarge the view header, left align the title, and add a compose button 2022-11-28 09:29:35 -06:00
Paul Frazee cb5210d24d Update composer to shrink fonts and use more consistent visuals; also autofocus the input 2022-11-28 09:14:04 -06:00
Paul Frazee e3fffac97b Increase information density and enlarge some click targets 2022-11-28 09:13:37 -06:00
Paul Frazee 9c4f62ffeb Fix 'load more' showing up incorrectly 2022-11-28 08:30:34 -06:00
Paul Frazee f5ff0fd274 Add link embeds to posts 2022-11-23 17:01:00 -06:00
Paul Frazee 89638dbd18 Implement a link metadata fetching util function 2022-11-23 16:29:17 -06:00
Paul Frazee eb106a9758 Include reposts in no-replies view of feeds 2022-11-23 16:27:49 -06:00
Paul Frazee 810fcf9910 Remove webcrypto polyfill, as it's no longer needed 2022-11-23 15:04:44 -06:00
Paul Frazee 4eb8bc1249 Detect links in profile bios 2022-11-23 14:53:33 -06:00
Paul Frazee 2b37b6549b Add replying-to context to threads 2022-11-23 14:22:40 -06:00
Paul Frazee a993499890 Ensure threads group together posts by op 2022-11-23 13:45:50 -06:00
Paul Frazee d09bf31431 Disable landscape orientation in iPhones 2022-11-23 13:34:45 -06:00
Paul Frazee 1370353ff6 Fix: Adjust home TL post dedup to ensure polling works correctly 2022-11-23 13:29:26 -06:00
Paul Frazee fbcf0d79d1 Show parent post in composer when replying (close #3) 2022-11-23 13:28:29 -06:00
Paul Frazee 0840c3f8f7 Fix: dont detect double dots as urls 2022-11-23 13:15:38 -06:00
Paul Frazee 67906db720 Fix keyboard issues in search 2022-11-23 13:12:29 -06:00
Paul Frazee 23d98b9557 Turn composer character counter into a countdown 2022-11-23 13:07:09 -06:00
Paul Frazee f41ba844b3 Handle bsky.app links natively 2022-11-23 10:51:20 -06:00
Paul Frazee b4a8da4c27 Longer shortened URLs 2022-11-23 10:44:55 -06:00
Paul Frazee ba837ad9af Add threading to post feeds 2022-11-23 10:39:28 -06:00
Paul Frazee 8da3124f3a Fallback to display name in search results 2022-11-22 16:18:10 -06:00
Paul Frazee 903cce20e7 Implement user search 2022-11-22 16:14:58 -06:00
Paul Frazee 99b50e2fd5 Keep fetching suggestions to reach a full list 2022-11-22 15:53:23 -06:00
Paul Frazee 0f735fc575 Farewell, todos.txt 2022-11-22 14:31:46 -06:00
Paul Frazee e488cf8f44 Add support for links with no scheme in composer 2022-11-22 14:30:35 -06:00
Paul Frazee 1df48d4dad Fix to tests 2022-11-22 14:30:13 -06:00
Paul Frazee ce56d4e34e Shorten rendered URLs in posts 2022-11-22 13:16:40 -06:00
Paul Frazee 27db820a9d Fix to thread reply lines (fill full space) 2022-11-22 13:04:54 -06:00
Paul Frazee 31a4fcc91c Add bottom padding to threads 2022-11-22 12:58:08 -06:00
Paul Frazee d7b1a2e0ee Scroll to highlighted post in threads 2022-11-22 12:56:56 -06:00
Paul Frazee 8f883d00bc Add compose prompt to home feed empty state 2022-11-22 12:29:50 -06:00
Paul Frazee eaa2105570 Add 'posts & replies' view to profiles 2022-11-22 12:26:53 -06:00
Paul Frazee d608d67bfe Turn home button into a 'go back to start of nav history' 2022-11-22 12:19:38 -06:00
Paul Frazee 9ff78bbc43 Change post prompt to 'Whats up?' 2022-11-22 12:16:08 -06:00
Paul Frazee 6e67825eca Shrink and darken the post controls a little 2022-11-22 12:15:26 -06:00
Paul Frazee 79688cd042 Shrink the footer a bit 2022-11-22 12:02:45 -06:00
Paul Frazee c2a39d7c1f Refactor: create src/lib to reflect actual sharing of that code 2022-11-22 12:02:31 -06:00
Paul Frazee e858bb52de Merge branch 'simplify' into main 2022-11-21 18:55:08 -06:00
Paul Frazee b2dba9a15b Track rotated auth tokens 2022-11-21 16:17:40 -06:00
Paul Frazee ed146a582c Add web linking and proper share controls 2022-11-21 16:07:26 -06:00
Paul Frazee 7e487fd5ae Adjust control alignment 2022-11-20 16:29:43 -06:00
Paul Frazee f43b24d405 Fix the pointy edges on the arrow icons 2022-11-20 16:24:44 -06:00
Paul Frazee c6108fb646 Move search btn into the viewheader 2022-11-20 12:25:11 -06:00
Paul Frazee a21bcf10dd Add build flags and disable tabs for now 2022-11-20 12:00:40 -06:00
Paul Frazee 63348807b5 Adjust post control sizing and alignment 2022-11-20 11:45:31 -06:00
Paul Frazee 3a10139064 Remove downvotes from the UI 2022-11-20 11:32:13 -06:00
Paul Frazee 8e3dc52536 Replace the FAB with a compose prompt at the top of the feed 2022-11-20 11:20:08 -06:00
Paul Frazee 39058cd36a Dont group notifications that are an hour apart 2022-11-18 15:38:20 -06:00
Paul Frazee e02b39bf84 Fix data loss on notifications-view update 2022-11-18 14:17:26 -06:00
Paul Frazee fbb9689e4a Dedup posts in the home TL 2022-11-18 14:05:19 -06:00
Paul Frazee 6e2b7a0b90 Add support for web links 2022-11-18 13:59:17 -06:00
Paul Frazee 9d13e05dbf Fix rendering of mentions in composer 2022-11-18 11:55:05 -06:00
Paul Frazee 0ac6c0ff61 Add long press newtab to footer nav 2022-11-18 11:40:12 -06:00
Paul Frazee 368286ad67 Fix richtext link rendering 2022-11-18 11:37:25 -06:00
Paul Frazee 2f9dd131f9 Spacing and sizing fixes 2022-11-18 11:37:12 -06:00
Paul Frazee 5efd0a5b7e Dont autofocus composer to avoid a bug with keyboard avoiding views 2022-11-18 11:10:29 -06:00
Paul Frazee a2a2519e87 Small sizing and spacing tweaks 2022-11-18 11:10:19 -06:00
Paul Frazee 69609d8732 Add min height to post text 2022-11-18 10:58:48 -06:00
Paul Frazee ff68e5b85a Fix avatar click target in posts 2022-11-18 10:48:18 -06:00
Paul Frazee 89e7a99292 Fix post thread title 2022-11-17 16:26:00 -06:00
Paul Frazee ab2e0ab88f Add padding to the bottom of the feed to ensure compose btn doesnt cover it 2022-11-17 16:07:38 -06:00
Paul Frazee a3bca154c4 Improve reliability of screen titles 2022-11-17 16:01:29 -06:00
Paul Frazee b2160ae159 Add new tab animation 2022-11-17 15:44:54 -06:00
Paul Frazee 2b98714548 Add live search to autocomplete and only highlight known handles 2022-11-17 14:35:12 -06:00
Paul Frazee 859087f21d Fix loadLatest() on home feed 2022-11-17 13:17:08 -06:00
Paul Frazee c6b137a153 Fix: correctly set visible on screens 2022-11-17 13:15:04 -06:00
Paul Frazee 8b584c8c09 Improve perf of post rendering 2022-11-17 13:02:53 -06:00
Paul Frazee 5d7f3e1863 Invalidate profiles cache on direct load 2022-11-17 13:01:57 -06:00
Paul Frazee 0d70a09777 Clear session when auth fails 2022-11-17 12:33:59 -06:00
Paul Frazee eae5ac839c Poll periodically for new posts 2022-11-17 12:33:19 -06:00
Paul Frazee f6e591339d Improve coffee 2022-11-17 11:29:35 -06:00
Paul Frazee 6fb4b005fd Add tabs explainer and fix 'black screen' during onboard 2022-11-17 11:21:04 -06:00
Paul Frazee 3a9bb6a98d Lighten the post controls 2022-11-17 11:03:38 -06:00
Paul Frazee 5271718b3b Fix positioning with overflows in the post meta 2022-11-17 10:56:42 -06:00
Paul Frazee 6b715224f2 Include tab count and move btn to center 2022-11-17 10:37:30 -06:00
Paul Frazee b390101106 Open in new tab on long press 2022-11-17 10:36:57 -06:00
Paul Frazee 58d5cb47b7 Avoid overlap against phone header when tabs selector is open 2022-11-17 10:24:40 -06:00
Paul Frazee a0afb8386b Fix header spacing for when dark mode is active 2022-11-17 10:15:48 -06:00
Paul Frazee 362478f793 Show bold icons in footer based on state 2022-11-16 18:04:21 -06:00
Paul Frazee 361789975f Add a fancy 'drawer' animation to the tabs selector 2022-11-16 17:18:16 -06:00
Paul Frazee 284c635330 Add post deletion to highlighted post in threads 2022-11-16 16:18:15 -06:00
Paul Frazee 41ae87e770 Add post deletion 2022-11-16 16:16:43 -06:00
Paul Frazee bd1a4b198e Clear notifications count optimistically 2022-11-16 14:36:16 -06:00
Paul Frazee 92046473f8 Fix composer positioning 2022-11-16 14:33:01 -06:00
Paul Frazee 5bb8751bc1 Fix input positioning for small screens 2022-11-16 14:28:33 -06:00
Paul Frazee 0b7b91d5fd Fix sizing on smaller phones 2022-11-16 14:05:21 -06:00
Paul Frazee fec1589f7c Nicer loading state for profiles 2022-11-16 13:32:10 -06:00
Paul Frazee e9102bcbac Reduce jank in refreshes 2022-11-16 13:18:53 -06:00
Paul Frazee 17825cd611 Add placeholder loading states 2022-11-16 13:05:36 -06:00
Paul Frazee e003f2e3cb Improve reliability of modal close 2022-11-16 12:37:46 -06:00
Paul Frazee fe09567760 Fix up/down vote number changes 2022-11-16 11:02:36 -06:00
Paul Frazee dcf6a49715 Add animations to post controls 2022-11-16 10:58:39 -06:00
Paul Frazee 64d095a96b Update prod service URL 2022-11-16 10:06:57 -06:00
Paul Frazee 4eb993e885 Better invite code error message 2022-11-15 15:13:55 -06:00
Paul Frazee 3725a2eed1 Add a server instance selector and drop env vars 2022-11-15 15:09:50 -06:00
Paul Frazee 9a6df95ade Switch to using setVote() 2022-11-15 13:19:21 -06:00
Paul Frazee 60c72087ff Add current user profile to header and enlarge the header 2022-11-15 13:11:01 -06:00
Paul Frazee ccae52f612 Add compose button to notifications, profile, and search 2022-11-15 13:00:00 -06:00
Paul Frazee fe056a76ea Add missing dep 2022-11-15 12:54:15 -06:00
Paul Frazee b6705fbbaa Improve connectivity-issue error message 2022-11-15 12:54:04 -06:00
Paul Frazee 4ae6fbd3c8 Better loading screens 2022-11-15 12:07:41 -06:00
Paul Frazee e470e3933b Improve empty states 2022-11-15 10:54:43 -06:00
Paul Frazee fb3a43c216 Improve error messages 2022-11-15 10:46:12 -06:00
Paul Frazee 6e93301542 Add profile info caching 2022-11-14 16:56:59 -06:00
Paul Frazee 723dee5704 Disable storing nav state due to bugs 2022-11-14 16:56:40 -06:00
Paul Frazee c98edca116 Add more info to routing 2022-11-14 16:30:06 -06:00
Paul Frazee 700d4e99b9 Restore nav state hydration 2022-11-14 16:28:58 -06:00
Paul Frazee a6e2429a13 Improve not found page 2022-11-14 16:27:59 -06:00
Paul Frazee d7c6fbe11d Use only alphabet in generated avatar 2022-11-14 15:58:21 -06:00
Paul Frazee 9170040acb Update all state on profile change 2022-11-14 15:55:38 -06:00
Paul Frazee 96dc748733 Make 'back swiping' a little easier 2022-11-14 15:47:56 -06:00
Paul Frazee 4a2170be49 Enforce limits on create scene as well 2022-11-14 15:19:08 -06:00
Paul Frazee 4a0b79da4a Fix double-posting bug 2022-11-14 15:10:34 -06:00
Paul Frazee ef071c0915 Fix issue causing double-loads of notifications 2022-11-14 15:02:42 -06:00
Paul Frazee bc9be64a4e Automatically add the domain to the handle during signin 2022-11-14 14:30:59 -06:00
Paul Frazee 23fd43e306 Fix empty states for scene members and memberships 2022-11-14 14:24:23 -06:00
Paul Frazee 829fa175d0 Fix: scroll all the way down on home feed 2022-11-14 14:18:42 -06:00
Paul Frazee 25fdb41948 Fix overflows in post meta info 2022-11-14 14:16:31 -06:00
Paul Frazee d0234784eb Turn off autocorrect and auto-lowercase login handle 2022-11-14 14:01:01 -06:00
Paul Frazee 2271112317 Add link behaviors to search screen suggestions 2022-11-14 13:52:23 -06:00
Paul Frazee 75f801ed71 Dont suggest followed users and add empty state to suggestions 2022-11-14 13:48:57 -06:00
Paul Frazee e5cb141954 Dont include self in suggested follows 2022-11-14 13:42:53 -06:00
Paul Frazee fb3ca42646 Always fallback from displayName to handle 2022-11-14 13:39:10 -06:00
Paul Frazee 12ac6fe52e Turn 'include reason' on posts into a link 2022-11-14 13:36:09 -06:00
Paul Frazee 482ddc9c0d Reposition to handle scene creation keyboard view 2022-11-14 13:32:04 -06:00
Paul Frazee 51c9a51f8c Change appid to xyz.blueskyweb.app 2022-11-14 13:13:08 -06:00
Paul Frazee 837ec8308a Improvements to the feature explainer, including intro screen and screenshot of scenes 2022-11-14 13:12:29 -06:00
Paul Frazee 210082be93 Add staging env 2022-11-11 15:02:19 -06:00
Paul Frazee 38ed9a7943 Implement profile updates 2022-11-11 14:15:43 -06:00
Paul Frazee fe52d19c48 Add UI to remove members from scenes 2022-11-11 13:28:23 -06:00
Paul Frazee 22849fb4fc Implement trending 2022-11-11 13:10:05 -06:00
Paul Frazee 486ce26a91 Handle pending invites correctly 2022-11-11 12:49:53 -06:00
Paul Frazee 72fad215df Disable scene discover btn for now 2022-11-11 10:17:23 -06:00
Paul Frazee 3a0e9f52f3 Only suggest users in invite suggestions 2022-11-11 10:17:14 -06:00
Paul Frazee cc015d1686 Fixes to onboarding 2022-11-10 17:19:45 -06:00
Paul Frazee 0fc8ef3358 Fixes to account creation 2022-11-10 17:05:26 -06:00
Paul Frazee f6b3e5f9e0 Fix follows 2022-11-10 16:35:13 -06:00
Paul Frazee d3707f30e3 Implement scene invitation and membership controls 2022-11-10 16:30:14 -06:00
Paul Frazee ecf56729b0 More informative empty state for scenes 2022-11-09 17:34:55 -06:00
Paul Frazee e7536289cb Add scene creator 2022-11-09 15:57:49 -06:00
Paul Frazee 93b64cf474 Add 'you are a member' line to scene headers and small other tweaks 2022-11-09 13:48:40 -06:00
Paul Frazee 41a18bf32f Add creator to scene profile header 2022-11-09 13:12:03 -06:00
Paul Frazee 0cdfd089f5 Implement scene member/memberships listings 2022-11-08 16:37:21 -06:00
Paul Frazee e6429182a1 Implement scenes listing in main menu 2022-11-08 15:56:22 -06:00
Paul Frazee 1fbc4cf1f2 Finish the upvote/downvote implementation 2022-11-08 12:14:51 -06:00
Paul Frazee e650d98924 Add search view; factor out SuggestedFollows component; add suggested follows to search 2022-11-07 16:24:06 -06:00
Paul Frazee d228a5f4f5 Add onboarding (WIP) 2022-11-07 15:35:51 -06:00
Paul Frazee b4097e25d6 Reuse service address 2022-11-07 11:45:26 -06:00
Paul Frazee ff9161d8e7 Sizing and spacing fixes based on on-device testing 2022-11-05 16:12:06 -05:00
Paul Frazee 5d6ab1f548 Unify profile follow btn colors with the rest 2022-11-05 15:07:28 -05:00
Paul Frazee dd146957e6 Set ios app icon 2022-11-05 14:55:41 -05:00
Paul Frazee 541717d467 Add splash screen to ios 2022-11-05 14:52:44 -05:00
Paul Frazee 2377431901 Rename to bsky.app 2022-11-05 13:56:22 -05:00
Paul Frazee b6f3a234da Replace likes with votes on post UIs 2022-11-05 13:48:45 -05:00
Paul Frazee eb28a12639 More profile header tweaks 2022-11-05 13:02:21 -05:00
Paul Frazee 851ff65d66 Tweak profile header 2022-11-05 12:43:21 -05:00
Paul Frazee 807bd3b834 Switch to procedurally-generated banners 2022-11-05 12:33:59 -05:00
Paul Frazee 60b1c53d85 Add actor types to the profiles and clean up the UI 2022-11-05 11:58:48 -05:00
Paul Frazee 3f730f1173 Update to new textslice 2022-11-04 17:56:48 -05:00
Paul Frazee f333a90fab Update to the latest APIs 2022-11-04 17:39:54 -05:00
Paul Frazee 8ae6e67eea Rework the composer to a less buggy solution 2022-11-01 14:25:41 -05:00
Paul Frazee 05055e184d Remove old tabs selector modal 2022-11-01 14:00:58 -05:00
Paul Frazee 98937dda47 Add animation to the tabs selector 2022-11-01 13:46:07 -05:00
Paul Frazee ae18007d35 Replace notifications icon 2022-11-01 13:45:58 -05:00
Paul Frazee c949269abc Replace footer-nav back and forward arrows with search and notifications 2022-11-01 11:53:30 -05:00
Paul Frazee ab134cac93 Add consistent view headers 2022-11-01 11:06:43 -05:00
Paul Frazee 0fd2c3c4cb Update scene items in mainmenu to use generated avatars 2022-11-01 10:06:24 -05:00
Paul Frazee 6329ab4b08 Improve animation jitter in main menu 2022-11-01 10:02:24 -05:00
Paul Frazee d0b94d7570 Fix typo 2022-10-31 17:24:58 -05:00
Paul Frazee fd6a2b1b40 Switch to autogenerated avis for now 2022-10-31 17:23:47 -05:00
Paul Frazee eceef67d46 WIP scene UIs 2022-10-31 12:17:58 -05:00
Paul Frazee 1ab8285ad3 Fix some useEffect() cleanup issues 2022-10-26 14:48:15 -05:00
Paul Frazee 1983512fef Update to latest APIs 2022-10-26 14:34:47 -05:00
Paul Frazee 349cfe7177 Add contacts screen 2022-10-12 18:56:10 -05:00
Paul Frazee 0c0c9eb05c Update api nsids 2022-10-12 15:18:46 -05:00
Paul Frazee c9388a3cc5 Improve main menu (animation, aesthetics) 2022-10-11 15:16:46 -05:00
Paul Frazee d7a75a2062 Home button scrolls to top when on home page 2022-10-11 09:37:01 -05:00
Paul Frazee 8dc8200f07 Rearrange shell buttons to merge notifications into menu and bring back forward 2022-10-11 09:19:09 -05:00
Paul Frazee a1428ca59a Remove the firehose view from home 2022-10-11 09:18:39 -05:00
Paul Frazee 4143167ab7 Speed up shell nav button presses 2022-10-11 09:18:24 -05:00
Paul Frazee ba6580101e Rework footer controls 2022-10-10 21:13:25 -05:00
Paul Frazee 287f2992fa Rework profile header controls 2022-10-10 21:13:10 -05:00
Paul Frazee f5c4a97eaf Add firehose view to home screen 2022-10-04 14:22:20 -05:00
Paul Frazee 5631c2d2e6 Update to new get*Feed xrpc methods 2022-10-04 12:55:25 -05:00
Paul Frazee 236c908058 Update the view after a post is created 2022-10-04 11:33:32 -05:00
Paul Frazee 0aaa406b17 Implement profile-update api 2022-10-04 11:10:24 -05:00
Paul Frazee bf39791f01 Implement a couple missing bits 2022-10-04 10:53:08 -05:00
Paul Frazee c5ab005908 Fix to mention rendering 2022-10-04 10:26:33 -05:00
Paul Frazee 9f4b5fba4f Choose mention candidates from follows 2022-10-04 10:18:35 -05:00
Paul Frazee 0296e8411e Fixes to entity extraction 2022-10-04 10:15:35 -05:00
Paul Frazee 195d2f7d2b Implement mentions rendering 2022-10-03 16:02:03 -05:00
Paul Frazee 2058505bf1 Fix to auth of mutation ops 2022-10-03 11:17:12 -05:00
Paul Frazee c7d7e152a0 Implement notifications 2022-10-03 10:53:36 -05:00
Paul Frazee b05a334dcb Remove debug time delays 2022-09-30 11:30:18 -05:00
Paul Frazee efa84fb8e7 Fix thread view sizing 2022-09-29 15:17:31 -05:00
Paul Frazee 11f213ad09 Clear all state on signout 2022-09-29 13:55:07 -05:00
Paul Frazee e3e4c4366c Add settings page 2022-09-29 11:59:11 -05:00
Paul Frazee 8ff5f81f24 Light icons 2022-09-29 10:40:05 -05:00
Paul Frazee fc776c2652 Add profile to tabs selector modal 2022-09-29 09:24:36 -05:00
Paul Frazee 44e208f283 More blue theming 2022-09-29 09:11:48 -05:00
Paul Frazee e9f0405555 Beta banner 2022-09-29 09:05:47 -05:00
Paul Frazee a9f9235976 Remove top bar in the shell 2022-09-29 09:05:40 -05:00
Paul Frazee 0312a8132c Swap new tab and share buttons in tabs modal 2022-09-29 09:05:07 -05:00
Paul Frazee 16fbefc354 No visual feedback on FAB to reduce jank 2022-09-29 09:04:49 -05:00
Paul Frazee cb5a575bc8 Fix feed pagination on user profiles 2022-09-28 17:02:55 -05:00
Paul Frazee b4ad0cff4b Add reply information to feed items 2022-09-28 15:36:25 -05:00
Paul Frazee a21a0d2988 Improve thread rendering (show reply lines) 2022-09-28 15:03:16 -05:00
Paul Frazee 9f91edc1d1 Fix to session load 2022-09-28 15:03:02 -05:00
Paul Frazee e6627183e1 Switch to one default avi 2022-09-28 14:00:40 -05:00
Paul Frazee 5909509bea Update api 2022-09-28 13:59:57 -05:00
Paul Frazee ef4b9cf8d9 Add account creation 2022-09-27 14:24:47 -05:00
Paul Frazee c89ec94b17 Remove old auth code 2022-09-27 10:13:12 -05:00
Paul Frazee dd73fc2183 Add logout and tweak signin screen 2022-09-27 08:59:15 -05:00
Paul Frazee 0208302907 Implement signin flow 2022-09-26 21:03:07 -05:00
Paul Frazee 2e352f383e A few client fixes 2022-09-26 13:38:37 -05:00
Paul Frazee a8c8286b88 Implement unfollow, unlike, unrepost 2022-09-23 09:47:21 -05:00
Paul Frazee aabde2b401 Replace mock-api with real api 2022-09-22 19:28:25 -05:00
Paul Frazee 5193a5b48e Add close animation to tabs selector 2022-09-09 16:45:37 -05:00
Paul Frazee 530243859c Replace tabs selector with better solution, also fix some bugs with the modal state 2022-09-09 16:20:46 -05:00
Paul Frazee 2a7c53f307 Reduce the frequency of accidental visual triggers of touchable items 2022-09-09 13:24:44 -05:00
Paul Frazee 46524d85d8 Fix some jank in the navigation swipes 2022-09-09 13:11:30 -05:00
Paul Frazee 639c25821e Disable swipe gestures in view selector for now 2022-09-09 12:10:18 -05:00
Paul Frazee acaa8c5c11 Make view-selector swipes easier to trigger 2022-09-09 11:58:28 -05:00
Paul Frazee e6ebb213cc Make nav swipes easier to trigger 2022-09-09 11:55:53 -05:00
Paul Frazee 46d20cdde8 Allow nav swipes to start from anywhere on the screen 2022-09-09 11:55:31 -05:00
Paul Frazee 44c85bbc56 UI sizing fixes 2022-09-09 11:29:46 -05:00
Paul Frazee effe3d6b59 Rename mobile start-point index.js to avoid build issues 2022-09-09 11:29:22 -05:00
Paul Frazee 35556a84b2 Implement autocomplete UI in composer 2022-09-08 13:39:53 -05:00
Paul Frazee 9010078489 Add EditProfile modal 2022-09-07 16:00:25 -05:00
Paul Frazee 5ae39612d7 Improve navigation gesture and fix caching issue 2022-09-07 14:43:00 -05:00
Paul Frazee 69265753bf Refactor profile to use new ViewSelector element which is reusable and now supports swipe gestures 2022-09-06 22:34:31 -05:00
Paul Frazee 4974f97bf3 Add 'swipe to go back' gesture 2022-09-06 17:29:26 -05:00
Paul Frazee bb06ef4f6e Rework profile page to include working view selector 2022-09-06 14:26:39 -05:00
Paul Frazee 2ec09ba545 Rework profile header 2022-09-05 16:57:20 -05:00
Paul Frazee cb310ab1c1 Rewrite the post composer as a modal 2022-09-05 14:16:48 -05:00
Paul Frazee 41bbe2b60b Add post dropdown menus 2022-09-02 15:43:10 -05:00
Paul Frazee cdae685ee1 Move SharePost modal to new system 2022-09-02 12:17:33 -05:00
Paul Frazee 2f0939a1c2 Implement consistent Link component 2022-09-02 11:52:33 -05:00
Paul Frazee 6835caa760 Add more robust modals controller 2022-09-02 11:51:46 -05:00
Paul Frazee 8de3b066eb Rename location-menu to location-navigator and add an actual location-menu 2022-09-02 09:55:52 -05:00
Paul Frazee 62a4e9aed1 Add accounts menu to shell 2022-09-02 09:30:21 -05:00
Paul Frazee 156a6a100f Add location 'menu' 2022-09-01 16:06:09 -05:00
Paul Frazee 5f48cb5e27 Fix bug in selection of screens to cache 2022-09-01 13:30:57 -05:00
Paul Frazee bb51af5ae9 Implement working screen-state management and remove extraneous loads 2022-09-01 12:00:08 -05:00
Paul Frazee 346385ce43 Fix screen-blanking bug 2022-09-01 10:58:29 -05:00
Paul Frazee 71594d069c Update post thread aesthetics 2022-08-31 21:02:12 -05:00
Paul Frazee 6bec139679 Add avi and context menu to shell topbar 2022-08-31 20:43:36 -05:00
Paul Frazee b3b2cfe909 Add composer FAB to home page 2022-08-31 20:09:58 -05:00
Paul Frazee 4aa8a58f27 Aesthetic improvements 2022-08-31 20:09:47 -05:00
Paul Frazee b4802c6b5b Unify the color palette 2022-08-31 17:06:44 -05:00
Paul Frazee 97f52b6a03 New navigation model (#1)
* 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
2022-08-31 14:36:50 -05:00
901 changed files with 161132 additions and 25570 deletions
+86
View File
@@ -0,0 +1,86 @@
/** @type {Detox.DetoxConfig} */
module.exports = {
testRunner: {
args: {
$0: 'jest',
config: '__e2e__/jest.config.js',
},
jest: {
setupTimeout: 120000,
},
},
apps: {
'ios.debug': {
type: 'ios.app',
binaryPath: 'ios/build/Build/Products/Debug-iphonesimulator/bluesky.app',
build:
'xcodebuild -workspace ios/Bluesky.xcworkspace -scheme Bluesky -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build',
},
'ios.release': {
type: 'ios.app',
binaryPath:
'ios/build/Build/Products/Release-iphonesimulator/bluesky.app',
build:
'xcodebuild -workspace ios/Bluesky.xcworkspace -scheme Bluesky -configuration Release -sdk iphonesimulator -derivedDataPath ios/build',
},
'android.debug': {
type: 'android.apk',
binaryPath: 'android/app/build/outputs/apk/debug/app-debug.apk',
build:
'cd android ; ./gradlew assembleDebug assembleAndroidTest -DtestBuildType=debug ; cd -',
reversePorts: [8081],
},
'android.release': {
type: 'android.apk',
binaryPath: 'android/app/build/outputs/apk/release/app-release.apk',
build:
'cd android ; ./gradlew assembleRelease assembleAndroidTest -DtestBuildType=release ; cd -',
},
},
devices: {
simulator: {
type: 'ios.simulator',
device: {
type: 'iPhone 15 Pro',
},
},
attached: {
type: 'android.attached',
device: {
adbName: '.*',
},
},
emulator: {
type: 'android.emulator',
device: {
avdName: 'Pixel_3a_API_30_x86',
},
},
},
configurations: {
'ios.sim.debug': {
device: 'simulator',
app: 'ios.debug',
},
'ios.sim.release': {
device: 'simulator',
app: 'ios.release',
},
'android.att.debug': {
device: 'attached',
app: 'android.debug',
},
'android.att.release': {
device: 'attached',
app: 'android.release',
},
'android.emu.debug': {
device: 'emulator',
app: 'android.debug',
},
'android.emu.release': {
device: 'emulator',
app: 'android.release',
},
},
}
+102
View File
@@ -0,0 +1,102 @@
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/
*/fastlane/report.xml
*/fastlane/Preview.html
*/fastlane/screenshots
# Bundle artifact
*.jsbundle
# Ruby / CocoaPods
/ios/Pods/
/vendor/bundle/
# Testing
coverage/
junit.xml
artifacts
# Web bundle outputs
/dist/
# Expo
.expo/
dist/
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# Temporary files created by Metro to check the health of the file watcher
.metro-health-check*
# VSCode
.vscode
# gitignore and github actions
!.gitignore
!.github
# Android & iOS folders
/android/
/ios/
# environment variables
.env
.env.*
# Firebase (Android) Google services
# INCLUDED: google-services.json
-1
View File
@@ -1 +0,0 @@
REACT_APP_AUTH_LOBBY = 'http://localhost:3001'
+6
View File
@@ -0,0 +1,6 @@
# Copy this to `.env` and `.env.test` files
SENTRY_AUTH_TOKEN=
EXPO_PUBLIC_ENV=development
EXPO_PUBLIC_LOG_LEVEL=debug
EXPO_PUBLIC_LOG_DEBUG=
+30 -13
View File
@@ -1,17 +1,34 @@
module.exports = {
root: true,
extends: '@react-native-community',
parser: '@typescript-eslint/parser',
// plugins: ['@typescript-eslint'],
overrides: [
{
files: ['*.js', '*.mjs', '*.ts', '*.tsx'],
rules: {
'@typescript-eslint/no-shadow': 'off',
'no-shadow': 'off',
'no-undef': 'off',
semi: [2, 'never'],
},
},
extends: [
'@react-native-community',
'plugin:react/recommended',
'plugin:react-native-a11y/ios',
'prettier',
],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'detox', 'react', 'lingui'],
rules: {
'react/no-unescaped-entities': 0,
'react-native/no-inline-styles': 0,
},
ignorePatterns: [
'**/__mocks__/*.ts',
'src/platform/polyfills.ts',
'src/third-party',
'ios',
'android',
'coverage',
'*.lock',
'.husky',
'patches',
'bskyweb',
'*.html',
'bskyweb',
'src/locale/locales/_build/',
'src/locale/locales/**/*.js',
],
settings: {
componentWrapperFunctions: ['observer'],
},
}
+35
View File
@@ -0,0 +1,35 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
<!-- A clear and concise description of what the bug is. -->
**To Reproduce**
Steps to reproduce the behavior:
1.
**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
**Screenshots**
<!-- If applicable, add screenshots to help explain your problem. -->
**Details**
- Platform: <!-- desktop chrome windows, mobile safari, iOS, Android -->
- Platform version:
- App version:
**Additional context**
<!-- Add any other context about the problem here. -->
+24
View File
@@ -0,0 +1,24 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: feature-request
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->
@@ -0,0 +1,56 @@
name: build-and-push-bskyweb-aws
on:
push:
branches:
- main
- traffic-reduction
- respect-optout-for-embeds
env:
REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }}
USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }}
PASSWORD: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_PASSWORD }}
IMAGE_NAME: bskyweb
jobs:
bskyweb-container-aws:
if: github.repository == 'bluesky-social/social-app'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v1
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.USERNAME}}
password: ${{ env.PASSWORD }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,enable=true,priority=100,prefix=,suffix=,format=long
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
file: ./Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
@@ -0,0 +1,57 @@
name: build-and-push-bskyweb-ghcr
on:
push:
branches:
- main
- jake/bskyweb-additions
env:
REGISTRY: ghcr.io
USERNAME: ${{ github.actor }}
PASSWORD: ${{ secrets.GITHUB_TOKEN }}
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
jobs:
bskyweb-container-ghcr:
if: github.repository == 'bluesky-social/social-app'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v1
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.USERNAME }}
password: ${{ env.PASSWORD }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,enable=true,priority=100,prefix=bskyweb:,suffix=,format=long
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
file: ./Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
+43
View File
@@ -0,0 +1,43 @@
name: golang
on:
pull_request:
push:
branches:
- main
concurrency:
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Git Checkout
uses: actions/checkout@v3
- name: Set up Go tooling
uses: actions/setup-go@v3
with:
go-version: '1.21'
- name: Dummy JS File
run: touch bskyweb/static/js/blah.js
- name: Check
run: cd bskyweb/ && make check
- name: Build (binary)
run: cd bskyweb/ && make build
- name: Test
run: cd bskyweb/ && make test
lint:
runs-on: ubuntu-latest
steps:
- name: Git Checkout
uses: actions/checkout@v3
- name: Set up Go tooling
uses: actions/setup-go@v3
with:
go-version: '1.21'
- name: Dummy JS File
run: touch bskyweb/static/js/blah.js
- name: Lint
run: cd bskyweb/ && make lint
+51
View File
@@ -0,0 +1,51 @@
name: Lint
on:
pull_request:
push:
branches:
- main
concurrency:
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
linting:
name: Run linters
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v3
- name: Yarn install
uses: Wandalen/wretry.action@master
with:
command: yarn --frozen-lockfile
attempt_limit: 3
attempt_delay: 2000
- name: Lint check
run: yarn lint
- name: Check & compile i18n
run: yarn intl:build
- name: Type check
run: yarn typecheck
testing:
name: Run tests
runs-on: ubuntu-latest
steps:
- name: Install node 18
uses: actions/setup-node@v4
with:
node-version: 18
- name: Check out Git repository
uses: actions/checkout@v3
- name: Yarn install
uses: Wandalen/wretry.action@master
with:
command: yarn --frozen-lockfile
attempt_limit: 3
attempt_delay: 2000
- name: Check & compile i18n
run: yarn intl:build
- name: Run tests
run: |
NODE_ENV=test EXPO_PUBLIC_ENV=test yarn test --forceExit
+48
View File
@@ -59,3 +59,51 @@ buck-out/
# Ruby / CocoaPods
/ios/Pods/
/vendor/bundle/
# Testing
coverage/
junit.xml
artifacts
# Web bundle outputs
/dist/
# Expo
.expo/
dist/
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# Temporary files created by Metro to check the health of the file watcher
.metro-health-check*
# VSCode
.vscode
# gitignore and github actions
!.gitignore
!.github
# Android & iOS folders
/android/
/ios/
# environment variables
.env
.env.*
# Firebase (Android) Google services
google-services.json
# Performance results (Flashlight)
.perf/
# i18n
src/locale/locales/_build/
src/locale/locales/**/*.js
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
yarn lint-staged
+12
View File
@@ -0,0 +1,12 @@
ios
android
src/third-party
src/app.json
public
/bskyweb/templates
/dist/
/.watchmanconfig
/app.json
web/index.html
web-build/*
+1 -1
View File
@@ -1 +1 @@
2.7.4
2.7.6
+74
View File
@@ -0,0 +1,74 @@
FROM golang:1.21-bullseye AS build-env
WORKDIR /usr/src/social-app
ENV DEBIAN_FRONTEND=noninteractive
# Node
ENV NODE_VERSION=18
ENV NVM_DIR=/usr/share/nvm
# Go
ENV GODEBUG="netdns=go"
ENV GOOS="linux"
ENV GOARCH="amd64"
ENV CGO_ENABLED=1
ENV GOEXPERIMENT="loopvar"
COPY . .
#
# Generate the JavaScript webpack.
#
RUN mkdir --parents $NVM_DIR && \
wget \
--output-document=/tmp/nvm-install.sh \
https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh && \
bash /tmp/nvm-install.sh
RUN \. "$NVM_DIR/nvm.sh" && \
nvm install $NODE_VERSION && \
nvm use $NODE_VERSION && \
npm install --global yarn && \
yarn && \
yarn intl:compile && \
yarn build-web
# DEBUG
RUN find ./bskyweb/static && find ./web-build/static
#
# Generate the bskyweb Go binary.
#
RUN cd bskyweb/ && \
go mod download && \
go mod verify
RUN cd bskyweb/ && \
go build \
-v \
-trimpath \
-tags timetzdata \
-o /bskyweb \
./cmd/bskyweb
FROM debian:bullseye-slim
ENV GODEBUG=netdns=go
ENV TZ=Etc/UTC
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install --yes \
dumb-init \
ca-certificates
ENTRYPOINT ["dumb-init", "--"]
WORKDIR /bskyweb
COPY --from=build-env /bskyweb /usr/bin/bskyweb
CMD ["/usr/bin/bskyweb"]
LABEL org.opencontainers.image.source=https://github.com/bluesky-social/social-app
LABEL org.opencontainers.image.description="bsky.app Web App"
LABEL org.opencontainers.image.licenses=MIT
+2 -2
View File
@@ -1,6 +1,6 @@
source 'https://rubygems.org'
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby '2.7.4'
ruby File.read(File.join(__dir__, '.ruby-version')).strip
gem 'cocoapods', '~> 1.11', '>= 1.11.2'
gem 'cocoapods', '~> 1.11', '>= 1.11.3'
+7
View File
@@ -0,0 +1,7 @@
Copyright 20232024 Bluesky PBC
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+36
View File
@@ -0,0 +1,36 @@
SHELL = /bin/bash
.SHELLFLAGS = -o pipefail -c
.PHONY: help
help: ## Print info about all commands
@echo "Commands:"
@echo
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[01;32m%-20s\033[0m %s\n", $$1, $$2}'
.PHONY: build-web
build-web: ## Compile web bundle, copy to bskyweb directory
yarn intl:build
yarn build-web
.PHONY: test
test: ## Run all tests
NODE_ENV=test EXPO_PUBLIC_ENV=test yarn test
.PHONY: lint
lint: ## Run style checks and verify syntax
yarn run lint
#.PHONY: fmt
#fmt: ## Run syntax re-formatting
# yarn prettier
.PHONY: deps
deps: ## Installs dependent libs using 'yarn install'
yarn install --frozen-lockfile
.PHONY: nvm-setup
nvm-setup: ## Use NVM to install and activate node+yarn
nvm install 18
nvm use 18
npm install --global yarn
+54 -48
View File
@@ -1,70 +1,76 @@
# Social App
# Bluesky Social App
In-progress social app.
Welcome friends! This is the codebase for the Bluesky Social app.
Uses:
Get the app itself:
- [React Native](https://reactnative.dev)
- [React Native for Web](https://necolas.github.io/react-native-web/)
- [React Navigation](https://reactnative.dev/docs/navigation#react-navigation)
- [MobX](https://mobx.js.org/README.html)
- [Async Storage](https://github.com/react-native-async-storage/async-storage)
- **Web: [bsky.app](https://bsky.app)**
- **iOS: [App Store](https://apps.apple.com/us/app/bluesky-social/id6444370199)**
- **Android: [Play Store](https://play.google.com/store/apps/details?id=xyz.blueskyweb.app&hl=en_US&gl=US)**
## TODOs
## Development Resources
- Handle the "unauthed" state better than changing route definitions
- Currently it's possible to get a 404 if the auth state changes
This is a [React Native](https://reactnative.dev/) application, written in the TypeScript programming language. It builds on the `atproto` TypeScript packages (like [`@atproto/api`](https://www.npmjs.com/package/@atproto/api)), code for which is also on open source, but in [a different git repository](https://github.com/bluesky-social/atproto).
## Build instructions
There is a small amount of Go language source code (in `./bskyweb/`), for a web service that returns the React Native Web application.
- Setup your environment [using the react native instructions](https://reactnative.dev/docs/environment-setup).
- After initial setup:
- `cd ios ; pod install`
- Start the dev servers
- `yarn dev-pds`
- `yarn dev-wallet`
- Run the dev app
- iOS: `yarn ios`
- Android: `yarn android`
- Web: `yarn web`
- Tips
- `npx react-native info` Checks what has been installed.
- On M1 macs, [you need to exclude "arm64" from the target architectures](https://stackoverflow.com/a/65399525)
- Annoyingly this must be re-set via XCode after every pod install
- The android simulator won't be able to access localhost services unless you run `adb reverse tcp:{PORT} tcp:{PORT}`
- For instance, the localhosted dev-wallet will need `adb reverse tcp:3001 tcp:3001`
- For some reason, the typescript compiler chokes on platform-specific files (e.g. `foo.native.ts`) but only when compiling for Web thus far. Therefore we always have one version of the file which doesn't use a platform specifier, and that should bee the Web version. ([More info](https://stackoverflow.com/questions/44001050/platform-specific-import-component-in-react-native-with-typescript).)
The [Build Instructions](./docs/build.md) are a good place to get started with the app itself.
## Various notes
The Authenticated Transfer Protocol ("AT Protocol" or "atproto") is a decentralized social media protocol. You don't *need* to understand AT Protocol to work with this application, but it can help. Learn more at:
### Env vars
- [Overview and Guides](https://atproto.com/guides/overview)
- [Github Discussions](https://github.com/bluesky-social/atproto/discussions) 👈 Great place to ask questions
- [Protocol Specifications](https://atproto.com/specs/atp)
- [Blogpost on self-authenticating data structures](https://blueskyweb.xyz/blog/3-6-2022-a-self-authenticating-social-protocol)
Set using the `.env` file or using bash.
The Bluesky Social application encompasses a set of schemas and APIs built in the overall AT Protocol framework. The namespace for these "Lexicons" is `app.bsky.*`.
```
REACT_APP_AUTH_LOBBY = 'http://localhost:3001'
```
## Contributions
### Build behaviors
> While we do accept contributions, we prioritize high quality issues and pull requests. Adhering to the below guidelines will ensure a more timely review.
The `metro.config.js` file rewrites a couple of imports. This is partly to work around missing features in Metro, and partly to patch the bundle. Affected imports include:
**Rules:**
- ucans
- one-webcrypto
- We may not respond to your issue or PR.
- We may close an issue or PR without much feedback.
- We may lock discussions or contributions if our attention is getting DDOSed.
- We're not going to provide support for build issues.
### Cryptography
**Guidelines:**
For native builds, we must provide a polyfill of `webcrypto`. We use a custom native module AppSecureRandom (based on [react-native-securerandom](https://github.com/robhogan/react-native-securerandom)) for the CRNG and [msrcrypto](https://github.com/microsoft/MSR-JavaScript-Crypto) for the cryptography.
- Check for existing issues before filing a new one please.
- Open an issue and give some time for discussion before submitting a PR.
- Stay away from PRs like...
- Changing "Post" to "Skeet."
- Refactoring the codebase, eg to replace mobx with redux or something.
- Adding entirely new features without prior discussion.
**NOTE** Keys are not currently stored securely.
Remember, we serve a wide community of users. Our day to day involves us constantly asking "which top priority is our top priority." If you submit well-written PRs that solve problems concisely, that's an awesome contribution. Otherwise, as much as we'd love to accept your ideas and contributions, we really don't have the bandwidth. That's what forking is for!
### Polyfills
## Forking guidelines
`./platform/polyfills.*.ts` adds polyfills to the environment. Currently this includes:
You have our blessing 🪄✨ to fork this application! However, it's very important to be clear to users when you're giving them a fork.
- webcrypto
- TextEncoder / TextDecoder
Please be sure to:
### Auth flow
- Change all branding in the repository and UI to clearly differentiate from Bluesky.
- Change any support links (feedback, email, terms of service, etc) to your own systems.
- Replace any analytics or error-collection systems with your own so we don't get super confused.
The auth flow is based on a browser app which is specified by the `REACT_APP_AUTH_LOBBY` env var. The app redirects to that location with the UCAN request, and then waits for a redirect back. In the native platforms with proper support, it will do this using an in-app browser. In native without in-app browser, or in the Web platform, it will handle this with redirects. The ucan is extracted from the hash fragment of the "return url" which is provided either by the in-app browser in response or detected during initial setup in the case of redirects.
## Security disclosures
If you discover any security issues, please send an email to security@bsky.app. The email is automatically CCed to the entire team and we'll respond promptly.
## Are you a developer interested in building on atproto?
Bluesky is an open social network built on the AT Protocol, a flexible technology that will never lock developers out of the ecosystems that they help build. With atproto, third-party can be as seamless as first-party through custom feeds, federated services, clients, and more.
If you're a developer interested in building on atproto, we'd love to email you a Bluesky invite code. Simply share your GitHub (or similar) profile with us via [this form](https://forms.gle/BF21oxVNZiDjDhXF9).
## License (MIT)
See [./LICENSE](./LICENSE) for the full license.
## P.S.
We ❤️ you and all of the ways you support us. Thank you for making Bluesky a great place!
+12
View File
@@ -0,0 +1,12 @@
/** @type {import('@jest/types').Config.InitialOptions} */
module.exports = {
rootDir: '..',
testMatch: ['<rootDir>/__e2e__/**/*.test.ts'],
testTimeout: 120000,
maxWorkers: 1,
globalSetup: 'detox/runners/jest/globalSetup',
globalTeardown: 'detox/runners/jest/globalTeardown',
reporters: ['detox/runners/jest/reporter'],
testEnvironment: 'detox/runners/jest/testEnvironment',
verbose: true,
}
+77
View File
@@ -0,0 +1,77 @@
# flow.yaml
appId: xyz.blueskyweb.app
---
- launchApp
# Login
# - runFlow:
# when:
# - tapOn: "Sign In"
# - tapOn: "Username or email address"
# - inputText: "ansh.bsky.team"
# - tapOn: "Password"
# - inputText: "PASSWORd"
# - tapOn: "Next"
# Allow notifications if popup is visible
# - runFlow:
# when:
# visible: "Notifications"
# commands:
# - tapOn: "Allow"
# Scroll in main feed
- "scroll"
- "scroll"
- "scroll"
- "scroll"
- "scroll"
- "scroll"
- "scroll"
- "scroll"
# Swipe between feeds
- swipe:
direction: "LEFT"
- swipe:
direction: "LEFT"
- swipe:
direction: "LEFT"
- swipe:
direction: "RIGHT"
- swipe:
direction: "RIGHT"
- swipe:
direction: "RIGHT"
# Go to Notifications
- tapOn:
id: "viewHeaderDrawerBtn"
- tapOn: "Notifications"
- "scroll"
- "scroll"
- "scroll"
- "scroll"
- "scroll"
- swipe:
direction: "DOWN" # Make header visible
# Go to Feeds tab
- tapOn:
id: "viewHeaderDrawerBtn"
- tapOn: "Feeds"
- scrollUntilVisible:
element: "Discover"
direction: UP
- tapOn: "Discover"
- waitForAnimationToEnd
- "scroll"
- "scroll"
- "scroll"
- "scroll"
- "scroll"
# Click on post
- tapOn:
id: "postText"
index: 0
- "scroll"
- "scroll"
- "scroll"
- "scroll"
- "scroll"
+520
View File
@@ -0,0 +1,520 @@
import {createServer as createHTTPServer} from 'node:http'
import {parse} from 'node:url'
import {createServer, TestPDS} from '../jest/test-pds'
async function main() {
let server: TestPDS
createHTTPServer(async (req, res) => {
const url = parse(req.url || '/', true)
if (req.method !== 'POST') {
return res.writeHead(200).end()
}
try {
console.log('Closing old server')
await server?.close()
console.log('Starting new server')
const inviteRequired = url?.query && 'invite' in url.query
const phoneRequired = url?.query && 'phone' in url.query
server = await createServer({inviteRequired, phoneRequired})
console.log('Listening at', server.pdsUrl)
if (url?.query) {
if ('users' in url.query) {
console.log('Generating mock users')
await server.mocker.createUser('alice')
await server.mocker.createUser('bob')
await server.mocker.createUser('carla')
await server.mocker.users.alice.agent.upsertProfile(() => ({
displayName: 'Alice',
description: 'Test user 1',
}))
await server.mocker.users.bob.agent.upsertProfile(() => ({
displayName: 'Bob',
description: 'Test user 2',
}))
await server.mocker.users.carla.agent.upsertProfile(() => ({
displayName: 'Carla',
description: 'Test user 3',
}))
if (inviteRequired) {
await server.mocker.createInvite(server.mocker.users.alice.did)
}
}
if ('follows' in url.query) {
console.log('Generating mock follows')
await server.mocker.follow('alice', 'bob')
await server.mocker.follow('alice', 'carla')
await server.mocker.follow('bob', 'alice')
await server.mocker.follow('bob', 'carla')
await server.mocker.follow('carla', 'alice')
await server.mocker.follow('carla', 'bob')
}
if ('posts' in url.query) {
console.log('Generating mock posts')
for (let user in server.mocker.users) {
await server.mocker.users[user].agent.post({text: 'Post'})
}
}
if ('feeds' in url.query) {
console.log('Generating mock feed')
await server.mocker.createFeed('alice', 'alice-favs', [])
}
if ('thread' in url.query) {
console.log('Generating mock posts')
const res = await server.mocker.users.bob.agent.post({
text: 'Thread root',
})
await server.mocker.users.carla.agent.post({
text: 'Thread reply',
reply: {
parent: {cid: res.cid, uri: res.uri},
root: {cid: res.cid, uri: res.uri},
},
})
}
if ('mergefeed' in url.query) {
console.log('Generating mock users')
await server.mocker.createUser('alice')
await server.mocker.createUser('bob')
await server.mocker.createUser('carla')
await server.mocker.createUser('dan')
await server.mocker.users.alice.agent.upsertProfile(() => ({
displayName: 'Alice',
description: 'Test user 1',
}))
await server.mocker.users.bob.agent.upsertProfile(() => ({
displayName: 'Bob',
description: 'Test user 2',
}))
await server.mocker.users.carla.agent.upsertProfile(() => ({
displayName: 'Carla',
description: 'Test user 3',
}))
await server.mocker.users.dan.agent.upsertProfile(() => ({
displayName: 'Dan',
description: 'Test user 4',
}))
console.log('Generating mock follows')
await server.mocker.follow('alice', 'bob')
await server.mocker.follow('alice', 'carla')
console.log('Generating mock posts')
let posts: Record<string, any[]> = {
alice: [],
bob: [],
carla: [],
dan: [],
}
for (let i = 0; i < 10; i++) {
for (let user in server.mocker.users) {
if (user === 'alice') continue
posts[user].push(
await server.mocker.createPost(user, `Post ${i}`),
)
}
}
for (let i = 0; i < 10; i++) {
for (let user in server.mocker.users) {
if (user === 'alice') continue
if (i % 5 === 0) {
await server.mocker.createReply(user, 'Self reply', {
cid: posts[user][i].cid,
uri: posts[user][i].uri,
})
}
if (i % 5 === 1) {
await server.mocker.createReply(user, 'Reply to bob', {
cid: posts.bob[i].cid,
uri: posts.bob[i].uri,
})
}
if (i % 5 === 2) {
await server.mocker.createReply(user, 'Reply to dan', {
cid: posts.dan[i].cid,
uri: posts.dan[i].uri,
})
}
await server.mocker.users[user].agent.post({text: `Post ${i}`})
}
}
console.log('Generating mock feeds')
await server.mocker.createFeed(
'alice',
'alice-favs',
posts.dan.map(p => p.uri),
)
await server.mocker.createFeed(
'alice',
'alice-favs2',
posts.dan.map(p => p.uri),
)
}
if ('labels' in url.query) {
console.log('Generating naughty users with labels')
const anchorPost = await server.mocker.createPost(
'alice',
'Anchor post',
)
for (const user of [
'dmca-account',
'dmca-profile',
'dmca-posts',
'porn-account',
'porn-profile',
'porn-posts',
'nudity-account',
'nudity-profile',
'nudity-posts',
'scam-account',
'scam-profile',
'scam-posts',
'unknown-account',
'unknown-profile',
'unknown-posts',
'hide-account',
'hide-profile',
'hide-posts',
'no-promote-account',
'no-promote-profile',
'no-promote-posts',
'warn-account',
'warn-profile',
'warn-posts',
'muted-account',
'muted-by-list-account',
'blocking-account',
'blockedby-account',
'mutual-block-account',
]) {
await server.mocker.createUser(user)
await server.mocker.follow('alice', user)
await server.mocker.follow(user, 'alice')
await server.mocker.createPost(user, `Unlabeled post from ${user}`)
await server.mocker.createReply(
user,
`Unlabeled reply from ${user}`,
anchorPost,
)
await server.mocker.like(user, anchorPost)
}
await server.mocker.labelAccount('dmca-violation', 'dmca-account')
await server.mocker.labelProfile('dmca-violation', 'dmca-profile')
await server.mocker.labelPost(
'dmca-violation',
await server.mocker.createPost('dmca-posts', 'dmca post'),
)
await server.mocker.labelPost(
'dmca-violation',
await server.mocker.createQuotePost(
'dmca-posts',
'dmca quote post',
anchorPost,
),
)
await server.mocker.labelPost(
'dmca-violation',
await server.mocker.createReply(
'dmca-posts',
'dmca reply',
anchorPost,
),
)
await server.mocker.labelAccount('porn', 'porn-account')
await server.mocker.labelProfile('porn', 'porn-profile')
await server.mocker.labelPost(
'porn',
await server.mocker.createImagePost('porn-posts', 'porn post'),
)
await server.mocker.labelPost(
'porn',
await server.mocker.createQuotePost(
'porn-posts',
'porn quote post',
anchorPost,
),
)
await server.mocker.labelPost(
'porn',
await server.mocker.createReply(
'porn-posts',
'porn reply',
anchorPost,
),
)
await server.mocker.labelAccount('nudity', 'nudity-account')
await server.mocker.labelProfile('nudity', 'nudity-profile')
await server.mocker.labelPost(
'nudity',
await server.mocker.createImagePost('nudity-posts', 'nudity post'),
)
await server.mocker.labelPost(
'nudity',
await server.mocker.createQuotePost(
'nudity-posts',
'nudity quote post',
anchorPost,
),
)
await server.mocker.labelPost(
'nudity',
await server.mocker.createReply(
'nudity-posts',
'nudity reply',
anchorPost,
),
)
await server.mocker.labelAccount('scam', 'scam-account')
await server.mocker.labelProfile('scam', 'scam-profile')
await server.mocker.labelPost(
'scam',
await server.mocker.createPost('scam-posts', 'scam post'),
)
await server.mocker.labelPost(
'scam',
await server.mocker.createQuotePost(
'scam-posts',
'scam quote post',
anchorPost,
),
)
await server.mocker.labelPost(
'scam',
await server.mocker.createReply(
'scam-posts',
'scam reply',
anchorPost,
),
)
await server.mocker.labelAccount(
'not-a-real-label',
'unknown-account',
)
await server.mocker.labelProfile(
'not-a-real-label',
'unknown-profile',
)
await server.mocker.labelPost(
'not-a-real-label',
await server.mocker.createPost('unknown-posts', 'unknown post'),
)
await server.mocker.labelPost(
'not-a-real-label',
await server.mocker.createQuotePost(
'unknown-posts',
'unknown quote post',
anchorPost,
),
)
await server.mocker.labelPost(
'not-a-real-label',
await server.mocker.createReply(
'unknown-posts',
'unknown reply',
anchorPost,
),
)
await server.mocker.labelAccount('!hide', 'hide-account')
await server.mocker.labelProfile('!hide', 'hide-profile')
await server.mocker.labelPost(
'!hide',
await server.mocker.createPost('hide-posts', 'hide post'),
)
await server.mocker.labelPost(
'!hide',
await server.mocker.createQuotePost(
'hide-posts',
'hide quote post',
anchorPost,
),
)
await server.mocker.labelPost(
'!hide',
await server.mocker.createReply(
'hide-posts',
'hide reply',
anchorPost,
),
)
await server.mocker.labelAccount('!no-promote', 'no-promote-account')
await server.mocker.labelProfile('!no-promote', 'no-promote-profile')
await server.mocker.labelPost(
'!no-promote',
await server.mocker.createPost(
'no-promote-posts',
'no-promote post',
),
)
await server.mocker.labelPost(
'!no-promote',
await server.mocker.createQuotePost(
'no-promote-posts',
'no-promote quote post',
anchorPost,
),
)
await server.mocker.labelPost(
'!no-promote',
await server.mocker.createReply(
'no-promote-posts',
'no-promote reply',
anchorPost,
),
)
await server.mocker.labelAccount('!warn', 'warn-account')
await server.mocker.labelProfile('!warn', 'warn-profile')
await server.mocker.labelPost(
'!warn',
await server.mocker.createPost('warn-posts', 'warn post'),
)
await server.mocker.labelPost(
'!warn',
await server.mocker.createQuotePost(
'warn-posts',
'warn quote post',
anchorPost,
),
)
await server.mocker.labelPost(
'!warn',
await server.mocker.createReply(
'warn-posts',
'warn reply',
anchorPost,
),
)
await server.mocker.users.alice.agent.mute('muted-account.test')
await server.mocker.createPost('muted-account', 'muted post')
await server.mocker.createQuotePost(
'muted-account',
'muted quote post',
anchorPost,
)
await server.mocker.createReply(
'muted-account',
'muted reply',
anchorPost,
)
const list = await server.mocker.createMuteList(
'alice',
'Muted Users',
)
await server.mocker.addToMuteList(
'alice',
list,
server.mocker.users['muted-by-list-account'].did,
)
await server.mocker.createPost('muted-by-list-account', 'muted post')
await server.mocker.createQuotePost(
'muted-by-list-account',
'account quote post',
anchorPost,
)
await server.mocker.createReply(
'muted-by-list-account',
'account reply',
anchorPost,
)
await server.mocker.createPost('blocking-account', 'blocking post')
await server.mocker.createQuotePost(
'blocking-account',
'blocking quote post',
anchorPost,
)
await server.mocker.createReply(
'blocking-account',
'blocking reply',
anchorPost,
)
await server.mocker.users.alice.agent.app.bsky.graph.block.create(
{
repo: server.mocker.users.alice.did,
},
{
subject: server.mocker.users['blocking-account'].did,
createdAt: new Date().toISOString(),
},
)
await server.mocker.createPost('blockedby-account', 'blockedby post')
await server.mocker.createQuotePost(
'blockedby-account',
'blockedby quote post',
anchorPost,
)
await server.mocker.createReply(
'blockedby-account',
'blockedby reply',
anchorPost,
)
await server.mocker.users[
'blockedby-account'
].agent.app.bsky.graph.block.create(
{
repo: server.mocker.users['blockedby-account'].did,
},
{
subject: server.mocker.users.alice.did,
createdAt: new Date().toISOString(),
},
)
await server.mocker.createPost(
'mutual-block-account',
'mutual-block post',
)
await server.mocker.createQuotePost(
'mutual-block-account',
'mutual-block quote post',
anchorPost,
)
await server.mocker.createReply(
'mutual-block-account',
'mutual-block reply',
anchorPost,
)
await server.mocker.users.alice.agent.app.bsky.graph.block.create(
{
repo: server.mocker.users.alice.did,
},
{
subject: server.mocker.users['mutual-block-account'].did,
createdAt: new Date().toISOString(),
},
)
await server.mocker.users[
'mutual-block-account'
].agent.app.bsky.graph.block.create(
{
repo: server.mocker.users['mutual-block-account'].did,
},
{
subject: server.mocker.users.alice.did,
createdAt: new Date().toISOString(),
},
)
// flush caches
await server.mocker.testNet.processAll()
}
}
console.log('Ready')
return res.writeHead(200).end(server.pdsUrl)
} catch (e) {
console.error('Error!', e)
return res.writeHead(500).end()
}
}).listen(1986)
console.log('Mock server manager listening on 1986')
}
main()
+111
View File
@@ -0,0 +1,111 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, createServer, sleep} from '../util'
describe('Composer', () => {
beforeAll(async () => {
await createServer('?users')
await openApp({
permissions: {notifications: 'YES', medialibrary: 'YES', photos: 'YES'},
})
})
it('Login', async () => {
await loginAsAlice()
await element(by.id('homeScreenFeedTabs-Following')).tap()
})
it('Post text only', async () => {
await element(by.id('composeFAB')).tap()
await device.takeScreenshot('1- opened composer')
await element(by.id('composerTextInput')).typeText('Post text only')
await device.takeScreenshot('2- entered text')
await element(by.id('composerPublishBtn')).tap()
await device.takeScreenshot('3- opened general section')
await expect(element(by.id('composeFAB'))).toBeVisible()
})
it('Post with an image', async () => {
await element(by.id('composeFAB')).tap()
await element(by.id('composerTextInput')).typeText('Post with an image')
await element(by.id('openGalleryBtn')).tap()
await sleep(1e3)
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
})
it('Post with a link card', async () => {
await element(by.id('composeFAB')).tap()
await element(by.id('composerTextInput')).typeText(
'Post with a https://example.com link card',
)
await element(by.id('addLinkCardBtn')).tap()
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
})
it('Reply text only', async () => {
await element(by.id('e2eRefreshHome')).tap()
const post = by.id('feedItem-by-alice.test')
await element(by.id('replyBtn').withAncestor(post)).atIndex(0).tap()
await element(by.id('composerTextInput')).typeText('Reply text only')
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
})
it('Reply with an image', async () => {
const post = by.id('feedItem-by-alice.test')
await element(by.id('replyBtn').withAncestor(post)).atIndex(0).tap()
await element(by.id('composerTextInput')).typeText('Reply with an image')
await element(by.id('openGalleryBtn')).tap()
await sleep(1e3)
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
})
it('Reply with a link card', async () => {
const post = by.id('feedItem-by-alice.test')
await element(by.id('replyBtn').withAncestor(post)).atIndex(0).tap()
await element(by.id('composerTextInput')).typeText(
'Reply with a https://example.com link card',
)
await element(by.id('addLinkCardBtn')).tap()
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
})
it('QP text only', async () => {
const post = by.id('feedItem-by-alice.test')
await element(by.id('repostBtn').withAncestor(post)).atIndex(0).tap()
await element(by.id('quoteBtn').withAncestor(by.id('repostModal'))).tap()
await element(by.id('composerTextInput')).typeText('QP text only')
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
})
it('QP with an image', async () => {
const post = by.id('feedItem-by-alice.test')
await element(by.id('repostBtn').withAncestor(post)).atIndex(0).tap()
await element(by.id('quoteBtn').withAncestor(by.id('repostModal'))).tap()
await element(by.id('composerTextInput')).typeText('QP with an image')
await element(by.id('openGalleryBtn')).tap()
await sleep(1e3)
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
})
it('QP with a link card', async () => {
const post = by.id('feedItem-by-alice.test')
await element(by.id('repostBtn').withAncestor(post)).atIndex(0).tap()
await element(by.id('quoteBtn').withAncestor(by.id('repostModal'))).tap()
await element(by.id('composerTextInput')).typeText(
'QP with a https://example.com link card',
)
await element(by.id('addLinkCardBtn')).tap()
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
})
})
+44
View File
@@ -0,0 +1,44 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, createServer} from '../util'
describe('Create account', () => {
let service: string
beforeAll(async () => {
service = await createServer('')
await openApp({permissions: {notifications: 'YES'}})
})
it('I can create a new account', async () => {
await element(by.id('e2eOpenLoggedOutView')).tap()
await element(by.id('createAccountButton')).tap()
await device.takeScreenshot('1- opened create account screen')
await element(by.id('selectServiceButton')).tap()
await device.takeScreenshot('2- selected other server')
await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap()
await device.takeScreenshot('3- input test server URL')
await element(by.id('emailInput')).typeText('example@test.com')
await element(by.id('passwordInput')).typeText('hunter2')
await device.takeScreenshot('4- entered account details')
await element(by.id('nextBtn')).tap()
await element(by.id('handleInput')).typeText('e2e-test')
await device.takeScreenshot('5- entered handle')
await element(by.id('nextBtn')).tap()
await expect(element(by.id('welcomeOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFeedsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFollowsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('homeScreen'))).toBeVisible()
})
})
+211
View File
@@ -0,0 +1,211 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, loginAsBob, createServer, sleep} from '../util'
describe('Curate lists', () => {
beforeAll(async () => {
await createServer('?users&follows&posts')
await openApp({
permissions: {notifications: 'YES', medialibrary: 'YES', photos: 'YES'},
})
})
it('Login and create a curatelists', async () => {
await loginAsAlice()
await element(by.id('e2eGotoLists')).tap()
await element(by.id('newUserListBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('editNameInput')).typeText('Good Ppl')
await element(by.id('editDescriptionInput')).typeText('They good')
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await element(by.text('About')).tap()
await expect(element(by.id('headerTitle'))).toHaveText('Good Ppl')
await expect(element(by.id('listDescription'))).toHaveText('They good')
})
it('Edit display name and description via the edit curatelist modal', async () => {
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('editNameInput')).clearText()
await element(by.id('editNameInput')).typeText('Bad Ppl')
await element(by.id('editDescriptionInput')).clearText()
await element(by.id('editDescriptionInput')).typeText('They bad')
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('headerTitle'))).toHaveText('Bad Ppl')
await expect(element(by.id('listDescription'))).toHaveText('They bad')
// have to wait for the toast to clear
await waitFor(element(by.id('headerDropdownBtn')))
.toBeVisible()
.withTimeout(5000)
})
it('Remove description via the edit curatelist modal', async () => {
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('editDescriptionInput')).clearText()
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('listDescription'))).not.toBeVisible()
// have to wait for the toast to clear
await waitFor(element(by.id('headerDropdownBtn')))
.toBeVisible()
.withTimeout(5000)
})
it('Set avi via the edit curatelist modal', async () => {
await expect(element(by.id('userAvatarFallback'))).toExist()
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('changeAvatarBtn')).tap()
await element(by.text('Library')).tap()
await sleep(3e3)
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('userAvatarImage'))).toExist()
// have to wait for the toast to clear
await waitFor(element(by.id('headerDropdownBtn')))
.toBeVisible()
.withTimeout(5000)
})
it('Remove avi via the edit curatelist modal', async () => {
await expect(element(by.id('userAvatarImage'))).toExist()
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('changeAvatarBtn')).tap()
await element(by.text('Remove')).tap()
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('userAvatarFallback'))).toExist()
// have to wait for the toast to clear
await waitFor(element(by.id('headerDropdownBtn')))
.toBeVisible()
.withTimeout(5000)
})
it('Delete the curatelist', async () => {
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Delete List')).tap()
await element(by.id('confirmBtn')).tap()
await expect(element(by.id('listsEmpty'))).toBeVisible()
})
it('Create a new curatelist', async () => {
await element(by.id('e2eGotoLists')).tap()
await element(by.id('newUserListBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('editNameInput')).typeText('Good Ppl')
await element(by.id('editDescriptionInput')).typeText('They good')
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await element(by.text('About')).tap()
await expect(element(by.id('headerTitle'))).toHaveText('Good Ppl')
await expect(element(by.id('listDescription'))).toHaveText('They good')
})
it('Adds users on curatelists from the list', async () => {
await element(by.text('About')).tap()
await element(by.id('addUserBtn')).tap()
await expect(element(by.id('listAddUserModal'))).toBeVisible()
await waitFor(element(by.id('user-bob.test-addBtn')))
.toBeVisible()
.withTimeout(5000)
await element(by.id('user-bob.test-addBtn')).tap()
await element(by.id('doneBtn')).tap()
await expect(element(by.id('listAddUserModal'))).not.toBeVisible()
await expect(element(by.id('user-bob.test'))).toBeVisible()
})
it('Shows posts by the users in the list', async () => {
await element(by.text('Posts')).tap()
await expect(element(by.id('feedItem-by-bob.test'))).toBeVisible()
})
it('Pins the list', async () => {
await expect(element(by.id('pinBtn'))).toBeVisible()
await element(by.id('pinBtn')).tap()
await element(by.id('e2eGotoHome')).tap()
await element(by.id('homeScreenFeedTabs-Good Ppl')).tap()
await expect(element(by.id('feedItem-by-bob.test'))).toBeVisible()
await element(by.id('bottomBarFeedsBtn')).tap()
await element(by.id('saved-feed-Good Ppl')).tap()
await expect(element(by.id('feedItem-by-bob.test'))).toBeVisible()
await element(by.id('unpinBtn')).tap()
await element(by.id('bottomBarHomeBtn')).tap()
await expect(
element(by.id('homeScreenFeedTabs-Good Ppl')),
).not.toBeVisible()
await element(by.id('e2eGotoLists')).tap()
await element(by.id('list-Good Ppl')).tap()
})
it('Removes users on curatelists from the list', async () => {
await element(by.text('About')).tap()
await expect(element(by.id('user-bob.test'))).toBeVisible()
await element(by.id('user-bob.test-editBtn')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).toBeVisible()
await element(by.id('user-bob.test-addBtn')).tap()
await element(by.id('doneBtn')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).not.toBeVisible()
})
it('Shows the curatelist on my profile', async () => {
await element(by.id('bottomBarProfileBtn')).tap()
await element(by.id('profilePager-selector')).swipe('left')
await element(by.id('profilePager-selector-5')).tap()
await element(by.id('list-Good Ppl')).tap()
})
it('Adds and removes users on curatelists from the profile', async () => {
await element(by.id('bottomBarSearchBtn')).tap()
await element(by.id('searchTextInput')).typeText('bob')
await element(by.id('searchAutoCompleteResult-bob.test')).tap()
await expect(element(by.id('profileView'))).toBeVisible()
await element(by.id('profileHeaderDropdownBtn')).tap()
await element(by.text('Add to Lists')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).toBeVisible()
await element(by.id('user-bob.test-addBtn')).tap()
await element(by.id('doneBtn')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).not.toBeVisible()
await element(by.id('profileHeaderDropdownBtn')).tap()
await element(by.text('Add to Lists')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).toBeVisible()
await element(by.id('user-bob.test-addBtn')).tap()
await element(by.id('doneBtn')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).not.toBeVisible()
})
it('Can report a user list', async () => {
await element(by.id('e2eGotoSettings')).tap()
await element(by.id('signOutBtn')).tap()
await loginAsBob()
await element(by.id('bottomBarSearchBtn')).tap()
await element(by.id('searchTextInput')).typeText('alice')
await element(by.id('searchAutoCompleteResult-alice.test')).tap()
await element(by.id('profilePager-selector')).swipe('left')
await element(by.id('profilePager-selector-3')).tap()
await element(by.id('list-Good Ppl')).tap()
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Report List')).tap()
await expect(element(by.id('reportModal'))).toBeVisible()
await expect(element(by.text('Report List'))).toBeVisible()
await element(
by.id('reportReasonRadios-com.atproto.moderation.defs#reasonRude'),
).tap()
await element(by.id('sendReportBtn')).tap()
await expect(element(by.id('reportModal'))).not.toBeVisible()
})
})
+112
View File
@@ -0,0 +1,112 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, createServer} from '../util'
describe('Home screen', () => {
beforeAll(async () => {
await createServer('?users&follows&posts&feeds')
await openApp({permissions: {notifications: 'YES'}})
})
it('Login', async () => {
await loginAsAlice()
await element(by.id('homeScreenFeedTabs-Following')).tap()
})
it('Can go to feeds page using feeds button in tab bar', async () => {
await element(by.id('homeScreenFeedTabs-Feeds ✨')).tap()
await expect(element(by.text('Discover new feeds'))).toBeVisible()
})
it('Feeds button disappears after pinning a feed', async () => {
await element(by.id('bottomBarProfileBtn')).tap()
await element(by.id('profilePager-selector')).swipe('left')
await element(by.id('profilePager-selector-4')).tap()
await element(by.id('feed-alice-favs')).tap()
await element(by.id('pinBtn')).tap()
await element(by.id('bottomBarHomeBtn')).tap()
await expect(
element(by.id('homeScreenFeedTabs-Feeds ✨')),
).not.toBeVisible()
})
it('Can like posts', async () => {
const carlaPosts = by.id('feedItem-by-carla.test')
await expect(
element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0),
).toHaveText('0')
await element(by.id('likeBtn').withAncestor(carlaPosts)).atIndex(0).tap()
await expect(
element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0),
).toHaveText('1')
await element(by.id('likeBtn').withAncestor(carlaPosts)).atIndex(0).tap()
await expect(
element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0),
).toHaveText('0')
})
it('Can repost posts', async () => {
const carlaPosts = by.id('feedItem-by-carla.test')
await expect(
element(by.id('repostCount').withAncestor(carlaPosts)).atIndex(0),
).toHaveText('0')
await element(by.id('repostBtn').withAncestor(carlaPosts)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect(
element(by.id('repostCount').withAncestor(carlaPosts)).atIndex(0),
).toHaveText('1')
await element(by.id('repostBtn').withAncestor(carlaPosts)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect(
element(by.id('repostCount').withAncestor(carlaPosts)).atIndex(0),
).toHaveText('0')
})
it('Can report posts', async () => {
const carlaPosts = by.id('feedItem-by-carla.test')
await element(by.id('postDropdownBtn').withAncestor(carlaPosts))
.atIndex(0)
.tap()
await element(by.text('Report post')).tap()
await expect(element(by.id('reportModal'))).toBeVisible()
await element(
by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
).tap()
await element(by.id('sendReportBtn')).tap()
await expect(element(by.id('reportModal'))).not.toBeVisible()
})
it('Can swipe between feeds', async () => {
await element(by.id('homeScreen')).swipe('left', 'fast', 0.75)
await expect(element(by.id('customFeedPage'))).toBeVisible()
await element(by.id('homeScreen')).swipe('right', 'fast', 0.75)
await expect(element(by.id('followingFeedPage'))).toBeVisible()
})
it('Can tap between feeds', async () => {
await element(by.id('homeScreenFeedTabs-alice-favs')).tap()
await expect(element(by.id('customFeedPage'))).toBeVisible()
await element(by.id('homeScreenFeedTabs-Following')).tap()
await expect(element(by.id('followingFeedPage'))).toBeVisible()
})
it('Can delete posts', async () => {
const alicePosts = by.id('feedItem-by-alice.test')
await expect(element(alicePosts.withDescendant(by.text('Post')))).toExist()
await element(by.id('postDropdownBtn').withAncestor(alicePosts))
.atIndex(0)
.tap()
await element(by.text('Delete post')).tap()
await expect(element(by.id('confirmModal'))).toBeVisible()
await element(by.id('confirmBtn')).tap()
await expect(
element(alicePosts.withDescendant(by.text('Post'))),
).not.toExist()
})
})
+51
View File
@@ -0,0 +1,51 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, createServer} from '../util'
describe('invite-codes', () => {
let service: string
let inviteCode = ''
beforeAll(async () => {
service = await createServer('?users&invite')
await openApp({permissions: {notifications: 'YES'}})
})
it('I can fetch invite codes', async () => {
await loginAsAlice()
await element(by.id('e2eOpenInviteCodesModal')).tap()
await expect(element(by.id('inviteCodesModal'))).toBeVisible()
const attrs = await element(by.id('inviteCode-0-code')).getAttributes()
inviteCode = attrs.text
await element(by.id('closeBtn')).tap()
await element(by.id('e2eSignOut')).tap()
})
it('I can create a new account with the invite code', async () => {
await element(by.id('e2eOpenLoggedOutView')).tap()
await element(by.id('createAccountButton')).tap()
await device.takeScreenshot('1- opened create account screen')
await element(by.id('selectServiceButton')).tap()
await device.takeScreenshot('2- selected other server')
await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap()
await device.takeScreenshot('3- input test server URL')
await element(by.id('inviteCodeInput')).typeText(inviteCode)
await element(by.id('emailInput')).typeText('example@test.com')
await element(by.id('passwordInput')).typeText('hunter2')
await device.takeScreenshot('4- entered account details')
await element(by.id('nextBtn')).tap()
await element(by.id('handleInput')).typeText('e2e-test')
await device.takeScreenshot('4- entered handle')
await element(by.id('nextBtn')).tap()
await expect(element(by.id('welcomeOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFeedsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFollowsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('homeScreen'))).toBeVisible()
})
})
@@ -0,0 +1,57 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, createServer} from '../util'
describe('invite-codes', () => {
let service: string
let inviteCode = ''
beforeAll(async () => {
service = await createServer('?users&invite&phone')
await openApp({permissions: {notifications: 'YES'}})
})
it('I can fetch invite codes', async () => {
await loginAsAlice()
await element(by.id('e2eOpenInviteCodesModal')).tap()
await expect(element(by.id('inviteCodesModal'))).toBeVisible()
const attrs = await element(by.id('inviteCode-0-code')).getAttributes()
inviteCode = attrs.text
await element(by.id('closeBtn')).tap()
await element(by.id('e2eSignOut')).tap()
})
it('I can create a new account with the invite code', async () => {
await element(by.id('e2eOpenLoggedOutView')).tap()
await element(by.id('createAccountButton')).tap()
await device.takeScreenshot('1- opened create account screen')
await element(by.id('selectServiceButton')).tap()
await device.takeScreenshot('2- selected other server')
await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap()
await device.takeScreenshot('3- input test server URL')
await element(by.id('inviteCodeInput')).typeText(inviteCode)
await element(by.id('emailInput')).typeText('example@test.com')
await element(by.id('passwordInput')).typeText('hunter2')
await device.takeScreenshot('4- entered account details')
await element(by.id('nextBtn')).tap()
await element(by.id('phoneInput')).typeText('5558675309')
await element(by.id('requestCodeBtn')).tap()
await device.takeScreenshot('5- requested code')
await element(by.id('codeInput')).typeText('000000')
await device.takeScreenshot('6- entered code')
await element(by.id('nextBtn')).tap()
await element(by.id('handleInput')).typeText('e2e-test')
await device.takeScreenshot('7- entered handle')
await element(by.id('nextBtn')).tap()
await expect(element(by.id('welcomeOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFeedsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFollowsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('homeScreen'))).toBeVisible()
})
})
+23
View File
@@ -0,0 +1,23 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, login, createServer} from '../util'
describe('Login', () => {
let service: string
beforeAll(async () => {
service = await createServer('?users')
await openApp({permissions: {notifications: 'YES'}})
})
it('As Alice, I can login', async () => {
await element(by.id('e2eOpenLoggedOutView')).tap()
await expect(element(by.id('signInButton'))).toBeVisible()
await login(service, 'alice', 'hunter2', {
takeScreenshots: true,
})
await device.takeScreenshot('5- opened home screen')
})
})
+163
View File
@@ -0,0 +1,163 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, createServer} from '../util'
describe('Mergefeed', () => {
beforeAll(async () => {
await createServer('?mergefeed')
await openApp({permissions: {notifications: 'YES'}})
})
it('Login', async () => {
await element(by.id('e2eOpenLoggedOutView')).tap()
await loginAsAlice()
await element(by.id('e2eToggleMergefeed')).tap()
await element(by.id('bottomBarFeedsBtn')).tap()
await element(by.id('feed-alice-favs-toggleSave')).tap()
await element(by.id('e2eGotoHome')).tap()
})
it('Sees the expected mix of posts with default filters', async () => {
await element(by.id('followingFeedPage-feed-flatlist')).swipe(
'down',
'slow',
1,
0.5,
0.5,
)
// followed users
await expect(
element(
by.id('postText').withAncestor(by.id('feedItem-by-carla.test')),
).atIndex(0),
).toHaveText('Post 9')
await expect(
element(
by.id('postText').withAncestor(by.id('feedItem-by-bob.test')),
).atIndex(0),
).toHaveText('Post 9')
await element(by.id('followingFeedPage-feed-flatlist')).swipe(
'up',
'fast',
1,
0.5,
0.5,
)
// feed users
await expect(
element(
by.id('postText').withAncestor(by.id('feedItem-by-dan.test')),
).atIndex(0),
).toHaveText('Post 0')
})
it('Sees the expected mix of posts with replies disabled', async () => {
await element(by.id('followingFeedPage-feed-flatlist')).swipe(
'down',
'fast',
1,
0.5,
0.5,
)
await element(by.id('followingFeedPage-feed-flatlist')).swipe(
'down',
'fast',
1,
0.5,
0.5,
)
await element(by.id('viewHeaderHomeFeedPrefsBtn')).tap()
await element(by.id('toggleRepliesBtn')).tap()
await element(by.id('confirmBtn')).tap()
await element(by.id('followingFeedPage-feed-flatlist')).swipe(
'down',
'slow',
1,
0.5,
0.5,
)
// followed users
await expect(
element(
by.id('postText').withAncestor(by.id('feedItem-by-carla.test')),
).atIndex(0),
).toHaveText('Post 9')
await expect(
element(
by.id('postText').withAncestor(by.id('feedItem-by-bob.test')),
).atIndex(0),
).toHaveText('Post 9')
await element(by.id('followingFeedPage-feed-flatlist')).swipe(
'up',
'fast',
1,
0.5,
0.5,
)
// feed users
await expect(
element(
by.id('postText').withAncestor(by.id('feedItem-by-dan.test')),
).atIndex(0),
).toHaveText('Post 0')
})
it('Sees the expected mix of posts with no follows', async () => {
await element(by.id('followingFeedPage-feed-flatlist')).swipe(
'down',
'fast',
1,
0.5,
0.5,
)
await element(by.id('bottomBarSearchBtn')).tap()
await element(by.id('searchTextInput')).typeText('bob')
await element(by.id('searchAutoCompleteResult-bob.test')).tap()
await expect(element(by.id('profileView'))).toBeVisible()
await element(by.id('unfollowBtn')).tap()
await element(by.id('profileHeaderBackBtn')).tap()
// have to wait for the toast to clear
await waitFor(element(by.id('searchTextInputClearBtn')))
.toBeVisible()
.withTimeout(5000)
await element(by.id('searchTextInputClearBtn')).tap()
await element(by.id('searchTextInput')).typeText('carla')
await element(by.id('searchAutoCompleteResult-carla.test')).tap()
await expect(element(by.id('profileView'))).toBeVisible()
await element(by.id('unfollowBtn')).tap()
await element(by.id('profileHeaderBackBtn')).tap()
await element(by.id('bottomBarHomeBtn')).tap()
await element(by.id('followingFeedPage-feed-flatlist')).swipe(
'down',
'slow',
1,
0.5,
0.5,
)
await element(by.id('followingFeedPage-feed-flatlist')).swipe(
'down',
'slow',
1,
0.5,
0.5,
)
// followed users NOT present
await expect(element(by.id('feedItem-by-carla.test'))).not.toExist()
await expect(element(by.id('feedItem-by-bob.test'))).not.toExist()
// feed users
await expect(
element(
by.id('postText').withAncestor(by.id('feedItem-by-dan.test')),
).atIndex(0),
).toHaveText('Post 0')
})
})
+188
View File
@@ -0,0 +1,188 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, loginAsBob, createServer, sleep} from '../util'
describe('Mod lists', () => {
beforeAll(async () => {
await createServer('?users&follows&labels')
await openApp({
permissions: {notifications: 'YES', medialibrary: 'YES', photos: 'YES'},
})
})
it('Login and view my modlists', async () => {
await loginAsAlice()
await element(by.id('e2eGotoModeration')).tap()
await element(by.id('moderationlistsBtn')).tap()
await expect(element(by.id('list-Muted Users'))).toBeVisible()
await element(by.id('list-Muted Users')).tap()
await expect(
element(by.id('user-muted-by-list-account.test')),
).toBeVisible()
})
it('Toggle mute subscription', async () => {
await element(by.id('unmuteBtn')).tap()
await element(by.id('subscribeBtn')).tap()
await element(by.text('Mute accounts')).tap()
await element(by.id('confirmBtn')).tap()
})
it('Edit display name and description via the edit modlist modal', async () => {
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('editNameInput')).clearText()
await element(by.id('editNameInput')).typeText('Bad Ppl')
await element(by.id('editDescriptionInput')).clearText()
await element(by.id('editDescriptionInput')).typeText('They bad')
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('headerTitle'))).toHaveText('Bad Ppl')
await expect(element(by.id('listDescription'))).toHaveText('They bad')
// have to wait for the toast to clear
await waitFor(element(by.id('headerDropdownBtn')))
.toBeVisible()
.withTimeout(5000)
})
it('Remove description via the edit modlist modal', async () => {
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('editDescriptionInput')).clearText()
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('listDescription'))).not.toBeVisible()
// have to wait for the toast to clear
await waitFor(element(by.id('headerDropdownBtn')))
.toBeVisible()
.withTimeout(5000)
})
it('Set avi via the edit modlist modal', async () => {
await expect(element(by.id('userAvatarFallback'))).toExist()
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('changeAvatarBtn')).tap()
await element(by.text('Library')).tap()
await sleep(3e3)
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('userAvatarImage'))).toExist()
// have to wait for the toast to clear
await waitFor(element(by.id('headerDropdownBtn')))
.toBeVisible()
.withTimeout(5000)
})
it('Remove avi via the edit modlist modal', async () => {
await expect(element(by.id('userAvatarImage'))).toExist()
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('changeAvatarBtn')).tap()
await element(by.text('Remove')).tap()
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('userAvatarFallback'))).toExist()
// have to wait for the toast to clear
await waitFor(element(by.id('headerDropdownBtn')))
.toBeVisible()
.withTimeout(5000)
})
it('Delete the modlist', async () => {
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Delete List')).tap()
await element(by.id('confirmBtn')).tap()
await expect(element(by.id('listsEmpty'))).toBeVisible()
})
it('Create a new modlist', async () => {
await element(by.id('newModListBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('editNameInput')).typeText('Bad Ppl')
await element(by.id('editDescriptionInput')).typeText('They bad')
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('headerTitle'))).toHaveText('Bad Ppl')
await expect(element(by.id('listDescription'))).toHaveText('They bad')
})
it('Adds and removes users on modlists from the list', async () => {
await element(by.id('addUserBtn')).tap()
await expect(element(by.id('listAddUserModal'))).toBeVisible()
await waitFor(element(by.id('user-warn-posts.test-addBtn')))
.toBeVisible()
.withTimeout(5000)
await element(by.id('user-warn-posts.test-addBtn')).tap()
await element(by.id('doneBtn')).tap()
await expect(element(by.id('listAddUserModal'))).not.toBeVisible()
await element(by.id('listItems-flatlist')).swipe(
'down',
'slow',
1,
0.5,
0.5,
)
await expect(element(by.id('user-warn-posts.test'))).toBeVisible()
await element(by.id('user-warn-posts.test-editBtn')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).toBeVisible()
await element(by.id('user-warn-posts.test-addBtn')).tap()
await element(by.id('doneBtn')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).not.toBeVisible()
})
it('Shows the modlist on my profile', async () => {
await element(by.id('bottomBarProfileBtn')).tap()
await element(by.id('profilePager-selector')).swipe('left')
await element(by.id('profilePager-selector-5')).tap()
await element(by.id('list-Bad Ppl')).tap()
})
it('Adds and removes users on modlists from the profile', async () => {
await element(by.id('bottomBarSearchBtn')).tap()
await element(by.id('searchTextInput')).typeText('bob')
await element(by.id('searchAutoCompleteResult-bob.test')).tap()
await expect(element(by.id('profileView'))).toBeVisible()
await element(by.id('profileHeaderDropdownBtn')).tap()
await element(by.text('Add to Lists')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).toBeVisible()
await element(by.id('user-bob.test-addBtn')).tap()
await element(by.id('doneBtn')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).not.toBeVisible()
await element(by.id('profileHeaderDropdownBtn')).tap()
await element(by.text('Add to Lists')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).toBeVisible()
await element(by.id('user-bob.test-addBtn')).tap()
await element(by.id('doneBtn')).tap()
await expect(element(by.id('userAddRemoveListsModal'))).not.toBeVisible()
})
it('Can report a mute list', async () => {
await element(by.id('e2eGotoSettings')).tap()
await element(by.id('signOutBtn')).tap()
await loginAsBob()
await element(by.id('bottomBarSearchBtn')).tap()
await element(by.id('searchTextInput')).typeText('alice')
await element(by.id('searchAutoCompleteResult-alice.test')).tap()
await element(by.id('profilePager-selector')).swipe('left')
await element(by.id('profilePager-selector-3')).tap()
await element(by.id('list-Bad Ppl')).tap()
await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Report List')).tap()
await expect(element(by.id('reportModal'))).toBeVisible()
await expect(element(by.text('Report List'))).toBeVisible()
await element(
by.id('reportReasonRadios-com.atproto.moderation.defs#reasonRude'),
).tap()
await element(by.id('sendReportBtn')).tap()
await expect(element(by.id('reportModal'))).not.toBeVisible()
})
})
+193
View File
@@ -0,0 +1,193 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, createServer, sleep} from '../util'
describe('Profile screen', () => {
beforeAll(async () => {
await createServer('?users&posts&feeds')
await openApp({
permissions: {notifications: 'YES', medialibrary: 'YES', photos: 'YES'},
})
})
it('Login and navigate to my profile', async () => {
await loginAsAlice()
await element(by.id('bottomBarProfileBtn')).tap()
})
it('Can see feeds', async () => {
await element(by.id('profilePager-selector')).swipe('left')
await element(by.id('profilePager-selector-4')).tap()
await expect(element(by.id('feed-alice-favs'))).toBeVisible()
await element(by.id('profilePager-selector')).swipe('right')
await element(by.id('profilePager-selector-0')).tap()
})
it('Open and close edit profile modal', async () => {
await element(by.id('profileHeaderEditProfileButton')).tap()
await expect(element(by.id('editProfileModal'))).toBeVisible()
await element(by.id('editProfileCancelBtn')).tap()
await expect(element(by.id('editProfileModal'))).not.toBeVisible()
})
it('Edit display name and description via the edit profile modal', async () => {
await element(by.id('profileHeaderEditProfileButton')).tap()
await expect(element(by.id('editProfileModal'))).toBeVisible()
await element(by.id('editProfileDisplayNameInput')).clearText()
await element(by.id('editProfileDisplayNameInput')).typeText('Alicia')
await element(by.id('editProfileDescriptionInput')).clearText()
await element(by.id('editProfileDescriptionInput')).typeText(
'One cool hacker',
)
await element(by.id('editProfileSaveBtn')).tap()
await expect(element(by.id('editProfileModal'))).not.toBeVisible()
await expect(element(by.id('profileHeaderDisplayName'))).toHaveText(
'Alicia',
)
await expect(element(by.id('profileHeaderDescription'))).toHaveText(
'One cool hacker',
)
})
it('Remove display name and description via the edit profile modal', async () => {
await element(by.id('profileHeaderEditProfileButton')).tap()
await expect(element(by.id('editProfileModal'))).toBeVisible()
await element(by.id('editProfileDisplayNameInput')).clearText()
await element(by.id('editProfileDescriptionInput')).clearText()
await element(by.id('editProfileSaveBtn')).tap()
await expect(element(by.id('editProfileModal'))).not.toBeVisible()
await expect(element(by.id('profileHeaderDisplayName'))).toHaveText(
'alice.test',
)
await expect(element(by.id('profileHeaderDescription'))).not.toExist()
})
it('Set avi and banner via the edit profile modal', async () => {
await expect(element(by.id('userBannerFallback'))).toExist()
await expect(element(by.id('userAvatarFallback'))).toExist()
await element(by.id('profileHeaderEditProfileButton')).tap()
await expect(element(by.id('editProfileModal'))).toBeVisible()
await element(by.id('changeBannerBtn')).tap()
await element(by.text('Library')).tap()
await sleep(3e3)
await element(by.id('changeAvatarBtn')).tap()
await element(by.text('Library')).tap()
await sleep(3e3)
await element(by.id('editProfileSaveBtn')).tap()
await expect(element(by.id('editProfileModal'))).not.toBeVisible()
await expect(element(by.id('userBannerImage'))).toExist()
await expect(element(by.id('userAvatarImage'))).toExist()
})
it('Remove avi and banner via the edit profile modal', async () => {
await expect(element(by.id('userBannerImage'))).toExist()
await expect(element(by.id('userAvatarImage'))).toExist()
await element(by.id('profileHeaderEditProfileButton')).tap()
await expect(element(by.id('editProfileModal'))).toBeVisible()
await element(by.id('changeBannerBtn')).tap()
await element(by.text('Remove')).tap()
await element(by.id('changeAvatarBtn')).tap()
await element(by.text('Remove')).tap()
await element(by.id('editProfileSaveBtn')).tap()
await expect(element(by.id('editProfileModal'))).not.toBeVisible()
await expect(element(by.id('userBannerFallback'))).toExist()
await expect(element(by.id('userAvatarFallback'))).toExist()
})
it('Navigate to another user profile', async () => {
await element(by.id('bottomBarSearchBtn')).tap()
// have to wait for the toast to clear
await waitFor(element(by.id('searchTextInput')))
.toBeVisible()
.withTimeout(5000)
await element(by.id('searchTextInput')).typeText('bob')
await element(by.id('searchAutoCompleteResult-bob.test')).tap()
await expect(element(by.id('profileView'))).toBeVisible()
})
it('Can follow/unfollow another user', async () => {
await element(by.id('followBtn')).tap()
await expect(element(by.id('unfollowBtn'))).toBeVisible()
await element(by.id('unfollowBtn')).tap()
await expect(element(by.id('followBtn'))).toBeVisible()
})
it('Can mute/unmute another user', async () => {
await expect(element(by.id('profileHeaderAlert'))).not.toExist()
await element(by.id('profileHeaderDropdownBtn')).tap()
await element(by.text('Mute Account')).tap()
await expect(element(by.id('profileHeaderAlert'))).toBeVisible()
await element(by.id('profileHeaderDropdownBtn')).tap()
await element(by.text('Unmute Account')).tap()
await expect(element(by.id('profileHeaderAlert'))).not.toExist()
})
it('Can report another user', async () => {
await element(by.id('profileHeaderDropdownBtn')).tap()
await element(by.text('Report Account')).tap()
await expect(element(by.id('reportModal'))).toBeVisible()
await element(
by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
).tap()
await element(by.id('sendReportBtn')).tap()
await expect(element(by.id('reportModal'))).not.toBeVisible()
})
it('Can like posts', async () => {
await element(by.id('postsFeed-flatlist')).swipe(
'down',
'slow',
1,
0.5,
0.5,
)
const posts = by.id('feedItem-by-bob.test')
await expect(
element(by.id('likeCount').withAncestor(posts)).atIndex(0),
).toHaveText('0')
await element(by.id('likeBtn').withAncestor(posts)).atIndex(0).tap()
await expect(
element(by.id('likeCount').withAncestor(posts)).atIndex(0),
).toHaveText('1')
await element(by.id('likeBtn').withAncestor(posts)).atIndex(0).tap()
await expect(
element(by.id('likeCount').withAncestor(posts)).atIndex(0),
).toHaveText('0')
})
it('Can repost posts', async () => {
const posts = by.id('feedItem-by-bob.test')
await expect(
element(by.id('repostCount').withAncestor(posts)).atIndex(0),
).toHaveText('0')
await element(by.id('repostBtn').withAncestor(posts)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect(
element(by.id('repostCount').withAncestor(posts)).atIndex(0),
).toHaveText('1')
await element(by.id('repostBtn').withAncestor(posts)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect(
element(by.id('repostCount').withAncestor(posts)).atIndex(0),
).toHaveText('0')
})
it('Can report posts', async () => {
const posts = by.id('feedItem-by-bob.test')
await element(by.id('postDropdownBtn').withAncestor(posts)).atIndex(0).tap()
await element(by.text('Report post')).tap()
await expect(element(by.id('reportModal'))).toBeVisible()
await element(
by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
).tap()
await element(by.id('sendReportBtn')).tap()
await expect(element(by.id('reportModal'))).not.toBeVisible()
})
})
+25
View File
@@ -0,0 +1,25 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, createServer} from '../util'
describe('Search screen', () => {
beforeAll(async () => {
await createServer('?users')
await openApp({
permissions: {notifications: 'YES', medialibrary: 'YES', photos: 'YES'},
})
})
it('Login', async () => {
await loginAsAlice()
})
it('Navigate to another user profile via autocomplete', async () => {
await element(by.id('bottomBarSearchBtn')).tap()
await element(by.id('searchTextInput')).typeText('bob')
await element(by.id('searchAutoCompleteResult-bob.test')).tap()
await expect(element(by.id('profileView'))).toBeVisible()
})
})
+35
View File
@@ -0,0 +1,35 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, createServer, sleep} from '../util'
describe('Self-labeling', () => {
beforeAll(async () => {
await createServer('?users')
await openApp({
permissions: {notifications: 'YES', medialibrary: 'YES', photos: 'YES'},
})
})
it('Login', async () => {
await loginAsAlice()
await element(by.id('homeScreenFeedTabs-Following')).tap()
})
it('Post an image with the porn label', async () => {
await element(by.id('composeFAB')).tap()
await element(by.id('composerTextInput')).typeText('Post with an image')
await element(by.id('openGalleryBtn')).tap()
await sleep(3e3)
await element(by.id('labelsBtn')).tap()
await element(by.id('pornLabelBtn')).tap()
await element(by.id('confirmBtn')).tap()
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
const posts = by.id('feedItem-by-alice.test')
await expect(
element(by.id('contentHider-embed').withAncestor(posts)).atIndex(0),
).toExist()
})
})
+33
View File
@@ -0,0 +1,33 @@
/* eslint-env detox/detox */
import {openApp, loginAsAlice, createServer} from '../util'
describe('Shell', () => {
beforeAll(async () => {
await createServer('?users')
await openApp({permissions: {notifications: 'YES'}})
})
it('Login', async () => {
await loginAsAlice()
await element(by.id('homeScreenFeedTabs-Following')).tap()
})
it('Can swipe the shelf open', async () => {
await element(by.id('homeScreen')).swipe('right', 'fast', 0.75)
await expect(element(by.id('drawer'))).toBeVisible()
await element(by.id('drawer')).swipe('left', 'fast', 0.75)
await expect(element(by.id('drawer'))).not.toBeVisible()
})
it('Can open the shelf by pressing the header avi', async () => {
await element(by.id('viewHeaderDrawerBtn')).tap()
await expect(element(by.id('drawer'))).toBeVisible()
})
it('Can navigate using the shelf', async () => {
await element(by.id('menuItemButton-Notifications')).tap()
await expect(element(by.id('drawer'))).not.toBeVisible()
await expect(element(by.id('notificationsScreen'))).toBeVisible()
})
})
+85
View File
@@ -0,0 +1,85 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, createServer} from '../util'
describe('Create account', () => {
let service: string
beforeAll(async () => {
service = await createServer('?phone')
await openApp({permissions: {notifications: 'YES'}})
})
it('I can create a new account with text verification', async () => {
await element(by.id('e2eOpenLoggedOutView')).tap()
await element(by.id('createAccountButton')).tap()
await device.takeScreenshot('1- opened create account screen')
await element(by.id('selectServiceButton')).tap()
await device.takeScreenshot('2- selected other server')
await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap()
await device.takeScreenshot('3- input test server URL')
await element(by.id('emailInput')).typeText('text-verification@test.com')
await element(by.id('passwordInput')).typeText('hunter2')
await device.takeScreenshot('4- entered account details')
await element(by.id('nextBtn')).tap()
await element(by.id('phoneInput')).typeText('8042221111')
await element(by.id('requestCodeBtn')).tap()
await device.takeScreenshot('5- requested code')
await element(by.id('codeInput')).typeText('000000')
await device.takeScreenshot('6- entered code')
await element(by.id('nextBtn')).tap()
await element(by.id('handleInput')).typeText('text-verification-test')
await device.takeScreenshot('7- entered handle')
await element(by.id('nextBtn')).tap()
await expect(element(by.id('welcomeOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFeedsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFollowsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('homeScreen'))).toBeVisible()
})
it('failed text verification correctly goes back to the code input screen', async () => {
await element(by.id('e2eSignOut')).tap()
await element(by.id('e2eOpenLoggedOutView')).tap()
await element(by.id('createAccountButton')).tap()
await device.takeScreenshot('1- opened create account screen')
await element(by.id('selectServiceButton')).tap()
await device.takeScreenshot('2- selected other server')
await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap()
await device.takeScreenshot('3- input test server URL')
await element(by.id('emailInput')).typeText('text-verification2@test.com')
await element(by.id('passwordInput')).typeText('hunter2')
await device.takeScreenshot('4- entered account details')
await element(by.id('nextBtn')).tap()
await element(by.id('phoneInput')).typeText('8042221111')
await element(by.id('requestCodeBtn')).tap()
await device.takeScreenshot('5- requested code')
await element(by.id('codeInput')).typeText('111111')
await device.takeScreenshot('6- entered code')
await element(by.id('nextBtn')).tap()
await element(by.id('handleInput')).typeText('text-verification-test2')
await device.takeScreenshot('7- entered handle')
await element(by.id('nextBtn')).tap()
await expect(element(by.id('codeInput'))).toBeVisible()
await device.takeScreenshot('8- got error')
})
})
+103
View File
@@ -0,0 +1,103 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, loginAsBob, createServer} from '../util'
describe('Thread muting', () => {
beforeAll(async () => {
await createServer('?users&follows')
await openApp({permissions: {notifications: 'YES'}})
})
it('Login, create a thread, and log out', async () => {
await loginAsAlice()
await element(by.id('homeScreenFeedTabs-Following')).tap()
await element(by.id('composeFAB')).tap()
await element(by.id('composerTextInput')).typeText('Test thread')
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
})
it('Login, reply to the thread, and log out', async () => {
await loginAsBob()
await element(by.id('homeScreenFeedTabs-Following')).tap()
const alicePosts = by.id('feedItem-by-alice.test')
await element(by.id('replyBtn').withAncestor(alicePosts)).atIndex(0).tap()
await element(by.id('composerTextInput')).typeText('Reply 1')
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
})
it('Login, confirm notification exists, mute thread, and log out', async () => {
await loginAsAlice()
await element(by.id('bottomBarNotificationsBtn')).tap()
const bobNotifs = by.id('feedItem-by-bob.test')
await expect(
element(by.id('postText').withAncestor(bobNotifs)).atIndex(0),
).toHaveText('Reply 1')
await element(by.id('postDropdownBtn').withAncestor(bobNotifs))
.atIndex(0)
.tap()
await element(by.text('Mute thread')).tap()
// have to wait for the toast to clear
await waitFor(element(by.id('viewHeaderDrawerBtn')))
.toBeVisible()
.withTimeout(5000)
})
it('Login, reply to the thread twice, and log out', async () => {
await loginAsBob()
await element(by.id('bottomBarProfileBtn')).tap()
await element(by.id('profilePager-selector-1')).tap()
const bobPosts = by.id('feedItem-by-bob.test')
await element(by.id('replyBtn').withAncestor(bobPosts)).atIndex(0).tap()
await element(by.id('composerTextInput')).typeText('Reply 2')
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
const alicePosts = by.id('feedItem-by-alice.test')
await element(by.id('replyBtn').withAncestor(alicePosts)).atIndex(0).tap()
await element(by.id('composerTextInput')).typeText('Reply 3')
await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible()
await element(by.id('bottomBarHomeBtn')).tap()
})
it('Login, confirm notifications dont exist, unmute the thread, confirm notifications exist', async () => {
await loginAsAlice()
await element(by.id('bottomBarNotificationsBtn')).tap()
const bobNotifs = by.id('feedItem-by-bob.test')
await expect(
element(by.id('postText').withAncestor(bobNotifs)).atIndex(0),
).not.toExist()
await element(by.id('bottomBarHomeBtn')).tap()
const alicePosts = by.id('feedItem-by-alice.test')
await element(by.id('postDropdownBtn').withAncestor(alicePosts))
.atIndex(0)
.tap()
await element(by.text('Unmute thread')).tap()
// TODO
// the swipe down to trigger PTR isnt working and I dont want to block on this
// -prf
// await element(by.id('bottomBarNotificationsBtn')).tap()
// await element(by.id('notifsFeed')).swipe('down', 'fast')
// await waitFor(element(by.id('postText').withAncestor(bobNotifs)))
// .toBeVisible()
// .withTimeout(5000)
// await expect(
// element(by.id('postText').withAncestor(bobNotifs)).atIndex(0),
// ).toHaveText('Reply 2')
// await expect(
// element(by.id('postText').withAncestor(bobNotifs)).atIndex(1),
// ).toHaveText('Reply 3')
// await expect(
// element(by.id('postText').withAncestor(bobNotifs)).atIndex(2),
// ).toHaveText('Reply 1')
})
})
+128
View File
@@ -0,0 +1,128 @@
/* eslint-env detox/detox */
import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox'
import {openApp, loginAsAlice, createServer} from '../util'
describe('Thread screen', () => {
beforeAll(async () => {
await createServer('?users&follows&thread')
await openApp({permissions: {notifications: 'YES'}})
})
it('Login & navigate to thread', async () => {
await loginAsAlice()
await element(by.id('homeScreenFeedTabs-Following')).tap()
await element(by.id('feedItem-by-bob.test')).atIndex(0).tap()
await expect(
element(
by
.id('postThreadItem-by-bob.test')
.withDescendant(by.text('Thread root')),
),
).toBeVisible()
await expect(
element(
by
.id('postThreadItem-by-carla.test')
.withDescendant(by.text('Thread reply')),
),
).toBeVisible()
})
it('Can like the root post', async () => {
const post = by.id('postThreadItem-by-bob.test')
await expect(
element(by.id('likeCount-expanded').withAncestor(post)).atIndex(0),
).not.toExist()
await element(by.id('likeBtn').withAncestor(post)).atIndex(0).tap()
await expect(
element(by.id('likeCount-expanded').withAncestor(post)).atIndex(0),
).toHaveText('1 like')
await element(by.id('likeBtn').withAncestor(post)).atIndex(0).tap()
await expect(
element(by.id('likeCount-expanded').withAncestor(post)).atIndex(0),
).not.toExist()
})
it('Can like a reply post', async () => {
const post = by.id('postThreadItem-by-carla.test')
await expect(
element(by.id('likeCount').withAncestor(post)).atIndex(0),
).toHaveText('0')
await element(by.id('likeBtn').withAncestor(post)).atIndex(0).tap()
await expect(
element(by.id('likeCount').withAncestor(post)).atIndex(0),
).toHaveText('1')
await element(by.id('likeBtn').withAncestor(post)).atIndex(0).tap()
await expect(
element(by.id('likeCount').withAncestor(post)).atIndex(0),
).toHaveText('0')
})
it('Can repost the root post', async () => {
const post = by.id('postThreadItem-by-bob.test')
await expect(
element(by.id('repostCount-expanded').withAncestor(post)).atIndex(0),
).not.toExist()
await element(by.id('repostBtn').withAncestor(post)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect(
element(by.id('repostCount-expanded').withAncestor(post)).atIndex(0),
).toHaveText('1 repost')
await element(by.id('repostBtn').withAncestor(post)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect(
element(by.id('repostCount-expanded').withAncestor(post)).atIndex(0),
).not.toExist()
})
it('Can repost a reply post', async () => {
const post = by.id('postThreadItem-by-carla.test')
await expect(
element(by.id('repostCount').withAncestor(post)).atIndex(0),
).toHaveText('0')
await element(by.id('repostBtn').withAncestor(post)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect(
element(by.id('repostCount').withAncestor(post)).atIndex(0),
).toHaveText('1')
await element(by.id('repostBtn').withAncestor(post)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect(
element(by.id('repostCount').withAncestor(post)).atIndex(0),
).toHaveText('0')
})
it('Can report the root post', async () => {
const post = by.id('postThreadItem-by-bob.test')
await element(by.id('postDropdownBtn').withAncestor(post)).atIndex(0).tap()
await element(by.text('Report post')).tap()
await expect(element(by.id('reportModal'))).toBeVisible()
await element(
by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
).tap()
await element(by.id('sendReportBtn')).tap()
await expect(element(by.id('reportModal'))).not.toBeVisible()
})
it('Can report a reply post', async () => {
const post = by.id('postThreadItem-by-carla.test')
await element(by.id('postDropdownBtn').withAncestor(post)).atIndex(0).tap()
await element(by.text('Report post')).tap()
await expect(element(by.id('reportModal'))).toBeVisible()
await element(
by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
).tap()
await element(by.id('sendReportBtn')).tap()
await expect(element(by.id('reportModal'))).not.toBeVisible()
})
})
+140
View File
@@ -0,0 +1,140 @@
import {resolveConfig} from 'detox/internals'
import {execSync} from 'child_process'
import http from 'http'
const platform = device.getPlatform()
export async function openApp(opts: any) {
opts = opts || {}
const config = await resolveConfig()
if (device.getPlatform() === 'ios') {
// disable password autofill
execSync(
`plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/${device.id}/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/ConfigurationProfiles/UserSettings.plist`,
)
execSync(
`plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/${device.id}/data/Library/UserConfigurationProfiles/EffectiveUserSettings.plist`,
)
execSync(
`plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/${device.id}/data/Library/UserConfigurationProfiles/PublicInfo/PublicEffectiveUserSettings.plist`,
)
}
if (config.configurationName.split('.').includes('debug')) {
return await openAppForDebugBuild(platform, opts)
} else {
return await device.launchApp({
...opts,
newInstance: true,
})
}
}
export async function isVisible(id: string) {
try {
await expect(element(by.id(id))).toBeVisible()
return true
} catch (e) {
return false
}
}
export async function login(
service: string,
username: string,
password: string,
{takeScreenshots} = {takeScreenshots: false},
) {
await element(by.id('signInButton')).tap()
if (takeScreenshots) {
await device.takeScreenshot('1- opened sign-in screen')
}
if (await isVisible('chooseAccountForm')) {
await element(by.id('chooseNewAccountBtn')).tap()
}
await element(by.id('loginSelectServiceButton')).tap()
if (takeScreenshots) {
await device.takeScreenshot('2- opened service selector')
}
await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap()
if (takeScreenshots) {
await device.takeScreenshot('3- input custom service')
}
await element(by.id('loginUsernameInput')).typeText(username)
await element(by.id('loginPasswordInput')).typeText(password)
if (takeScreenshots) {
await device.takeScreenshot('4- entered username and password')
}
await element(by.id('loginNextButton')).tap()
}
export async function loginAsAlice() {
await element(by.id('e2eSignInAlice')).tap()
}
export async function loginAsBob() {
await element(by.id('e2eSignInBob')).tap()
}
async function openAppForDebugBuild(platform: string, opts: any) {
const deepLinkUrl = // Local testing with packager
/*process.env.EXPO_USE_UPDATES
? // Testing latest published EAS update for the test_debug channel
getDeepLinkUrl(getLatestUpdateUrl())
: */ getDeepLinkUrl(getDevLauncherPackagerUrl(platform))
if (platform === 'ios') {
await device.launchApp({
...opts,
newInstance: true,
})
sleep(3000)
await device.openURL({
url: deepLinkUrl,
})
} else {
await device.launchApp({
...opts,
newInstance: true,
url: deepLinkUrl,
})
}
await sleep(3000)
}
export async function createServer(path = ''): Promise<string> {
return new Promise(function (resolve, reject) {
var req = http.request(
{
method: 'POST',
host: 'localhost',
port: 1986,
path: `/${path}`,
},
function (res) {
const body: Buffer[] = []
res.on('data', chunk => body.push(chunk))
res.on('end', function () {
try {
resolve(Buffer.concat(body).toString())
} catch (e) {
reject(e)
}
})
},
)
req.on('error', reject)
req.end()
})
}
const getDeepLinkUrl = (url: string) =>
`expo+bluesky://expo-development-client/?url=${encodeURIComponent(url)}`
const getDevLauncherPackagerUrl = (platform: string) =>
`http://localhost:8081/index.bundle?platform=${platform}&dev=true&minify=false&disableOnboarding=1`
export const sleep = (t: number) => new Promise(res => setTimeout(res, t))
+60
View File
@@ -0,0 +1,60 @@
import React, {ReactNode} from 'react'
import {View, ScrollView, Modal, FlatList, TextInput} from 'react-native'
const BottomSheetModalContext = React.createContext(null)
const BottomSheetModalProvider = (props: any) => {
return <BottomSheetModalContext.Provider {...props} value={{}} />
}
class BottomSheet extends React.Component<{
onClose?: () => void
children?: ReactNode
}> {
snapToIndex() {}
snapToPosition() {}
expand() {}
collapse() {}
close() {
this.props.onClose?.()
}
forceClose() {}
render() {
return <View>{this.props.children}</View>
}
}
const BottomSheetModal = (props: any) => <Modal {...props} />
const BottomSheetBackdrop = (props: any) => <View {...props} />
const BottomSheetHandle = (props: any) => <View {...props} />
const BottomSheetFooter = (props: any) => <View {...props} />
const BottomSheetScrollView = (props: any) => <ScrollView {...props} />
const BottomSheetFlatList = (props: any) => <FlatList {...props} />
const BottomSheetTextInput = (props: any) => <TextInput {...props} />
const useBottomSheet = jest.fn()
const useBottomSheetModal = jest.fn()
const useBottomSheetSpringConfigs = jest.fn()
const useBottomSheetTimingConfigs = jest.fn()
const useBottomSheetInternal = jest.fn()
const useBottomSheetDynamicSnapPoints = jest.fn()
export {useBottomSheet}
export {useBottomSheetModal}
export {useBottomSheetSpringConfigs}
export {useBottomSheetTimingConfigs}
export {useBottomSheetInternal}
export {useBottomSheetDynamicSnapPoints}
export {
BottomSheetModalProvider,
BottomSheetBackdrop,
BottomSheetHandle,
BottomSheetModal,
BottomSheetFooter,
BottomSheetScrollView,
BottomSheetFlatList,
BottomSheetTextInput,
}
export default BottomSheet
+1
View File
@@ -0,0 +1 @@
export const Slider = {}
+6
View File
@@ -0,0 +1,6 @@
export default {
requestPermission: jest.fn(),
onForegroundEvent: jest.fn(),
setBadgeCount: jest.fn(),
displayNotification: jest.fn(),
}
@@ -0,0 +1,9 @@
export const CameraRoll = {
getPhotos: jest.fn().mockResolvedValue({
edges: [
{node: {image: {uri: 'path/to/image1.jpg'}}},
{node: {image: {uri: 'path/to/image2.jpg'}}},
{node: {image: {uri: 'path/to/image3.jpg'}}},
],
}),
}
+1
View File
@@ -0,0 +1 @@
export const getLocales = jest.fn().mockResolvedValue([])
@@ -0,0 +1,4 @@
export default {
configure: jest.fn().mockResolvedValue(0),
finish: jest.fn(),
}
+1
View File
@@ -0,0 +1 @@
export default {}
+9
View File
@@ -0,0 +1,9 @@
export const openPicker = jest
.fn()
.mockImplementation(() => Promise.resolve({uri: ''}))
export const openCamera = jest
.fn()
.mockImplementation(() => Promise.resolve({uri: ''}))
export const openCropper = jest
.fn()
.mockImplementation(() => Promise.resolve({uri: ''}))
+67
View File
@@ -0,0 +1,67 @@
// @flow
// https://github.com/FormidableLabs/react-native-svg-mock
import React from 'react'
const createComponent = function (name) {
return class extends React.Component {
// overwrite the displayName, since this is a class created dynamically
static displayName = name
render() {
return React.createElement(name, this.props, this.props.children)
}
}
}
// Mock all react-native-svg exports
// from https://github.com/magicismight/react-native-svg/blob/master/index.js
const Svg = createComponent('Svg')
const Circle = createComponent('Circle')
const Ellipse = createComponent('Ellipse')
const G = createComponent('G')
const Text = createComponent('Text')
const TextPath = createComponent('TextPath')
const TSpan = createComponent('TSpan')
const Path = createComponent('Path')
const Polygon = createComponent('Polygon')
const Polyline = createComponent('Polyline')
const Line = createComponent('Line')
const Rect = createComponent('Rect')
const Use = createComponent('Use')
const Image = createComponent('Image')
const Symbol = createComponent('Symbol')
const Defs = createComponent('Defs')
const LinearGradient = createComponent('LinearGradient')
const RadialGradient = createComponent('RadialGradient')
const Stop = createComponent('Stop')
const ClipPath = createComponent('ClipPath')
const Pattern = createComponent('Pattern')
const Mask = createComponent('Mask')
export {
Svg,
Circle,
Ellipse,
G,
Text,
TextPath,
TSpan,
Path,
Polygon,
Polyline,
Line,
Rect,
Use,
Image,
Symbol,
Defs,
LinearGradient,
RadialGradient,
Stop,
ClipPath,
Pattern,
Mask,
}
export default Svg
+10
View File
@@ -0,0 +1,10 @@
jest.mock('rn-fetch-blob', () => {
return {
__esModule: true,
default: {
fs: {
unlink: jest.fn(),
},
},
}
})
+3
View File
@@ -0,0 +1,3 @@
jest.mock('sentry-expo', () => ({
init: () => jest.fn(),
}))
+2
View File
@@ -0,0 +1,2 @@
export const DropdownMenu = jest.fn().mockImplementation(() => {})
export const create = jest.fn().mockImplementation(() => {})
-16
View File
@@ -1,16 +0,0 @@
/**
* @format
*/
import 'react-native'
import React from 'react'
import App from '../src/App'
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer'
it('renders correctly', () => {
renderer.act(() => {
renderer.create(<App />)
})
})
+47
View File
@@ -0,0 +1,47 @@
export const exampleComHtml = `<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta name="description" content="An example website">
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
div {
width: 600px;
margin: 5em auto;
padding: 2em;
background-color: #fdfdff;
border-radius: 0.5em;
box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
}
a:link, a:visited {
color: #38488f;
text-decoration: none;
}
@media (max-width: 700px) {
div {
margin: 0 auto;
width: auto;
}
}
</style>
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.</p>
<p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>`
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+47
View File
@@ -0,0 +1,47 @@
import {bundleAsync} from '../../../src/lib/async/bundle'
describe('bundle', () => {
it('bundles multiple simultaneous calls into one execution', async () => {
let calls = 0
const fn = bundleAsync(async () => {
calls++
await new Promise(r => setTimeout(r, 1))
return 'hello'
})
const [res1, res2, res3] = await Promise.all([fn(), fn(), fn()])
expect(calls).toEqual(1)
expect(res1).toEqual('hello')
expect(res2).toEqual('hello')
expect(res3).toEqual('hello')
})
it('does not bundle non-simultaneous calls', async () => {
let calls = 0
const fn = bundleAsync(async () => {
calls++
await new Promise(r => setTimeout(r, 1))
return 'hello'
})
const res1 = await fn()
const res2 = await fn()
const res3 = await fn()
expect(calls).toEqual(3)
expect(res1).toEqual('hello')
expect(res2).toEqual('hello')
expect(res3).toEqual('hello')
})
it('is not affected by rejections', async () => {
let calls = 0
const fn = bundleAsync(async () => {
calls++
await new Promise(r => setTimeout(r, 1))
throw new Error()
})
const res1 = await fn().catch(() => 'reject')
const res2 = await fn().catch(() => 'reject')
const res3 = await fn().catch(() => 'reject')
expect(calls).toEqual(3)
expect(res1).toEqual('reject')
expect(res2).toEqual('reject')
expect(res3).toEqual('reject')
})
})
+19
View File
@@ -0,0 +1,19 @@
import {isNetworkError} from '../../src/lib/strings/errors'
describe('isNetworkError', () => {
const inputs = [
'TypeError: Network request failed',
'Uncaught TypeError: Cannot read property x of undefined',
'Uncaught RangeError',
'Error: Aborted',
]
const outputs = [true, false, false, true]
it('correctly distinguishes network errors', () => {
for (let i = 0; i < inputs.length; i++) {
const input = inputs[i]
const result = isNetworkError(input)
expect(result).toEqual(outputs[i])
}
})
})
+134
View File
@@ -0,0 +1,134 @@
import {extractHtmlMeta} from '../../src/lib/link-meta/html'
import {exampleComHtml} from './__mocks__/exampleComHtml'
import {youtubeHTML} from './__mocks__/youtubeHtml'
import {tiktokHtml} from './__mocks__/tiktokHtml'
import {youtubeChannelHtml} from './__mocks__/youtubeChannelHtml'
describe('extractHtmlMeta', () => {
const cases = [
['', {}],
['nothing', {}],
['<title>title</title>', {title: 'title'}],
['<title> aSd!@#AC </title>', {title: 'aSd!@#AC'}],
['<title>\n title\n </title>', {title: 'title'}],
['<meta name="title" content="meta title">', {title: 'meta title'}],
[
'<meta name="description" content="meta description">',
{description: 'meta description'},
],
['<meta property="og:title" content="og title">', {title: 'og title'}],
[
'<meta property="og:description" content="og description">',
{description: 'og description'},
],
[
'<meta property="og:image" content="https://ogimage.com/foo.png">',
{image: 'https://ogimage.com/foo.png'},
],
[
'<meta property="twitter:title" content="twitter title">',
{title: 'twitter title'},
],
[
'<meta property="twitter:description" content="twitter description">',
{description: 'twitter description'},
],
[
'<meta property="twitter:image" content="https://twitterimage.com/foo.png">',
{image: 'https://twitterimage.com/foo.png'},
],
['<meta\n name="title"\n content="meta title"\n>', {title: 'meta title'}],
]
it.each(cases)(
'given the html tag %p, returns %p',
// @ts-ignore not worth fixing -prf
(input, expectedResult) => {
const output = extractHtmlMeta({html: input as string, hostname: ''})
expect(output).toEqual(expectedResult)
},
)
it('extracts title and description from a generic HTML page', () => {
const input = exampleComHtml
const expectedOutput = {
title: 'Example Domain',
description: 'An example website',
}
const output = extractHtmlMeta({html: input, hostname: 'example.com'})
expect(output).toEqual(expectedOutput)
})
it('extracts title and description from a Tiktok HTML page', () => {
const input = tiktokHtml
const expectedOutput = {
title:
'Coca-Cola and Mentos! Super Reaction! #cocacola #mentos #reaction #bal... | TikTok',
description:
'5.5M Likes, 20.8K Comments. TikTok video from Power Vision Tests (@_powervision_): &quot;Coca-Cola and Mentos! Super Reaction! #cocacola #mentos #reaction #balloon #sciencemoment #scienceexperiment #experiment #test #amazing #pvexp&quot;. оригинальный звук - Power Vision Tests.',
}
const output = extractHtmlMeta({html: input, hostname: 'tiktok.com'})
expect(output).toEqual(expectedOutput)
})
it('extracts title and description from a generic youtube page', () => {
const input = youtubeHTML
const expectedOutput = {
title: 'HD Video (1080p) with Relaxing Music of Native American Shamans',
description:
'Stunning HD Video ( 1080p ) of Patagonian Nature with Relaxing Native American Shamanic Music. HD footage used from ',
image: 'https://i.ytimg.com/vi/x6UITRjhijI/sddefault.jpg',
}
const output = extractHtmlMeta({html: input, hostname: 'youtube.com'})
expect(output).toEqual(expectedOutput)
})
it('extracts avatar from a youtube channel', () => {
const input = youtubeChannelHtml
const expectedOutput = {
title: 'penguinz0',
description:
'Clips channel: https://www.youtube.com/channel/UC4EQHfzIbkL_Skit_iKt1aA\n\nTwitter: https://twitter.com/MoistCr1TiKaL\n\nInstagram: https://www.instagram.com/bigmoistcr1tikal/?hl=en\n\nTwitch: https://www.twitch.tv/moistcr1tikal\n\nSnapchat: Hugecharles\n\nTik Tok: Hugecharles\n\nI don&#39;t have any other public accounts.',
image:
'https://yt3.googleusercontent.com/ytc/AL5GRJWOhJOuUC6C2b7gP-5D2q6ypXbcOOckyAE1En4RUQ=s176-c-k-c0x00ffffff-no-rj',
}
const output = extractHtmlMeta({html: input, hostname: 'youtube.com'})
expect(output).toEqual(expectedOutput)
})
it('extracts username from the url a twitter profile page', () => {
const expectedOutput = {
title: '@bluesky on Twitter',
}
const output = extractHtmlMeta({
html: '',
hostname: 'twitter.com',
pathname: '/bluesky',
})
expect(output).toEqual(expectedOutput)
})
it('extracts username from the url a tweet', () => {
const expectedOutput = {
title: 'Tweet by @bluesky',
}
const output = extractHtmlMeta({
html: '',
hostname: 'twitter.com',
pathname: '/bluesky/status/1582437529969917953',
})
expect(output).toEqual(expectedOutput)
})
it("does not extract username from the url when it's not a tweet or profile page", () => {
const expectedOutput = {
title: 'Twitter',
}
const output = extractHtmlMeta({
html: '',
hostname: 'twitter.com',
pathname: '/i/articles/follows/-1675653703?time_window=24',
})
expect(output).toEqual(expectedOutput)
})
})
+121
View File
@@ -0,0 +1,121 @@
import {
downloadAndResize,
DownloadAndResizeOpts,
} from '../../src/lib/media/manip'
import ImageResizer from '@bam.tech/react-native-image-resizer'
import RNFetchBlob from 'rn-fetch-blob'
describe('downloadAndResize', () => {
const errorSpy = jest.spyOn(global.console, 'error')
const mockResizedImage = {
path: jest.fn().mockReturnValue('file://resized-image.jpg'),
size: 100,
width: 50,
height: 50,
mime: 'image/jpeg',
}
beforeEach(() => {
const mockedCreateResizedImage =
ImageResizer.createResizedImage as jest.Mock
mockedCreateResizedImage.mockResolvedValue(mockResizedImage)
})
afterEach(() => {
jest.clearAllMocks()
})
it('should return resized image for valid URI and options', async () => {
const mockedFetch = RNFetchBlob.fetch as jest.Mock
mockedFetch.mockResolvedValueOnce({
path: jest.fn().mockReturnValue('file://downloaded-image.jpg'),
flush: jest.fn(),
})
const opts: DownloadAndResizeOpts = {
uri: 'https://example.com/image.jpg',
width: 100,
height: 100,
maxSize: 500000,
mode: 'cover',
timeout: 10000,
}
const result = await downloadAndResize(opts)
expect(result).toEqual(mockResizedImage)
expect(RNFetchBlob.config).toHaveBeenCalledWith({
fileCache: true,
appendExt: 'jpeg',
})
expect(RNFetchBlob.fetch).toHaveBeenCalledWith(
'GET',
'https://example.com/image.jpg',
)
expect(ImageResizer.createResizedImage).toHaveBeenCalledWith(
'file://downloaded-image.jpg',
100,
100,
'JPEG',
100,
undefined,
undefined,
undefined,
{mode: 'cover'},
)
})
it('should return undefined for invalid URI', async () => {
const opts: DownloadAndResizeOpts = {
uri: 'invalid-uri',
width: 100,
height: 100,
maxSize: 500000,
mode: 'cover',
timeout: 10000,
}
const result = await downloadAndResize(opts)
expect(errorSpy).toHaveBeenCalled()
expect(result).toBeUndefined()
})
it('should return undefined for unsupported file type', async () => {
const mockedFetch = RNFetchBlob.fetch as jest.Mock
mockedFetch.mockResolvedValueOnce({
path: jest.fn().mockReturnValue('file://downloaded-image'),
flush: jest.fn(),
})
const opts: DownloadAndResizeOpts = {
uri: 'https://example.com/image',
width: 100,
height: 100,
maxSize: 500000,
mode: 'cover',
timeout: 10000,
}
const result = await downloadAndResize(opts)
expect(result).toEqual(mockResizedImage)
expect(RNFetchBlob.config).toHaveBeenCalledWith({
fileCache: true,
appendExt: 'jpeg',
})
expect(RNFetchBlob.fetch).toHaveBeenCalledWith(
'GET',
'https://example.com/image',
)
expect(ImageResizer.createResizedImage).toHaveBeenCalledWith(
'file://downloaded-image',
100,
100,
'JPEG',
100,
undefined,
undefined,
undefined,
{mode: 'cover'},
)
})
})
+13
View File
@@ -0,0 +1,13 @@
import {LikelyType, getLikelyType} from '../../src/lib/link-meta/link-meta'
describe('getLikelyType', () => {
it('correctly handles non-parsed url', async () => {
const output = await getLikelyType('https://example.com')
expect(output).toEqual(LikelyType.HTML)
})
it('handles non-string urls without crashing', async () => {
const output = await getLikelyType('123')
expect(output).toEqual(LikelyType.Other)
})
})
+24
View File
@@ -0,0 +1,24 @@
import {clamp} from '../../src/lib/numbers'
describe('clamp', () => {
const inputs: [number, number, number][] = [
[100, 0, 200],
[100, 0, 100],
[0, 0, 100],
[100, 0, -1],
[4, 1, 1],
[100, -100, 0],
[400, 100, -100],
[70, -1, 1],
[Infinity, Infinity, Infinity],
]
const outputs = [100, 100, 0, -1, 1, 0, -100, 1, Infinity]
it('correctly clamps any given number and range', () => {
for (let i = 0; i < inputs.length; i++) {
const input = inputs[i]
const result = clamp(...input)
expect(result).toEqual(outputs[i])
}
})
})
+758
View File
@@ -0,0 +1,758 @@
import {RichText} from '@atproto/api'
import {
makeRecordUri,
toNiceDomain,
toShortUrl,
toShareUrl,
} from '../../src/lib/strings/url-helpers'
import {pluralize, enforceLen} from '../../src/lib/strings/helpers'
import {ago} from '../../src/lib/strings/time'
import {detectLinkables} from '../../src/lib/strings/rich-text-detection'
import {shortenLinks} from '../../src/lib/strings/rich-text-manip'
import {makeValidHandle, createFullHandle} from '../../src/lib/strings/handles'
import {cleanError} from '../../src/lib/strings/errors'
import {parseEmbedPlayerFromUrl} from 'lib/strings/embed-player'
describe('detectLinkables', () => {
const inputs = [
'no linkable',
'@start middle end',
'start @middle end',
'start middle @end',
'@start @middle @end',
'@full123.test-of-chars',
'not@right',
'@bad!@#$chars',
'@newline1\n@newline2',
'parenthetical (@handle)',
'start https://middle.com end',
'start https://middle.com/foo/bar end',
'start https://middle.com/foo/bar?baz=bux end',
'start https://middle.com/foo/bar?baz=bux#hash end',
'https://start.com/foo/bar?baz=bux#hash middle end',
'start middle https://end.com/foo/bar?baz=bux#hash',
'https://newline1.com\nhttps://newline2.com',
'start middle.com end',
'start middle.com/foo/bar end',
'start middle.com/foo/bar?baz=bux end',
'start middle.com/foo/bar?baz=bux#hash end',
'start.com/foo/bar?baz=bux#hash middle end',
'start middle end.com/foo/bar?baz=bux#hash',
'newline1.com\nnewline2.com',
'not.. a..url ..here',
'e.g.',
'e.g. real.com fake.notreal',
'something-cool.jpg',
'website.com.jpg',
'e.g./foo',
'website.com.jpg/foo',
'Classic article https://socket3.wordpress.com/2018/02/03/designing-windows-95s-user-interface/',
'Classic article https://socket3.wordpress.com/2018/02/03/designing-windows-95s-user-interface/ ',
'https://foo.com https://bar.com/whatever https://baz.com',
'punctuation https://foo.com, https://bar.com/whatever; https://baz.com.',
'parenthetical (https://foo.com)',
'except for https://foo.com/thing_(cool)',
]
const outputs = [
['no linkable'],
[{link: '@start'}, ' middle end'],
['start ', {link: '@middle'}, ' end'],
['start middle ', {link: '@end'}],
[{link: '@start'}, ' ', {link: '@middle'}, ' ', {link: '@end'}],
[{link: '@full123.test-of-chars'}],
['not@right'],
[{link: '@bad'}, '!@#$chars'],
[{link: '@newline1'}, '\n', {link: '@newline2'}],
['parenthetical (', {link: '@handle'}, ')'],
['start ', {link: 'https://middle.com'}, ' end'],
['start ', {link: 'https://middle.com/foo/bar'}, ' end'],
['start ', {link: 'https://middle.com/foo/bar?baz=bux'}, ' end'],
['start ', {link: 'https://middle.com/foo/bar?baz=bux#hash'}, ' end'],
[{link: 'https://start.com/foo/bar?baz=bux#hash'}, ' middle end'],
['start middle ', {link: 'https://end.com/foo/bar?baz=bux#hash'}],
[{link: 'https://newline1.com'}, '\n', {link: 'https://newline2.com'}],
['start ', {link: 'middle.com'}, ' end'],
['start ', {link: 'middle.com/foo/bar'}, ' end'],
['start ', {link: 'middle.com/foo/bar?baz=bux'}, ' end'],
['start ', {link: 'middle.com/foo/bar?baz=bux#hash'}, ' end'],
[{link: 'start.com/foo/bar?baz=bux#hash'}, ' middle end'],
['start middle ', {link: 'end.com/foo/bar?baz=bux#hash'}],
[{link: 'newline1.com'}, '\n', {link: 'newline2.com'}],
['not.. a..url ..here'],
['e.g.'],
['e.g. ', {link: 'real.com'}, ' fake.notreal'],
['something-cool.jpg'],
['website.com.jpg'],
['e.g./foo'],
['website.com.jpg/foo'],
[
'Classic article ',
{
link: 'https://socket3.wordpress.com/2018/02/03/designing-windows-95s-user-interface/',
},
],
[
'Classic article ',
{
link: 'https://socket3.wordpress.com/2018/02/03/designing-windows-95s-user-interface/',
},
' ',
],
[
{link: 'https://foo.com'},
' ',
{link: 'https://bar.com/whatever'},
' ',
{link: 'https://baz.com'},
],
[
'punctuation ',
{link: 'https://foo.com'},
', ',
{link: 'https://bar.com/whatever'},
'; ',
{link: 'https://baz.com'},
'.',
],
['parenthetical (', {link: 'https://foo.com'}, ')'],
['except for ', {link: 'https://foo.com/thing_(cool)'}],
]
it('correctly handles a set of text inputs', () => {
for (let i = 0; i < inputs.length; i++) {
const input = inputs[i]
const output = detectLinkables(input)
expect(output).toEqual(outputs[i])
}
})
})
describe('pluralize', () => {
const inputs: [number, string, string?][] = [
[1, 'follower'],
[1, 'member'],
[100, 'post'],
[1000, 'repost'],
[10000, 'upvote'],
[100000, 'other'],
[2, 'man', 'men'],
]
const outputs = [
'follower',
'member',
'posts',
'reposts',
'upvotes',
'others',
'men',
]
it('correctly pluralizes a set of words', () => {
for (let i = 0; i < inputs.length; i++) {
const input = inputs[i]
const output = pluralize(...input)
expect(output).toEqual(outputs[i])
}
})
})
describe('makeRecordUri', () => {
const inputs: [string, string, string][] = [
['alice.test', 'app.bsky.feed.post', '3jk7x4irgv52r'],
]
const outputs = ['at://alice.test/app.bsky.feed.post/3jk7x4irgv52r']
it('correctly builds a record URI', () => {
for (let i = 0; i < inputs.length; i++) {
const input = inputs[i]
const result = makeRecordUri(...input)
expect(result).toEqual(outputs[i])
}
})
})
describe('ago', () => {
const inputs = [
1671461038,
'04 Dec 1995 00:12:00 GMT',
new Date(),
new Date().setSeconds(new Date().getSeconds() - 10),
new Date().setMinutes(new Date().getMinutes() - 10),
new Date().setHours(new Date().getHours() - 1),
new Date().setDate(new Date().getDate() - 1),
new Date().setMonth(new Date().getMonth() - 1),
]
const outputs = [
new Date(1671461038).toLocaleDateString(),
new Date('04 Dec 1995 00:12:00 GMT').toLocaleDateString(),
'now',
'10s',
'10m',
'1h',
'1d',
'1mo',
]
it('correctly calculates how much time passed, in a string', () => {
for (let i = 0; i < inputs.length; i++) {
const result = ago(inputs[i])
expect(result).toEqual(outputs[i])
}
})
})
describe('makeValidHandle', () => {
const inputs = [
'test-handle-123',
'test!"#$%&/()=?_',
'this-handle-should-be-too-big',
]
const outputs = ['test-handle-123', 'test', 'this-handle-should-b']
it('correctly parses and corrects handles', () => {
for (let i = 0; i < inputs.length; i++) {
const result = makeValidHandle(inputs[i])
expect(result).toEqual(outputs[i])
}
})
})
describe('createFullHandle', () => {
const inputs: [string, string][] = [
['test-handle-123', 'test'],
['.test.handle', 'test.test.'],
['test.handle.', '.test.test'],
]
const outputs = [
'test-handle-123.test',
'.test.handle.test.test.',
'test.handle.test.test',
]
it('correctly parses and corrects handles', () => {
for (let i = 0; i < inputs.length; i++) {
const input = inputs[i]
const result = createFullHandle(...input)
expect(result).toEqual(outputs[i])
}
})
})
describe('enforceLen', () => {
const inputs: [string, number][] = [
['Hello World!', 5],
['Hello World!', 20],
['', 5],
]
const outputs = ['Hello', 'Hello World!', '']
it('correctly enforces defined length on a given string', () => {
for (let i = 0; i < inputs.length; i++) {
const input = inputs[i]
const result = enforceLen(...input)
expect(result).toEqual(outputs[i])
}
})
})
describe('cleanError', () => {
const inputs = [
'TypeError: Network request failed',
'Error: Aborted',
'Error: TypeError "x" is not a function',
'Error: SyntaxError unexpected token "export"',
'Some other error',
]
const outputs = [
'Unable to connect. Please check your internet connection and try again.',
'Unable to connect. Please check your internet connection and try again.',
'TypeError "x" is not a function',
'SyntaxError unexpected token "export"',
'Some other error',
]
it('removes extra content from error message', () => {
for (let i = 0; i < inputs.length; i++) {
const result = cleanError(inputs[i])
expect(result).toEqual(outputs[i])
}
})
})
describe('toNiceDomain', () => {
const inputs = [
'https://example.com/index.html',
'https://bsky.app',
'https://bsky.social',
'#123123123',
]
const outputs = ['example.com', 'bsky.app', 'Bluesky Social', '#123123123']
it("displays the url's host in a easily readable manner", () => {
for (let i = 0; i < inputs.length; i++) {
const result = toNiceDomain(inputs[i])
expect(result).toEqual(outputs[i])
}
})
})
describe('toShortUrl', () => {
const inputs = [
'https://bsky.app',
'https://bsky.app/3jk7x4irgv52r',
'https://bsky.app/3jk7x4irgv52r2313y182h9',
'https://very-long-domain-name.com/foo',
'https://very-long-domain-name.com/foo?bar=baz#andsomemore',
]
const outputs = [
'bsky.app',
'bsky.app/3jk7x4irgv52r',
'bsky.app/3jk7x4irgv52...',
'very-long-domain-name.com/foo',
'very-long-domain-name.com/foo?bar=baz#...',
]
it('shortens the url', () => {
for (let i = 0; i < inputs.length; i++) {
const result = toShortUrl(inputs[i])
expect(result).toEqual(outputs[i])
}
})
})
describe('toShareUrl', () => {
const inputs = ['https://bsky.app', '/3jk7x4irgv52r', 'item/test/123']
const outputs = [
'https://bsky.app',
'https://bsky.app/3jk7x4irgv52r',
'https://bsky.app/item/test/123',
]
it('appends https, when not present', () => {
for (let i = 0; i < inputs.length; i++) {
const result = toShareUrl(inputs[i])
expect(result).toEqual(outputs[i])
}
})
})
describe('shortenLinks', () => {
const inputs = [
'start https://middle.com/foo/bar?baz=bux#hash end',
'https://start.com/foo/bar?baz=bux#hash middle end',
'start middle https://end.com/foo/bar?baz=bux#hash',
'https://newline1.com/very/long/url/here\nhttps://newline2.com/very/long/url/here',
'Classic article https://socket3.wordpress.com/2018/02/03/designing-windows-95s-user-interface/',
]
const outputs = [
[
'start middle.com/foo/bar?baz=... end',
['https://middle.com/foo/bar?baz=bux#hash'],
],
[
'start.com/foo/bar?baz=... middle end',
['https://start.com/foo/bar?baz=bux#hash'],
],
[
'start middle end.com/foo/bar?baz=...',
['https://end.com/foo/bar?baz=bux#hash'],
],
[
'newline1.com/very/long/ur...\nnewline2.com/very/long/ur...',
[
'https://newline1.com/very/long/url/here',
'https://newline2.com/very/long/url/here',
],
],
[
'Classic article socket3.wordpress.com/2018/02/03/d...',
[
'https://socket3.wordpress.com/2018/02/03/designing-windows-95s-user-interface/',
],
],
]
it('correctly shortens rich text while preserving facet URIs', () => {
for (let i = 0; i < inputs.length; i++) {
const input = inputs[i]
const inputRT = new RichText({text: input})
inputRT.detectFacetsWithoutResolution()
const outputRT = shortenLinks(inputRT)
expect(outputRT.text).toEqual(outputs[i][0])
expect(outputRT.facets?.length).toEqual(outputs[i][1].length)
for (let j = 0; j < outputs[i][1].length; j++) {
expect(outputRT.facets![j].features[0].uri).toEqual(outputs[i][1][j])
}
}
})
})
describe('parseEmbedPlayerFromUrl', () => {
const inputs = [
'https://youtu.be/videoId',
'https://www.youtube.com/watch?v=videoId',
'https://www.youtube.com/watch?v=videoId&feature=share',
'https://youtube.com/watch?v=videoId',
'https://youtube.com/watch?v=videoId&feature=share',
'https://youtube.com/shorts/videoId',
'https://m.youtube.com/watch?v=videoId',
'https://youtube.com/shorts/',
'https://youtube.com/',
'https://youtube.com/random',
'https://twitch.tv/channelName',
'https://www.twitch.tv/channelName',
'https://m.twitch.tv/channelName',
'https://twitch.tv/channelName/clip/clipId',
'https://twitch.tv/videos/videoId',
'https://open.spotify.com/playlist/playlistId',
'https://open.spotify.com/playlist/playlistId?param=value',
'https://open.spotify.com/locale/playlist/playlistId',
'https://open.spotify.com/track/songId',
'https://open.spotify.com/track/songId?param=value',
'https://open.spotify.com/locale/track/songId',
'https://open.spotify.com/album/albumId',
'https://open.spotify.com/album/albumId?param=value',
'https://open.spotify.com/locale/album/albumId',
'https://soundcloud.com/user/track',
'https://soundcloud.com/user/sets/set',
'https://soundcloud.com/user/',
'https://music.apple.com/us/playlist/playlistName/playlistId',
'https://music.apple.com/us/album/albumName/albumId',
'https://music.apple.com/us/album/albumName/albumId?i=songId',
'https://vimeo.com/videoId',
'https://vimeo.com/videoId?autoplay=0',
'https://giphy.com/gifs/some-random-gif-name-gifId',
'https://giphy.com/gif/some-random-gif-name-gifId',
'https://giphy.com/gifs/',
'https://media.giphy.com/media/gifId/giphy.webp',
'https://media0.giphy.com/media/gifId/giphy.webp',
'https://media1.giphy.com/media/gifId/giphy.gif',
'https://media2.giphy.com/media/gifId/giphy.webp',
'https://media3.giphy.com/media/gifId/giphy.mp4',
'https://media4.giphy.com/media/gifId/giphy.webp',
'https://media5.giphy.com/media/gifId/giphy.mp4',
'https://media0.giphy.com/media/gifId/giphy.mp3',
'https://media1.google.com/media/gifId/giphy.webp',
'https://media.giphy.com/media/trackingId/gifId/giphy.webp',
'https://i.giphy.com/media/gifId/giphy.webp',
'https://i.giphy.com/media/gifId/giphy.webp',
'https://i.giphy.com/gifId.gif',
'https://i.giphy.com/gifId.gif',
'https://tenor.com/view/gifId',
'https://tenor.com/notView/gifId',
'https://tenor.com/view',
'https://tenor.com/view/gifId.gif',
'https://tenor.com/intl/view/gifId.gif',
]
const outputs = [
{
type: 'youtube_video',
source: 'youtube',
playerUri: 'https://bsky.app/iframe/youtube.html?videoId=videoId&start=0',
},
{
type: 'youtube_video',
source: 'youtube',
playerUri: 'https://bsky.app/iframe/youtube.html?videoId=videoId&start=0',
},
{
type: 'youtube_video',
source: 'youtube',
playerUri: 'https://bsky.app/iframe/youtube.html?videoId=videoId&start=0',
},
{
type: 'youtube_video',
source: 'youtube',
playerUri: 'https://bsky.app/iframe/youtube.html?videoId=videoId&start=0',
},
{
type: 'youtube_video',
source: 'youtube',
playerUri: 'https://bsky.app/iframe/youtube.html?videoId=videoId&start=0',
},
{
type: 'youtube_short',
source: 'youtubeShorts',
hideDetails: true,
playerUri: 'https://bsky.app/iframe/youtube.html?videoId=videoId&start=0',
},
{
type: 'youtube_video',
source: 'youtube',
playerUri: 'https://bsky.app/iframe/youtube.html?videoId=videoId&start=0',
},
undefined,
undefined,
undefined,
{
type: 'twitch_video',
source: 'twitch',
playerUri: `https://player.twitch.tv/?volume=0.5&!muted&autoplay&channel=channelName&parent=localhost`,
},
{
type: 'twitch_video',
source: 'twitch',
playerUri: `https://player.twitch.tv/?volume=0.5&!muted&autoplay&channel=channelName&parent=localhost`,
},
{
type: 'twitch_video',
source: 'twitch',
playerUri: `https://player.twitch.tv/?volume=0.5&!muted&autoplay&channel=channelName&parent=localhost`,
},
{
type: 'twitch_video',
source: 'twitch',
playerUri: `https://clips.twitch.tv/embed?volume=0.5&autoplay=true&clip=clipId&parent=localhost`,
},
{
type: 'twitch_video',
source: 'twitch',
playerUri: `https://player.twitch.tv/?volume=0.5&!muted&autoplay&video=videoId&parent=localhost`,
},
{
type: 'spotify_playlist',
source: 'spotify',
playerUri: `https://open.spotify.com/embed/playlist/playlistId`,
},
{
type: 'spotify_playlist',
source: 'spotify',
playerUri: `https://open.spotify.com/embed/playlist/playlistId`,
},
{
type: 'spotify_playlist',
source: 'spotify',
playerUri: `https://open.spotify.com/embed/playlist/playlistId`,
},
{
type: 'spotify_song',
source: 'spotify',
playerUri: `https://open.spotify.com/embed/track/songId`,
},
{
type: 'spotify_song',
source: 'spotify',
playerUri: `https://open.spotify.com/embed/track/songId`,
},
{
type: 'spotify_song',
source: 'spotify',
playerUri: `https://open.spotify.com/embed/track/songId`,
},
{
type: 'spotify_album',
source: 'spotify',
playerUri: `https://open.spotify.com/embed/album/albumId`,
},
{
type: 'spotify_album',
source: 'spotify',
playerUri: `https://open.spotify.com/embed/album/albumId`,
},
{
type: 'spotify_album',
source: 'spotify',
playerUri: `https://open.spotify.com/embed/album/albumId`,
},
{
type: 'soundcloud_track',
source: 'soundcloud',
playerUri: `https://w.soundcloud.com/player/?url=https://soundcloud.com/user/track&auto_play=true&visual=false&hide_related=true`,
},
{
type: 'soundcloud_set',
source: 'soundcloud',
playerUri: `https://w.soundcloud.com/player/?url=https://soundcloud.com/user/sets/set&auto_play=true&visual=false&hide_related=true`,
},
undefined,
{
type: 'apple_music_playlist',
source: 'appleMusic',
playerUri:
'https://embed.music.apple.com/us/playlist/playlistName/playlistId',
},
{
type: 'apple_music_album',
source: 'appleMusic',
playerUri: 'https://embed.music.apple.com/us/album/albumName/albumId',
},
{
type: 'apple_music_song',
source: 'appleMusic',
playerUri:
'https://embed.music.apple.com/us/album/albumName/albumId?i=songId',
},
{
type: 'vimeo_video',
source: 'vimeo',
playerUri: 'https://player.vimeo.com/video/videoId?autoplay=1',
},
{
type: 'vimeo_video',
source: 'vimeo',
playerUri: 'https://player.vimeo.com/video/videoId?autoplay=1',
},
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
undefined,
undefined,
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
undefined,
undefined,
undefined,
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
{
type: 'giphy_gif',
source: 'giphy',
isGif: true,
hideDetails: true,
metaUri: 'https://giphy.com/gifs/gifId',
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
},
{
type: 'tenor_gif',
source: 'tenor',
isGif: true,
hideDetails: true,
playerUri: 'https://tenor.com/view/gifId.gif',
},
undefined,
undefined,
{
type: 'tenor_gif',
source: 'tenor',
isGif: true,
hideDetails: true,
playerUri: 'https://tenor.com/view/gifId.gif',
},
{
type: 'tenor_gif',
source: 'tenor',
isGif: true,
hideDetails: true,
playerUri: 'https://tenor.com/intl/view/gifId.gif',
},
]
it('correctly grabs the correct id from uri', () => {
for (let i = 0; i < inputs.length; i++) {
const input = inputs[i]
const output = outputs[i]
const res = parseEmbedPlayerFromUrl(input)
expect(res).toEqual(output)
}
})
})
@@ -0,0 +1,84 @@
import {
getMentionAt,
insertMentionAt,
} from '../../../src/lib/strings/mention-manip'
describe('getMentionAt', () => {
type Case = [string, number, string | undefined]
const cases: Case[] = [
['hello @alice goodbye', 0, undefined],
['hello @alice goodbye', 1, undefined],
['hello @alice goodbye', 2, undefined],
['hello @alice goodbye', 3, undefined],
['hello @alice goodbye', 4, undefined],
['hello @alice goodbye', 5, undefined],
['hello @alice goodbye', 6, 'alice'],
['hello @alice goodbye', 7, 'alice'],
['hello @alice goodbye', 8, 'alice'],
['hello @alice goodbye', 9, 'alice'],
['hello @alice goodbye', 10, 'alice'],
['hello @alice goodbye', 11, 'alice'],
['hello @alice goodbye', 12, 'alice'],
['hello @alice goodbye', 13, undefined],
['hello @alice goodbye', 14, undefined],
['@alice', 0, 'alice'],
['@alice hello', 0, 'alice'],
['@alice hello', 1, 'alice'],
['@alice hello', 2, 'alice'],
['@alice hello', 3, 'alice'],
['@alice hello', 4, 'alice'],
['@alice hello', 5, 'alice'],
['@alice hello', 6, 'alice'],
['@alice hello', 7, undefined],
['alice@alice', 0, undefined],
['alice@alice', 6, undefined],
]
it.each(cases)(
'given input string %p and cursor position %p, returns %p',
(str, cursorPos, expected) => {
const output = getMentionAt(str, cursorPos)
expect(output?.value).toEqual(expected)
},
)
})
describe('insertMentionAt', () => {
type Case = [string, number, string]
const cases: Case[] = [
['hello @alice goodbye', 0, 'hello @alice goodbye'],
['hello @alice goodbye', 1, 'hello @alice goodbye'],
['hello @alice goodbye', 2, 'hello @alice goodbye'],
['hello @alice goodbye', 3, 'hello @alice goodbye'],
['hello @alice goodbye', 4, 'hello @alice goodbye'],
['hello @alice goodbye', 5, 'hello @alice goodbye'],
['hello @alice goodbye', 6, 'hello @alice.com goodbye'],
['hello @alice goodbye', 7, 'hello @alice.com goodbye'],
['hello @alice goodbye', 8, 'hello @alice.com goodbye'],
['hello @alice goodbye', 9, 'hello @alice.com goodbye'],
['hello @alice goodbye', 10, 'hello @alice.com goodbye'],
['hello @alice goodbye', 11, 'hello @alice.com goodbye'],
['hello @alice goodbye', 12, 'hello @alice.com goodbye'],
['hello @alice goodbye', 13, 'hello @alice goodbye'],
['hello @alice goodbye', 14, 'hello @alice goodbye'],
['@alice', 0, '@alice.com '],
['@alice hello', 0, '@alice.com hello'],
['@alice hello', 1, '@alice.com hello'],
['@alice hello', 2, '@alice.com hello'],
['@alice hello', 3, '@alice.com hello'],
['@alice hello', 4, '@alice.com hello'],
['@alice hello', 5, '@alice.com hello'],
['@alice hello', 6, '@alice.com hello'],
['@alice hello', 7, '@alice hello'],
['alice@alice', 0, 'alice@alice'],
['alice@alice', 6, 'alice@alice'],
]
it.each(cases)(
'given input string %p and cursor position %p, returns %p',
(str, cursorPos, expected) => {
const output = insertMentionAt(str, cursorPos, 'alice.com')
expect(output).toEqual(expected)
},
)
})
+141
View File
@@ -0,0 +1,141 @@
import {it, describe, expect} from '@jest/globals'
import {
linkRequiresWarning,
isPossiblyAUrl,
splitApexDomain,
} from '../../../src/lib/strings/url-helpers'
describe('linkRequiresWarning', () => {
type Case = [string, string, boolean]
const cases: Case[] = [
['http://example.com', 'http://example.com', false],
['http://example.com', 'example.com', false],
['http://example.com', 'example.com/page', false],
['http://example.com', '', true],
['http://example.com', 'other.com', true],
['http://example.com', 'http://other.com', true],
['http://example.com', 'some label', true],
['http://example.com', 'example.com more', true],
['http://example.com', 'http://example.co', true],
['http://example.co', 'http://example.com', true],
['http://example.com', 'example.co', true],
['http://example.co', 'example.com', true],
['http://site.pages.dev', 'http://site.page', true],
['http://site.page', 'http://site.pages.dev', true],
['http://site.pages.dev', 'site.page', true],
['http://site.page', 'site.pages.dev', true],
['http://site.pages.dev', 'http://site.pages', true],
['http://site.pages', 'http://site.pages.dev', true],
['http://site.pages.dev', 'site.pages', true],
['http://site.pages', 'site.pages.dev', true],
['http://bsky.app/profile/bob.test/post/3kbeuduu7m22v', 'my post', false],
['https://bsky.app/profile/bob.test/post/3kbeuduu7m22v', 'my post', false],
['http://bsky.app/', 'bluesky', false],
['https://bsky.app/', 'bluesky', false],
[
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
false,
],
[
'https://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
false,
],
[
'http://bsky.app/',
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
false,
],
[
'https://bsky.app/',
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
false,
],
[
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
'https://google.com',
true,
],
[
'https://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
'https://google.com',
true,
],
['http://bsky.app/', 'https://google.com', true],
['https://bsky.app/', 'https://google.com', true],
// case insensitive
['https://Example.com', 'example.com', false],
['https://example.com', 'Example.com', false],
// bad uri inputs, default to true
['', '', true],
['example.com', 'example.com', true],
]
it.each(cases)(
'given input uri %p and text %p, returns %p',
(uri, text, expected) => {
const output = linkRequiresWarning(uri, text)
expect(output).toEqual(expected)
},
)
})
describe('isPossiblyAUrl', () => {
type Case = [string, boolean]
const cases: Case[] = [
['', false],
['text', false],
['some text', false],
['some text', false],
['some domain.com', false],
['domain.com', true],
[' domain.com', true],
['domain.com ', true],
[' domain.com ', true],
['http://domain.com', true],
[' http://domain.com', true],
['http://domain.com ', true],
[' http://domain.com ', true],
['https://domain.com', true],
[' https://domain.com', true],
['https://domain.com ', true],
[' https://domain.com ', true],
['http://domain.com/foo', true],
['http://domain.com stuff', true],
]
it.each(cases)('given input uri %p, returns %p', (str, expected) => {
const output = isPossiblyAUrl(str)
expect(output).toEqual(expected)
})
})
describe('splitApexDomain', () => {
type Case = [string, string, string]
const cases: Case[] = [
['', '', ''],
['example.com', '', 'example.com'],
['foo.example.com', 'foo.', 'example.com'],
['foo.bar.example.com', 'foo.bar.', 'example.com'],
['example.co.uk', '', 'example.co.uk'],
['foo.example.co.uk', 'foo.', 'example.co.uk'],
['example.nonsense', '', 'example.nonsense'],
['foo.example.nonsense', '', 'foo.example.nonsense'],
['foo.bar.example.nonsense', '', 'foo.bar.example.nonsense'],
['example.com.example.com', 'example.com.', 'example.com'],
]
it.each(cases)(
'given input uri %p, returns %p,%p',
(str, expected1, expected2) => {
const output = splitApexDomain(str)
expect(output[0]).toEqual(expected1)
expect(output[1]).toEqual(expected2)
},
)
})
-55
View File
@@ -1,55 +0,0 @@
# To learn about Buck see [Docs](https://buckbuild.com/).
# To run your application with Buck:
# - install Buck
# - `npm start` - to start the packager
# - `cd android`
# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
# - `buck install -r android/app` - compile, install and run application
#
load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
lib_deps = []
create_aar_targets(glob(["libs/*.aar"]))
create_jar_targets(glob(["libs/*.jar"]))
android_library(
name = "all-libs",
exported_deps = lib_deps,
)
android_library(
name = "app-code",
srcs = glob([
"src/main/java/**/*.java",
]),
deps = [
":all-libs",
":build_config",
":res",
],
)
android_build_config(
name = "build_config",
package = "xyz.blueskyweb.pubsq",
)
android_resource(
name = "res",
package = "xyz.blueskyweb.pubsq",
res = "src/main/res",
)
android_binary(
name = "app",
keystore = "//android/keystores:debug",
manifest = "src/main/AndroidManifest.xml",
package_type = "debug",
deps = [
":app-code",
],
)
-320
View File
@@ -1,320 +0,0 @@
apply plugin: "com.android.application"
import com.android.build.OutputFile
import org.apache.tools.ant.taskdefs.condition.Os
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
* and bundleReleaseJsAndAssets).
* These basically call `react-native bundle` with the correct arguments during the Android build
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
* bundle directly from the development server. Below you can see all the possible configurations
* and their defaults. If you decide to add a configuration block, make sure to add it before the
* `apply from: "../../node_modules/react-native/react.gradle"` line.
*
* project.ext.react = [
* // the name of the generated asset file containing your JS bundle
* bundleAssetName: "index.android.bundle",
*
* // the entry file for bundle generation. If none specified and
* // "index.android.js" exists, it will be used. Otherwise "index.js" is
* // default. Can be overridden with ENTRY_FILE environment variable.
* entryFile: "index.android.js",
*
* // https://reactnative.dev/docs/performance#enable-the-ram-format
* bundleCommand: "ram-bundle",
*
* // whether to bundle JS and assets in debug mode
* bundleInDebug: false,
*
* // whether to bundle JS and assets in release mode
* bundleInRelease: true,
*
* // whether to bundle JS and assets in another build variant (if configured).
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
* // The configuration property can be in the following formats
* // 'bundleIn${productFlavor}${buildType}'
* // 'bundleIn${buildType}'
* // bundleInFreeDebug: true,
* // bundleInPaidRelease: true,
* // bundleInBeta: true,
*
* // whether to disable dev mode in custom build variants (by default only disabled in release)
* // for example: to disable dev mode in the staging build type (if configured)
* devDisabledInStaging: true,
* // The configuration property can be in the following formats
* // 'devDisabledIn${productFlavor}${buildType}'
* // 'devDisabledIn${buildType}'
*
* // the root of your project, i.e. where "package.json" lives
* root: "../../",
*
* // where to put the JS bundle asset in debug mode
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
*
* // where to put the JS bundle asset in release mode
* jsBundleDirRelease: "$buildDir/intermediates/assets/release",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in debug mode
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in release mode
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
*
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
* // date; if you have any other folders that you want to ignore for performance reasons (gradle
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
* // for example, you might want to remove it from here.
* inputExcludes: ["android/**", "ios/**"],
*
* // override which node gets called and with what additional arguments
* nodeExecutableAndArgs: ["node"],
*
* // supply additional arguments to the packager
* extraPackagerArgs: []
* ]
*/
project.ext.react = [
enableHermes: false, // clean and rebuild if changing
]
apply from: "../../node_modules/react-native/react.gradle"
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
* - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU architecture of their device.
*/
def enableSeparateBuildPerCPUArchitecture = false
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = false
/**
* The preferred build flavor of JavaScriptCore.
*
* For example, to use the international variant, you can use:
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
*
* The international variant includes ICU i18n library and necessary data
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
* give correct results when using with locales other than en-US. Note that
* this variant is about 6MiB larger per architecture than default.
*/
def jscFlavor = 'org.webkit:android-jsc:+'
/**
* Whether to enable the Hermes VM.
*
* This should be set on project.ext.react and that value will be read here. If it is not set
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced.
*/
def enableHermes = project.ext.react.get("enableHermes", false);
/**
* Architectures to build native code for.
*/
def reactNativeArchitectures() {
def value = project.getProperties().get("reactNativeArchitectures")
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
}
android {
ndkVersion rootProject.ext.ndkVersion
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
applicationId "xyz.blueskyweb.pubsq"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
if (isNewArchitectureEnabled()) {
// We configure the NDK build only if you decide to opt-in for the New Architecture.
externalNativeBuild {
ndkBuild {
arguments "APP_PLATFORM=android-21",
"APP_STL=c++_shared",
"NDK_TOOLCHAIN_VERSION=clang",
"GENERATED_SRC_DIR=$buildDir/generated/source",
"PROJECT_BUILD_DIR=$buildDir",
"REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
"REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build"
cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1"
cppFlags "-std=c++17"
// Make sure this target name is the same you specify inside the
// src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.
targets "app_appmodules"
// Fix for windows limit on number of character in file paths and in command lines
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
arguments "NDK_APP_SHORT_COMMANDS=true"
}
}
}
if (!enableSeparateBuildPerCPUArchitecture) {
ndk {
abiFilters (*reactNativeArchitectures())
}
}
}
}
if (isNewArchitectureEnabled()) {
// We configure the NDK build only if you decide to opt-in for the New Architecture.
externalNativeBuild {
ndkBuild {
path "$projectDir/src/main/jni/Android.mk"
}
}
def reactAndroidProjectDir = project(':ReactAndroid').projectDir
def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) {
dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck")
from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
into("$buildDir/react-ndk/exported")
}
def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) {
dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck")
from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
into("$buildDir/react-ndk/exported")
}
afterEvaluate {
// If you wish to add a custom TurboModule or component locally,
// you should uncomment this line.
// preBuild.dependsOn("generateCodegenArtifactsFromSchema")
preDebugBuild.dependsOn(packageReactNdkDebugLibs)
preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)
// Due to a bug inside AGP, we have to explicitly set a dependency
// between configureNdkBuild* tasks and the preBuild tasks.
// This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
configureNdkBuildRelease.dependsOn(preReleaseBuild)
configureNdkBuildDebug.dependsOn(preDebugBuild)
reactNativeArchitectures().each { architecture ->
tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure {
dependsOn("preDebugBuild")
}
tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure {
dependsOn("preReleaseBuild")
}
}
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include (*reactNativeArchitectures())
}
}
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://reactnative.dev/docs/signed-apk-android.
signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// https://developer.android.com/studio/build/configure-apk-splits.html
// Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
defaultConfig.versionCode * 1000 + versionCodes.get(abi)
}
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
exclude group:'com.facebook.fbjni'
}
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
exclude group:'com.facebook.flipper'
exclude group:'com.squareup.okhttp3', module:'okhttp'
}
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
exclude group:'com.facebook.flipper'
}
if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
}
if (isNewArchitectureEnabled()) {
// If new architecture is enabled, we let you build RN from source
// Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
// This will be applied to all the imported transtitive dependency.
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute(module("com.facebook.react:react-native"))
.using(project(":ReactAndroid")).because("On New Architecture we're building React Native from source")
}
}
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.implementation
into 'libs'
}
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
def isNewArchitectureEnabled() {
// To opt-in for the New Architecture, you can either:
// - Set `newArchEnabled` to true inside the `gradle.properties` file
// - Invoke gradle with `-newArchEnabled=true`
// - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
}
-19
View File
@@ -1,19 +0,0 @@
"""Helper definitions to glob .aar and .jar targets"""
def create_aar_targets(aarfiles):
for aarfile in aarfiles:
name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
lib_deps.append(":" + name)
android_prebuilt_aar(
name = name,
aar = aarfile,
)
def create_jar_targets(jarfiles):
for jarfile in jarfiles:
name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
lib_deps.append(":" + name)
prebuilt_jar(
name = name,
binary_jar = jarfile,
)
Binary file not shown.
-10
View File
@@ -1,10 +0,0 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
-13
View File
@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:usesCleartextTraffic="true"
tools:targetApi="28"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false" />
</application>
</manifest>
@@ -1,73 +0,0 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*/
package com.app;
import android.content.Context;
import com.facebook.flipper.android.AndroidFlipperClient;
import com.facebook.flipper.android.utils.FlipperUtils;
import com.facebook.flipper.core.FlipperClient;
import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
import com.facebook.flipper.plugins.inspector.DescriptorMapping;
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
import com.facebook.react.ReactInstanceEventListener;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.modules.network.NetworkingModule;
import okhttp3.OkHttpClient;
public class ReactNativeFlipper {
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
if (FlipperUtils.shouldEnableFlipper(context)) {
final FlipperClient client = AndroidFlipperClient.getInstance(context);
client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
client.addPlugin(new ReactFlipperPlugin());
client.addPlugin(new DatabasesFlipperPlugin(context));
client.addPlugin(new SharedPreferencesFlipperPlugin(context));
client.addPlugin(CrashReporterPlugin.getInstance());
NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
NetworkingModule.setCustomClientBuilder(
new NetworkingModule.CustomClientBuilder() {
@Override
public void apply(OkHttpClient.Builder builder) {
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
}
});
client.addPlugin(networkFlipperPlugin);
client.start();
// Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
// Hence we run if after all native modules have been initialized
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
if (reactContext == null) {
reactInstanceManager.addReactInstanceEventListener(
new ReactInstanceEventListener() {
@Override
public void onReactContextInitialized(ReactContext reactContext) {
reactInstanceManager.removeReactInstanceEventListener(this);
reactContext.runOnNativeModulesQueueThread(
new Runnable() {
@Override
public void run() {
client.addPlugin(new FrescoFlipperPlugin());
}
});
}
});
} else {
client.addPlugin(new FrescoFlipperPlugin());
}
}
}
}
-44
View File
@@ -1,44 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xyz.blueskyweb.pubsq">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- deep linking via web links -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- debug host: https://pubsq.pfrazee.com -->
<data android:scheme="https" />
<data android:host="pubsq.pfrazee.com" />
</intent-filter>
<!-- deep linking via custom links -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- debug scheme: pubsq://app -->
<data android:scheme="pubsq" />
<data android:host="app" />
</intent-filter>
</activity>
</application>
</manifest>
@@ -1,28 +0,0 @@
package xyz.blueskyweb.pubsq;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;
import java.security.SecureRandom;
import android.util.Base64;
public class AppSecureRandomModule extends ReactContextBaseJavaModule {
public AppSecureRandomModule(ReactApplicationContext context) {
super(context);
}
@ReactMethod
public void generateSecureRandomAsBase64(int length, Promise promise) {
SecureRandom secureRandom = new SecureRandom();
byte[] buffer = new byte[length];
secureRandom.nextBytes(buffer);
promise.resolve(Base64.encodeToString(buffer, Base64.NO_WRAP));
}
@Override
public String getName() {
return "AppSecureRandomModule";
}
}
@@ -1,26 +0,0 @@
package xyz.blueskyweb.pubsq;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class AppSecureRandomPackage implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new AppSecureRandomModule(reactContext));
return modules;
}
}
@@ -1,46 +0,0 @@
package xyz.blueskyweb.pubsq;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import android.os.Bundle;
public class MainActivity extends ReactActivity {
/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "xyz.blueskyweb.pubsq";
}
/**
* Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and
* you can specify the rendered you wish to use (Fabric or the older renderer).
*/
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new MainActivityDelegate(this, getMainComponentName());
}
public static class MainActivityDelegate extends ReactActivityDelegate {
public MainActivityDelegate(ReactActivity activity, String mainComponentName) {
super(activity, mainComponentName);
}
@Override
protected ReactRootView createRootView() {
ReactRootView reactRootView = new ReactRootView(getContext());
// If you opted-in for the New Architecture, we enable the Fabric Renderer.
reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED);
return reactRootView;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null);
}
}
}
@@ -1,92 +0,0 @@
package xyz.blueskyweb.pubsq;
import android.app.Application;
import android.content.Context;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.config.ReactFeatureFlags;
import com.facebook.soloader.SoLoader;
import xyz.blueskyweb.pubsq.newarchitecture.MainApplicationReactNativeHost;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost =
new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
packages.add(new AppSecureRandomPackage());
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
};
private final ReactNativeHost mNewArchitectureNativeHost =
new MainApplicationReactNativeHost(this);
@Override
public ReactNativeHost getReactNativeHost() {
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
return mNewArchitectureNativeHost;
} else {
return mReactNativeHost;
}
}
@Override
public void onCreate() {
super.onCreate();
// If you opted-in for the New Architecture, we enable the TurboModule system
ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
SoLoader.init(this, /* native exopackage */ false);
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
/**
* Loads Flipper in React Native templates. Call this in the onCreate method with something like
* initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
*
* @param context
* @param reactInstanceManager
*/
private static void initializeFlipper(
Context context, ReactInstanceManager reactInstanceManager) {
if (BuildConfig.DEBUG) {
try {
/*
We use reflection here to pick up the class that initializes Flipper,
since Flipper library is not available in release mode
*/
Class<?> aClass = Class.forName("com.app.ReactNativeFlipper");
aClass
.getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
.invoke(null, context, reactInstanceManager);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
@@ -1,116 +0,0 @@
package xyz.blueskyweb.pubsq.newarchitecture;
import android.app.Application;
import androidx.annotation.NonNull;
import com.facebook.react.PackageList;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.ReactPackageTurboModuleManagerDelegate;
import com.facebook.react.bridge.JSIModulePackage;
import com.facebook.react.bridge.JSIModuleProvider;
import com.facebook.react.bridge.JSIModuleSpec;
import com.facebook.react.bridge.JSIModuleType;
import com.facebook.react.bridge.JavaScriptContextHolder;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.UIManager;
import com.facebook.react.fabric.ComponentFactory;
import com.facebook.react.fabric.CoreComponentsRegistry;
import com.facebook.react.fabric.EmptyReactNativeConfig;
import com.facebook.react.fabric.FabricJSIModuleProvider;
import com.facebook.react.uimanager.ViewManagerRegistry;
import xyz.blueskyweb.pubsq.BuildConfig;
import xyz.blueskyweb.pubsq.newarchitecture.components.MainComponentsRegistry;
import xyz.blueskyweb.pubsq.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate;
import java.util.ArrayList;
import java.util.List;
/**
* A {@link ReactNativeHost} that helps you load everything needed for the New Architecture, both
* TurboModule delegates and the Fabric Renderer.
*
* <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the
* `newArchEnabled` property). Is ignored otherwise.
*/
public class MainApplicationReactNativeHost extends ReactNativeHost {
public MainApplicationReactNativeHost(Application application) {
super(application);
}
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
// TurboModules must also be loaded here providing a valid TurboReactPackage implementation:
// packages.add(new TurboReactPackage() { ... });
// If you have custom Fabric Components, their ViewManagers should also be loaded here
// inside a ReactPackage.
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
@NonNull
@Override
protected ReactPackageTurboModuleManagerDelegate.Builder
getReactPackageTurboModuleManagerDelegateBuilder() {
// Here we provide the ReactPackageTurboModuleManagerDelegate Builder. This is necessary
// for the new architecture and to use TurboModules correctly.
return new MainApplicationTurboModuleManagerDelegate.Builder();
}
@Override
protected JSIModulePackage getJSIModulePackage() {
return new JSIModulePackage() {
@Override
public List<JSIModuleSpec> getJSIModules(
final ReactApplicationContext reactApplicationContext,
final JavaScriptContextHolder jsContext) {
final List<JSIModuleSpec> specs = new ArrayList<>();
// Here we provide a new JSIModuleSpec that will be responsible of providing the
// custom Fabric Components.
specs.add(
new JSIModuleSpec() {
@Override
public JSIModuleType getJSIModuleType() {
return JSIModuleType.UIManager;
}
@Override
public JSIModuleProvider<UIManager> getJSIModuleProvider() {
final ComponentFactory componentFactory = new ComponentFactory();
CoreComponentsRegistry.register(componentFactory);
// Here we register a Components Registry.
// The one that is generated with the template contains no components
// and just provides you the one from React Native core.
MainComponentsRegistry.register(componentFactory);
final ReactInstanceManager reactInstanceManager = getReactInstanceManager();
ViewManagerRegistry viewManagerRegistry =
new ViewManagerRegistry(
reactInstanceManager.getOrCreateViewManagers(reactApplicationContext));
return new FabricJSIModuleProvider(
reactApplicationContext,
componentFactory,
new EmptyReactNativeConfig(),
viewManagerRegistry);
}
});
return specs;
}
};
}
}
@@ -1,36 +0,0 @@
package xyz.blueskyweb.pubsq.newarchitecture.components;
import com.facebook.jni.HybridData;
import com.facebook.proguard.annotations.DoNotStrip;
import com.facebook.react.fabric.ComponentFactory;
import com.facebook.soloader.SoLoader;
/**
* Class responsible to load the custom Fabric Components. This class has native methods and needs a
* corresponding C++ implementation/header file to work correctly (already placed inside the jni/
* folder for you).
*
* <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the
* `newArchEnabled` property). Is ignored otherwise.
*/
@DoNotStrip
public class MainComponentsRegistry {
static {
SoLoader.loadLibrary("fabricjni");
}
@DoNotStrip private final HybridData mHybridData;
@DoNotStrip
private native HybridData initHybrid(ComponentFactory componentFactory);
@DoNotStrip
private MainComponentsRegistry(ComponentFactory componentFactory) {
mHybridData = initHybrid(componentFactory);
}
@DoNotStrip
public static MainComponentsRegistry register(ComponentFactory componentFactory) {
return new MainComponentsRegistry(componentFactory);
}
}
@@ -1,48 +0,0 @@
package xyz.blueskyweb.pubsq.newarchitecture.modules;
import com.facebook.jni.HybridData;
import com.facebook.react.ReactPackage;
import com.facebook.react.ReactPackageTurboModuleManagerDelegate;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.soloader.SoLoader;
import java.util.List;
/**
* Class responsible to load the TurboModules. This class has native methods and needs a
* corresponding C++ implementation/header file to work correctly (already placed inside the jni/
* folder for you).
*
* <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the
* `newArchEnabled` property). Is ignored otherwise.
*/
public class MainApplicationTurboModuleManagerDelegate
extends ReactPackageTurboModuleManagerDelegate {
private static volatile boolean sIsSoLibraryLoaded;
protected MainApplicationTurboModuleManagerDelegate(
ReactApplicationContext reactApplicationContext, List<ReactPackage> packages) {
super(reactApplicationContext, packages);
}
protected native HybridData initHybrid();
native boolean canCreateTurboModule(String moduleName);
public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder {
protected MainApplicationTurboModuleManagerDelegate build(
ReactApplicationContext context, List<ReactPackage> packages) {
return new MainApplicationTurboModuleManagerDelegate(context, packages);
}
}
@Override
protected synchronized void maybeLoadOtherSoLibraries() {
if (!sIsSoLibraryLoaded) {
// If you change the name of your application .so file in the Android.mk file,
// make sure you update the name here as well.
SoLoader.loadLibrary("app_appmodules");
sIsSoLibraryLoaded = true;
}
}
}
-49
View File
@@ -1,49 +0,0 @@
THIS_DIR := $(call my-dir)
include $(REACT_ANDROID_DIR)/Android-prebuilt.mk
# If you wish to add a custom TurboModule or Fabric component in your app you
# will have to include the following autogenerated makefile.
# include $(GENERATED_SRC_DIR)/codegen/jni/Android.mk
include $(CLEAR_VARS)
LOCAL_PATH := $(THIS_DIR)
# You can customize the name of your application .so file here.
LOCAL_MODULE := app_appmodules
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
# If you wish to add a custom TurboModule or Fabric component in your app you
# will have to uncomment those lines to include the generated source
# files from the codegen (placed in $(GENERATED_SRC_DIR)/codegen/jni)
#
# LOCAL_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni
# LOCAL_SRC_FILES += $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp)
# LOCAL_EXPORT_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni
# Here you should add any native library you wish to depend on.
LOCAL_SHARED_LIBRARIES := \
libfabricjni \
libfbjni \
libfolly_futures \
libfolly_json \
libglog \
libjsi \
libreact_codegen_rncore \
libreact_debug \
libreact_nativemodule_core \
libreact_render_componentregistry \
libreact_render_core \
libreact_render_debug \
libreact_render_graphics \
librrc_view \
libruntimeexecutor \
libturbomodulejsijni \
libyoga
LOCAL_CFLAGS := -DLOG_TAG=\"ReactNative\" -fexceptions -frtti -std=c++17 -Wall
include $(BUILD_SHARED_LIBRARY)
@@ -1,24 +0,0 @@
#include "MainApplicationModuleProvider.h"
#include <rncore.h>
namespace facebook {
namespace react {
std::shared_ptr<TurboModule> MainApplicationModuleProvider(
const std::string moduleName,
const JavaTurboModule::InitParams &params) {
// Here you can provide your own module provider for TurboModules coming from
// either your application or from external libraries. The approach to follow
// is similar to the following (for a library called `samplelibrary`:
//
// auto module = samplelibrary_ModuleProvider(moduleName, params);
// if (module != nullptr) {
// return module;
// }
// return rncore_ModuleProvider(moduleName, params);
return rncore_ModuleProvider(moduleName, params);
}
} // namespace react
} // namespace facebook
@@ -1,16 +0,0 @@
#pragma once
#include <memory>
#include <string>
#include <ReactCommon/JavaTurboModule.h>
namespace facebook {
namespace react {
std::shared_ptr<TurboModule> MainApplicationModuleProvider(
const std::string moduleName,
const JavaTurboModule::InitParams &params);
} // namespace react
} // namespace facebook
@@ -1,45 +0,0 @@
#include "MainApplicationTurboModuleManagerDelegate.h"
#include "MainApplicationModuleProvider.h"
namespace facebook {
namespace react {
jni::local_ref<MainApplicationTurboModuleManagerDelegate::jhybriddata>
MainApplicationTurboModuleManagerDelegate::initHybrid(
jni::alias_ref<jhybridobject>) {
return makeCxxInstance();
}
void MainApplicationTurboModuleManagerDelegate::registerNatives() {
registerHybrid({
makeNativeMethod(
"initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid),
makeNativeMethod(
"canCreateTurboModule",
MainApplicationTurboModuleManagerDelegate::canCreateTurboModule),
});
}
std::shared_ptr<TurboModule>
MainApplicationTurboModuleManagerDelegate::getTurboModule(
const std::string name,
const std::shared_ptr<CallInvoker> jsInvoker) {
// Not implemented yet: provide pure-C++ NativeModules here.
return nullptr;
}
std::shared_ptr<TurboModule>
MainApplicationTurboModuleManagerDelegate::getTurboModule(
const std::string name,
const JavaTurboModule::InitParams &params) {
return MainApplicationModuleProvider(name, params);
}
bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule(
std::string name) {
return getTurboModule(name, nullptr) != nullptr ||
getTurboModule(name, {.moduleName = name}) != nullptr;
}
} // namespace react
} // namespace facebook
@@ -1,38 +0,0 @@
#include <memory>
#include <string>
#include <ReactCommon/TurboModuleManagerDelegate.h>
#include <fbjni/fbjni.h>
namespace facebook {
namespace react {
class MainApplicationTurboModuleManagerDelegate
: public jni::HybridClass<
MainApplicationTurboModuleManagerDelegate,
TurboModuleManagerDelegate> {
public:
// Adapt it to the package you used for your Java class.
static constexpr auto kJavaDescriptor =
"Lcom/app/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject>);
static void registerNatives();
std::shared_ptr<TurboModule> getTurboModule(
const std::string name,
const std::shared_ptr<CallInvoker> jsInvoker) override;
std::shared_ptr<TurboModule> getTurboModule(
const std::string name,
const JavaTurboModule::InitParams &params) override;
/**
* Test-only method. Allows user to verify whether a TurboModule can be
* created by instances of this class.
*/
bool canCreateTurboModule(std::string name);
};
} // namespace react
} // namespace facebook
@@ -1,61 +0,0 @@
#include "MainComponentsRegistry.h"
#include <CoreComponentsRegistry.h>
#include <fbjni/fbjni.h>
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
#include <react/renderer/components/rncore/ComponentDescriptors.h>
namespace facebook {
namespace react {
MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {}
std::shared_ptr<ComponentDescriptorProviderRegistry const>
MainComponentsRegistry::sharedProviderRegistry() {
auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry();
// Custom Fabric Components go here. You can register custom
// components coming from your App or from 3rd party libraries here.
//
// providerRegistry->add(concreteComponentDescriptorProvider<
// AocViewerComponentDescriptor>());
return providerRegistry;
}
jni::local_ref<MainComponentsRegistry::jhybriddata>
MainComponentsRegistry::initHybrid(
jni::alias_ref<jclass>,
ComponentFactory *delegate) {
auto instance = makeCxxInstance(delegate);
auto buildRegistryFunction =
[](EventDispatcher::Weak const &eventDispatcher,
ContextContainer::Shared const &contextContainer)
-> ComponentDescriptorRegistry::Shared {
auto registry = MainComponentsRegistry::sharedProviderRegistry()
->createComponentDescriptorRegistry(
{eventDispatcher, contextContainer});
auto mutableRegistry =
std::const_pointer_cast<ComponentDescriptorRegistry>(registry);
mutableRegistry->setFallbackComponentDescriptor(
std::make_shared<UnimplementedNativeViewComponentDescriptor>(
ComponentDescriptorParameters{
eventDispatcher, contextContainer, nullptr}));
return registry;
};
delegate->buildRegistryFunction = buildRegistryFunction;
return instance;
}
void MainComponentsRegistry::registerNatives() {
registerHybrid({
makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid),
});
}
} // namespace react
} // namespace facebook
@@ -1,32 +0,0 @@
#pragma once
#include <ComponentFactory.h>
#include <fbjni/fbjni.h>
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
#include <react/renderer/componentregistry/ComponentDescriptorRegistry.h>
namespace facebook {
namespace react {
class MainComponentsRegistry
: public facebook::jni::HybridClass<MainComponentsRegistry> {
public:
// Adapt it to the package you used for your Java class.
constexpr static auto kJavaDescriptor =
"Lcom/app/newarchitecture/components/MainComponentsRegistry;";
static void registerNatives();
MainComponentsRegistry(ComponentFactory *delegate);
private:
static std::shared_ptr<ComponentDescriptorProviderRegistry const>
sharedProviderRegistry();
static jni::local_ref<jhybriddata> initHybrid(
jni::alias_ref<jclass>,
ComponentFactory *delegate);
};
} // namespace react
} // namespace facebook
-11
View File
@@ -1,11 +0,0 @@
#include <fbjni/fbjni.h>
#include "MainApplicationTurboModuleManagerDelegate.h"
#include "MainComponentsRegistry.h"
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
return facebook::jni::initialize(vm, [] {
facebook::react::MainApplicationTurboModuleManagerDelegate::
registerNatives();
facebook::react::MainComponentsRegistry::registerNatives();
});
}
@@ -1,36 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
<selector>
<!--
This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).
The item below with state_pressed="false" and state_focused="false" causes a NullPointerException.
NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'
<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR.
-->
<item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
</selector>
</inset>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Some files were not shown because too many files have changed in this diff Show More