chore(cancelConnection-example): added more style
This commit is contained in:
@@ -6,13 +6,26 @@
|
|||||||
transform: translate(-50%, 100%);
|
transform: translate(-50%, 100%);
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
background-color: white;
|
background: linear-gradient(#fff, #fff, #f5f5f5);
|
||||||
padding: 0.5rem 1rem;
|
padding: 0.8rem 1.5rem;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
|
box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.Timer.show {
|
.Timer.show {
|
||||||
transform: translate(-50%, 0%) translateY(-10px);
|
transform: translate(-50%, 0%) translateY(-15px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 5px;
|
||||||
|
background: linear-gradient(to right, #42df96, #16dfed);
|
||||||
|
}
|
||||||
|
|
||||||
|
.Timer.show .progress {
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
@@ -2,19 +2,26 @@ import cc from 'classcat';
|
|||||||
import styles from './Timer.module.css';
|
import styles from './Timer.module.css';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
duration: number;
|
||||||
remaining: number;
|
remaining: number;
|
||||||
show: boolean;
|
show: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Timer({
|
export default function Timer({
|
||||||
|
duration,
|
||||||
remaining,
|
remaining,
|
||||||
show,
|
show,
|
||||||
}: Props) {
|
}: Props) {
|
||||||
|
const percentage = 100 - (remaining / duration) * 100;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={cc({
|
<div className={cc({
|
||||||
[styles.Timer]: true,
|
[styles.Timer]: true,
|
||||||
[styles.show]: show,
|
[styles.show]: show,
|
||||||
})}>
|
})}>
|
||||||
|
<div className={styles.progress} style={{
|
||||||
|
width: `${percentage}%`,
|
||||||
|
}} />
|
||||||
Connection will be canceled in {remaining} seconds
|
Connection will be canceled in {remaining} seconds
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ import useCountdown from './hooks/useCountdown';
|
|||||||
import { initialEdges, initialNodes } from './data';
|
import { initialEdges, initialNodes } from './data';
|
||||||
import Timer from './Timer';
|
import Timer from './Timer';
|
||||||
|
|
||||||
|
const CANCEL_AFTER = 5; // seconds
|
||||||
|
|
||||||
const CancelConnection = () => {
|
const CancelConnection = () => {
|
||||||
const [nodes, _, onNodesChange] = useNodesState(initialNodes);
|
const [nodes, _, onNodesChange] = useNodesState(initialNodes);
|
||||||
const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);
|
const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);
|
||||||
@@ -23,7 +25,7 @@ const CancelConnection = () => {
|
|||||||
|
|
||||||
// Cancels connection after 5 seconds
|
// Cancels connection after 5 seconds
|
||||||
const countdown = useCountdown(() => cancelConnection());
|
const countdown = useCountdown(() => cancelConnection());
|
||||||
const onConnectStart: OnConnectStart = () => countdown.start(5);
|
const onConnectStart: OnConnectStart = () => countdown.start(CANCEL_AFTER);
|
||||||
const onConnectEnd: OnConnectEnd = () => countdown.stop();
|
const onConnectEnd: OnConnectEnd = () => countdown.stop();
|
||||||
|
|
||||||
const onConnect = (params: Connection | Edge) => setEdges((eds) => addEdge(params, eds));
|
const onConnect = (params: Connection | Edge) => setEdges((eds) => addEdge(params, eds));
|
||||||
@@ -31,6 +33,7 @@ const CancelConnection = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Timer
|
<Timer
|
||||||
|
duration={CANCEL_AFTER}
|
||||||
show={countdown.counting}
|
show={countdown.counting}
|
||||||
remaining={countdown.remaining}
|
remaining={countdown.remaining}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user