46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
| <template>
 | |
|     <div class="grid gap-2 has-contents">
 | |
|         <transition-group name="fadeRight" tag="div">
 | |
|             <div v-for="item, index in items" :key="'i'+index"
 | |
|                  :class="`${colors[item.type].bg} ${colors[item.type].text} h-12 flex flex-col items-start justify-center shadow-2xl rounded-sm px-6`"
 | |
|             >
 | |
|                 <div class="text-sm" v-for="message, mindex in item.messages" :key="mindex" v-text="message"></div>
 | |
|             </div>
 | |
|         </transition-group>
 | |
|     </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|     data: function() {
 | |
|         return {
 | |
|             colors: {
 | |
|                 red: {
 | |
|                     bg: 'bg-red-300',
 | |
|                     text: 'text-red-800'
 | |
|                 },
 | |
|                 green: {
 | |
|                     bg: 'bg-green-300',
 | |
|                     text: 'text-green-800'
 | |
|                 }
 | |
|             }
 | |
|         };
 | |
|     },
 | |
|     computed: {
 | |
|         items() {
 | |
|             var i = [];
 | |
| 
 | |
|             for (const field in this.$page.props.errors) {
 | |
|                 i.push({ messages: this.$page.props.errors[field], type: 'red' });
 | |
|             }
 | |
| 
 | |
|             if (this.$page.props.flash && this.$page.props.flash.success) {
 | |
|                 i.push({ messages: [ this.$page.props.flash.success ], type: 'green' });
 | |
|             }
 | |
| 
 | |
|             return i;
 | |
|         }
 | |
|     }
 | |
| };
 | |
| </script>
 |