/*! * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * * 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 from 'react'; import i18n from 'nfvo-utils/i18n/i18n.js'; import {actionsEnum, statusEnum, statusBarTextMap } from './VersionControllerConstants.js'; import SVGIcon from 'nfvo-components/icon/SVGIcon.jsx'; import Tooltip from 'react-bootstrap/lib/Tooltip.js'; import OverlayTrigger from 'react-bootstrap/lib/OverlayTrigger.js'; class VersionController extends React.Component { static propTypes = { version: React.PropTypes.object, viewableVersions: React.PropTypes.array, onVersionSwitching: React.PropTypes.func, isCheckedOut: React.PropTypes.bool.isRequired, status: React.PropTypes.string.isRequired, callVCAction: React.PropTypes.func, onSave: React.PropTypes.func, onClose: React.PropTypes.func, isFormDataValid: React.PropTypes.bool }; render() { let {status, isCheckedOut, version = {}, viewableVersions = [], onVersionSwitching, callVCAction, onSave, isFormDataValid, onClose} = this.props; let isCheckedIn = Boolean(status === statusEnum.CHECK_IN_STATUS); let isLatestVersion = Boolean(version.id === viewableVersions[viewableVersions.length - 1].id); if (!isLatestVersion) { status = statusEnum.PREVIOUS_VERSION; } return (
this.submit(callVCAction, version) : undefined} onRevert={callVCAction ? () => this.revertCheckout(callVCAction, version) : undefined} status={status} onCheckinCheckout={callVCAction ? () => this.checkinCheckoutVersion(callVCAction, version) : undefined} onSave={onSave ? () => onSave() : undefined} isLatestVersion={isLatestVersion} isCheckedOut={isCheckedOut} isCheckedIn={isCheckedIn} isFormDataValid={isFormDataValid} version={version}/> {onClose &&
onClose()} data-test-id='vc-cancel-btn'> X
}
); } submit(callVCAction, version) { const action = actionsEnum.SUBMIT; callVCAction(action, version); } revertCheckout(callVCAction, version) { const action = actionsEnum.UNDO_CHECK_OUT; callVCAction(action, version); } checkinCheckoutVersion(callVCAction, version) { if (this.props.isCheckedOut) { this.checkin(callVCAction, version); } else { this.checkout(callVCAction, version); } } checkin(callVCAction, version) { const action = actionsEnum.CHECK_IN; if (this.props.onSave) { this.props.onSave().then(()=>{ callVCAction(action, version); }); }else{ callVCAction(action, version); } } checkout(callVCAction, version) { const action = actionsEnum.CHECK_OUT; callVCAction(action, version); } } class ActionButtons extends React.Component { static propTypes = { version: React.PropTypes.object, onSubmit: React.PropTypes.func, onRevert: React.PropTypes.func, onSave: React.PropTypes.func, isLatestVersion: React.PropTypes.bool, isCheckedIn: React.PropTypes.bool, isCheckedOut: React.PropTypes.bool, isFormDataValid: React.PropTypes.bool }; render() { const {onSubmit, onRevert, onSave, isLatestVersion, isCheckedIn, isCheckedOut, isFormDataValid, version, status, onCheckinCheckout} = this.props; const [checkinBtnIconSvg, checkinCheckoutBtnTitle] = status === statusEnum.CHECK_OUT_STATUS ? ['version-controller-lock-open', i18n('Check In')] : ['version-controller-lock-closed', i18n('Check Out')]; const disabled = (isLatestVersion && onCheckinCheckout && status !== statusEnum.LOCK_STATUS) ? false : true; return (
{onSubmit && onRevert &&
} {onSave && onSave()} isDisabled={!isCheckedOut || !isFormDataValid || !isLatestVersion} name='version-controller-save' tooltipText={i18n('Save')}/> }
); } } function StatusBarUpdates({status}) { return (
{i18n(statusBarTextMap[status])}
); } function VCButton({name, tooltipText, isDisabled, onClick, dataTestId}) { let onClickAction = isDisabled ? ()=>{} : onClick; let disabled = isDisabled ? 'disabled' : ''; return ( {tooltipText}}>
); } function VersionSelector(props) { let {version = {}, viewableVersions = [], onVersionSwitching} = props; const includedVersions = viewableVersions.filter(ver => {return ver.id === version.id;}); return (
); } export default VersionController;