1.0.1 • Published 2 years ago

mobrix-engine-plugin-ui v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

MoBrix-engine-plugin-ui

NPM npm npm bundle size Maintenance


Manage ui properties with MoBrix-engine system


Summary


Getting started

Installation

Check MoBrix-engine guide to init the system

If you want to use this plugin with MoBrix-engine, install it:

npm i mobrix-engine-plugin-ui

Usage

Include this plugin inside your MoBrix-engine config file, and optionally set the ui field, with the plugin settings:

  • darkMode : initial dark mode

For example:

const uiPlugin = require("mobrix-engine-plugin-ui");

const config = {
  appName: "custom-app",
  plugins: [uiPlugin],
  ui: {
    darkMode: true,
    onDarkModeChange: [(darkMode) => console.log("new dark mode " + darkMode)],
  },
};

module.exports = { config };

You can see a live preview by visiting MoBrix-engine playground


API

Config

This plugin adds a custom field inside the MoBrix-engine config, ui. This new field contains 1 field, to easily integrate new functions:

SettingDescription
onDarkModeChange- array of callbacks called everytime the dark-mode is enabled or disabled
drawer- enable/disable drawer management. If true, a new field will be included into the state, isDrawerOpen, to drive the drawer visibility with standard actions

Actions

Action creatorArgumentsEffect
setDarkMode- darkMode: dark-mode to setSwitch dark-mode to on/off
openDrawer/open the drawer
closeDrawer/close the drawer

Import them from this lib:

import { setDarkMode } from "mobrix-engine-plugin-ui";

Then dispatch them from any part of your app:

import { setDarkMode } from "mobrix-engine-plugin-ui";

import { useDispatch } from "react-redux";

export const DarkModeButton = () => {
  const dispatch = useDispatch();

  return (
    <button
      onClick={() => {
        dispatch(setDarkMode(true));
      }}
    >
      Enable dark mode
    </button>
  );
};

Selectors

SelectorsReturns
getUIViewUi state, or default state if not enabled
isInDarkModeActual dark-mode status (on/off)
isInDarkModeActual drawer visibility (always false if the drawer option is not enabled)

Import them from this lib:

import { getUIView, isInDarkMode, isDrawerOpen } from "mobrix-engine-plugin-ui";

Then you can use them, with selectors hooks, inside your components (in this example, a MoBrix-ui component is used, all of them natively support dark-mode):

import { useSelector } from "react-i18next";
import { isInDarkMode } from "mobrix-engine-plugin-ui";
import { Container } from "mobrix-ui";

export const CustomComponent = () => {
  const darkMode = useSelector(isInDarkMode);

  return (
    <Container dark={darkMode}>
      <p>{`dark mode is ${darkMode ? "enabled" : "disabled"}`}</p>
    </Container>
  );
};

Integration with other plugins

  • This plugin expose some fields to work with any other plugin. If you want to interact with it, using your custom plugin, add an interaction for ui plugin:
//Just a skeleton of a custom plugin that interacts with ui plugin
const customPlugin = () => ({
  // Custom plugin stuffs

  interactions: [
    {
      plugin: "mobrix-engine-ui",
      effect: (uiConfig) => {
        // Custom plugin stuffs

        //Add the custom callback
        uiConfig.onDarkModeChange.push(() => {
          alert("dark mode status is changed");
        });
      },
    },
  ],
});

Included libraries


Authors


License

This project is licensed under the MIT License - see the LICENSE file for details

1.0.1

2 years ago

1.0.0

2 years ago