Add Overview section in the Dashboard

Review Request #10166 — Created Sept. 22, 2018 and submitted

Information

Review Board
master
c7fc441...

Reviewers

Users have to switch between sections to view a open review requests that
they have sent out or reviews requests that are targeting them indirectly.

The dashboard now contains a new section that contains all open review
requests that the user is either a submitter of or a reviewer (either
directly or indirectly).

Testing was done by checking the Overview section in the browser to see
if the expected review requests were displayed.
Python Unit tests were run to ensure the query returns the expected review
requests.


Description From Last Updated

Usually commit messages are descriptive (e.g. what the patch does) instead of declarative (what I -- or you -- did …

brenniebrennie

Can you update your summary with the new section name?

brenniebrennie

The right caret will have to align with the "Overview" text. You'll also want to bump its font size up …

brenniebrennie

E501 line too long (81 > 79 characters)

reviewbotreviewbot

E302 expected 2 blank lines, found 1

reviewbotreviewbot

E501 line too long (100 > 79 characters)

reviewbotreviewbot

E127 continuation line over-indented for visual indent

reviewbotreviewbot

Some general things to note about evolutions, in case you need to do them in the future (or now, if …

chipx86chipx86

This is wrapped way too early. You have more room on the line for content.

chipx86chipx86

This will need to follow the modern documentation format, with a Yield section. Someone at the sprint can point you …

chipx86chipx86

We'd update this to "overview".

chipx86chipx86

Two blank lines between top-level classes/functions/groups of variables.

chipx86chipx86

These should be in alphabetical order.

chipx86chipx86

For now, let's not set this as the default view. Users can find these sorts of changes to be very …

chipx86chipx86

This needs to use our modern docstring format.

chipx86chipx86

This will need a docstring. (Many of the others are missing this, but they predate the current standards. Don't worry …

chipx86chipx86

W293 blank line contains whitespace

reviewbotreviewbot

W293 blank line contains whitespace

reviewbotreviewbot

W291 trailing whitespace

reviewbotreviewbot

W291 trailing whitespace

reviewbotreviewbot

W291 trailing whitespace

reviewbotreviewbot

W293 blank line contains whitespace

reviewbotreviewbot

W291 trailing whitespace

reviewbotreviewbot

W291 trailing whitespace

reviewbotreviewbot

This will require at least one unit test to ensure the query returns the correct review requests.

brenniebrennie

E501 line too long (87 > 79 characters)

reviewbotreviewbot

E501 line too long (99 > 79 characters)

reviewbotreviewbot

E501 line too long (99 > 79 characters)

reviewbotreviewbot

E501 line too long (81 > 79 characters)

reviewbotreviewbot

E501 line too long (81 > 79 characters)

reviewbotreviewbot

We avoid inline styles as much as possible. Instead, can you put a class on this (maybe overview-section-row) and add …

brenniebrennie

The other docstrings quote the section name, e.g. The "Overview" section ...

brenniebrennie

Since you're updating this, can you update this to our documentation style? Also, technically, for reStructuredText, this list is mis-formatted …

brenniebrennie

The summary should be on the first line and should fit on a single line.

brenniebrennie

This should be in the imperitive mood, as if it were a command (i.e., "Return" instead of "Returns").

brenniebrennie

This should be formatted as :py:meth:`ReviewRequest.objects.public <reviewboard.reviews.managers.ReviewRequestManager.public>` which will format it as a method invocation and link to the correct …

brenniebrennie

This is actually a Q (django.db.models.Q) object.

brenniebrennie

How about: A query for all review requests the users is inolved in as either a submitter or a reviewer …

brenniebrennie

i.e does not end a sentence. It is a joining clause .

brenniebrennie

The summary should be on the first line and should fit on a single line.

brenniebrennie

QuerySet

brenniebrennie

Missing a period.

brenniebrennie

The actual class name is dict

brenniebrennie

Missing a period.

brenniebrennie

Same comment re: wording as above.

brenniebrennie

Return documentation is formatted as: Returns: django.http.HttpResponse: The rendered HTTP response for the datagrid. What datagrid is rendered depends on …

brenniebrennie

this should go above args in the documentation noting that the view GET parameter is used, e.g. ```python """Display the …

brenniebrennie

E501 line too long (80 > 79 characters)

reviewbotreviewbot

Typo here: 'mine'to -> 'mine'

daviddavid

Although we often use six.text_type in the code, docs should use unicode in order to link to the right thing.

daviddavid

Typo: objectts

daviddavid
Checks run (1 failed, 1 succeeded)
flake8 failed.
JSHint passed.

flake8

bolariinwa
Review request changed
Change Summary:

Resolved issues raised by Review Bot

Commit:
4f072be7f9161340e72630b831edc5ff65555305
f5ce83ad836bd36b93c3a8dc7e1c8bcb4638644c

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

bolariinwa
chipx86
  1. You're delving into a lot of complex stuff, which is great! And you've done a great job with the change. As I've been reviewing it, though, I've been mulling over what it is we may really want to do with this sort of view, and have some thoughts.

    Take this as a proposal. I'm sure there will be differing thoughts on it.

    There's two things that stood out:

    1. The new counter is maybe not necessary, and if we can avoid it, that'd be awesome. Database changes are expensive and invasive. One seemingly simple database change can turn into hours or days of upgrade time for some customers. This one's easier to handle, but if it were on, say, ReviewRequest, we'd definitely be looking at weekend downtime. So we try not to add them unless necessary. And we only need this if we use the current design. Which is where my second thought comes in.
    2. The name "My Reviews" is not quite right for what this is. First, these are review requests, not reviews. Second, they're not all "mine." I know the original project name is "My Reviews," but we can do better, and be less confusing to users. Along with this, the "All" item underneath it is inconsistently named, as "All" in "Outgoing" means "Even ones that are closed." There's only a single item in here, though, which is maybe not necessary.

    I think we can address both of these by making two changes:

    1. Renaming "My Reviews" to "Overview".
    2. Getting rid of the "All" item, and instead folding that into "Overview".

    I don't think we even need a counter for this. It can just be "Overview." Let the finger-grained sections below supply the counters. They're more useful that way, and it frees us up to do things with this section later (I have some pie-in-the-sky ideas for showing more useful information than just a list of review requests down the road, which would make a counter less relevant anyway -- backburner idea for something I call "Radar," but that's a longer discussion.)

    This would look something like:

    Image

    This would massively simplify the change, though you would need to allow sections to be selectable/made active, so there's some new work there. The counter work could be tossed, reducing the amount of unit tests and query consolidation I was going to have you write (counters are complex), and we'd have something that we could land pretty quickly.

    With that in mind, I'm going to drop a bunch of comments I had for the counters. If it turns out that you're going to end up having to add them anyway, I'll have a bunch of comments in a separate review.

    1. (Ignore the "Submitted" entries in that screenshot. All I did was mess with the sidebar and the header in my local browser.)

      (Also sorry for the huge screenshot. Good EasyFix bug: Set the CSS for images in comments to be max-width: 100%; height: auto;)

    2. Another thought is that, in order to indicate that Overview is even clickable, we could put a little ">" arrow icon where the counter would normally be, helping to show that there's something that happens when you click on it.

    3. Would the ">" icon be an img or just text?

    4. We use Font Awesome for a lot of basic icons. You can do <span class="fa fa-caret-right"></span> and get a little right arrow that should look alright.

  2. Show all issues

    Some general things to note about evolutions, in case you need to do them in the future (or now, if we have to keep this counter):

    1. The name of the evolution should describe the model schema changes, not the reason you're making the model changes. When adding fields, this is gneerally going to include the model name and field name. For instance, localsiteprofile_total_request_count.
    2. This needs to use underscores, not hyphens.
    3. Last item in a list should always have a trailing comma, so this line doesn't have to be modified next time we add an entry.
  3. reviewboard/datagrids/builtin_items.py (Diff revision 3)
     
     
     
     
     
    Show all issues

    This is wrapped way too early. You have more room on the line for content.

  4. reviewboard/datagrids/builtin_items.py (Diff revision 3)
     
     
    Show all issues

    This will need to follow the modern documentation format, with a Yield section. Someone at the sprint can point you to the docs for this.

    1. I believe chipx86 meant to say Yields: instead of Yield:.

  5. reviewboard/datagrids/builtin_items.py (Diff revision 3)
     
     
    Show all issues

    We'd update this to "overview".

  6. reviewboard/datagrids/builtin_items.py (Diff revision 3)
     
     
     
     
    Show all issues

    Two blank lines between top-level classes/functions/groups of variables.

  7. reviewboard/datagrids/grids.py (Diff revision 3)
     
     
     
    Show all issues

    These should be in alphabetical order.

  8. reviewboard/datagrids/grids.py (Diff revision 3)
     
     
    Show all issues

    For now, let's not set this as the default view. Users can find these sorts of changes to be very disruptive, which means us fielding a lot of support requests :) For now, let's keep the existing default view, and make the new Overview an optional thing users can go to. They can always bookmark it if they want.

  9. reviewboard/reviews/managers.py (Diff revision 3)
     
     
     
     
     
     
     
     
     
     
    Show all issues

    This needs to use our modern docstring format.

  10. reviewboard/reviews/managers.py (Diff revision 3)
     
     
    Show all issues

    This will need a docstring. (Many of the others are missing this, but they predate the current standards. Don't worry about those, but provide one here.)

    I'd also like this to be called to_or_from_user.

  11. 
      
bolariinwa
Review request changed
Change Summary:

Resolved a few issues

Commit:
08b255c72cdf33e0dc866136322bf2bf6d9f4235
cd63b5f372b6c1664468db8c7b7b517dd1672314

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

bolariinwa
bolariinwa
bolariinwa
Review request changed
Change Summary:

Improved documentation using the modern documentation format

Commit:
eb76ccd6260ca673733e360eddb8ac5f498f0874
011413e77331f5d1b3e8e8bfbc414ae28c3e8eff

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

bolariinwa
bolariinwa
brennie
  1. 
      
  2. Show all issues

    Usually commit messages are descriptive (e.g. what the patch does) instead of declarative (what I -- or you -- did to write the patch).

    e.g., for your second paragraph:

    The dashboard now contains a new section that contains all review
    requests that the user is either a submitter of or a reviewer (either
    directly or indirectly).
    
  3. Show all issues

    Can you update your summary with the new section name?

  4. reviewboard/reviews/managers.py (Diff revision 8)
     
     
    Show all issues

    This will require at least one unit test to ensure the query returns the correct review requests.

  5. 
      
brennie
  1. 
      
  2. Show all issues

    The right caret will have to align with the "Overview" text. You'll also want to bump its font size up (try 200%?)

    You might want to try the following:

    • Wrap the Overview and caret in a <span>/<div> and style it with line-height: normal
    • Wrap and style it with vertical-align: middle.

    If neither of these work, we can help you figure out the appropriate styles.

  3. 
      
bolariinwa
Review request changed
Summary:
Add new 'My Reviews' section in the Dashboard
Add Overview section in the Dashboard
Description:
~  

Users have to switch between views to view a summary on review requests

~   that they have sent out or reviews requests that are targeting them
  ~

Users have to switch between sections to view a open review requests that

  ~ they have sent out or reviews requests that are targeting them indirectly.

-   indirectly.

   
~  

I added a new section to the dashboard with a link that allows users to

~   view review requests that they sent out and review requests that
~   indirectly target them.

  ~

The dashboard now contains a new section that contains all open review

  ~ requests that the user is either a submitter of or a reviewer (either
  ~ directly or indirectly).

Testing Done:
~  

Testing was done by checking the new 'My Review' section in the browser.

  ~

Testing was done by checking the Overview section in the browser to see

  + if the expected review requests were displayed.
  + Python Unit tests were run to ensure the query returns the expected review
  + requests.

Commit:
26f53f850320d1822790df6d818cb6b1d8720cbf
3b6ccd4050c08a88d0834b1de09cead3431086fe
Added Files:

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

bolariinwa
Review request changed
Change Summary:

Resolved E501

Commit:
3b6ccd4050c08a88d0834b1de09cead3431086fe
3fe5ce88f06b8f70b1af5eb478b3a7ca6ef04331

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

bolariinwa
brennie
  1. Just one more minor thing!

  2. Show all issues

    We avoid inline styles as much as possible. Instead, can you put a class on this (maybe overview-section-row) and add the styling to a LESS file?

    It should probably go in static/rb/css/ui/sidebars.less.

  3. 
      
bolariinwa
bolariinwa
brennie
  1. You'll notice these comments are pretty nitty-gritty, which means this is getting very close to a ship it and we're just working on polish!

  2. reviewboard/datagrids/builtin_items.py (Diff revision 12)
     
     
    Show all issues

    The other docstrings quote the section name, e.g.

    The "Overview" section ...
    
  3. reviewboard/datagrids/views.py (Diff revision 12)
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    Show all issues

    Since you're updating this, can you update this to our documentation style?

    Also, technically, for reStructuredText, this list is mis-formatted (not your fault); instead the * should be in the same column as the V in Valid ....

  4. reviewboard/reviews/managers.py (Diff revision 12)
     
     
    Show all issues

    The summary should be on the first line and should fit on a single line.

  5. reviewboard/reviews/managers.py (Diff revision 12)
     
     
    Show all issues

    This should be in the imperitive mood, as if it were a command (i.e., "Return" instead of "Returns").

  6. reviewboard/reviews/managers.py (Diff revision 12)
     
     
    Show all issues

    This should be formatted as

    :py:meth:`ReviewRequest.objects.public <reviewboard.reviews.managers.ReviewRequestManager.public>`
    

    which will format it as a method invocation and link to the correct place in the docs.

  7. reviewboard/reviews/managers.py (Diff revision 12)
     
     
    Show all issues

    This is actually a Q (django.db.models.Q) object.

  8. reviewboard/reviews/managers.py (Diff revision 12)
     
     
     
     
     
     
    Show all issues

    How about:

    A query for all review requests the users is inolved 
    in as either a submitter or a reviewer (either directly
    assigned or indirectly as a member of a group).
    
  9. reviewboard/reviews/managers.py (Diff revision 12)
     
     
    Show all issues

    i.e does not end a sentence. It is a joining clause .

  10. reviewboard/reviews/managers.py (Diff revision 12)
     
     
    Show all issues

    The summary should be on the first line and should fit on a single line.

  11. reviewboard/reviews/managers.py (Diff revision 12)
     
     
    Show all issues

    QuerySet

  12. reviewboard/reviews/managers.py (Diff revision 12)
     
     
    Show all issues

    Missing a period.

  13. reviewboard/reviews/managers.py (Diff revision 12)
     
     
    Show all issues

    The actual class name is dict

  14. reviewboard/reviews/managers.py (Diff revision 12)
     
     
    Show all issues

    Missing a period.

  15. reviewboard/reviews/managers.py (Diff revision 12)
     
     
     
     
     
     
    Show all issues

    Same comment re: wording as above.

  16. 
      
bolariinwa
bolariinwa
bolariinwa
brennie
  1. 
      
  2. reviewboard/datagrids/views.py (Diff revision 15)
     
     
     
    Show all issues

    Return documentation is formatted as:

    Returns:
        django.http.HttpResponse:
        The rendered HTTP response for the datagrid. What datagrid is rendered
        depends on the ``view`` parameter.
    
  3. reviewboard/datagrids/views.py (Diff revision 15)
     
     
     
     
     
     
     
     
     
     
    Show all issues

    this should go above args in the documentation noting that the view GET parameter is used, e.g.

    ```python
    """Display the dashboard.

    This shows review requests organized by a variety of lists, depending on the view GET parameter. Valid values of view are:

    • outgoing
    • to-me
    • ...

    Args:
    ....

    Returns:
    ...
    """

    1. For the documentation should I wrap GET and view in `` ``?
  4. 
      
bolariinwa
Review request changed
Commit:
234290c20a36e33e54381e89ae780c00141cec86
691cb1c153be23a1a6cdffd99051a5a41b9ae3f8

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

bolariinwa
brennie
  1. Looks good to me! Just need another sign-off on it before landing.

  2. 
      
david
  1. 
      
  2. reviewboard/datagrids/views.py (Diff revision 17)
     
     
    Show all issues

    Typo here: 'mine'to -> 'mine'

  3. reviewboard/datagrids/views.py (Diff revision 17)
     
     
    Show all issues

    Although we often use six.text_type in the code, docs should use unicode in order to link to the right thing.

  4. Show all issues

    Typo: objectts

  5. 
      
bolariinwa
bolariinwa
bolariinwa
david
  1. Ship It!
  2. 
      
bolariinwa
Review request changed
Status:
Completed
Change Summary:
Pushed to release-4.0.x (607d101)