You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							152 lines
						
					
					
						
							4.4 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							152 lines
						
					
					
						
							4.4 KiB
						
					
					
				| <template> | |
|   <NotificationGroup group="customModal"> | |
|     <div class="fixed z-[100] top-0 inset-x-0 w-full"> | |
|       <Notification | |
|         v-slot="{ notifications, close }" | |
|         enter="transform ease-out duration-300 transition" | |
|         enter-from="translate-y-2 opacity-0 sm:translate-y-4" | |
|         enter-to="translate-y-0 opacity-100 sm:translate-y-0" | |
|         leave="transition ease-in duration-500" | |
|         leave-from="opacity-100" | |
|         leave-to="opacity-0" | |
|         move="transition duration-500" | |
|         move-delay="delay-300" | |
|       > | |
|         <div | |
|           v-for="notification in notifications" | |
|           :key="notification.id" | |
|           class="w-full" | |
|           role="alert" | |
|         > | |
|           <div | |
|             class="absolute inset-0 h-screen flex flex-col items-center justify-center bg-slate-900/50" | |
|           > | |
|             <div | |
|               class="flex w-11/12 max-w-sm mx-auto mb-3 overflow-hidden bg-white rounded-lg shadow-lg" | |
|             > | |
|               <div class="w-full px-6 py-6 text-slate-900 text-center"> | |
|                 <span class="font-semibold text-lg">{{ title }}</span> | |
|                 <p class="text-sm mb-2">{{ text }}</p> | |
|  | |
|                 <button | |
|                   @click="handleOption1(close)" | |
|                   class="block w-full text-center text-md font-bold capitalize bg-blue-800 text-white px-2 py-2 rounded-md mb-2" | |
|                 > | |
|                   {{ option1Text }} | |
|                 </button> | |
|  | |
|                 <button | |
|                   @click="handleOption2(close)" | |
|                   class="block w-full text-center text-md font-bold capitalize bg-blue-700 text-white px-2 py-2 rounded-md mb-2" | |
|                 > | |
|                   {{ option2Text }} | |
|                 </button> | |
|  | |
|                 <button | |
|                   @click="handleOption3(close)" | |
|                   class="block w-full text-center text-md font-bold capitalize bg-blue-600 text-white px-2 py-2 rounded-md mb-2" | |
|                 > | |
|                   {{ option3Text }} | |
|                 </button> | |
|  | |
|                 <button | |
|                   @click="handleCancel(close)" | |
|                   class="block w-full text-center text-md font-bold capitalize bg-slate-600 text-white px-2 py-2 rounded-md" | |
|                 > | |
|                   Cancel | |
|                 </button> | |
|               </div> | |
|             </div> | |
|           </div> | |
|         </div> | |
|       </Notification> | |
|     </div> | |
|   </NotificationGroup> | |
| </template> | |
|  | |
| <script lang="ts"> | |
| import { Component, Vue } from "vue-facing-decorator"; | |
| import { NotificationIface } from "../constants/app"; | |
| 
 | |
| @Component | |
| export default class PromptDialog extends Vue { | |
|   $notify!: (notification: NotificationIface, timeout?: number) => void; | |
| 
 | |
|   title = ""; | |
|   text = ""; | |
|   option1Text = ""; | |
|   option2Text = ""; | |
|   option3Text = ""; | |
|   onOption1?: () => void; | |
|   onOption2?: () => void; | |
|   onOption3?: () => void; | |
|   onCancel?: () => Promise<void>; | |
| 
 | |
|   open(options: { | |
|     title: string; | |
|     text: string; | |
|     option1Text?: string; | |
|     option2Text?: string; | |
|     option3Text?: string; | |
|     onOption1?: () => void; | |
|     onOption2?: () => void; | |
|     onOption3?: () => void; | |
|     onCancel?: () => Promise<void>; | |
|   }) { | |
|     this.title = options.title; | |
|     this.text = options.text; | |
|     this.option1Text = options.option1Text || ""; | |
|     this.option2Text = options.option2Text || ""; | |
|     this.option3Text = options.option3Text || ""; | |
|     this.onOption1 = options.onOption1; | |
|     this.onOption2 = options.onOption2; | |
|     this.onOption3 = options.onOption3; | |
|     this.onCancel = options.onCancel; | |
| 
 | |
|     this.$notify( | |
|       { | |
|         group: "customModal", | |
|         type: "confirm", | |
|         title: this.title, | |
|         text: this.text, | |
|         option1Text: this.option1Text, | |
|         option2Text: this.option2Text, | |
|         option3Text: this.option3Text, | |
|         onOption1: this.onOption1, | |
|         onOption2: this.onOption2, | |
|         onOption3: this.onOption3, | |
|         onCancel: this.onCancel, | |
|       } as NotificationIface, | |
|       -1, | |
|     ); | |
|   } | |
| 
 | |
|   handleOption1(close: (id: string) => void) { | |
|     if (this.onOption1) { | |
|       this.onOption1(); | |
|     } | |
|     close("string that does not matter"); | |
|   } | |
| 
 | |
|   handleOption2(close: (id: string) => void) { | |
|     if (this.onOption2) { | |
|       this.onOption2(); | |
|     } | |
|     close("string that does not matter"); | |
|   } | |
| 
 | |
|   handleOption3(close: (id: string) => void) { | |
|     if (this.onOption3) { | |
|       this.onOption3(); | |
|     } | |
|     close("string that does not matter"); | |
|   } | |
| 
 | |
|   handleCancel(close: (id: string) => void) { | |
|     if (this.onCancel) { | |
|       this.onCancel(); | |
|     } | |
|     close("string that does not matter"); | |
|   } | |
| } | |
| </script>
 | |
| 
 |