103 lines
2.5 KiB
JavaScript
103 lines
2.5 KiB
JavaScript
import { useState, useCallback } from 'react';
|
|
|
|
/**
|
|
* Custom hook for managing deployment configuration state
|
|
* @param {Object} initialConfig - Initial deployment configuration
|
|
* @returns {Object} - Deployment configuration state and updater functions
|
|
*/
|
|
const useDeploymentConfig = (initialConfig = {}) => {
|
|
const [config, setConfig] = useState({
|
|
type: 'app',
|
|
appType: 'wordpress',
|
|
sampleWebAppType: 'developer',
|
|
sourceType: 'public',
|
|
repoUrl: '',
|
|
deploymentKey: '',
|
|
fileName: '',
|
|
...initialConfig
|
|
});
|
|
|
|
// Extract values for easier access
|
|
const {
|
|
type,
|
|
appType,
|
|
sampleWebAppType,
|
|
sourceType,
|
|
repoUrl,
|
|
deploymentKey,
|
|
fileName
|
|
} = config;
|
|
|
|
// Update a single field
|
|
const updateField = useCallback((field, value) => {
|
|
setConfig(prev => ({
|
|
...prev,
|
|
[field]: value
|
|
}));
|
|
}, []);
|
|
|
|
// Handler for deployment type change
|
|
const handleDeploymentTypeChange = useCallback((e) => {
|
|
updateField('type', e.target.value);
|
|
}, [updateField]);
|
|
|
|
// Handler for app type change
|
|
const handleAppTypeChange = useCallback((e) => {
|
|
updateField('appType', e.target.value);
|
|
}, [updateField]);
|
|
|
|
// Handler for sample web app type change
|
|
const handleSampleWebAppTypeChange = useCallback((e) => {
|
|
updateField('sampleWebAppType', e.target.value);
|
|
}, [updateField]);
|
|
|
|
// Handler for source type change
|
|
const handleSourceTypeChange = useCallback((e) => {
|
|
updateField('sourceType', e.target.value);
|
|
}, [updateField]);
|
|
|
|
// Handler for repo URL change
|
|
const handleRepoUrlChange = useCallback((e) => {
|
|
updateField('repoUrl', e.target.value);
|
|
}, [updateField]);
|
|
|
|
// Handler for deployment key change
|
|
const handleDeploymentKeyChange = useCallback((e) => {
|
|
updateField('deploymentKey', e.target.value);
|
|
}, [updateField]);
|
|
|
|
// Handler for file change
|
|
const handleFileChange = useCallback((e) => {
|
|
if (e.target.files.length > 0) {
|
|
updateField('fileName', e.target.files[0].name);
|
|
} else {
|
|
updateField('fileName', '');
|
|
}
|
|
}, [updateField]);
|
|
|
|
return {
|
|
// State values
|
|
config,
|
|
type,
|
|
appType,
|
|
sampleWebAppType,
|
|
sourceType,
|
|
repoUrl,
|
|
deploymentKey,
|
|
fileName,
|
|
|
|
// Update functions
|
|
updateField,
|
|
|
|
// Event handlers
|
|
handleDeploymentTypeChange,
|
|
handleAppTypeChange,
|
|
handleSampleWebAppTypeChange,
|
|
handleSourceTypeChange,
|
|
handleRepoUrlChange,
|
|
handleDeploymentKeyChange,
|
|
handleFileChange
|
|
};
|
|
};
|
|
|
|
export default useDeploymentConfig; |