2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing
14 * permissions and limitations under the License.
16 import React, { Component } from 'react';
17 import PropTypes from 'prop-types';
18 import enhanceWithClickOutside from 'react-click-outside';
19 import i18n from 'nfvo-utils/i18n/i18n.js';
20 import SVGIcon from 'sdc-ui/lib/react/SVGIcon.js';
21 import Overlay from 'nfvo-components/overlay/Overlay.jsx';
22 import Permissions from './Permissions.jsx';
24 class ClickOutsideWrapper extends Component {
25 handleClickOutside() {
29 return <div>{this.props.children}</div>;
33 const EnhancedClickOutsideWrapper = enhanceWithClickOutside(
37 const VCButton = ({ name, tooltipText, disabled, onClick, dataTestId }) => {
38 let onClickAction = disabled ? () => {} : onClick;
41 className={`action-button-wrapper ${
42 disabled ? 'disabled' : 'clickable'
44 onClick={onClickAction}>
45 <div className="action-buttons-svg">
48 labelPosition="bottom"
49 labelClassName="action-button-label"
50 data-test-id={dataTestId}
59 const Separator = () => <div className="vc-separator" />;
61 const SubmitButton = ({ onClick, disabled }) => (
63 onClick={() => onClick()}
64 data-test-id="vc-submit-btn"
65 className={`vc-submit-button ${disabled ? 'disabled' : ''}`}>
66 <SVGIcon name="check" iconClassName="vc-v-submit" disabled={disabled} />
71 const ActionButtons = ({
81 onOpenCommentCommitModal,
97 <div className="action-buttons">
98 <EnhancedClickOutsideWrapper onClose={onClosePermissions}>
101 dataTestId="vc-permission-btn"
102 onClick={onClickPermissions}
103 name="version-controller-permissions"
104 tooltipText={i18n('Permissons')}
106 {showPermissions && (
110 onManagePermissions={onManagePermissions}
111 permissions={permissions}
112 onClosePermissions={onClosePermissions}
116 </EnhancedClickOutsideWrapper>
119 <div className="collaborator-action-buttons">
122 <div className="vc-save-section">
124 dataTestId="vc-save-btn"
125 onClick={() => onSave()}
126 name="version-controller-save"
127 tooltipText={i18n('Save')}
128 disabled={isReadOnlyMode || !isFormDataValid}
134 dataTestId="vc-sync-btn"
136 name="version-controller-sync"
137 tooltipText={i18n('Sync')}
138 disabled={!isCollaborator || isUpToDate || isCertified}
141 dataTestId="vc-commit-btn"
143 onOpenCommentCommitModal({
145 title: i18n('Commit')
148 name="version-controller-commit"
149 tooltipText={i18n('Share')}
150 disabled={isReadOnlyMode || !isDirty || isOutOfSync}
154 dataTestId="vc-revert-btn"
155 onClick={onOpenRevisionsModal}
156 name="version-controller-revert"
157 tooltipText={i18n('Revert')}
158 disabled={isReadOnlyMode || isOutOfSync}
162 <div className="vc-submit-section">
180 ActionButtons.propTypes = {
181 version: PropTypes.object,
182 onSubmit: PropTypes.func,
183 onRevert: PropTypes.func,
184 onSave: PropTypes.func,
185 isLatestVersion: PropTypes.bool,
186 isCheckedIn: PropTypes.bool,
187 isCheckedOut: PropTypes.bool,
188 isFormDataValid: PropTypes.bool,
189 isReadOnlyMode: PropTypes.bool
192 export default ActionButtons;