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