Added temporary tab interface components
This commit is contained in:
		
							
								
								
									
										31
									
								
								Frontend/src/components/xml/TabComponent.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Frontend/src/components/xml/TabComponent.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  |  | ||||||
|  | const props = defineProps({ | ||||||
|  |     id: { | ||||||
|  |         type: Number, | ||||||
|  |         required: true | ||||||
|  |     }, | ||||||
|  |     activeTabId: { | ||||||
|  |         type: Number, | ||||||
|  |         required: false | ||||||
|  |     } | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | const emit = defineEmits(["activate", "remove"]) | ||||||
|  |  | ||||||
|  | function click() { | ||||||
|  |     emit("activate", props.id); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function remove() { | ||||||
|  |     emit("remove", props.id); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |     <div :class="activeTabId == id ? 'tab-active' : 'tab'" class="flex flex-row gap-3"> | ||||||
|  |         <button @click="click" class="hover:brightness-110"><slot /></button> | ||||||
|  |         <button @click="remove" class="hover:brightness-110">x</button> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
							
								
								
									
										52
									
								
								Frontend/src/components/xml/TabbedInputComponent.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								Frontend/src/components/xml/TabbedInputComponent.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | import XmlInputFieldComponent from './XmlInputFieldComponent.vue'; | ||||||
|  | import TabComponent from './TabComponent.vue'; | ||||||
|  | import { ref } from 'vue' | ||||||
|  |  | ||||||
|  | const data = ref(new Array<string>) | ||||||
|  |  | ||||||
|  | const activeTabId = ref(0); | ||||||
|  |  | ||||||
|  | const nextTabId = ref(2); | ||||||
|  |  | ||||||
|  | const tabs = ref(new Array<string>); | ||||||
|  | tabs.value.push("XML1"); | ||||||
|  | data.value.push("dupa") | ||||||
|  |  | ||||||
|  | function changeActiveTab(newActiveTabId : number) { | ||||||
|  |     activeTabId.value = newActiveTabId; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function removeTab(tabId : number) { | ||||||
|  |     if (tabs.value.length <= 1) | ||||||
|  |         return | ||||||
|  |  | ||||||
|  |     tabs.value.splice(tabId, 1); | ||||||
|  |     data.value.splice(tabId, 1); | ||||||
|  |     if (tabId == activeTabId.value) | ||||||
|  |         activeTabId.value = 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function addTab() { | ||||||
|  |     tabs.value.push("XML" + (nextTabId.value++)); | ||||||
|  |     data.value.push("") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |     <div class="flex flex-col justify-stretch items-stretch rounded-2xl mr-2"> | ||||||
|  |         <div class="flex flex-row justify-between ml-4"> | ||||||
|  |             <div class="flex flex-row h-1/12 grow-0 gap-2"> | ||||||
|  |                 <TabComponent v-for="item in tabs" :id="tabs.indexOf(item)" @activate="changeActiveTab" @remove="removeTab" :active-tab-id="activeTabId">{{ item }}</TabComponent> | ||||||
|  |             </div> | ||||||
|  |             <div> | ||||||
|  |                 <button @click="addTab" class="tool-button">New</button> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |          | ||||||
|  |         <div class="flex-1 h-11/12 dark:bg-gray-700 p-2 rounded-xl border border-slate-400 overflow-auto"> | ||||||
|  |             <XmlInputFieldComponent class="h-full" stylized-name="XML" :data="data[activeTabId]"></XmlInputFieldComponent> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
		Reference in New Issue
	
	Block a user