blob: 46aa3fa87f1e7d2124530828987bd88072b72821 [file] [log] [blame]
// 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 PropTypes from 'prop-types';
import React from 'react';
import Constants from '../constants';
import Form from 'react-bootstrap/Form';
const RemoteSourceInput = ({onChange, value}) => {
return (
<div className="row mt-2">
<div className="col-12 col-md-2">Database URL:</div>
<div className="col-12 col-md mt-1 mt-md-0">
<Form.Control
id="replication-remote-connection-url"
type="text"
className="form-control"
placeholder="https://"
value={value}
onChange={(e) => onChange(e.target.value)}
/>
</div>
</div>
);
};
RemoteSourceInput.propTypes = {
value: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired
};
const LocalSourceInput = ({value, onChange, databases}) => {
const options = databases.map(option => <option value={option} key={option}>{option}</option>);
return (
<div className="row mt-2">
<div className="col-12 col-md-2">Name:</div>
<div className="col-12 col-md mt-1 mt-md-0">
<Form.Select
id="replication-source-local-database-select"
value={value}
placeholder="Database name"
onChange={(e) => onChange(e.target.value)}
>
{options}
</Form.Select>
</div>
</div>
);
};
LocalSourceInput.propTypes = {
value: PropTypes.string.isRequired,
databases: PropTypes.array.isRequired,
onChange: PropTypes.func.isRequired
};
const ReplicationSourceRow = ({replicationSource, databases, localSource, remoteSource, onChangeRemote, onChangeLocal}) => {
if (replicationSource === Constants.REPLICATION_SOURCE.LOCAL) {
return <LocalSourceInput
value={localSource}
databases={databases}
onChange={onChangeLocal}
/>;
}
return <RemoteSourceInput value={remoteSource} onChange={onChangeRemote} />;
};
ReplicationSourceRow.propTypes = {
replicationSource: PropTypes.string.isRequired,
databases: PropTypes.array.isRequired,
localSource: PropTypes.string.isRequired,
remoteSource: PropTypes.string.isRequired,
onChangeRemote: PropTypes.func.isRequired,
onChangeLocal: PropTypes.func.isRequired
};
const replicationSourceSelectOptions = () => {
return [
{ value: '', label: 'Select source type' },
{ value: Constants.REPLICATION_SOURCE.LOCAL, label: 'Local database' },
{ value: Constants.REPLICATION_SOURCE.REMOTE, label: 'Remote database' }
].map((option) => {
return (
<option value={option.value} key={option.value}>{option.label}</option>
);
});
};
export const ReplicationSourceSelect = ({onChange, value}) => {
return (
<div className="row">
<div className="col-12 col-md-2">Type:</div>
<div className="col-12 col-md mt-1 mt-md-0">
<Form.Select
onChange={(e) => onChange(e.target.value)}
id="replication-source"
value={value}
>
{replicationSourceSelectOptions()}
</Form.Select>
</div>
</div>
);
};
ReplicationSourceSelect.propTypes = {
value: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired
};
export class ReplicationSource extends React.Component {
getReplicationSourceRow () {
const {
replicationSource,
localSource,
onLocalSourceChange,
onRemoteSourceChange,
remoteSource,
databases
} = this.props;
if (!replicationSource) {
return null;
}
return <ReplicationSourceRow
replicationSource={replicationSource}
databases={databases}
localSource={localSource}
remoteSource={remoteSource}
onChangeLocal={onLocalSourceChange}
onChangeRemote={onRemoteSourceChange}
/>;
}
render () {
const {replicationSource, onSourceSelect} = this.props;
return (
<React.Fragment>
<ReplicationSourceSelect
onChange={onSourceSelect}
value={replicationSource}
/>
{this.getReplicationSourceRow()}
</React.Fragment>
);
}
}
ReplicationSource.propTypes = {
replicationSource: PropTypes.string.isRequired,
localSource: PropTypes.string.isRequired,
remoteSource: PropTypes.string.isRequired,
databases: PropTypes.array.isRequired,
onLocalSourceChange: PropTypes.func.isRequired,
onRemoteSourceChange: PropTypes.func.isRequired
};