Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#18495] Fix token not ready for next screen #18532

Merged
merged 6 commits into from
Feb 1, 2024

Conversation

ulisesmac
Copy link
Contributor

@ulisesmac ulisesmac commented Jan 17, 2024

fixes #18495
fixes #18524
fixes #18493

Update:
fixes #18469

Summary

This PR fixes the exception thrown whilke picking an asset to send in this screen:
image

And after that, we needed to pick twice the same token in order to actually send it, now it works fine.

Review notes

The behavior happened because re-frame didn't had the db changes ready before navigating, IDK why this is happening.

Steps to test

  • Open Status
  • Add an address owning assets
  • Select the added account, click on the send button, pick another adddress to send, pick an asset

The behavior is now fixed.

status: ready

@status-im-auto
Copy link
Member

status-im-auto commented Jan 17, 2024

Jenkins Builds

Click to see older builds (53)
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ af408c7 #1 2024-01-17 03:02:20 ~5 min tests 📄log
✔️ af408c7 #1 2024-01-17 03:03:49 ~6 min ios 📱ipa 📲
✔️ af408c7 #1 2024-01-17 03:04:30 ~7 min android-e2e 🤖apk 📲
✔️ af408c7 #1 2024-01-17 03:04:30 ~7 min android 🤖apk 📲
✔️ aac298c #2 2024-01-18 01:12:42 ~5 min tests 📄log
✔️ aac298c #2 2024-01-18 01:14:07 ~7 min android-e2e 🤖apk 📲
✔️ aac298c #2 2024-01-18 01:15:25 ~8 min android 🤖apk 📲
✔️ aac298c #2 2024-01-18 01:17:12 ~10 min ios 📱ipa 📲
a2800d7 #3 2024-01-18 02:02:42 ~1 min tests 📄log
✔️ 94f9843 #4 2024-01-18 02:10:51 ~4 min tests 📄log
✔️ 94f9843 #4 2024-01-18 02:13:16 ~7 min android 🤖apk 📲
✔️ 94f9843 #4 2024-01-18 02:13:17 ~7 min android-e2e 🤖apk 📲
✔️ 94f9843 #4 2024-01-18 02:15:19 ~9 min ios 📱ipa 📲
✔️ dad64ca #5 2024-01-18 02:21:54 ~5 min tests 📄log
✔️ dad64ca #5 2024-01-18 02:23:30 ~6 min android 🤖apk 📲
✔️ dad64ca #5 2024-01-18 02:23:58 ~7 min android-e2e 🤖apk 📲
✔️ dad64ca #5 2024-01-18 02:25:44 ~9 min ios 📱ipa 📲
✔️ 1e516b4 #7 2024-01-22 14:49:04 ~5 min tests 📄log
✔️ 1e516b4 #7 2024-01-22 14:50:53 ~7 min ios 📱ipa 📲
✔️ 1e516b4 #7 2024-01-22 14:51:58 ~8 min android-e2e 🤖apk 📲
✔️ 1e516b4 #7 2024-01-22 14:52:22 ~8 min android 🤖apk 📲
✔️ 7890f64 #8 2024-01-23 15:54:56 ~4 min tests 📄log
✔️ 7890f64 #8 2024-01-23 15:56:55 ~6 min android 🤖apk 📲
✔️ 7890f64 #8 2024-01-23 15:56:59 ~6 min android-e2e 🤖apk 📲
✔️ 7890f64 #8 2024-01-23 15:57:24 ~7 min ios 📱ipa 📲
✔️ bba9b86 #9 2024-01-24 04:34:13 ~5 min tests 📄log
✔️ bba9b86 #9 2024-01-24 04:35:41 ~6 min ios 📱ipa 📲
✔️ bba9b86 #9 2024-01-24 04:36:50 ~7 min android-e2e 🤖apk 📲
✔️ bba9b86 #9 2024-01-24 04:37:05 ~8 min android 🤖apk 📲
✔️ a17cbf0 #10 2024-01-24 21:08:10 ~4 min tests 📄log
✔️ a17cbf0 #10 2024-01-24 21:09:52 ~6 min ios 📱ipa 📲
✔️ a17cbf0 #10 2024-01-24 21:11:02 ~7 min android-e2e 🤖apk 📲
✔️ a17cbf0 #10 2024-01-24 21:11:07 ~7 min android 🤖apk 📲
✔️ eee36e6 #11 2024-01-25 03:31:22 ~4 min tests 📄log
✔️ eee36e6 #11 2024-01-25 03:32:43 ~6 min ios 📱ipa 📲
✔️ eee36e6 #11 2024-01-25 03:33:39 ~7 min android 🤖apk 📲
✔️ eee36e6 #11 2024-01-25 03:33:50 ~7 min android-e2e 🤖apk 📲
6137416 #12 2024-01-30 21:39:49 ~5 min tests 📄log
✔️ 6137416 #12 2024-01-30 21:41:09 ~6 min ios 📱ipa 📲
✔️ 6137416 #12 2024-01-30 21:41:15 ~6 min android 🤖apk 📲
✔️ 6137416 #12 2024-01-30 21:42:26 ~7 min android-e2e 🤖apk 📲
04d0c58 #13 2024-01-30 21:48:32 ~4 min tests 📄log
✔️ 04d0c58 #13 2024-01-30 21:50:18 ~6 min ios 📱ipa 📲
✔️ 04d0c58 #13 2024-01-30 21:51:20 ~7 min android-e2e 🤖apk 📲
✔️ 04d0c58 #13 2024-01-30 21:51:22 ~7 min android 🤖apk 📲
d015011 #14 2024-01-31 03:34:52 ~4 min tests 📄log
✔️ d015011 #14 2024-01-31 03:36:54 ~6 min ios 📱ipa 📲
✔️ d015011 #14 2024-01-31 03:37:29 ~7 min android-e2e 🤖apk 📲
✔️ d015011 #14 2024-01-31 03:37:40 ~7 min android 🤖apk 📲
a6b5616 #15 2024-02-01 18:26:03 ~5 min tests 📄log
✔️ a6b5616 #15 2024-02-01 18:27:26 ~6 min ios 📱ipa 📲
✔️ a6b5616 #15 2024-02-01 18:28:45 ~7 min android-e2e 🤖apk 📲
✔️ a6b5616 #15 2024-02-01 18:28:48 ~7 min android 🤖apk 📲
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ f86d0e5 #16 2024-02-01 22:20:51 ~5 min tests 📄log
✔️ f86d0e5 #16 2024-02-01 22:22:11 ~6 min ios 📱ipa 📲
✔️ f86d0e5 #16 2024-02-01 22:22:27 ~6 min android 🤖apk 📲
✔️ f86d0e5 #16 2024-02-01 22:22:35 ~6 min android-e2e 🤖apk 📲
✔️ 01dac48 #17 2024-02-01 23:45:22 ~5 min tests 📄log
✔️ 01dac48 #17 2024-02-01 23:46:46 ~6 min ios 📱ipa 📲
✔️ 01dac48 #17 2024-02-01 23:47:38 ~7 min android-e2e 🤖apk 📲
✔️ 01dac48 #17 2024-02-01 23:47:55 ~7 min android 🤖apk 📲

@ulisesmac
Copy link
Contributor Author

Update, since the change to solve:

Was very small, I decided to add it in this PR

@pavloburykh
Copy link
Contributor

QA notes:

Check issue is not reproducible in this PR.

@pavloburykh
Copy link
Contributor

@ulisesmac thanks for the PR.

Please, do not forget to move PRs from REVIEW to E2E column once PR is reviewed and ready for QA.

Could you please rebase current PR, resolve conflicts and after that move to E2E column to trigger e2e run? Thank you.

@ulisesmac ulisesmac force-pushed the 18495-wrong-asset-selection branch 2 times, most recently from da08559 to 1e516b4 Compare January 22, 2024 14:43
@ulisesmac
Copy link
Contributor Author

@ulisesmac thanks for the PR.

Please, do not forget to move PRs from REVIEW to E2E column once PR is reviewed and ready for QA.

Could you please rebase current PR, resolve conflicts and after that move to E2E column to trigger e2e run? Thank you.

Done! thanks

@ilmotta
Copy link
Contributor

ilmotta commented Jan 26, 2024

@Parveshdhull @ilmotta @OmarBasem @J-Son89 @briansztamfater

Pinging you again, because this might be another problem related to navigating before letting re-frame propagate its state:

#18593 (comment)

Hey @ulisesmac, me again :)

Something tells me we should just not have these issues if the code assumed that data will eventually arrive and out of order due to the asynchronicity of React Navigation, RPC requests, JS timers here and there, animations and so on.

Effects in :fx are actioned in order, so the dispatched events will be queued and, later handled, in order supplied. FIFO.

-- https://github.com/day8/re-frame/blob/39adca93673f334dc751ee2d99d340b51a9cc6db/docs/api-builtin-effects.md#-dispatch

Hence, each individual effect may cause other operations to be scheduled, which will, in turn be processed in a separate queue or they will dispatch async operations (e.g. Navigation).

With this principle in mind, if our views are all properly subscribing to data, it shouldn't matter if the navigation finishes before the state is propagated, because the screen will react accordingly. If we want to avoid the view from flashing on screen with empty elements, then as @Parveshdhull said, we have techniques for loading indicators.

So to summarize my long train of thought, I believe by implementing the bare bones good practices to use re-frame (or any Redux app for that matter) we will arrive at something that just works, e.g no subs in the mount phase to initialize local state.

:fx [[:dispatch-later
{:ms 1
:dispatch [:navigate-to-within-stack [:wallet-send-input-amount stack-id]]}]]}))
:fx [[:navigate-to-within-stack [:wallet-send-input-amount stack-id]]]}))
Copy link
Member

@briansztamfater briansztamfater Jan 26, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @ulisesmac for warning about this PR and discussion! We need to update DB when navigating, so fx might not be what we want here. This would be replaced with a dispatch if we merge #18593, so better to reach to a common agreement before merging any of these PRs to avoid unnecessarily reverting changes. Context: #18593 (comment)

Copy link
Member

@briansztamfater briansztamfater Jan 26, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, another topic, probably for other PR, but it is confusing to have navigation effects and events with same naming, like

{:events [:navigate-back]}
and
(rf/reg-fx :navigate-back

.......
or
.......

{:events [:navigate-to-within-stack]}
and
(rf/reg-fx :navigate-to-within-stack navigate-to-within-stack)

We should rename events to have navigation / namespace prefix as per our guidelines

### Subscription names and event names
Always register events and subscriptions using a meaningful namespace, but don't
namespace them with `::`. We understand it's a controversial decision because
there are both pros and cons to such practice.
Whenever appropriate, it's also recommended to use _fake_ namespaces to convey
more knowledge in the keyword about which bounded context (domain) it refers to.
You may also use dots to convey hierarchical structures.

so events are like :navigation/navigate-back, :navigation/navigate-back-to, :navigation/navigate-to, :navigation/navigate-to-within-stack, etc, or even better they could be improved as :navigation/pop, :navigation/pop-to, :navigation/push, :navigation/push-within-stack, etc, to comply with common nomenclature for stack navigations

@ulisesmac
Copy link
Contributor Author

It seems the approach the team want to take is to make the view reactive to these values.

TBH I don't agree, if the requestAnimationFrame approach doesn't hurt, I'd take it, because I'm sure we will face these problems in other places too, or probably we are already facing them and devs are just silently doing some hacks.

@ilmotta

If we want to avoid the view from flashing on screen with empty elements, then as @Parveshdhull said, we have techniques for loading indicators.

Having a loading indicator for views that expect incoming data is completely OK, but having a loader for local state propagation is too much IMO.

In this case the user picks a token to make a transaction, then we navigate and the new view will "load" for ~25 ms, after that we'll show the token the user previously picked. No network calls or storage read involved in this process and we are "loading" or blinking. I think designing/implementing a loader component for these 25 ms is too much.

At least for me, prod builds are facing this issue almost all the time. So I'm going to solve it with a temporary blink and I'll open another issue to check what kind of loader we'll show.

@ilmotta
Copy link
Contributor

ilmotta commented Jan 30, 2024

Having a loading indicator for views that expect incoming data is completely OK, but having a loader for local state propagation is too much IMO.

Completely agree here @ulisesmac, for local state sounds like a smell to have a loading indicator. Loading indicators should be used sparingly. Anything under ~100-200ms and it might be better to just not show the information until the data is ready, otherwise the user will see the indicator flash on screen pretty rapidly.

The thing to me is to understand what are the minimum data necessary to render the screen. It's about the granularity of the loading strategy. If the data also includes local state, so be it. The point is that the user shouldn't see too many elements flashing on screen (especially big ones) or see temporarily incomplete values while the data hasn't arrived (a problem we currently have when fetching permissions for a community).

Spotify on iOS happily shows me big 3 dots when the screen is not cached yet, and pop in small elements that arrive 1-2s later. Our designers don't like this approach, so sometimes it's also about personal preference.

Whatever the best UX is, that's where we should go 👍🏼

@ulisesmac ulisesmac force-pushed the 18495-wrong-asset-selection branch 2 times, most recently from 6137416 to 04d0c58 Compare January 30, 2024 21:43
@ulisesmac
Copy link
Contributor Author

Thanks to everyone for the effort reviewing this PR.

@VolodLytvynenko This PR is ready to get reviewed again, the issue is solved, however, there's a short blink when we visit the screen, it'll be addressed separately when this PR gets merged

@status-im-auto
Copy link
Member

85% of end-end tests have passed

Total executed tests: 48
Failed tests: 5
Expected to fail tests: 2
Passed tests: 41
IDs of failed tests: 703133,704613,702851,704615,702775 
IDs of expected to fail tests: 703503,703629 

Failed tests (5)

Click to expand
  • Rerun failed tests

  • Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_activity_center_contact_request_accept_swipe_mark_all_as_read, id: 702851

    Device 1: Tap on found: Button
    # STEP: Device1 check that contact appeared in contact list mutually

    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/connectionpool.py:703: in urlopen
        httplib_response = self._make_request(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/connectionpool.py:449: in _make_request
        six.raise_from(e, None)
    <string>:3: in raise_from
        ???
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/connectionpool.py:444: in _make_request
        httplib_response = conn.getresponse()
    /usr/lib/python3.10/http/client.py:1375: in getresponse
        response.begin()
    /usr/lib/python3.10/http/client.py:318: in begin
        version, status, reason = self._read_status()
    /usr/lib/python3.10/http/client.py:287: in _read_status
        raise RemoteDisconnected("Remote end closed connection without"
    E   http.client.RemoteDisconnected: Remote end closed connection without response
    
    During handling of the above exception, another exception occurred:
    activity_center/test_activity_center.py:133: in test_activity_center_contact_request_accept_swipe_mark_all_as_read
        self.device_2.just_fyi('Device1 check that contact appeared in contact list mutually')
    ../views/base_view.py:394: in just_fyi
        self.driver.execute_script("sauce:context=STEP: %s" % some_str)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:405: in execute_script
        return self.execute(command, {"script": script, "args": converted_args})["value"]
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:343: in execute
        response = self.command_executor.execute(driver_command, params)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:291: in execute
        return self._request(command_info[0], url, body=data)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:312: in _request
        response = self._conn.request(method, url, body=body, headers=headers)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:78: in request
        return self.request_encode_body(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:170: in request_encode_body
        return self.urlopen(method, url, **extra_kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:376: in urlopen
        response = conn.urlopen(method, u.request_uri, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/connectionpool.py:787: in urlopen
        retries = retries.increment(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/util/retry.py:550: in increment
        raise six.reraise(type(error), error, _stacktrace)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/packages/six.py:769: in reraise
        raise value.with_traceback(tb)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/connectionpool.py:703: in urlopen
        httplib_response = self._make_request(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/connectionpool.py:449: in _make_request
        six.raise_from(e, None)
    <string>:3: in raise_from
        ???
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/connectionpool.py:444: in _make_request
        httplib_response = conn.getresponse()
    /usr/lib/python3.10/http/client.py:1375: in getresponse
        response.begin()
    /usr/lib/python3.10/http/client.py:318: in begin
        version, status, reason = self._read_status()
    /usr/lib/python3.10/http/client.py:287: in _read_status
        raise RemoteDisconnected("Remote end closed connection without"
     ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
    



    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_edit_delete_message_when_offline, id: 704615

    Device 1: Looking for a message by text: text after edit
    Device 1: Looking for a message by text: message to delete

    critical/chats/test_public_chat_browsing.py:796: in test_community_edit_delete_message_when_offline
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Updated message 'text after edit' is not delivered to the receiver
    E    Message 'message to delete' was not deleted for the receiver
    



    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_restore_multiaccount_with_waku_backup_remove_switch, id: 703133

    Device 1: Find Button by accessibility id: show-profiles
    Device 1: Tap on found: Button

    critical/chats/test_public_chat_browsing.py:276: in test_restore_multiaccount_with_waku_backup_remove_switch
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     zQ3...dWXh5 was not restored as a contact from waku backup!
    E    zQ3...Vacac was not restored as a contact from waku backup!
    E    admin_open was not restored from waku-backup!!
    E    member_open was not restored from waku-backup!!
    E    admin_closed was not restored from waku-backup!!
    E    member_closed was not restored from waku-backup!!
    



    Device sessions

    Class TestDeepLinksOneDevice:

    1. test_links_open_universal_links_from_chat, id: 704613

    Device 1: Find Text by xpath: //android.view.ViewGroup[@content-desc='chat-item']//android.widget.TextView[contains(@text,'https://status.app/c/G0UAAMTyNsn2QZDEG0EXftOl8pOEfwEBOOSA_YTfIk85xmADDgINGmxpUHAXzK36bN0fK42Xf4YD2yjPk1z2pbFwFw==#zQ3shgkDFQEnwxji7CvMTokMrShmC2UgxiJ549X5Aw746zQrK')]

    critical/test_deep_and_universal_links.py:70: in test_links_open_universal_links_from_chat
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Closed community was not requested to join by the url https://status.app/c/G00AAGS9TbI9mSR-ZNmFrhRjNuEeXAAbcAIUaLLJyjMOG3ACJQ12oIHD78QhzO9s_T5bUeU7rnATWJg3mGgTUemrAg==#zQ3shspPKCZ1VPVQ9dLXGufUGvGphjxVwrcZ6rkZc7S39T4b3
    E    Closed community was not requested to join by the url https://status.app/c/G0UAAMTyNsn2QZDEG0EXftOl8pOEfwEBOOSA_YTfIk85xmADDgINGmxpUHAXzK36bN0fK42Xf4YD2yjPk1z2pbFwFw==#zQ3shgkDFQEnwxji7CvMTokMrShmC2UgxiJ549X5Aw746zQrK
    



    Device sessions

    2. test_links_deep_links, id: 702775

    Device 1: Find BrowserTab by accessibility id: browser-stack-tab
    Device 1: Tap on found: BrowserTab

    critical/test_deep_and_universal_links.py:114: in test_links_deep_links
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Closed community was not requested to join by the deep link status.app://c/G00AAGS9TbI9mSR-ZNmFrhRjNuEeXAAbcAIUaLLJyjMOG3ACJQ12oIHD78QhzO9s_T5bUeU7rnATWJg3mGgTUemrAg==#zQ3shspPKCZ1VPVQ9dLXGufUGvGphjxVwrcZ6rkZc7S39T4b3
    E    Closed community was not requested to join by the deep link status.app://c/G0UAAMTyNsn2QZDEG0EXftOl8pOEfwEBOOSA_YTfIk85xmADDgINGmxpUHAXzK36bN0fK42Xf4YD2yjPk1z2pbFwFw==#zQ3shgkDFQEnwxji7CvMTokMrShmC2UgxiJ549X5Aw746zQrK
    



    Device sessions

    Expected to fail tests (2)

    Click to expand

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_join_when_node_owner_offline, id: 703629

    Device 2: Tap on found: Button
    Device 2: Looking for community: 'open community'

    critical/chats/test_public_chat_browsing.py:1177: in test_community_join_when_node_owner_offline
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     open community is not listed inside Pending communities tab
    E    open community is not listed inside Joined communities tab 
    

    [[Can't join a community if admin goes offline, https://github.com//issues/17678]]

    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_community_discovery, id: 703503

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Curated communities not loading, https://github.com//issues/17852]]

    Passed tests (41)

    Click to expand

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782
    Device sessions

    2. test_1_1_chat_text_message_delete_push_disappear, id: 702733
    Device sessions

    3. test_1_1_chat_push_emoji, id: 702813
    Device sessions

    4. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745
    Device sessions

    5. test_1_1_chat_edit_message, id: 702855
    Device sessions

    6. test_1_1_chat_send_image_save_and_share, id: 703391
    Device sessions

    7. test_1_1_chat_pin_messages, id: 702731
    Device sessions

    8. test_1_1_chat_message_reaction, id: 702730
    Device sessions

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_markdown_support, id: 702809
    Device sessions

    2. test_community_hashtag_links_to_community_channels, id: 702948
    Device sessions

    3. test_community_mentions_push_notification, id: 702786
    Device sessions

    4. test_community_leave, id: 702845
    Device sessions

    Class TestActivityMultipleDevicePRTwo:

    1. test_activity_center_mentions, id: 702957
    Device sessions

    2. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    Class TestActivityMultipleDevicePR:

    1. test_navigation_jump_to, id: 702936
    Device sessions

    2. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_community_copy_and_paste_message_in_chat_input, id: 702742
    Device sessions

    2. test_community_undo_delete_message, id: 702869
    Device sessions

    3. test_community_navigate_to_channel_when_relaunch, id: 702846
    Device sessions

    4. test_community_mute_community_and_channel, id: 703382
    Device sessions

    Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_add_contact_field_validation, id: 702777
    Device sessions

    2. test_activity_center_contact_request_decline, id: 702850
    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_several_images_send_reply, id: 703194
    Device sessions

    2. test_community_one_image_send_reply, id: 702859
    Device sessions

    3. test_community_emoji_send_copy_paste_reply, id: 702840
    Device sessions

    4. test_community_mark_all_messages_as_read, id: 703086
    Device sessions

    5. test_community_contact_block_unblock_offline, id: 702894
    Device sessions

    6. test_community_message_delete, id: 702839
    Device sessions

    7. test_community_message_send_check_timestamps_sender_username, id: 702838
    Device sessions

    8. test_community_links_with_previews_github_youtube_twitter_gif_send_enable, id: 702844
    Device sessions

    9. test_community_message_edit, id: 702843
    Device sessions

    10. test_community_unread_messages_badge, id: 702841
    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_pin_messages, id: 702732
    Device sessions

    2. test_group_chat_mute_chat, id: 703495
    Device sessions

    3. test_group_chat_send_image_save_and_share, id: 703297
    Device sessions

    4. test_group_chat_reactions, id: 703202
    Device sessions

    5. test_group_chat_join_send_text_messages_push, id: 702807
    Device sessions

    6. test_group_chat_offline_pn, id: 702808
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUiTwo:

    1. test_1_1_chat_delete_via_long_press_relogin, id: 702784
    Device sessions

    2. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783
    Device sessions

    3. test_1_1_chat_mute_chat, id: 703496
    Device sessions

    @VolodLytvynenko
    Copy link
    Contributor

    Hi @ulisesmac. PR is tested and ready to be merged. Thank you for your work!

    - Makes Token malli schema more lenient
    - Make `get-standard-crypto-format` able to work with `nil` values
    - Refactor token screen to move subscriptions inside render function
    @ulisesmac ulisesmac merged commit b6ddd8b into develop Feb 1, 2024
    6 checks passed
    @ulisesmac ulisesmac deleted the 18495-wrong-asset-selection branch February 1, 2024 23:51
    ulisesmac added a commit that referenced this pull request Feb 2, 2024
    * Fix exception thrown re-frame don't have the subs' value ready
    
    * Make Token malli schema more lenient
    
    *  Make `get-standard-crypto-format` able to work with `nil` values
    
    *  Refactor token screen to move subscriptions inside render function
    
    * Make token input reactive to on-swap
    
    * Remove `crypto-currency?` atom to properly react to state changes
    
    * Fix component tests
    @ulisesmac ulisesmac mentioned this pull request Jul 18, 2024
    8 tasks
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    Archived in project
    Archived in project