kibana/examples/routing_example/public/post_message_example.tsx
Jason Stoltzfus c339ca8394
Upgraded EUI to v76.0.0 (#152506)
👋 Hi all - the biggest breaking change of this PR is around two icon
type changes/renames.

1. ⚠️ **The  `alert` icon is now named `warning`**
- <img width="103" alt=""
src="https://user-images.githubusercontent.com/549407/223561599-8913e88c-676f-47cd-aaed-81b64783bd81.png"
align="middle">
- This change should have been automatically converted on your behalf by
the EUI team, **but if for some reason** we missed making this
conversion in this PR and your icon(s) are now broken, please ping us or
let us know in this PR (or fix yourself after this PR merges).
- In some cases, teams were using this icon for error messages,
alongside the `danger` color. In those cases, we opinionatedly changed
those icon usages to the new `error` icon instead of using the old
alert/warning icon.

2. 🛑 **The `crossInACircleFilled` icon has been removed, and a new
`error` icon added**
- <img width="84" alt=""
src="https://user-images.githubusercontent.com/549407/223561892-4406bdf6-1a55-49ac-85ad-3a11eb7c090d.png"
align="middle">
- The conversion for this breaking change was not straightforward. This
was the path we used to determine what to change `crossInACircleFilled`
usages to:
- If the icon was associated with errors or error messages, we changed
it to the new `error` icon.
- If a "delete" action was associated with this icon, we changed it to
the `trash` icon instead.
- If a "clear" action was associated with this icon, we changed it to
just the `cross` icon, or in some cases `minusInCircleFilled` (if used
alongside `plusInCircleFilled`).
- Again, if we made a mistake during this conversion or missed your
plugin, please feel free to ping us.

## Summary

`eui@75.1.2`  `eui@76.0.2`

## [`76.0.2`](https://github.com/elastic/eui/tree/v76.0.2)

**Bug fixes**

- Added a legacy `alert` alias for the `warning` `EuiIcon` type
([#6640](https://github.com/elastic/eui/pull/6640))

## [`76.0.1`](https://github.com/elastic/eui/tree/v76.0.1)

**Bug fixes**

- Fixed broken icons on all `isInvalid` form controls
([#6629](https://github.com/elastic/eui/pull/6629))

## [`76.0.0`](https://github.com/elastic/eui/tree/v76.0.0)

- Added `pivot` glyph to `EuiIcon`
([#6605](https://github.com/elastic/eui/pull/6605))
- Added the `displayHeaderCellProps` API to `EuiDataGrid`'s columns,
which allows passing custom props directly to column header cells
([#6609](https://github.com/elastic/eui/pull/6609))
- Added the new `headerCellProps`/`footerCellProps` APIs to
`EuiDataGrid`'s control columns, which allows passing custom props
directly to control column header or footer cells
([#6609](https://github.com/elastic/eui/pull/6609))
- Added a new `footerCellRender` API to `EuiDataGrid`'s control columns,
which allows completely customizing control column rendering (previously
rendered an empty cell)
([#6609](https://github.com/elastic/eui/pull/6609))
- Updated the styling of nested ordered lists in `EuiText` to align with
GitHub's list style, which is a popular format used in Markdown or MDX
formatting ([#6615](https://github.com/elastic/eui/pull/6615))
- Added a margin-bottom property exclusively to the direct child `ul`
and `ol` elements of the `EuiText` component
([#6615](https://github.com/elastic/eui/pull/6615))
- Fix issue with badges appearing within an `EuiBadgeGroup`, where the
CSS rule to override the `margin-inline-start` was not being applied
correctly due to the order of appearance in the CSS rules
([#6618](https://github.com/elastic/eui/pull/6618))

**Bug fixes**

- Fixed `EuiDataGrid` footer control columns rendering with cell
expansion popovers when they should not have been
([#6609](https://github.com/elastic/eui/pull/6609))
- Fixed an `EuiSkipLink` bug where main content loading in
progressively/dynamically after the skip link rendered was not being
correctly focused ([#6613](https://github.com/elastic/eui/pull/6613))

**Breaking changes**

- Renamed `EuiIcon`'s `alert` to `warning`
([#6608](https://github.com/elastic/eui/pull/6608))
- Removed `EuiIcon`'s `crossInACircleFilled` in favor of `error`
([#6608](https://github.com/elastic/eui/pull/6608))

---------

Co-authored-by: Davey Holler <daveyholler@hey.com>
Co-authored-by: Constance Chen <constance.chen@elastic.co>
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Jon <jon@elastic.co>
2023-03-14 14:27:40 -05:00

92 lines
2.8 KiB
TypeScript

/*
* 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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import React, { useCallback } from 'react';
import { useState } from 'react';
import {
EuiText,
EuiButton,
EuiLoadingSpinner,
EuiFieldText,
EuiCallOut,
EuiFormRow,
EuiTextArea,
} from '@elastic/eui';
import { type IHttpFetchError, isHttpFetchError } from '@kbn/core-http-browser';
import { Services } from './services';
interface Props {
postMessage: Services['postMessage'];
addSuccessToast: Services['addSuccessToast'];
}
export function PostMessageRouteExample({ postMessage, addSuccessToast }: Props) {
const [error, setError] = useState<IHttpFetchError | undefined>();
const [isPosting, setIsPosting] = useState<boolean>(false);
const [message, setMessage] = useState<string>('');
const [id, setId] = useState<string>('');
const doFetch = useCallback(async () => {
if (isPosting) return;
setIsPosting(true);
const response = await postMessage(message, id);
if (response && isHttpFetchError(response)) {
setError(response);
} else {
setError(undefined);
addSuccessToast('Message was added!');
setMessage('');
setId('');
}
setIsPosting(false);
}, [isPosting, postMessage, addSuccessToast, setMessage, message, id]);
return (
<React.Fragment>
<EuiText>
<h2>POST example with body</h2>
<p>
This examples uses a simple POST route that takes a body parameter and an id as a param in
the route path.
</p>
<EuiFormRow label="Message Id">
<EuiFieldText
value={id}
onChange={(e) => setId(e.target.value)}
data-test-subj="routingExampleSetMessageId"
/>
</EuiFormRow>
<EuiFormRow label="Message">
<EuiTextArea
data-test-subj="routingExampleSetMessage"
value={message}
onChange={(e) => setMessage(e.target.value)}
/>
</EuiFormRow>
<EuiFormRow hasEmptyLabelSpace={true}>
<EuiButton
data-test-subj="routingExamplePostMessage"
disabled={isPosting || id === '' || message === ''}
onClick={() => doFetch()}
>
{isPosting ? <EuiLoadingSpinner /> : 'Post message'}
</EuiButton>
</EuiFormRow>
{error !== undefined ? (
<EuiCallOut color="danger" iconType="warning">
{error.message}
</EuiCallOut>
) : null}
</EuiText>
</React.Fragment>
);
}