bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/activity-check/component.jsx

116 lines
2.9 KiB
React
Raw Normal View History

2019-02-27 01:40:01 +08:00
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { defineMessages } from 'react-intl';
2019-02-27 01:40:01 +08:00
import Button from '/imports/ui/components/button/component';
import Modal from '/imports/ui/components/modal/simple/component';
import { makeCall } from '/imports/ui/services/api';
import { styles } from './styles';
2020-12-01 00:09:35 +08:00
import {Meteor} from "meteor/meteor";
2019-02-27 01:40:01 +08:00
const propTypes = {
intl: PropTypes.object.isRequired,
2019-02-27 01:40:01 +08:00
responseDelay: PropTypes.number.isRequired,
};
const intlMessages = defineMessages({
activityCheckTitle: {
id: 'app.user.activityCheck',
description: 'Title for activity check modal',
},
activityCheckLabel: {
id: 'app.user.activityCheck.label',
description: 'Label for activity check modal',
},
activityCheckButton: {
id: 'app.user.activityCheck.check',
description: 'Check button for activity modal',
},
});
const handleInactivityDismiss = () => makeCall('userActivitySign');
class ActivityCheck extends Component {
constructor(props) {
super(props);
const { responseDelay } = this.props;
this.state = ({
responseDelay,
});
this.stopRemainingTime = this.stopRemainingTime.bind(this);
this.updateRemainingTime = this.updateRemainingTime.bind(this);
this.playAudioAlert = this.playAudioAlert.bind(this);
2019-02-27 01:40:01 +08:00
}
componentDidMount() {
this.playAudioAlert();
2019-02-27 01:40:01 +08:00
this.interval = this.updateRemainingTime();
}
componentDidUpdate() {
this.stopRemainingTime();
this.interval = this.updateRemainingTime();
}
componentWillUnmount() {
this.stopRemainingTime();
}
updateRemainingTime() {
const { responseDelay } = this.state;
return setInterval(() => {
const remainingTime = responseDelay - 1;
2019-02-27 01:40:01 +08:00
this.setState({
responseDelay: remainingTime,
});
}, 1000);
}
stopRemainingTime() {
clearInterval(this.interval);
}
playAudioAlert() {
2020-12-01 00:09:35 +08:00
this.alert = new Audio(`${Meteor.settings.public.app.cdn + Meteor.settings.public.app.basename + Meteor.settings.public.app.instanceId}/resources/sounds/notify.mp3`);
this.alert.play();
}
2019-02-27 01:40:01 +08:00
render() {
const { intl } = this.props;
const { responseDelay } = this.state;
return (
<Modal
hideBorder
onRequestClose={handleInactivityDismiss}
2019-02-27 01:40:01 +08:00
shouldCloseOnOverlayClick={false}
shouldShowCloseButton={false}
>
<div className={styles.activityModalContent}>
<h1>{intl.formatMessage(intlMessages.activityCheckTitle)}</h1>
<p>{intl.formatMessage(intlMessages.activityCheckLabel, { 0: responseDelay })}</p>
<Button
color="primary"
disabled={responseDelay <= 0}
2019-02-27 01:40:01 +08:00
label={intl.formatMessage(intlMessages.activityCheckButton)}
onClick={handleInactivityDismiss}
role="button"
size="lg"
/>
</div>
</Modal>
);
}
}
ActivityCheck.propTypes = propTypes;
export default ActivityCheck;