@aioha/react-ui
Version:
Ready-made React modal for Aioha
24 lines (23 loc) • 2.42 kB
JavaScript
import React, { useState } from 'react';
import { useAioha } from '@aioha/react-provider';
import { LoginModal } from './LoginModal.js';
import { UserModal } from './UserModal.js';
import { SwitchUserModal } from './SwitchUserModal.js';
export const AiohaModal = ({ displayed = false, loginTitle, loginHelpUrl, loginOptions, forceShowProviders = [], arrangement = 'list', onLogin, onClose }) => {
const { aioha, user, otherUsers } = useAioha();
const isInactive = Object.keys(otherUsers).length > 0 && !aioha.isLoggedIn();
const [switchingUser, setSwitchingUser] = useState(isInactive);
const [addingAcc, setAddingAcc] = useState(false);
return (React.createElement("div", { id: "aioha-modal", tabIndex: -1, className: `${displayed ? '' : 'hidden'} overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 flex justify-center items-center w-full md:inset-0 h-full bg-black bg-opacity-30`, onMouseDown: () => onClose(false) },
React.createElement("div", { className: `relative p-4 ${arrangement === 'grid' ? 'md:max-w-xl max-w-md' : 'max-w-md'} max-h-full` },
React.createElement("div", { className: "relative bg-white rounded-lg shadow-sm dark:bg-gray-700 min-w-sm", onMouseDown: (e) => e.stopPropagation() }, aioha.isLoggedIn() || Object.keys(otherUsers).length > 0 ? (switchingUser ? (!addingAcc ? (React.createElement(SwitchUserModal, { onClose: onClose, onSelect: (newUser) => {
if (newUser !== user)
aioha.switchUser(newUser);
setSwitchingUser(false);
}, onAddAcc: () => setAddingAcc(true) })) : (React.createElement(LoginModal, { loginTitle: 'Add Account', loginHelpUrl: loginHelpUrl, loginOptions: loginOptions, arrangement: arrangement, forceShowProviders: forceShowProviders, onLogin: (r) => {
setAddingAcc(false);
setSwitchingUser(false);
if (typeof onLogin === 'function')
onLogin(r);
}, onClose: onClose, onCancel: () => setAddingAcc(false) }))) : (React.createElement(UserModal, { onClose: onClose, onSwitchUser: () => setSwitchingUser(true) }))) : (React.createElement(LoginModal, { loginTitle: loginTitle, loginHelpUrl: loginHelpUrl, loginOptions: loginOptions, arrangement: arrangement, forceShowProviders: forceShowProviders, onLogin: onLogin, onClose: onClose }))))));
};