/*
Copyright (C) 2017 Cloudbase Solutions SRL
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
import React from 'react'
import { observer } from 'mobx-react'
import styled, { createGlobalStyle } from 'styled-components'
import reloadImage from './images/reload.svg'
const Wrapper = styled.div`
width: 16px;
height: 16px;
background: url('${reloadImage}') no-repeat center;
cursor: pointer;
`
const GlobalStyle = createGlobalStyle`
.reload-animation {
transform: rotate(360deg);
transition: transform 1s cubic-bezier(0, 1.4, 1, 1);
}
`
type Props = {
onClick: () => void,
style?: React.CSSProperties
}
@observer
class ReloadButton extends React.Component {
wrapper: HTMLElement | undefined | null
timeout: number | undefined | null
onClick() {
if (this.timeout) {
return
}
if (this.props.onClick) {
this.props.onClick()
}
const nonNullWrapper = this.wrapper
if (!nonNullWrapper) {
return
}
nonNullWrapper.className += ' reload-animation'
this.timeout = window.setTimeout(() => {
nonNullWrapper.className = nonNullWrapper.className.substr(0, nonNullWrapper.className.indexOf(' reload-animation'))
this.timeout = null
}, 1000)
}
render() {
return (
<>
{ this.wrapper = div }}
// eslint-disable-next-line react/jsx-props-no-spreading
{...this.props}
onClick={() => { this.onClick() }}
/>
>
)
}
}
export default ReloadButton