-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ML] Transforms: Update state management for edit form to use constat…
…e lib. (#149670) The transform wizard and the flyout to edit a transform use different state management. The wizard has the very first forms we did using React Hooks, it uses basic hooks (`useState`, `useEffect`) and passes around values and callbacks via props. The form to edit a transform is less complex (less fields, no wizard steps) and was used as a bit of a playground to experiment with an alternative state management approach. It uses `useReducer` to manage state and actions of the form in a centralized place. This was done before the introduction of `useContext` so passing around values and actions still includes using props/callbacks. `useContext` can simplify state management, but the way it's implemented has drawbacks for dynamic content because it triggers rerenders everywhere it's consumed, not just where certain attributes are requested. The `constate` library (https://github.com/diegohaz/constate) can improve this by creating multiple contexts and corresponding custom hooks. This PR makes use of the `constate` library and refactors components to trigger less rerenders. As documented further down in this description, some benchmarking was done to demonstrate the improvements. There are similar libraries available, but `constate` is already a package that's part of Kibana and used in other team's code so I chose to go with it.
- Loading branch information
Showing
15 changed files
with
728 additions
and
569 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
40 changes: 40 additions & 0 deletions
40
...ransform_management/components/edit_transform_flyout/edit_transform_api_error_callout.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
import React, { type FC } from 'react'; | ||
|
||
import { EuiCallOut, EuiSpacer } from '@elastic/eui'; | ||
|
||
import { i18n } from '@kbn/i18n'; | ||
|
||
import { useEditTransformFlyout } from './use_edit_transform_flyout'; | ||
|
||
export const EditTransformApiErrorCallout: FC = () => { | ||
const apiErrorMessage = useEditTransformFlyout('apiErrorMessage'); | ||
|
||
return ( | ||
<> | ||
{apiErrorMessage !== undefined && ( | ||
<> | ||
<EuiSpacer size="m" /> | ||
<EuiCallOut | ||
title={i18n.translate( | ||
'xpack.transform.transformList.editTransformGenericErrorMessage', | ||
{ | ||
defaultMessage: 'An error occurred calling the API endpoint to update transforms.', | ||
} | ||
)} | ||
color="danger" | ||
iconType="alert" | ||
> | ||
<p>{apiErrorMessage}</p> | ||
</EuiCallOut> | ||
</> | ||
)} | ||
</> | ||
); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.