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

Improve user search experience #376

Merged
merged 4 commits into from
Jan 24, 2020

Conversation

ttannis
Copy link
Contributor

@ttannis ttannis commented Jan 23, 2020

Summary of Changes

This PR further addresses issues from our user interviews, namely:

  1. Persisting filters when re-executing a search on the SearchPage
  2. Removing the requirement of a search term, which allows users to execute higher level searches across categories, e.g. "I'm looking for all resources in this schema"

NavBar

  1. Passes the current location to SearchBar

SearchBar

  1. Removed isFormValid check and requirement for a search term to execute a search
  2. Passes a boolean to the submitSearch action to specify whether or not the existing filters should be used in this search.

SearchPage

  1. Utilizes a new hasFilters boolean to assist with the error message logic. Our new user flow allows for users to clear all search input (search term + filters), in which case they now see a blank page. Note: Will get feedback in Design QA about whether or not we should add some instruction, or otherwise better utilize this space.

Redux Changes

  1. submitSearch and searchAll actions take a useFilters boolean in the payload.
  2. searchAll no longer resets the filter state. Instead there is a new clearAll action that is fired by searchAllWorker if useFilters is false.

Tests

TODO: As part of final feature branch review

Documentation

TODO: As part of final feature branch review

CheckList

Make sure you have checked all steps below to ensure a timely review.

  • PR title addresses the issue accurately and concisely. Example: "Updates the version of Flask to v1.0.2"
  • PR includes a summary of changes, including screenshots of any UI changes.
  • PR adds unit tests, updates existing unit tests, OR documents why no test additions or modifications are needed.
  • In case of new functionality, my PR adds documentation that describes how to use it.
    • All the public python functions and the classes in the PR contain docstrings that explain what it does
  • PR passes all tests documented in the developer guide

@ttannis ttannis changed the title Ttannis filter improvements 2 Improve user search experience Jan 23, 2020
@ttannis ttannis requested a review from danwom January 23, 2020 00:51
@codecov-io
Copy link

codecov-io commented Jan 23, 2020

Codecov Report

Merging #376 into feature/ui-filter will increase coverage by 0.09%.
The diff coverage is 39.13%.

Impacted file tree graph

@@                  Coverage Diff                  @@
##           feature/ui-filter     #376      +/-   ##
=====================================================
+ Coverage              70.95%   71.04%   +0.09%     
=====================================================
  Files                    174      174              
  Lines                   4380     4411      +31     
  Branches                 568      576       +8     
=====================================================
+ Hits                    3108     3134      +26     
- Misses                  1217     1222       +5     
  Partials                  55       55
Impacted Files Coverage Δ
...undsen_application/static/js/ducks/search/types.ts 100% <ø> (ø) ⬆️
..._application/static/js/components/NavBar/index.tsx 100% <ø> (ø) ⬆️
...on/static/js/components/common/SearchBar/index.tsx 82.45% <0%> (+2.45%) ⬆️
...undsen_application/static/js/ducks/search/sagas.ts 0% <0%> (ø) ⬆️
...lication/static/js/ducks/search/filters/reducer.ts 48.14% <40%> (+0.32%) ⬆️
...dsen_application/static/js/ducks/search/reducer.ts 95.08% <66.66%> (ø) ⬆️
...lication/static/js/components/SearchPage/index.tsx 98.43% <83.33%> (-1.57%) ⬇️
...mponents/TableDetail/RequestMetadataForm/index.tsx 100% <0%> (ø) ⬆️
...dback/FeedbackForm/BugReportFeedbackForm/index.tsx 100% <0%> (ø) ⬆️
...eedback/FeedbackForm/RequestFeedbackForm/index.tsx 100% <0%> (ø) ⬆️
... and 1 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e8f499b...e7bcd31. Read the comment docs.

@@ -88,23 +90,16 @@ export class SearchBar extends React.Component<SearchBarProps, SearchBarState> {

handleValueSubmit = (event: React.FormEvent<HTMLFormElement>) : void => {
const searchTerm = this.state.searchTerm.trim();
const useFilters = this.props.location ? this.props.location.pathname === '/search' : false;
Copy link

Choose a reason for hiding this comment

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

Is there a better place for this logic? If possible I wouldn't want the SearchBar to be aware of location and which routes should preserve the filters.

  • Maybe the reducer or saga should be aware of the route and decide if the filters should be used or not.
  • Maybe there should be a small checkbox somewhere that would explicitly decide to preserve or clear filters.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hope the following is clear I time-boxed some investigation:

  1. After some investigation I'm not confident this is a quick fix as opposed to separate task of augmenting our usage of Redux on that manner. I couldn't quite wrap my head around the safest way to do this that is 100% guaranteed to keep the redux state and react-router in sync -- if it exists.

  2. If the ability to toggle useFilters or not was equal work effort I'd be confident to include it, but in this case there would be extra effort to add this to the application state and ensure page navigations still somehow update this state. I think it's worth investing effort into that toggle implementation only if users request it, or Design supports it. I'd essentially hate to spend a couple days on this and then have to remove it after Design QA. It is worth proposing as part of the final design QA though.

In summary we could talk about this more offline as its own task. I boil this down to the fact that we need a SearchBar that will cause either one of two action chains to happen:

  1. clearFilters & submitSearch
  2. submitSearch

Meaning that SearchBar could take its submit method as a passed property, and it's parent components which are connected to the router could pass the correct submit action to the SearchBar. Let me know what you think, and I can add the modification before final feature branch review.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

FYI references -- first found this library which might have been overcomplicating things and is now deprecated, but it could also be as little effort as some of these suggestions

@ttannis ttannis merged commit 9b88bc0 into feature/ui-filter Jan 24, 2020
@ttannis ttannis deleted the ttannis_filter-improvements-2 branch January 27, 2020 23:49
ttannis added a commit that referenced this pull request Feb 29, 2020
* Initial Filter React/Redux Modifications (#357)

* Update configs and SearchFilter UI

* Remove search syntax logic in SearchBar; Add RegEx validatation for SearchBar

* Add filter state and ducks logic

* Update filter UI; Code cleanup

* Some python lint fixes

* Code cleanup

* Update request utils

* Filter UX Improvements (#361)

* SearchFilter UX improvements

* Filter url updates; Modify no search results message

* Support loading filters from pasted url

* InputFilter apply changes on 'enter'

* Simplify reducer logic + lint cleanup

* Some cleanup based on comments

* Fix build

* Mypy fix

* Mypy fix

* Filter UI Improvements: Part 1 (#370)

* Change 'Type' to 'Source'

* Prevent SearchPanel width increase when InputFilter is present

* Re-lower coverage while in development

* Managed input autocomplete (#375)

* Disabled autocomplete for some email input fields
* Removed the hard coded font size for autocomplete

* Improve user search experience (#376)

* Fix a merge issue

* Allow no search term; Persist filters on SearchPage

* Lint fix

* Add a TODO

* Add support for configurable filter section help text (#377)

* Add support for configurable filter section help text

* Support on CheckboxFilterSection as well

* Add default filterCategories for tables

* Add default helpText

* Update search flow (some more) (#383)

* Add a Breadcrumb on HomePage that makes filters discoverable

* Switch to using explicit clearing of search term; Revert to requiring term for SearchBar submit

* Allow for html in InforButton text

* WIP: Comment out some tests

* Fix an edge case

* Cleanup python logic; Add comments; Add tests;

* Fix indentation error; Cleanup python tests;

* Cleanup HomePage, Breadcrumb, InfoButton; Update tests

* Connect SearchBar to router for executing special SearchPage logic

* Cleanup SearchBar; Add tests;

* Cleanup SearchPage; Add tests

* Cleanup SearchFiilter components; Add tests; Increase jest threshold;

* Fix build; Update FilterSection types

* Cleanup config; Add tests; Update jest threshold;

* Add another config test

* Fix SearchFilter; Add filter action types; Code cleanup; Add tests;

* Cleanup search reducer; Update/add tests;

* Cleanup ducks + utils; Add tests;

* Update application config documentation

* Update endpoint to match search library change

* Remove unused lines

* Update input styles

* rename filterconfig 'value' reference to 'categoryId'

* Add new filter logic to support TagInfo case

* Lint fix

* Restructure filter components to leverage mapStateToProps; Update FilterType enums

* Lint fix

* Fix bad merge

* Apply suggestions from code review

Co-authored-by: Daniel <[email protected]>
ttannis added a commit that referenced this pull request Mar 18, 2020
* Allow users to create JIRA tickets associated with a table (#389)

* add jira connection

* update location of report data issue

* add some reducers

* add to global state

* fix saga/redux flow for the jira issues view

* use redux to handle reporting a data issue
:

* fix build

* add jira sdk to requirements.txt, run fix lint errors for js

* add comment

* add data quality icon

* move constants into a separate file

* add tests for reducer and api

* add some more tests

* add more tests, do some refactoring

* still working on tests

* fix unit tests that don't quite work

* fix lint errors

* add some python tests

* add more tests for jira client

* remove unused imports

* remove unused import

* fix lint errors

* for some reason i have to add types?

* re-fix tests

* update comments

* address some comments

* respond to comments

* respond to comments

* remove jira project id requirement:

* add base class for issue tracking

* add resource for issue endpoint

* interim commit while refactoring into more generic

* do some refactor, add a generic base client

* refactor name from jira -> issue

* fix spec per changes in the api

* respond to some pr comments, add some error handling if no jira component is enabled

* update per pr comments

* remove utils for trucation, use ellipsis

* add custom exception class, make sure it returns config error on api call

* fix tests, refactor

* fix lint

* hopefully fix build

* css fix

* try removing jira from requirements

* update tests, add total count of remaining results to api call

* add comment, see if this fixes the build

* update tests

* update build steps

* try making the extras a string like in examples

* try to follow example exactly

* try without quotes

* update tests, make method to generate url

* try string again

* try using jira as a string

* remove references to extras and just install the package

* mock urllib

* update tests

* add tests for rending extra issues

* update text on issues view

* fix some lint issues

* respond to pr comments

* update per pr comments

* respond to pr comments

* fix some lint errors

* respond to comments, some lint fixes

* fix more lint

* respond to pr comments

* remove todo

* add definition of api calls in fe

* hide issue integration by default

* fix tests, increase test coverage a bit

* update some text

* update per some product feedback

* update test

* Apply suggestions from code review

Co-Authored-By: Tamika Tannis <[email protected]>

* update per pr comments

Co-authored-by: Tamika Tannis <[email protected]>

* Add documenation for JIRA feature (#395)

* Add documenation for JIRA feature

* update link

* update docs a little bit

* add some more clarification

* remove whitespace

* Search Filtering Support (#384)

* Initial Filter React/Redux Modifications (#357)

* Update configs and SearchFilter UI

* Remove search syntax logic in SearchBar; Add RegEx validatation for SearchBar

* Add filter state and ducks logic

* Update filter UI; Code cleanup

* Some python lint fixes

* Code cleanup

* Update request utils

* Filter UX Improvements (#361)

* SearchFilter UX improvements

* Filter url updates; Modify no search results message

* Support loading filters from pasted url

* InputFilter apply changes on 'enter'

* Simplify reducer logic + lint cleanup

* Some cleanup based on comments

* Fix build

* Mypy fix

* Mypy fix

* Filter UI Improvements: Part 1 (#370)

* Change 'Type' to 'Source'

* Prevent SearchPanel width increase when InputFilter is present

* Re-lower coverage while in development

* Managed input autocomplete (#375)

* Disabled autocomplete for some email input fields
* Removed the hard coded font size for autocomplete

* Improve user search experience (#376)

* Fix a merge issue

* Allow no search term; Persist filters on SearchPage

* Lint fix

* Add a TODO

* Add support for configurable filter section help text (#377)

* Add support for configurable filter section help text

* Support on CheckboxFilterSection as well

* Add default filterCategories for tables

* Add default helpText

* Update search flow (some more) (#383)

* Add a Breadcrumb on HomePage that makes filters discoverable

* Switch to using explicit clearing of search term; Revert to requiring term for SearchBar submit

* Allow for html in InforButton text

* WIP: Comment out some tests

* Fix an edge case

* Cleanup python logic; Add comments; Add tests;

* Fix indentation error; Cleanup python tests;

* Cleanup HomePage, Breadcrumb, InfoButton; Update tests

* Connect SearchBar to router for executing special SearchPage logic

* Cleanup SearchBar; Add tests;

* Cleanup SearchPage; Add tests

* Cleanup SearchFiilter components; Add tests; Increase jest threshold;

* Fix build; Update FilterSection types

* Cleanup config; Add tests; Update jest threshold;

* Add another config test

* Fix SearchFilter; Add filter action types; Code cleanup; Add tests;

* Cleanup search reducer; Update/add tests;

* Cleanup ducks + utils; Add tests;

* Update application config documentation

* Update endpoint to match search library change

* Remove unused lines

* Update input styles

* rename filterconfig 'value' reference to 'categoryId'

* Add new filter logic to support TagInfo case

* Lint fix

* Restructure filter components to leverage mapStateToProps; Update FilterType enums

* Lint fix

* Fix bad merge

* Apply suggestions from code review

Co-authored-by: Daniel <[email protected]>

* Adds some responsiveness to table detail layouts (#391)

* Improve granularity of logging search actions (#396)

* WIP: One approach

* Second approach

* Fix a few errors; Add tests

* Fix test

* Code cleanup

* Change value for when user selects inline result & searchAll is needed

* Update SearchType enum

* Use snake_case for consistency in backend until we have some auto-convert

* Filter Fixes (#399)

* Reset pageIndex to 0 on filter update

* Allow CheckBoxItem to handle checked = undefined

* Create TableHeaderBullets component (#397)

* Create TableHeaderBullets component

* Fix mocks

* Update search_table endpoint (#400)

* Update search_table endpoint

* Update test docstring

* Add reporter for JIRA Issue Creation (#401)

* WIP test commit

* Update reporter object

* Testing user id

* Another test

* Update fix

* Update jira logic. Move default configs

* Add issue link; Add reported by in description

* Update logic to transform filters then call _search_table (#402)

* Update logic to transform filters then call _search_table

* Update tests

* Upgrade redux & react-redux (#373)

* Update search results to include badges and display them (#398)

* update search to include badges

* fix test

* slight change

* remove mapping for badges

* fix lint

* remove badge as a search term since its not in the filters in ui

* update test, remove unneeded import

* Caste input to lowercase like we do for SearchBar (#404)

* Issue 147/multi doc pathways (#381)

* This adds "programmatic descriptions" into the frontend.

Known issues:
- is_editable property not respecected

Added NonEditable Section

Now no longer need to sort in index page.
Uses the display title for title now.
Added currently untested code in the api for programmatic display

programmatic descriptions no longer needs to be returned by metadata service for backwards compatibility
Tests added for the programmatic display component

Caught a bug where display_title was not being set if configuration wasn't set.
change source_id to source
Make code more robust
Rebasing with the upstream changes that have been made.
adding documentation
removing the comment in the config.py class

Fixing upstream merge conflicts.

Update docs/flask_config.md

Co-Authored-By: jornh <[email protected]>

Removing non editable section!

readOnly is now an optional Property
Added in a programmatic header and <hr> per design doc

adding test for button rendering

Adding in convertText function
Changing SENTENCE_CASE -> Upper Upper. Need to confirm that this is ok, otherwise can create a new case

Reverting SentenceCase
Creating PascalCase
Removing custom title

Moving convert text to EditableSection. Applying by default

* removing pascal case

* fixing doc

* Update amundsen_application/api/utils/metadata_utils.py

Co-Authored-By: Tamika Tannis <[email protected]>

* Update amundsen_application/api/utils/metadata_utils.py

Co-Authored-By: Tamika Tannis <[email protected]>

* cleaning up

* Fixing unit test to have static method

* changing to edit-button

* Moving tests to test_metadata_utils

* Fixing lint

* updating the sample image

Co-authored-by: Tamika Tannis <[email protected]>

* Clean up some tests; Create constant for hardcoded text (#407)

* Fix overflow for issue tracking feature (#406)

* Fix overflow for issues from issue tracking feature

* try using flex properties

* use truncated class

* add span

Co-authored-by: christina stead <[email protected]>
Co-authored-by: Daniel <[email protected]>
Co-authored-by: samshuster <[email protected]>
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.

3 participants