/* * Copyright (c) 2015-2021 MinIO, Inc. * * This file is part of MinIO Object Storage stack * * 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 { connect } from "react-redux" import { Modal, ModalHeader, ModalBody } from "react-bootstrap" import CopyToClipboard from "react-copy-to-clipboard" import web from "../web" import * as objectsActions from "./actions" import * as alertActions from "../alert/actions" import { SHARE_OBJECT_EXPIRY_DAYS, SHARE_OBJECT_EXPIRY_HOURS, SHARE_OBJECT_EXPIRY_MINUTES } from "../constants" import QRCode from "react-qr-code"; export class ShareObjectModal extends React.Component { constructor(props) { super(props) this.state = { expiry: { days: SHARE_OBJECT_EXPIRY_DAYS, hours: SHARE_OBJECT_EXPIRY_HOURS, minutes: SHARE_OBJECT_EXPIRY_MINUTES } } this.expiryRange = { days: { min: 0, max: 7 }, hours: { min: 0, max: 23 }, minutes: { min: 0, max: 59 } } } updateExpireValue(param, inc) { let expiry = Object.assign({}, this.state.expiry) // Not allowing any increments if days is already max if (expiry.days == this.expiryRange["days"].max && inc > 0) { return } const { min, max } = this.expiryRange[param] expiry[param] = expiry[param] + inc if (expiry[param] < min || expiry[param] > max) { return } if (expiry.days == this.expiryRange["days"].max) { expiry.hours = 0 expiry.minutes = 0 } else if (expiry.days + expiry.hours + expiry.minutes == 0) { expiry.days = this.expiryRange["days"].max } this.setState({ expiry }) const { object, shareObject } = this.props shareObject(object.name, expiry.days, expiry.hours, expiry.minutes) } onUrlCopied() { const { showCopyAlert, hideShareObject } = this.props showCopyAlert("Link copied to clipboard!") hideShareObject() } render() { const { shareObjectDetails, hideShareObject } = this.props const url = `${window.location.protocol}//${shareObjectDetails.url}` return ( Share Object
(this.copyTextInput = node)} readOnly="readOnly" value={url} onClick={() => this.copyTextInput.select()} />
{shareObjectDetails.showExpiryDate && (
this.updateExpireValue("days", 1)} />
Days
this.updateExpireValue("days", -1)} />
this.updateExpireValue("hours", 1)} />
Hours
this.updateExpireValue("hours", -1)} />
this.updateExpireValue("minutes", 1)} />
Minutes
this.updateExpireValue("minutes", -1)} />
)}
) } } const mapStateToProps = (state, ownProps) => { return { object: ownProps.object, shareObjectDetails: state.objects.shareObject } } const mapDispatchToProps = dispatch => { return { shareObject: (object, days, hours, minutes) => dispatch(objectsActions.shareObject(object, days, hours, minutes)), hideShareObject: () => dispatch(objectsActions.hideShareObject()), showCopyAlert: message => dispatch(alertActions.set({ type: "success", message: message })) } } export default connect(mapStateToProps, mapDispatchToProps)(ShareObjectModal)