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

[Security Solution][Lists] More composable hooks/utilities #70372

Merged
merged 5 commits into from
Jul 1, 2020

Conversation

rylnd
Copy link
Contributor

@rylnd rylnd commented Jun 30, 2020

Summary

This is a followup to #69603 where things are refactored as follows:

  • adds useIsMounted hook that provides a callback to retrieve the mounted state of the component
    • used internally by useAsync to prevent state updates on an unmounted component
  • adds useAsync hook that wraps a function and provides:
    • start callback to invoke the function
    • loading state
    • error state
    • result state
  • adds withOptionalSignal higher-order function that defaults a function's signal argument to new AbortController().signal
    • this addresses a common use case where a consuming component doesn't need to abort an async call
  • replaces use of useAsyncTask with composition of useAsync and withOptionalSignal
    • removes references to the react-use library, which should reduce our plugin's bundle size a bit.

Checklist

Delete any items that are not applicable to this PR.

For maintainers

rylnd added 5 commits June 30, 2020 15:50
Components commonly do not care about aborting a request, but are
required to pass `{ signal: new AbortController().signal }` anyway. This
addresses that use case.
This is useful for dealing with asynchronous tasks that may complete
after the invoking component has been unmounted. Using this hook,
callbacks can determine whether they're currently unmounted, i.e.
whether it's safe to set state or not.
This does not suffer from the Typescript issues that the react-use
implementation had, and is generally a cleaner hook than useAsyncTask as
it makes no assumptions about the underlying function.
@rylnd rylnd added Team:SIEM v8.0.0 release_note:skip Skip the PR/issue when compiling release notes v7.9.0 labels Jun 30, 2020
@rylnd rylnd self-assigned this Jun 30, 2020
@kibanamachine
Copy link
Contributor

💚 Build Succeeded

Build metrics

@kbn/optimizer bundle module count

id value diff baseline
securitySolution 789 -3 792

To update your PR or re-run it, just comment with:
@elasticmachine merge upstream

@rylnd rylnd marked this pull request as ready for review June 30, 2020 22:44
@rylnd rylnd requested review from a team as code owners June 30, 2020 22:44
@elasticmachine
Copy link
Contributor

Pinging @elastic/siem (Team:SIEM)

Copy link
Contributor

@FrankHassanabad FrankHassanabad left a comment

Choose a reason for hiding this comment

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

LGTM!

@rylnd rylnd merged commit d8d24be into elastic:master Jul 1, 2020
@rylnd rylnd deleted the more_composable_hooks branch July 1, 2020 16:27
rylnd added a commit that referenced this pull request Jul 1, 2020
…70476)

* Add wrapper function to make an AbortSignal arg optional

Components commonly do not care about aborting a request, but are
required to pass `{ signal: new AbortController().signal }` anyway. This
addresses that use case.

* Adds hook for retrieving the component's mount status

This is useful for dealing with asynchronous tasks that may complete
after the invoking component has been unmounted. Using this hook,
callbacks can determine whether they're currently unmounted, i.e.
whether it's safe to set state or not.

* Add our own implemetation of useAsync

This does not suffer from the Typescript issues that the react-use
implementation had, and is generally a cleaner hook than useAsyncTask as
it makes no assumptions about the underlying function.

* Update exported Lists API hooks to use useAsync and withOptionalSignal

Removes the now-unused useAsyncTask as well.

* Add some JSDoc for our new functions
@MindyRS MindyRS added the Team: SecuritySolution Security Solutions Team working on SIEM, Endpoint, Timeline, Resolver, etc. label Sep 23, 2021
@elasticmachine
Copy link
Contributor

Pinging @elastic/security-solution (Team: SecuritySolution)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release_note:skip Skip the PR/issue when compiling release notes Team: SecuritySolution Security Solutions Team working on SIEM, Endpoint, Timeline, Resolver, etc. Team:SIEM v7.9.0 v8.0.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants