npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@stereye/react-native-toast-message-framework

v1.0.5

Published

Simply but easy to extended toast frame, written in pure JavaScript. It can used on both iOS and Android.

Downloads

138

Readme

React Native Toast Message Framework

Simply but easy to extended toast frame, written in pure JavaScript. It can used on both iOS and Android.

Features

  • Pure JS implementation
  • Supports multiple toasts with multiple namespaces
  • Supports multiple queue, you can put it on any edges or corners
  • iOS and Android compatible
  • Easy to difine your own style using pure React style way
  • Easy to difine your own animation using pure React Native way: both Animated and LauoutAnimation are suppoted
  • Easy to difine your own message component to extend the functionality
  • Written using React Hooks, together with helper functions to work on Class components.
  • Simply and easy template for you to extend.

Installation

TBD not in npm now.

Basic Usage

As the The three most basic interface provided by message is { useMessage, MessageProvider, MessageContainer }:

  1. MessageProvider is the provider component, which hold the context and all API should work inside it. Typically you need to use it at the most top level.
  2. MessageContainer is the container where your toast message will show. It localed on the center of the top by default.
  3. useMessage provide interface hook which you can control the meesage, If you dislike the hook, we also provide MessageContext object and withMessage helper function.

Example

import { Button } from 'react-native'
import { useMessage, MessageProvider, MessageContainer } from 'message'

const App = () => {
  // useMessage to get the API interface,
  const { messageInterface } = useMessage()

  return (
    <Button
      onPress={() => {

        // add a new message
        messageInterface.show({
          message: 'Hello world!',  // set the message text,
          duration: 3000,           // disappear after 3000 milliseconds,
        })

      }}>
      Send a message
    </Button>
  )
}

return (
  {/* Provider component who holds the context */}
  <MessageProvider>
    {/* Container component where the message will appear */}
    <MessageContainer />
    <App />
  </MessageProvider>
)

Advanced Usage

Introduce of the structure

In this framework, we defined three kinds of components:

  1. MessageProvider: who holds the context, (using react's context api). All other components should be put under it.
  2. MessageContainer: the container which show the messages.
  • You can add multiple MessageContainer with different namespace. Each namespace will holds its own message queue.
  • This is useful if you need one message queue for global message and another queue at right top corner (like macOS style). especially when screen is landscape.
  1. MessageComponent: the component who process the message options and control the appearance and animation of it. You can write your own message component and activate it as props of MessageContainer.

Multiple messages queues / namespaces

Control the message (show/hide/update)

Animation

Write your own message component

Components

MessageProvider Component

import { MessageProvider } from 'message'

Component who holds the context. All other components should be put under it.

| Prop | Type | Required | Description | Default | | --------------------- | ------- | -------- | ------------------------------- | ------- | | globalAnimation | boolean | no | Enable LayoutAnimation globally | false |

MessageContainer Component

import { MessageContainer } from 'message'

The container which show the messages.

| Prop | Type | Required | Description | Default | | --------------------------- | ------- | -------- | ------------------------------------- | ------------------------------- | | namespace | string | no | Namespace of this container holds | 'default' | | maxMessage | number | no | maximum message size, 0 for unlimited | 0 | | orderInverse | boolean | no | Wether to inverse the order | false | | style | object | no | Style to the container component | {} | | messageComponentStyle | object | no | Style passed to the message component | {} | | MessageComponent | object | no | User definde message component | DefaultTextMessageComponentFade |

By default, the container component will put all messages at the top center, you can override this by setting prop style.

Default style:
{
  position: 'absolute',
  top: 0,
  left: 0,
  right: 0,
  padding: 12,
  zIndex: 99,
  flexDirection: 'column',
  justifyContent: 'flex-start',
  alignItems: 'center',
}

Message Component Interface

Defining your own message component gives you full control over the message handling. You can define your own properties, design animations and change the style as you like.

A Message Component should follow these rules:

  1. messageComponentStyle will be passed to props.style by MessageContainer Component
  2. The readonly original message options will be passed to props.message
  3. Please be clear that id, removed, namespace is reserved options, see MessageOptions
  4. By default, rather than deleting a message directly, the system will set its removed property to true. It's your responsibility to check this and prepare your disappear animations and other work. Make sure to call messageInterface.forceRemove after everything done.

The buildin component is good template for you to start with, refer to Buildin Template Message Components to learn more.

API Interface

Get the API interface

We provide three ways to get access to the API interface: the hook, helper function, and context object.

useMessage Hook

import { MessageContainer } from 'message'

const { messageList, globalAnimationEnabled, messageInterface } = useMessage()

Nothing special but a pure react hook function.

withMessage Helper Function

import { withMessage } from 'message'

const MessageApp = withMessage(MessageApp_)

Adding messageList, globalAnimationEnabled and messageInterface as props to the Component. It's useful if you write class-styled component.

MessageContext

The low level context object created by React.createContext. Read the react docs to learn more about how to use it.

import { MessageContext } from 'message'

const YourComponent = ({}) => {
  const context = useContext(MessageContext)
  const messageList = context.messageList
  const globalAnimationEnabled = context.globalAnimationEnabled
  const messageInterface = context.messageInterface

  ...

  return (...)
}

messageList

An object which holds all messages by the key of the namespace.

globalAnimationEnabled

A boolean indices wether globalAnimation is enabled.

See messageInterface.triggleGlobalAnimation to enable or disable it.

messageInterface.show

show(options, namespace): id

Add a new message into the given namespace.

  • options: MessageOptions, see MessageOptions
  • namespace: (optional) string, the namespace the message to be added, (default: 'default')
  • returns:
  • id: string, the internal id of this message.

messageInterface.remove

remove(id, namespace): null

Remove a message by given id and namespace.

  • id: string, the internal id of this message
  • namespace: (optional) string, the namespace of the message, (default: 'default')
  • returns:
  • null

Won't throw any exception if the given message is not found.

This function will internally update the message as {removed: false} in MessageOptions. It will be actually removed by messageComponent after the quitting animation. see Write Your Own Message Component.

If you want to remove the directly without and animation and postprocess, use messageInterface.forceRemove.

messageInterface.forceRemove

forceRemove(id, namespace): null

Remove a message by given id and namespace. It will remove the message from list immediately.

  • id: string, the internal id of this message
  • namespace: (optional) string, the namespace of the message, (default: 'default')
  • returns:
  • null

Won't throw any exception if the given message is not found.

Typically you don't really need this, unless you are writing a customized message component.

messageInterface.update

update(id, options, namespace): id

update a message by given id and namespace. It will remove the message from list immediately.

  • id: string, the internal id of this message
  • options: MessageOptions, see MessageOptions
  • namespace: (optional) string, the namespace of the message, (default: 'default')
  • returns:
  • null

Won't throw any exception if the given message is not found.

The new options will be applied to the previous message options, like setState().

You are not allowed to change these parameters: id and namespace.

Setting {removed: false} will lead to the same behavior as calling messageInterface.remove

messageInterface.triggleGlobalAnimation

triggleGlobalAnimation(enabled): enabled

set if the global LayoutAnimation is enabled. This is disabled by default.

  • enabled: (optional) boolean, enable it or not.
  • returns:
  • enabled: boolean, the new State

Call this function without providing any parameter, will trigger the globalAnimationEnabled.

MessageOptions

You can pass more information as you like in message options. All those options will be transfered directly to the message components. It's quite easy to extend it such as borderRadius, backgroundColor, messageType, icon, etc. Just process them in your own message component.

Here list the options that buildin template message components will use:

| Prop | Type | Required | Description | Default | | --------------- | ------- | -------- | ----------------------------------------------------------------------- | ------- | | id | string | no | Readonly, the internal id for the message | / | | namespace | string | no | Readonly, the namespace of the message | / | | message | string | no | The msaage body to be shown | '' | | removed | boolean | no | Wether this message has been removed. | false | | duration | number | no | How long will this message show, in milliseconds. 0 means show forever. | 0 |

Buildin Template Message Components

buildinComponents.DefaultMessageComponent Component

The most simply template of a message component, with no animation.

It is implemented to handle 3 parameters: message, duration and removed.

DefaultMessageComponentAnimated Component

The most simply template of a message component, with animation using Animated.

It is implemented to handle 3 parameters: message, duration and removed.

DefaultTextMessageComponentFade Component

The default message component, with animation using Animated. Each message will show up by fading.

It is implemented to handle 3 parameters: message, duration and removed.

message should be a string.

DefaultMessageComponentFade Component

Almost the same as DefaultTextMessageComponent, but parameter message can be any React Node rather than string.

It is implemented to handle 3 parameters: message, duration and removed.