// Copyright 2022 99cloud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import React, { useState, useEffect, useRef } from 'react';
import { Button, Card, Tooltip, Switch } from 'antd';
import { ExpandOutlined, CompressOutlined } from '@ant-design/icons';
const seconds = 5;
export default function InfoButton(props) {
const {
content,
defaultCollapsed = false,
size = 'small',
ableAuto = true,
tip = t(
'When auto-expand/close is enabled, if there is no operation in the pop-up window, the pop-up window will be closed automatically after { seconds } seconds, and it will be automatically expanded when the displayed content changes.',
{ seconds }
),
checkValue = '',
} = props;
const [collapsed, setCollapsed] = useState(defaultCollapsed);
const [auto, setAuto] = useState(ableAuto);
const [hover, setHover] = useState(false);
const timer = useRef();
const clearTimer = () => {
if (timer.current) {
clearTimeout(timer.current);
}
};
const open = () => {
setCollapsed(false);
};
const close = () => {
setCollapsed(true);
clearTimer();
};
const startTimer = () => {
if (collapsed) {
return;
}
if (timer.current) {
clearTimer();
}
timer.current = setTimeout(() => {
if (!collapsed) {
close();
}
}, seconds * 1000);
};
useEffect(() => {
if (!auto) {
return;
}
if (!collapsed) {
if (hover) {
clearTimer();
} else {
startTimer();
}
}
}, [collapsed, hover]);
useEffect(() => {
if (auto) {
open();
startTimer();
}
return () => {
clearTimer();
};
}, [checkValue]);
const onChangeAuto = (checked) => {
setAuto(checked);
};
const renderSwitch = () => {
if (!ableAuto) {
return null;
}
return (