@geezee/react-ui
Version:
Modern and minimalist React UI library.
76 lines (65 loc) • 2.86 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import React, { useMemo, useState } from 'react';
import { CfxUIContent } from '../utils/use-cfx-ui-context';
import ThemeProvider from '../styles/theme-provider';
import useCurrentState from '../utils/use-current-state';
import ToastContainer from '../use-toasts/toast-container';
import MessageContainer from '../use-messages/message-container';
import NotificationContainer from '../use-notifications/notification-container';
var CfxProvider = function CfxProvider(_ref) {
var theme = _ref.theme,
children = _ref.children;
var _useCurrentState = useCurrentState([]),
_useCurrentState2 = _slicedToArray(_useCurrentState, 3),
toasts = _useCurrentState2[0],
setToasts = _useCurrentState2[1],
toastsRef = _useCurrentState2[2];
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
toastHovering = _useState2[0],
setToastHovering = _useState2[1];
var updateToasts = function updateToasts(fn) {
var nextToasts = fn(toastsRef.current);
setToasts(nextToasts);
};
var updateToastHoverStatus = function updateToastHoverStatus(fn) {
var nextHoverStatus = fn();
setToastHovering(nextHoverStatus);
};
var _useCurrentState3 = useCurrentState([]),
_useCurrentState4 = _slicedToArray(_useCurrentState3, 3),
messages = _useCurrentState4[0],
setMessages = _useCurrentState4[1],
messagesRef = _useCurrentState4[2];
var updateMessages = function updateMessages(fn) {
var nextMessages = fn(messagesRef.current);
setMessages(nextMessages);
};
var _useCurrentState5 = useCurrentState([]),
_useCurrentState6 = _slicedToArray(_useCurrentState5, 3),
notifications = _useCurrentState6[0],
setNotifications = _useCurrentState6[1],
notificationsRef = _useCurrentState6[2];
var updateNotifications = function updateNotifications(fn) {
var nextNotifications = fn(notificationsRef.current);
setNotifications(nextNotifications);
};
var initialValue = useMemo(function () {
return {
messages: messages,
updateMessages: updateMessages,
notifications: notifications,
updateNotifications: updateNotifications,
toasts: toasts,
toastHovering: toastHovering,
updateToasts: updateToasts,
updateToastHoverStatus: updateToastHoverStatus
};
}, [toasts, toastHovering, messages, notifications]);
return /*#__PURE__*/React.createElement(CfxUIContent.Provider, {
value: initialValue
}, /*#__PURE__*/React.createElement(ThemeProvider, {
theme: theme
}, children, /*#__PURE__*/React.createElement(ToastContainer, null), /*#__PURE__*/React.createElement(MessageContainer, null), /*#__PURE__*/React.createElement(NotificationContainer, null)));
};
export default CfxProvider;