mirror of
https://gitlab.nic.cz/turris/reforis/foris-js.git
synced 2024-12-25 00:11:36 +01:00
Merge branch 'improve-alert' into 'dev'
Move alert to portal See merge request turris/reforis/foris-js!35
This commit is contained in:
commit
13ff8221ca
|
@ -9,6 +9,7 @@ import React, { useState, useContext, useCallback } from "react";
|
|||
import PropTypes from "prop-types";
|
||||
|
||||
import { Alert, ALERT_TYPES } from "bootstrap/Alert";
|
||||
import { Portal } from "utils/Portal";
|
||||
|
||||
const AlertContext = React.createContext();
|
||||
|
||||
|
@ -31,9 +32,11 @@ function AlertContextProvider({ children }) {
|
|||
return (
|
||||
<>
|
||||
{alert && (
|
||||
<Alert type={alert.type} onDismiss={dismissAlert} floating>
|
||||
<Portal containerId="alert-container">
|
||||
<Alert type={alert.type} onDismiss={dismissAlert}>
|
||||
{alert.message}
|
||||
</Alert>
|
||||
</Portal>
|
||||
)}
|
||||
<AlertContext.Provider value={[setAlertWrapper, dismissAlert]}>
|
||||
{ children }
|
||||
|
|
|
@ -12,8 +12,10 @@ import { useAlert, AlertContextProvider } from "../AlertContext";
|
|||
|
||||
function AlertTest() {
|
||||
const [setAlert, dismissAlert] = useAlert();
|
||||
// alert-container serves as an output for Portal which renders Alert
|
||||
return (
|
||||
<>
|
||||
<div id="alert-container" />
|
||||
<button onClick={() => setAlert("Alert content")}>Set alert</button>
|
||||
<button onClick={dismissAlert}>Dismiss alert</button>
|
||||
</>
|
||||
|
|
|
@ -3,7 +3,10 @@
|
|||
exports[`AlertContext should render alert 1`] = `
|
||||
<div>
|
||||
<div
|
||||
class="alert alert-dismissible alert-danger fixed-top floating-alert"
|
||||
id="alert-container"
|
||||
>
|
||||
<div
|
||||
class="alert alert-dismissible alert-danger"
|
||||
>
|
||||
<button
|
||||
class="close"
|
||||
|
@ -13,6 +16,7 @@ exports[`AlertContext should render alert 1`] = `
|
|||
</button>
|
||||
Alert content
|
||||
</div>
|
||||
</div>
|
||||
<button>
|
||||
Set alert
|
||||
</button>
|
||||
|
@ -24,6 +28,9 @@ exports[`AlertContext should render alert 1`] = `
|
|||
|
||||
exports[`AlertContext should render component without alert 1`] = `
|
||||
<div>
|
||||
<div
|
||||
id="alert-container"
|
||||
/>
|
||||
<button>
|
||||
Set alert
|
||||
</button>
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
.floating-alert {
|
||||
/* Display alert above other components */
|
||||
z-index: 2000;
|
||||
}
|
||||
|
||||
@media(max-width: 768px) {
|
||||
.floating-alert {
|
||||
margin: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media(min-width: 769px) {
|
||||
.floating-alert {
|
||||
width: 75%;
|
||||
margin: 0.5rem auto;
|
||||
}
|
||||
}
|
|
@ -8,8 +8,6 @@
|
|||
import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import "./Alert.css";
|
||||
|
||||
export const ALERT_TYPES = Object.freeze({
|
||||
PRIMARY: "primary",
|
||||
SECONDARY: "secondary",
|
||||
|
@ -31,20 +29,17 @@ Alert.propTypes = {
|
|||
]),
|
||||
/** onDismiss handler. */
|
||||
onDismiss: PropTypes.func,
|
||||
/** Floating alerts stay on top of the page */
|
||||
floating: PropTypes.bool,
|
||||
};
|
||||
|
||||
Alert.defaultProps = {
|
||||
type: ALERT_TYPES.DANGER,
|
||||
floating: false,
|
||||
};
|
||||
|
||||
export function Alert({
|
||||
type, onDismiss, floating, children,
|
||||
type, onDismiss, children,
|
||||
}) {
|
||||
return (
|
||||
<div className={`alert alert-dismissible alert-${type} ${floating ? "fixed-top floating-alert" : ""}`.trim()}>
|
||||
<div className={`alert alert-dismissible alert-${type}`}>
|
||||
{onDismiss ? <button type="button" className="close" onClick={onDismiss}>×</button> : false}
|
||||
{children}
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue
Block a user