1.0.25 • Published 5 months ago

mui-feedback v1.0.25

Weekly downloads
-
License
ISC
Repository
-
Last release
5 months ago

Mui Feedback

A collection of user-friendly feedback components built with Material-UI, designed to enhance user experience with clear and concise notifications, alerts, and confirmation dialogs.

Installation

// with npm
npm i mui-feedback

// with yarn
yarn add mui-feedback

Demo

Demo with theme

Usage

Mui Feedback can be used in your application as follows:

Basic Usage

...import
import { AlertProvider } from 'mui-feedback';
import { useMuiFeedback } from 'mui-feedback';

const RootComponent = () => {
  return (
      <AlertProvider>
        <App />
      </AlertProvider>
  )
}


function App() {
  const { alert, confirm, notification } = useMuiFeedback();

  const handleAlert = () => {
    alert({
      message: "All will be good",
    })
  }
  const handleConfirm = () => {
    confirm({
      title: 'Confirm',
      message: "All will be good. Please be alert."
    })
  }
  const handleNotification = () => {
    notification({
      message: "All will be good",
    })
  }
  
  return (
    <>
      <Button variant='contained' onClick={handleAlert}>Show Alert</Button>
      <Button variant='contained' onClick={handleConfirm}>Show Confirm</Button>
      <Button variant='contained' onClick={handleNotification}>Show Notification</Button>
    </>
  )
}

Use with custom MuI Theme

If we want to pass custom Mui Theme file, we can provide an example as belows

import { AlertProvider } from 'mui-feedback';
import { ThemeProvider } from '@emotion/react';
import { createTheme } from '@mui/material/styles';

const theme = createTheme({
...
});

const RootComponent = () => {
  return (
    <ThemeProvider theme={theme}>
        <AlertProvider  theme={theme}>
    <App />
        </AlertProvider>
    </ThemeProvider>
  )
}

Use custom Dialog Styles for Confirm Button

If we want to use styled Mui Dialog Component.

const CustomDialogBox = styled(Dialog)(({ theme }) => ({
  "& .MuiPaper-root": {
    backgroundColor: theme.palette.background.paper,
    borderRadius: 10,
    boxShadow: "0px 5px 10px rgba(0, 0, 0, 0.1)",
  },
  "& .MuiDialogTitle-root": {
    color: theme.palette.primary.contrastText,
    fontWeight: "bold",
    padding: "8px 24px",
    borderBottom: `1px solid ${theme.palette.divider}`,
    backgroundColor: theme.palette.primary.main,
  },
  "& .MuiDialogContent-root": {
    padding: `${theme.spacing(3)} !important`,
  },
  "& .MuiDialogActions-root": {
    padding: theme.spacing(2),
    justifyContent: "flex-end",
  },
}));

const RootComponent = () => {
  return (
    <AlertProvider confirmGlobalProps={{ styledDialogComponent: CustomDialogBox }}>
      <App />
    </AlertProvider>
  )
}

Documentation

Components

1. AlertProvider

This is the main component of the Mui-Feedback. This is a context wrapper. It is recommend to wrap your entire application with this provider so you can use the Mui-Feedback compoents anyway in the application.

PropertiesTypeDescriptionDefault
alertGlobalPropsAlertGlobalPropsGlobal Properties for the alert compoent.{ vertical: 'top', horizontal: 'left' stackAlerts: false}
notificationGlobalPropsNotificationGlobalPropsGlobal Properties for the alert compoent. These properties can be overridden while invoking the notification{ vertical: 'top', horizontal: 'right' }
confirmGlobalPropsGlobalConfirmPropsAll these properties can be overridden while invoking the confirm modal so we can call with different properties{ { position: 'center-center', scrollable: false, hideTopCloseButton: false }
themeTheme.Theme used for the Mui. See full detail
AlertGlobalProps
{
  vertical?: 'top' | 'bottom',
  horizontal?: 'left' | 'center' | 'right'
  stackAlerts?: boolean, // Whether to stackAlerts and display multiple alert. Default false
  autoHide?: boolean // Whether to hide the alert automatically. Default true
  ... 
  // Along with these properties you can use any props available for mui here https://mui.com/material-ui/api/alert/#props
  // Except anchorOrigin
}
NotificationGlobalProps
{
  vertical?: 'top' | 'bottom',
  horizontal?: 'left' | 'center' | 'right'
  ... 
  // Along with these properties you can use any props available for mui here https://mui.com/material-ui/api/snackbar/#props
  // except anchorOrigin
}
GlobalConfirmProps
{
  successButtonProps?: ButtonProps // Read https://mui.com/material-ui/api/button/#props
  cancelButtonProps?: ButtonProps // Read https://mui.com/material-ui/api/button/#props
  hideTopCloseButton?: boolean
  customFooter?: () => ReactNode
  styledDialogComponent?: typeof StyledDialogBox | typeof Dialog // Read https://mui.com/material-ui/react-dialog/#customization
  componentProps?: {
      dialogProps?: DialogProps // Read https://mui.com/material-ui/api/dialog/#props
      dialogActionsProps?: DialogActionsProps // Read https://mui.com/material-ui/api/dialog-actions/#props
      dialogContentProps?: DialogContentProps // Read https://mui.com/material-ui/api/dialog-content/#props
      dialogTitleProps?: DialogTitleProps // Read https://mui.com/material-ui/api/dialog-title/#props
  }
  draggable?: boolean
  position?: 'top-left' | 'top-center' | 'top-right' | 'center-left' | 'center-center' | 'center-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'
  hideButtonProps?: IconButtonProps // Read https://mui.com/material-ui/api/icon-button/#props
}

Hooks For Import Methods

useMuiFeedback

you can use useMuiFeedback to export all the feedback components to you code

Example Usage

 const { alert, confirm, notification } = useMuiFeedback();

useAlert

you can use useAlert to export dialog box function to your code

Example Usage

 const alertMessage = useAlert();

useConfirm

you can use useConfirm to export the dialog box function to your code.

Example Usage

 const confirm = useConfirm();

useNotification

you can use useNotification to export the notification box function to your code.

Example Usage

 const notification = useNotification();
 

useCloseAllAlerts

you can use useCloseAllAlerts to close all the alerts

Example Usage

 const closeAllAlerts = useCloseAllAlerts();
 

useCloseAllNotifications

you can use useCloseAllNotifications to close all the notifications

Example Usage

 const closeAllNotifications = useCloseAllNotifications();
 

useCloseAllConfirmations

you can use useCloseAllConfirmations to close all the dialogs

Example Usage

 const closeAllConfirmations = useCloseAllConfirmations();
 

Methods

alert

Alerts display brief messages for the user without interrupting their use of the app.

alert({
  message: ReactNode 
  inout: number // Optional
  severity: 'error' | 'info' | 'success' | 'warning'
  variant: 'filled' | 'outlined' | 'standard'
  onClose: () => void // Optional
  timeout: number // Optional Auto hide Duration. If not provided will use a custom logic to hide the alert based on the 
                  // length of the message. Long message will stay for long and short message will be quick.
  stackAlerts: boolean // Optional default true. Whether to display multiple alerts the same time.
  autoHide: boolean // Optional Whether to auto hide the 

  ... 
  // Along with these properties you can use any props available for mui here https://mui.com/material-ui/api/alert/#props
  // except anchorOrigin
})

notification

notification are used for brief notifications of processes that have been or will be performed.

notification({
  message: ReactNode
  vertical?: 'top' | 'bottom',
  horizontal?: 'left' | 'center' | 'right'

  ... 
  // Along with these properties you can use any props available for mui here https://mui.com/material-ui/api/snackbar/#props
  // except anchorOrigin
})

confirm

Confirm inform users about a task and can contain critical information, require decisions, or involve multiple tasks.

confirm({
  title?: string | React.ReactNode // Modal Title
  message: string | React.ReactNode  // Modal Content
  onClose?: () => void // Callback when the user clicks close
  onSuccess?: () => void // Callback when the user clicks success button
  successButtonContent?: string | ReactNode // Success Button Text
  cancelButtonContent?: string | ReactNode // Success Button Text
  hideCancelButton?: boolean // Hide Cancel Button
  hideSuccessButton?: boolean  // Hide Success Button
  customButtons?: ButtonProps[] // Custom Footer Buttons

  // the following properties can be given as global props to the AlertProvider
  // if given while calling the confirm method it will take priority

  successButtonProps?: ButtonProps // Read https://mui.com/material-ui/api/button/#props
  cancelButtonProps?: ButtonProps // Read https://mui.com/material-ui/api/button/#props
  hideTopCloseButton?: boolean
  customFooter?: () => ReactNode
  styledDialogComponent?: typeof StyledDialogBox | typeof Dialog // Read https://mui.com/material-ui/react-dialog/#customization
  componentProps?: {
      dialogProps?: DialogProps // Read https://mui.com/material-ui/api/dialog/#props
      dialogActionsProps?: DialogActionsProps // Read https://mui.com/material-ui/api/dialog-actions/#props
      dialogContentProps?: DialogContentProps // Read https://mui.com/material-ui/api/dialog-content/#props
      dialogTitleProps?: DialogTitleProps // Read https://mui.com/material-ui/api/dialog-title/#props
  }
  draggable?: boolean
  position?: 'top-left' | 'top-center' | 'top-right' | 'center-left' | 'center-center' | 'center-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'
  hideButtonProps?: IconButtonProps // Read https://mui.com/material-ui/api/icon-button/#props
})

closeAllAlerts

Close All the existing alerts

closeAllNotifications

Close All the existing notifications

closeAllConfirmations

Close All the existing dialogs

1.0.25

5 months ago

1.0.24

6 months ago

1.0.23

6 months ago

1.0.22

6 months ago

1.0.21

6 months ago

1.0.20

6 months ago

1.0.19

6 months ago

1.0.18

6 months ago

1.0.17

6 months ago

1.0.16

6 months ago

1.0.15

6 months ago

1.0.14

6 months ago

1.0.13

6 months ago

1.0.12

6 months ago

1.0.11

6 months ago

1.0.10

6 months ago

1.0.9

6 months ago

1.0.8

6 months ago

1.0.7

6 months ago

1.0.6

6 months ago

1.0.5

6 months ago

1.0.4

6 months ago

1.0.3

6 months ago

1.0.2

6 months ago

1.0.1

6 months ago

1.0.0

6 months ago