ibm-streams
Version:
IBM Streams Support for Visual Studio Code
109 lines (102 loc) • 3.66 kB
JavaScript
import PropTypes from 'prop-types';
import React, { useEffect, useState } from 'react';
import BuildImageButtonContainer from './BuildImageButtonContainer';
import ConfigOptionsContainer from './ConfigOptionsContainer';
import NewConfigContainer from './NewConfigContainer';
import ExistingConfigContainer from './ExistingConfigContainer';
import { ConfigFileType, NewConfigType } from '../constants';
import BuildImageContext from '../context';
import MessageHandler from '../../../message.ts';
import ThemeHandler from '../../../theme.ts';
// eslint-disable-next-line no-unused-vars
const themeHandler = new ThemeHandler();
const messageHandler = new MessageHandler();
const BuildImageContainer = ({ params: { preselectedBaseImage } }) => {
const [selectedConfigFileType, setSelectedConfigFileType] = useState(
ConfigFileType.NEW
);
const [selectedExistingConfigFile, setSelectedExistingConfigFile] = useState(
null
);
const [
shouldOverrideExistingAppBundles,
setShouldOverrideExistingAppBundles
] = useState(true);
const [isLoadingBaseImages, setIsLoadingBaseImages] = useState(false);
const [baseImages, setBaseImages] = useState(null);
const [selectedBaseImage, setSelectedBaseImage] = useState(null);
const [imageName, setImageName] = useState('');
const [imageNameError, setImageNameError] = useState(false);
const [imageTag, setImageTag] = useState('');
const [imageTagError, setImageTagError] = useState(false);
const [selectedNewConfigType, setSelectedNewConfigType] = useState(
NewConfigType.SIMPLE
);
const [selectedNewConfigFile, setSelectedNewConfigFile] = useState(null);
const value = {
selectedConfigFileType,
selectedExistingConfigFile,
shouldOverrideExistingAppBundles,
isLoadingBaseImages,
baseImages,
selectedBaseImage,
imageName,
imageNameError,
imageTag,
imageTagError,
selectedNewConfigType,
selectedNewConfigFile,
setSelectedConfigFileType,
setSelectedExistingConfigFile,
setShouldOverrideExistingAppBundles,
setIsLoadingBaseImages,
setBaseImages,
setSelectedBaseImage,
setImageName,
setImageNameError,
setImageTag,
setImageTagError,
setSelectedNewConfigType,
setSelectedNewConfigFile
};
// Run when component is mounted
useEffect(() => {
messageHandler.postMessage({ command: 'webview-ready' });
}, []);
return (
<BuildImageContext.Provider value={value}>
<div className="bx--grid bx--grid--no-gutter build-image-container">
<div className="bx--row build-image-container__section-container build-image-container__config-options-container">
<div className="bx--col">
<ConfigOptionsContainer />
</div>
</div>
<div className="bx--row build-image-container__config-container">
<div className="bx--col">
{selectedConfigFileType === ConfigFileType.EXISTING ? (
<ExistingConfigContainer messageHandler={messageHandler} />
) : (
<NewConfigContainer
messageHandler={messageHandler}
preselectedBaseImage={preselectedBaseImage}
/>
)}
</div>
</div>
<div className="bx--row">
<div className="bx--col">
<BuildImageButtonContainer messageHandler={messageHandler} />
</div>
</div>
</div>
</BuildImageContext.Provider>
);
};
BuildImageContainer.propTypes = {
params: PropTypes.shape({
preselectedBaseImage: PropTypes.shape({
id: PropTypes.string
})
}).isRequired
};
export default BuildImageContainer;