Comments (4)
Yes, this is possible. Let me explain how toast.promise
works internally, so it's easier to understand how we are going to style it.
Compared to other toast calls (success, error etc.), toast.promise doesn't have its own toast type.
It's a helper function that creates a loading toast and updates it based on the provided promise.
You can read the internals yourself here: https://github.com/timolins/react-hot-toast/blob/main/src/core/toast.ts#L62-L91
In order to style toast.promise()
, we need to style all toast types that are being dispatched by it. Meaning loading
, success
& error
.
For small tweaks, I'd suggest using the styling API.
For a full customisation, you can write your own renderer.
Here is an example with custom notifications built with react-hot-toast + goober (styled-components like). This method works equally well with other styling methods.
CodeSandbox: https://codesandbox.io/s/react-hot-toast-custom-toasts-with-styled-components-i4xj6?file=/src/App.js
from react-hot-toast.
Anyway if it helps someone. I did something like this. I am doing abstraction on top of the toast functionality and it works nice.
import React from 'react';
import toast from 'react-hot-toast';
import { v4 as uuid } from 'uuid';
import type { ToastProps } from './toast';
import { Toast } from './toast';
export const triggerToast = (
title: string,
settings?: SettingsType,
) => {
toast.custom(
t => (
<Toast
title={title}
isError={settings?.isError}
isLoading={settings?.isLoading}
action={settings?.action}
ariaRole={settings?.ariaRole}
onClose={() => toast.dismiss(t.id)}
isVisible={t.visible}
/>
),
{ id: settings?.id },
);
};
triggerToast.promise = <T,>(promise: Promise<T>) => {
const id = uuid();
triggerToast('Loading', { isLoading: true, id });
promise
.then(p => {
triggerToast('success', {
id,
});
return p;
})
.catch(() => {
triggerToast('error', {
id,
isError: true,
});
});
return promise;
};
from react-hot-toast.
Also looking for a way to dismiss a Promise Toast. message.promise
returns a Promise
, not the id like the other toast methods.
I think built in functionality for adding & styling a dismiss button would be ideal ( #7 ) though the need for manual dismissal for promise toasts is still needed.
from react-hot-toast.
This would be awesome to have in documentation if possible. cc @timolins
from react-hot-toast.
Related Issues (20)
- Custom output direction HOT 1
- Support loading with "mask"
- Element type Error when using with nextjs and redux-toolkit
- Accessibility
- (Suggestion) Enhancing Web Accessibility
- Add delay to toast
- Feature Requests for warning and max toast
- Toast persists after page navigation HOT 1
- Support popover api
- Dismiss a headless toast? HOT 4
- how to support center-center? HOT 2
- TypeError: Failed to set an indexed property [0] on 'CSSStyleDeclaration': Indexed property setter is not supported.
- Linear gradient background HOT 1
- onClick event on toast.error/toast.success Icon
- Trouble with className HOT 1
- [BUG] Crashed when an element with id `target` exists HOT 2
- Cannot set textAlign
- Resolved promise unnecessarily and indefinitely maintains loading state
- Toast resides below top layer element like <dialog> when triggered from them HOT 1
- Website is down!!! HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-hot-toast.