frontend/src/components/NamespacesCreateGuided.vue
<script lang="ts">
import { defineComponent, ref } from 'vue';
export default defineComponent({
name: 'ResourceNamespaceCreateGuided',
props: {
show: {
type: Boolean,
required: true
},
},
emits: ['close', 'create-namespace'],
setup(props, { emit }) {
const name = ref('');
const isSubmitting = ref(false);
const error = ref('');
const resetForm = () => {
name.value = '';
error.value = '';
isSubmitting.value = false;
};
const closeModal = () => {
resetForm();
emit('close');
};
const createNamespace = () => {
// Validate form
if (!name.value.trim()) {
error.value = 'Name is required';
return;
}
isSubmitting.value = true;
let opts = {
definition: {
apiVersion: 'v1',
kind: 'Namespace',
metadata: {
name: name.value.trim(),
}
},
isYaml: false
}
emit('create-namespace', opts);
resetForm();
closeModal();
};
return {
name,
isSubmitting,
error,
closeModal,
createNamespace
};
}
});
</script>
<template>
<div v-if="show" class="modal-overlay" @click="closeModal">
<div class="modal-content" @click.stop>
<div class="modal-header">
<h3>Create Namespace</h3>
<button class="close-button" @click="closeModal">×</button>
</div>
<div class="modal-body">
<div v-if="error" class="error-message">{{ error }}</div>
<div class="form-group">
<label for="name">Name:</label>
<input
id="name"
v-model="name"
type="text"
placeholder="test-namespace-1"
:disabled="isSubmitting"
/>
</div>
</div>
<div class="modal-footer">
<button
class="cancel-button"
@click="closeModal"
:disabled="isSubmitting"
>
Cancel
</button>
<button
class="create-button"
@click="createNamespace"
:disabled="isSubmitting"
>
{{ isSubmitting ? 'Creating...' : 'Create' }}
</button>
</div>
</div>
</div>
</template>
<style src="@/assets/css/CreateResource.css" scoped></style>