Hey Hive Community Members! π
Welcome back to my wild ReactJS learning ride π’ β and guess what? Weβre already on Day 9! If you've missed previous episodes, don't worry. Grab some popcorn πΏ and catch up with the epic saga below:
π ReactJS Journey So Far
- π Day One: Fresh React app + AIOHA integration!
- π§ Day Two: Routing drama & rebellious NavBar π€
- π οΈ Day Three: Fixed Layouts, Routing & AIOHA π₯
- π§ Day Four: useState, useEffect, and .env headaches π
- π§Ή Day Five: Path Aliases to clean up relative path spaghetti π
- π‘ Day Six: Create Context Provider & call API
- π Day Seven: Show a toast message
- π Day Eight: Login with AIOHA & Distriator & LocalStorage magic
π₯³ Today's Adventure: Custom Toast Component
As highlighted in earlier posts, thereβs a super cool way to show toast messages with the 'sonner' library (link)... But! I created my own Toast component. It's my first React babyβhow could I abandon it? π€£
So, today we jazz things up and show how to customize our own toast messages and style them like a pro. π§βπ¨
πΌοΈ Toasty Visuals
π‘ Define Custom Enums for Toasts
// ToastType as a string enum
export enum ToastType {
Error = "error",
Warning = "warning",
Info = "info",
Success = "success"
}
// ToastStyle as a string enum
export enum ToastStyle {
Regular = "regular",
Soft = "soft",
Outline = "outline",
Dash = "dash"
}
Because when life hands you errors, turn them into enums! π
π¨ SVG Icons for Every Occasion
function errorPath() {
return <path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" />;
}
function warningPath() {
return <path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
}
function successPath() {
return <path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />;
}
function infoPath() {
return <path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />;
}
Why pick one mood when you can have four? π
βοΈ Toast Props Ready for Showbiz
type ToastProps = {
message: string;
type: ToastType;
style: ToastStyle;
show: boolean;
setShow: React.Dispatch<React.SetStateAction<boolean>>;
};
const Toast: React.FC<ToastProps> = ({ message, type, style, show, setShow }) => {
Toast gets picky: βI want my message! And my style! And my own show!β
ποΈ SVG Rendering, Like a Boss
<svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6 shrink-0 stroke-current" fill="none" viewBox="0 0 24 24">
{path()}
</svg>
Unleashing the right icon for the right momentβ³
π§© Path Selector β Icon Power!
function path() {
switch (type) {
case ToastType.Error: return errorPath();
case ToastType.Info: return infoPath();
case ToastType.Warning: return warningPath();
case ToastType.Success: return successPath();
default: return successPath();
}
}
π Dynamic Class Value: Automatic Styling!
<div role="alert" className={`alert ${classValue()} shadow-lg px-4 py-2 rounded-md`}>
function classValue() {
switch (type) {
case ToastType.Error: return "alert-error";
case ToastType.Info: return "alert-info";
case ToastType.Warning: return "alert-warning";
case ToastType.Success: return "alert-success";
default: return "alert-success";
}
}
π© Supercharged Toast Display Styles
function toastStyle() {
switch (style) {
case ToastStyle.Dash: return "alert-dash";
case ToastStyle.Soft: return "alert-soft";
case ToastStyle.Outline: return "alert-outline";
case ToastStyle.Regular: return "";
default: return "";
}
}
Update toast-alert-jsx
<div role="alert" className={`alert ${classValue()} ${toastStyle} shadow-lg px-4 py-2 rounded-md`}>
π Implement Your Toast! like a boss
<Toast
message={errorMessage}
style={toastStyle}
type={toastType}
show={showToast}
setShow={setShowToast}
/>
Here are the sample screenshots from my project to let you know how it looks.
Now you can send out all the success, error, or info vibes you want!
π₯ Cheers & Closing
Thatβs it for this post! I hope you had some laughs, learned how to supercharge your own toast component, and got more confident with customizing ReactJS components. π»
π Thank you so much for reading my post. More power to Hive Blockchain. More power to Hive community members! Cheers and high fives to YOU for following along. Have a good one! ππ
π Final Note
- I asked ChatGPT/AI to help optimize this post to make it more readable and viewer-friendly.
- Here is the link where you can find both original content & improvements made by AI
- https://www.perplexity.ai/search/d5224674-f110-48f1-8ffb-cb290e0f2eac
π My Contributions to β¦οΈ Hive Ecosystem
Contribution | To | Hive | Ecosystem |
---|---|---|---|
Hive Witness Node | Hive API Node (in progress) | 3Speak Video Encoder Node Operator (highest number of nodes) | 3Speak Mobile App Developer |
3Speak Podcast App Developer | 3Speak Shorts App Developer | 3Speak Support & Maintenance Team | Distriator Developer |
CheckinWithXYZ | Hive Inbox | HiFind | Hive Donate App |
Contributed to HiveAuth Mobile App | Ecency β 3Speak Integration | Ecency β InLeo Integration | Ecency β Actifit Integration |
Hive Stats App | Vote for Witness App | HiveFlutterKit | New 3Speak App |
π Support Back
β€οΈ Appreciate my work? Consider supporting @threespeak & @sagarkothari88! β€οΈ
Vote | For | Witness |
---|---|---|
sagarkothari88 | @sagarkothari88 | |
threespeak | @threespeak |