-
Notifications
You must be signed in to change notification settings - Fork 147
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
Initial implementation of SearchFilter #260
Conversation
Codecov Report
@@ Coverage Diff @@
## feature/search_v2 #260 +/- ##
=====================================================
+ Coverage 70.83% 71.01% +0.18%
=====================================================
Files 128 130 +2
Lines 3329 3354 +25
Branches 411 412 +1
=====================================================
+ Hits 2358 2382 +24
- Misses 939 940 +1
Partials 32 32
Continue to review full report at Codecov.
|
@@ -8,6 +8,8 @@ import { Search } from 'history'; | |||
|
|||
import LoadingSpinner from 'components/common/LoadingSpinner'; | |||
import ResourceList from 'components/common/ResourceList'; | |||
import ResourceSelector from './ResourceSelector'; | |||
import SearchFilter from './SearchFilter' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will delete references to SearchFilter
before merging.
labelText: string; | ||
checked: boolean; | ||
count: number; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: could be renamed SearchFilterCheckbox
.
Probably out of scope but we could also define a generic input type and extend it to define checkboxes, radio buttons, and text inputs. Then we could use something like inputProperties: InputConfig[]
if we need to show multiple input types.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I named this based on thinking of the potential UI extensions that would include inputs that aren't checkboxes, it the component is named for it's purpose but it just so happens that all we have now are checkboxes. Up for revisiting naming if we ever get around to extending this and decide whether or not want to break down components further.
title: string; | ||
categoryId: string; | ||
inputProperties: Array<SearchFilterInput> | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: SearchFilterInput[]
vs Array<SearchFilterInput>
checked: boolean; | ||
disabled?: boolean | ||
name: string; | ||
onChange: (e: React.FormEvent<HTMLInputElement>) => any; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Might be worthwhile to abstract away the actual click event since most users of a checkbox are not interested in the event itself.
<input onChange={ (e) => this.props.onChange(e.target.value) }
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unless we have reason to, this pattern is something that is discouraged due the "jsx-no-lambda rule". https://jonhilton.net/typescript-and-react-forbidden-lambdas/
My understanding is that this is not a "bad" thing to do, but rather that they should be used more thoughtfully and perhaps only when needed. For example I know I've used it in OwnerEditor
because of a scoping problem. Do you have any strong feelings or thoughts on this before this is merged?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I used the lambda for convenience. I should have written out the full example as below.
Maybe this works differently for React.SFC
since you can't define class functions. Don't have very strong feelings about this, but I think we should aim to make reusable components as simple to use as possible.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see. I think one major factor here does involve the fact that this is a React.SFC
as you pointed out. The properties given will be placed directly on the input
element, and TypeScript requires that this method match the expected web api.
Beyond that, I also see the purpose of this kind of component to be creating something that we can reuse anywhere in our application for current and future use cases. Therefore I believe we should design first for all use cases and second for ease of use -- but also weigh the use case coverage against how much more difficult it makes the component to use. In this case, I think designing for all use cases is preferable since it doesn't add any burden beyond having to grab event.target.value
instead of value
. In terms of "all use cases", one case that comes to mind is the one where we might want info from event.currentTarget
and/or event.target
.
However I think the concept you raised is always worth keeping in mind as we create these components -- if it were the case that we created something that would require doing some kind of pre-processing (example: something that needs to sanitize the data in some way before using it), then that common component should get upgraded to a React.Component
and have some helper method in the way that you described.
* Merge `master` into `feature/search_v2` (#253) * Clean up doc (#249) * Remove example folder in FE (#251) * Add better logging for profile page views (#239) * Added new search page layout (#250) * Added SearchPanel to search page, with new wide layout * Added 'ResourceSelector' * Add SearchBar to NavBar + update styles (#252) * Add SearchBar to NavBar + update styles * Lint fix * Code cleanup * Fix tests * Update ResourceListItem UI (#255) * WIP * Update layout * Some code cleanup * Tests * Add some starter doc for the AppConfig * Code cleanup + update UserListItem description UI * start icon -> resource icon * Moved Feedback tool to NavBar (#256) * Update Feedback Component * Update tests * Clean up some styles * reposition form * Tweak feedback style * Initial implementation of SearchFilter (#260) * Initial implementation of SearchFilter * Clean some code + add CheckBoxItem tests * Fixed warning on ResourceSelector * Add/fix some more tests * Some tweaks before merge * Implement New color theme (#276) * Added a color palette file * Replaced $gray-light/dark colors with semantic variables for each purpose * Update brand colors to indigo * Merge `master` into `feature/search_v2` (#286) * Update searchv2 master (#313) * Clean up doc (#249) * Remove example folder in FE (#251) * Add better logging for profile page views (#239) * add stalebot config (#264) * Update stalebot setting (#268) * Adds the request timeout configuration (#275) * Adds the request timeout configuration * Bumps the version to take advantage of request timeout * Update AxiosError handling (#283) * Update v0.ts * lint fix * Use Redux-Saga for Search Actions (#265) * Added redux actions and sagas instead for each search action: `submitSearch`, `setResource`, `setPageIndex`, `loadPreviousSearch`, and `UrlDidUpdate`. This greatly simplifies the `SearchPage` logic in preparation for adding filters. * Added `navigation-utils`. * Removed `SQUASH COMMITS` from the PR template (#287) Removed `SQUASH COMMITS` from the PR template * TagInfo now fires 'submitSearch' instead of using navigation (#285) * Remove render_template for feedback email (#293) * Remove render_template for feedback email * Fix html markup * Added auto-select resource after searching (#292) * Truncate the column type (#297) * Truncate the column type * Update truncation method * Cleanup logic * Improve table & columns description formatting (#98) (#298) * Add support for React-Markdown to editable text fields * Add support for windows via cross-env * Update EditableText component (#299) * Fix some styling issues with react-markdown * Update EditableText to use React Refs instead of ref callbacks * Add configs for table and column description max lengths * Change 'json' to 'data' field for Python Requests (#303) * Switch usage of 'json' to 'data' in metadata APIs * Use 'raw_request=True' for Envoy client post/put APIs * Update README.md (#302) * Link deeper to doc content (#304) Summary of Changes Will scroll past GitHub repo folders (specially more handy on small screens like phones/tablets) Like amundsen-io/amundsendatabuilder#147 * Fixed linebreaks with Markdown descriptions (#305) * Amundsen Notifications Without Preferences (#273) * Initial start to notifications API (#215) * initial start to notifications API * fixing some styling * fixed lint errors * update types * added tests * linter, moved notification types * addressed comments regarding imports/enum naming * fixed alphabetical order * Notifs post email functionality (#222) * initial start to notifications API * fixing some styling * fixed lint errors * update types * added tests * linter, moved notification types * added template support * made changes to reflect private changes * added helper function * fixed lint issue * addressed comments, added some type checking and cleaned up comments * testing removing test * fixed linter * fixed lint * fixed linting issues * skip type checking * fixed lint * fixed typing on get request args * removed typing for get request to fix lint issues * fixed linter again * re added test * raise exception inside of getmailclient * added exceptions * addressed comments * whitespace issue * removed calls to get_query_param * fixed syntax error * Send notification when adding/removing owner from table (#237) * basic e2e functionality for adding/removing * send_notification refactor * fix lint errors * blank line lint error * fixed syntax issue * arg typing * addressed comments, fixed code style * Prevent Self-Notifications (#243) * Prevent user from notifying themselves * removed exception * added owner check to send_notification * Fixed return for no recipients (#244) * fixed return for no recipients * fixed linter issue * Request notifications component (#238) * init of request form * basic request component * getting basic functionality in * clearing out css * removed z-index fixes and add constants * fixed string casting * added redux-saga calls * removed reset request notification * fixed tests * addressed comments, added basic test, added redux state management for opening/closing component * added tests, just need to add render test * cleaned up component tests: * addressed html/css comments * removed unecessary styling * removed collapsed class * cleaned up render method * fixed test * Open request component (#254) * added button to open up request component * removed tabledetail changes * className styling * fixed text-decoration * added tests, changed naming for OpenRequest * styling formatting * Add, Request, and Remove Email Copy (#257) * init for fixing email copy for request, add, and remove * removed print statement * fixed python unit test * fixed linter issues * addressed comments, fixed linter issues * added notification unit test * fixed test positional arg * fix test * Add notification action logging (#258) * init of adding action logging * changed location of action logging * fixed linter errors * fixed comment * addressed comments * remove request test call (#259) * hide request if description already exists (#269) * fixed open request button, request form styling (#267) * Added request dropdown component (#262) * init * made fixes * cleaned up code * fixed color issues * fixed import order * fixed styling, changed ducks/sagas * User dropdown (#263) * init * fixed sty;es * fixed test issue * fixed test * added tests, addressed comments * Request Metadata Component Tests (#270) * added tests + readonly field to stop errors * fixed tslint * addressed comments, added header tests * Request form navigation fix, dropdown fix (#272) * Request form navigation fix, dropdown fix * added test * added unique id to dropdown * Creates User Preferences page with no functionality (#266) * init * added event handlers * removed test file * added constants * addressed comments * fixed test, removed all links to page * updated test * fixed call to onclick * removed preferences page * Python cleanup + tests (#277) * Python cleanup + tests * More tests + revert some unecessary changes * Bring dropdown UI closer to design (#278) * Rename OpenRequestDescription for clarity + code cleanup + test additions (#279) * Notifications ducks cleanup + tests (#280) * Notifications ducks cleanup + tests * Fix issues * Fix template for edge case of empty form (#281) * Temporary debugging code, will revert * Temporary debugging code, will revert * Implement notification form confirmation (#289) * Preserve compatibility in base_mail_client (#290) * Notifications Configs + Doc (#291) * Add notification config * Code cleanup * More cleanup + add a test * Add some doc for how to enable features * Add config utils test + fix type error * Relative URLs to child configuration docs (#294) * Relative URLs to child configuration docs Relative URLs to docs in the same folder should do. They work for any branch, local copies of the docs - and should work better if we ever (or whenever :-) we get to having e.g a Sphinx generated site. * Update application_config.md Relative doc link * Update flask_config.md Relative doc link * Update flask_config.md Relative doc link * Remove temporary debugging code * Improve behavior of notification sending for owner editing (#296) * Initial Implementation: Notification only on success * Cleanup + tests: Notification only on success * Cleanup: Remove test code to trigger failure * Cleanup: Lint fix * Workaround for not notifying teams or alumni * Cleanup: Remove import mistake * Utilize NotificationType enums instead of hardcoded string * Remove use of render_template * More minor cleanups * Address some feedback * Cleanup * More cleanup * Notifications Improvements (#301) * Initial start to notifications API (#215) * initial start to notifications API * fixing some styling * fixed lint errors * update types * added tests * linter, moved notification types * addressed comments regarding imports/enum naming * fixed alphabetical order * Notifs post email functionality (#222) * initial start to notifications API * fixing some styling * fixed lint errors * update types * added tests * linter, moved notification types * added template support * made changes to reflect private changes * added helper function * fixed lint issue * addressed comments, added some type checking and cleaned up comments * testing removing test * fixed linter * fixed lint * fixed linting issues * skip type checking * fixed lint * fixed typing on get request args * removed typing for get request to fix lint issues * fixed linter again * re added test * raise exception inside of getmailclient * added exceptions * addressed comments * whitespace issue * removed calls to get_query_param * fixed syntax error * Send notification when adding/removing owner from table (#237) * basic e2e functionality for adding/removing * send_notification refactor * fix lint errors * blank line lint error * fixed syntax issue * arg typing * addressed comments, fixed code style * Prevent Self-Notifications (#243) * Prevent user from notifying themselves * removed exception * added owner check to send_notification * Fixed return for no recipients (#244) * fixed return for no recipients * fixed linter issue * Request notifications component (#238) * init of request form * basic request component * getting basic functionality in * clearing out css * removed z-index fixes and add constants * fixed string casting * added redux-saga calls * removed reset request notification * fixed tests * addressed comments, added basic test, added redux state management for opening/closing component * added tests, just need to add render test * cleaned up component tests: * addressed html/css comments * removed unecessary styling * removed collapsed class * cleaned up render method * fixed test * Open request component (#254) * added button to open up request component * removed tabledetail changes * className styling * fixed text-decoration * added tests, changed naming for OpenRequest * styling formatting * Add, Request, and Remove Email Copy (#257) * init for fixing email copy for request, add, and remove * removed print statement * fixed python unit test * fixed linter issues * addressed comments, fixed linter issues * added notification unit test * fixed test positional arg * fix test * Add notification action logging (#258) * init of adding action logging * changed location of action logging * fixed linter errors * fixed comment * addressed comments * remove request test call (#259) * hide request if description already exists (#269) * fixed open request button, request form styling (#267) * Added request dropdown component (#262) * init * made fixes * cleaned up code * fixed color issues * fixed import order * fixed styling, changed ducks/sagas * User dropdown (#263) * init * fixed sty;es * fixed test issue * fixed test * added tests, addressed comments * Request Metadata Component Tests (#270) * added tests + readonly field to stop errors * fixed tslint * addressed comments, added header tests * Request form navigation fix, dropdown fix (#272) * Request form navigation fix, dropdown fix * added test * added unique id to dropdown * Creates User Preferences page with no functionality (#266) * init * added event handlers * removed test file * added constants * addressed comments * fixed test, removed all links to page * updated test * fixed call to onclick * removed preferences page * Python cleanup + tests (#277) * Python cleanup + tests * More tests + revert some unecessary changes * Bring dropdown UI closer to design (#278) * Rename OpenRequestDescription for clarity + code cleanup + test additions (#279) * Notifications ducks cleanup + tests (#280) * Notifications ducks cleanup + tests * Fix issues * Fix template for edge case of empty form (#281) * Temporary debugging code, will revert * Temporary debugging code, will revert * Implement notification form confirmation (#289) * Preserve compatibility in base_mail_client (#290) * Notifications Configs + Doc (#291) * Add notification config * Code cleanup * More cleanup + add a test * Add some doc for how to enable features * Add config utils test + fix type error * Relative URLs to child configuration docs (#294) * Relative URLs to child configuration docs Relative URLs to docs in the same folder should do. They work for any branch, local copies of the docs - and should work better if we ever (or whenever :-) we get to having e.g a Sphinx generated site. * Update application_config.md Relative doc link * Update flask_config.md Relative doc link * Update flask_config.md Relative doc link * Remove temporary debugging code * Improve behavior of notification sending for owner editing (#296) * Initial Implementation: Notification only on success * Cleanup + tests: Notification only on success * Cleanup: Remove test code to trigger failure * Cleanup: Lint fix * Workaround for not notifying teams or alumni * Cleanup: Remove import mistake * Utilize NotificationType enums instead of hardcoded string * Remove use of render_template * More minor cleanups * Address some feedback * Cleanup * More cleanup * Updates for RequestMetadataForm * Switch to generating a for url + comment required for request column descriptions * Update some tests + comment out ones that need update before merge * Update some tests + comment out ones that need update before merge * Code cleanup * Update and rename notification_utils python tests * Modify resource_url check + add docstrings for python tests * Component cleanup * Cleanup component tests * Fix some typos * optimize docker (#300) * Update developer_guide.md (#310) Fix a 404 * Custom routes + Further notification cleanup (#309) * Further notification cleanup * Catch any errors getting the user for metrics + add doc for INIT_CUSTOM_ROUTES * Revert change to _build_metrics * Fix some merge conflicts * Fix some merge conflicts * Add source for notification email links (#312) * Add source for notification email links * Update TableDetail logic * Fix FlashMessage styles * Update config-types.ts (#314) * Convert usages of `white` to `$white` * - ResourceSelector now uses `setResource` action instead of onChange prop - Added/fixed test cases for ResourceSelector/SearchPage - Deleted unused code in SearchPage * Added additional test cases for SearchBar * Modified list-group shoadows * Added a test case for ResourceSelector
Summary of Changes
This PR created a
SearchFilter
component and subcomponents, and introduces some component modifications in preparation for introducing filtering. However the component will not yet be exposed -- the UI will remain the same when this is merged. Changes include:SearchPanel
SearchPanel
to be a stateless functional component, as it's purpose is to layout its children accordingly. It now takes any number of children and lays them out in a column.SearchPage
SearchPanel
onSearchPage
according to the changes made toSearchPanel
.SearchFilter
CheckBoxItem
that takes checkbox type input props and utilizesprops.children
for customizing what is rendered in the label.SearchFilter
component. It currently takescheckBoxFilterSections
-- an array of objects containing the json information to render the given UI -- andonFilterChange
-- to be executed when a checkbox is toggled. The work in this PR only lays out the component. TODOs have been left in the code in places where we will have to complete functionality. The UI when this is exposed:Tests
Added tests for new components and updated tests for existing components according to how they've been modified.
Documentation
N/A. This PR does not add any new features that need to be documented.
CheckList
Make sure you have checked all steps below to ensure a timely review.