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

feat: multiple billing status changes. #2629

Merged
merged 25 commits into from
Oct 15, 2021

Conversation

amass01
Copy link
Member

@amass01 amass01 commented Oct 8, 2021

This diff consumes the new pi API setting billingstatuschangesmax,
which should be used as the maximum allowed billing status changes.

After this commit all approved proposals with less billing status
changes than the maximum will have the Set Biiling Status
button enabled for admins.

This also uses the batched /billingstatuschanges route by using
useMachineFetch in useBillingStatusChanges to fetch the
billing status changes of all approved proposals page by page.


Closes #2627.

This diff consumes the new pi API setting `billingstatuschangesmax`,
which should be used as the maximum allowed billing status changes.

After this commit all approved proposals with less billing status
changes than the maximum will have the `Set Biiling Status` enabled.
@amass01 amass01 changed the title [wip] feat: allow multiple billing status changes. feat: allow multiple billing status changes. Oct 8, 2021
@amass01 amass01 marked this pull request as ready for review October 8, 2021 23:25
@amass01
Copy link
Member Author

amass01 commented Oct 9, 2021

needs a e2e test.

@amass01 amass01 changed the title feat: allow multiple billing status changes. feat: multiple billing status changes & batched /billingstatuschanges. Oct 11, 2021
Copy link
Member

@lukebp lukebp left a comment

Choose a reason for hiding this comment

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

tACK

src/constants.js Show resolved Hide resolved
@lukebp
Copy link
Member

lukebp commented Oct 11, 2021

  1. Why is the billing status changes request being fired off so late?
  2. Shouldn't the loading animation be displayed until all of the required data has been retrieved?
tmp-2021-10-11_15.55.13.mp4

image

@amass01
Copy link
Member Author

amass01 commented Oct 11, 2021

@lukebp

  1. we fetch the proposals, then vote summaries and only then we know
    which proposals need the billing status changes.
  2. hrmm it should be possible to add the loading indicator while
    loading the data.

one thing to keep in mind that in some cases we gonna show the loading indicator
and then have no buttons when the data is loaded.

@lukebp
Copy link
Member

lukebp commented Oct 11, 2021

1 makes sense. Not much we can do about that.

For 2, I think the loading indicator should be displayed until all required data has been fetched. I'd rather we display the loading indcator a little longer then necessary for proposals that don't need the button then to add elements to the DOM after the list views have already been rendered.

@amass01
Copy link
Member Author

amass01 commented Oct 11, 2021

sweet, will add an indicator

@lukebp
Copy link
Member

lukebp commented Oct 12, 2021

This is a backend issue, but this error is not very human readable. I would expect it to read something like:
Error: invalid billing status transition, approved to approved is not allowed

image

@lukebp
Copy link
Member

lukebp commented Oct 12, 2021

  1. we fetch the proposals, then vote summaries and only then we know which proposals need the billing status changes.

I had some additional thoughts on this.

You can improve the performance if you send the billing status changes request concurrently with the other requests. You don't really need to wait for the vote summary to be returned. You already know the approved proposals from looking at the inventory reply. Fetch the billing statuses for the approved proposals if the user is an admin.

@amass01 amass01 changed the title feat: multiple billing status changes & batched /billingstatuschanges. feat: multiple billing status changes. Oct 13, 2021
@amass01
Copy link
Member Author

amass01 commented Oct 13, 2021

After some discussions on matrix we came up with the following TODOs:

  • Fetch billing status changes after receiving inventory's approved proposals
  • Fetch billing status changes only if current user is admin
  • Store billing status changes metadata in a separate redux stored mapped by token
  • Show placeholder animation in list view if billing status changes metadata is missing
  • In detail view fetch billing status changes if current user is admin and the proposal is approved
    and wait for all information before hiding the placeholder animation.

@amass01
Copy link
Member Author

amass01 commented Oct 13, 2021

This is a backend issue, but this error is not very human readable. I would expect it to read something like: Error: invalid billing status transition, approved to approved is not allowed

image

Addressed in decred/politeia#1543.

@amass01
Copy link
Member Author

amass01 commented Oct 13, 2021

Progress:

  • Fetch billing status changes after receiving inventory's approved proposals
  • Fetch billing status changes only if current user is admin
  • Store billing status changes metadata in a separate redux stored mapped by token
  • Show placeholder animation in list view if billing status changes metadata is missing
  • In detail view fetch billing status changes if current user is admin and the proposal is approved
    and wait for all information before hiding the placeholder animation.

Screen recording of list view with 7 approved proposals:

Screen.Recording.2021-10-13.at.21.38.03.mov

@amass01
Copy link
Member Author

amass01 commented Oct 13, 2021

  • In detail view fetch billing status changes if current user is admin and the proposal is approved
    and wait for all information before hiding the placeholder animation.

Admin:
https://user-images.githubusercontent.com/10324528/137198150-8d215856-531e-45c2-b082-180a20dee2e8.mov

Normal user:
https://user-images.githubusercontent.com/10324528/137198123-298dbaa9-e893-48a7-8df2-026250ac9aaa.mov

Copy link
Member

@lukebp lukebp left a comment

Choose a reason for hiding this comment

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

UX looks good. Found two bugs with the requests though.

  1. The billing status changes request is being sent on initial load of the Under Review tab. It's requesting the approved proposals, but it's being sent on the wrong tab.
  2. On the proposal details page, the comments/v1/votes request is being sent twice. This duplicate request behavior is not present on master.

@amass01
Copy link
Member Author

amass01 commented Oct 13, 2021

@lukebp

  1. The billing status changes request is being sent on initial load of the Under Review tab. It's requesting the approved proposals, but it's being sent on the wrong tab.

Addressed.

@amass01
Copy link
Member Author

amass01 commented Oct 14, 2021

@lukebp

  1. Addressed for good.
  2. Apparently it's a master issue and should be addressed separately:
    [bug] Proposal detail page fires duplicate comment votes requests. #2633

Copy link
Member

@lukebp lukebp left a comment

Choose a reason for hiding this comment

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

You're fetching the billing status changes for the entire approved inventory instead of matching the existing pagnation behavior.

image

which is already does the pagination
@amass01
Copy link
Member Author

amass01 commented Oct 14, 2021

You're fetching the billing status changes for the entire approved inventory instead of matching the existing pagnation behavior.

image

@lukebp addressed by moving the fetching from useBillingStatusChanges to useProposalsBatch which
already does the pagination and fetches the records, vote & proposal summaries for the list page by page.
I check now if current user is admin & current tab is approved & billing status changes metadata is
missing i fetch the billing status changes.

Copy link
Member

@lukebp lukebp left a comment

Choose a reason for hiding this comment

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

tACK on firefox

Needs e2e tests and code approval from @tiagoalvesdulce.

@amass01
Copy link
Member Author

amass01 commented Oct 14, 2021

@lukebp @tiagoalvesdulce
e2e tests added

here are the e2e results of ccaa60c:
──────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  admin/account.js                                                               (1 of 14)


  Admin account actions
    ✓ Can search users (2231ms)
    ✓ Can navigate to the user page (1679ms)
    ✓ Can activate/deactivate a user (4996ms)
    ✓ Can mark user as paid (76ms)
    ✓ Can rescan user credits (1882ms)


  5 passing (11s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        5                                                                                │
  │ Passing:      5                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     10 seconds                                                                       │
  │ Spec Ran:     admin/account.js                                                                 │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  admin/comments.js                                                              (2 of 14)


  User admin comments
    ✓ Can censor comments (7685ms)


  1 passing (8s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        1                                                                                │
  │ Passing:      1                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     7 seconds                                                                        │
  │ Spec Ran:     admin/comments.js                                                                │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  admin/proposals.js                                                             (3 of 14)


  Admin proposals actions
    ✓ Should allow admins to approve propsoals (7023ms)
    ✓ Should allow admins to report a proposal as a spam (4213ms)
    ✓ Should allow admins to abandon proposals (6273ms)
    ✓ Should allow proposal author to authorize voting (4744ms)
    ✓ Should allow admins to set the billing status of an active propsoal (4385ms)
    ✓ Should allow admins to set the billing status of a closed propsoal (5362ms)
    ✓ Should allow admins to set the billing status of a completed propsoal (5300ms)
    ✓ Shouldn't allow admins set a billing status when number of billing status changes exceeds the `billingstatuschangesmax` policy (5265ms)


  8 passing (43s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        8                                                                                │
  │ Passing:      8                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     42 seconds                                                                       │
  │ Spec Ran:     admin/proposals.js                                                               │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  comments/authorUpdates.js                                                      (4 of 14)


  Proposal author updates
    ✓ Should allow proposal author to submit updates on active proposals & allow normal users to reply only on the latest author update (12977ms)
    ✓ Shouldn't allow proposal author to submit updates on closed proposals (4841ms)
    ✓ Shouldn't allow proposal author to submit updates on completed proposals (4458ms)


  3 passing (22s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        3                                                                                │
  │ Passing:      3                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     22 seconds                                                                       │
  │ Spec Ran:     comments/authorUpdates.js                                                        │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  comments/comments.js                                                           (5 of 14)


  User comments
    ✓ Shouldn't allow submitting new comments if paywall not paid (5781ms)
    ✓ Should allow user who paid the paywall to add new comments & vote or reply on others' comments (11564ms)

  Comments downloads
    ✓ should publicly allow users to download comments bundle (4722ms)
    ✓ should publicly allow users to download comments timestamps (4122ms)

  Comments error handling
    ✓ should display login modal when commenting with an expired user session (3328ms)


  5 passing (30s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        5                                                                                │
  │ Passing:      5                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     29 seconds                                                                       │
  │ Spec Ran:     comments/comments.js                                                             │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  comments/commentVotes.js                                                       (6 of 14)


  Comments Votes
    succeeded votes
      ✓ should submit comments votes successfully (4848ms)
      ✓ should prevent multi-clicking (3168ms)
    failed votes
      ✓ should display error message (6565ms)
      ✓ should reset votes count on error (8185ms)
      ✓ should display login modal when voting with an expired user session (3827ms)


  5 passing (27s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        5                                                                                │
  │ Passing:      5                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     26 seconds                                                                       │
  │ Spec Ran:     comments/commentVotes.js                                                         │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  proposal/create.js                                                             (7 of 14)


  Proposal Create
    ✓ Non-paid user can not create proposals (4069ms)


  1 passing (4s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        1                                                                                │
  │ Passing:      1                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     4 seconds                                                                        │
  │ Spec Ran:     proposal/create.js                                                               │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  proposal/detail.js                                                             (8 of 14)


  Proposal details
    regular proposal renders correctly
      ✓ should render a propsoal with a short token (1913ms)
      ✓ should render a proposal with a full token (850ms)
    proposal downloads
      ✓ should publicly allow to download proposal bundle (1129ms)
      ✓ should publicly allow to download proposal timestamps (1202ms)
    invalid proposal rendering
      ✓ should dislpay not found message for nonexistent proposals (276ms)
    user proposals actions
      ✓ should be able to logout from unvetted proposal details page (6302ms)
      ✓ should render unvetted proposal details after admin/author login (7733ms)
    proposal status tags
      ✓ should display unvetted status tag properly (1194ms)
      ✓ should display unvetted censored status tag properly (1264ms)
      ✓ should display unvetted abandoned status tag properly (1176ms)
      ✓ should display censored status tag properly (1490ms)
      ✓ should display abandoned status tag properly (1402ms)
      ✓ should display under review status tag properly (1235ms)
      ✓ should display vote authorized status tag properly (1326ms)
      ✓ should display vote authorized status tag properly (1209ms)
      ✓ should display rejected status tag properly (1241ms)
      ✓ should display active status tag properly (1096ms)
      ✓ should display closed status tag properly (1089ms)
      ✓ should display completed status tag properly (1103ms)
    propsoal status metadata
      ✓ should display proposal status metadata on censored proposal (4779ms)
      ✓ should display proposal status metadata on abandoned proposal (4790ms)
      ✓ should display proposal status metadata on closed proposal (4214ms)


  22 passing (49s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        22                                                                               │
  │ Passing:      22                                                                               │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     48 seconds                                                                       │
  │ Spec Ran:     proposal/detail.js                                                               │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  proposal/edit.js                                                               (9 of 14)


  Proposal Edit
    ✓ Can edit a public proposal as a proposal owner (10445ms)
    ✓ Can't edit a proposal if not the owner (4915ms)
    ✓ Can't edit an authorized voting proposal (4758ms)
    ✓ Can't edit without making any changes (4500ms)


  4 passing (25s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        4                                                                                │
  │ Passing:      4                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     24 seconds                                                                       │
  │ Spec Ran:     proposal/edit.js                                                                 │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  proposal/formErrorCodes.js                                                    (10 of 14)


  Proposal Form Error Codes Mapping
    ✓ Should map invalid name error code to a readable error message (1829ms)
    ✓ Should map invalid start date error code to a readable error message (1110ms)
    ✓ Should map invalid end date error code to a readable error message (1054ms)
    ✓ Should map invalid amount error code to a readable error message (1045ms)
    ✓ Should map invalid domain error code to a readable error message (1043ms)


  5 passing (6s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        5                                                                                │
  │ Passing:      5                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     6 seconds                                                                        │
  │ Spec Ran:     proposal/formErrorCodes.js                                                       │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  proposal/list.js                                                              (11 of 14)


  Records list
    records and inventory pagination
      ✓ should render list correctly when some status are empty (2377ms)
      ✓ should switch tabs and show empty message when list is empty (2424ms)
      ✓ should render all status even when page batch is not complete (1572ms)
      ✓ should scan inventory pages correctly (12708ms)
    proposals list
      ✓ should render first proposals batch according to inventory order (556ms)
      ✓ should switch tabs and load proposals correctly (1723ms)
      ✓ should list legacy proposals (4253ms)
      ✓ should load sidebar according to screen resolution (312ms)
      ✓ should render loading placeholders properly (412ms)
    admin proposals list
      ✓ can render records list according to inventory order (1326ms)
      ✓ can render records and inventory pagination correctly (3797ms)
      ✓ can switch tabs and load proposals correctly (1685ms)
    Big screens and inventory length multiple of proposals page size
      ✓ can render under review records with 5 autorized tokens (1880ms)
      ✓ can render under review records with 5 started tokens (85ms)
      ✓ can render under review records with 5 tokens started and authorized (48ms)
      ✓ can render 10 authorized proposals (48ms)


  16 passing (43s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        16                                                                               │
  │ Passing:      16                                                                               │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     43 seconds                                                                       │
  │ Spec Ran:     proposal/list.js                                                                 │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  user/2fa.js                                                                   (12 of 14)


  Two-Factor Authentication
    ✓ should set and reset the 2fa code successfully (5080ms)
    ✓ should display error when setting up an invalid 2fa code (2394ms)


  2 passing (8s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        2                                                                                │
  │ Passing:      2                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     7 seconds                                                                        │
  │ Spec Ran:     user/2fa.js                                                                      │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  user/login.js                                                                 (13 of 14)


  Login
    ✓ Can login (2564ms)
    ✓ Can login with an unpaid user (1930ms)
    ✓ Can logout with a paid user (2235ms)
    ✓ Can logout with an unpaid user (12086ms)
    ✓ Can logout with an unpaid user on payment screen (12802ms)

  2FA Login
    ✓ should display the 2FA modal when user totp is active (2098ms)
    ✓ should display errors when 2FA code is invalid (1283ms)


  7 passing (35s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        7                                                                                │
  │ Passing:      7                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     35 seconds                                                                       │
  │ Spec Ran:     user/login.js                                                                    │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  user/register.js                                                              (14 of 14)


  Registration
    ✓ Can register users (3313ms)
    ✓ can pay the registration fee (11210ms)


  2 passing (15s)


  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        2                                                                                │
  │ Passing:      2                                                                                │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        false                                                                            │
  │ Duration:     14 seconds                                                                       │
  │ Spec Ran:     user/register.js                                                                 │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


====================================================================================================

  (Run Finished)


       Spec                                              Tests  Passing  Failing  Pending  Skipped
  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ ✔  admin/account.js                         00:10        5        5        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  admin/comments.js                        00:07        1        1        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  admin/proposals.js                       00:42        8        8        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  comments/authorUpdates.js                00:22        3        3        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  comments/comments.js                     00:29        5        5        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  comments/commentVotes.js                 00:26        5        5        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  proposal/create.js                       00:04        1        1        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  proposal/detail.js                       00:48       22       22        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  proposal/edit.js                         00:24        4        4        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  proposal/formErrorCodes.js               00:06        5        5        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  proposal/list.js                         00:43       16       16        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  user/2fa.js                              00:07        2        2        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  user/login.js                            00:35        7        7        -        -        - │
  ├────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ ✔  user/register.js                         00:14        2        2        -        -        - │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘
    ✔  All specs passed!                        05:24       86       86        -        -        -

✨  Done in 440.88s.

Copy link
Member

@tiagoalvesdulce tiagoalvesdulce left a comment

Choose a reason for hiding this comment

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

Code LGTM. You left a few console.logs.

src/hooks/api/useProposalsBatch.js Outdated Show resolved Hide resolved
Copy link
Member

@tiagoalvesdulce tiagoalvesdulce left a comment

Choose a reason for hiding this comment

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

ACK

@tiagoalvesdulce tiagoalvesdulce merged commit e0f500b into decred:master Oct 15, 2021
@amass01 amass01 deleted the multibillingstatuschanges branch October 15, 2021 13:33
@lukebp lukebp mentioned this pull request Nov 16, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Set Billing Status: Allow multiple billing status changes.
3 participants