mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 19:17:48 +00:00 
			
		
		
		
	 ca579bd62a
			
		
	
	ca579bd62a
	
	
	
		
			
			# Pull Request Template ## Description Fixes https://linear.app/chatwoot/issue/CW-5573/feat-createedit-agent-capacity-policy-page ## Type of change - [x] New feature (non-breaking change which adds functionality) ## How Has This Been Tested? ### Loom video https://www.loom.com/share/8de9e3c5d8824cd998d242636540dd18?sid=1314536f-c8d6-41fd-8139-cae9bf94f942 ### Screenshots **Light mode** <img width="1666" height="1225" alt="image" src="https://github.com/user-attachments/assets/7e6d83a4-ce02-47a7-91f6-87745f8f5549" /> <img width="1666" height="1225" alt="image" src="https://github.com/user-attachments/assets/7dd1f840-2e25-4365-aa1d-ed9dac13385a" /> **Dark mode** <img width="1666" height="1225" alt="image" src="https://github.com/user-attachments/assets/0c787095-7146-4fb3-a61a-e2232973bcba" /> <img width="1666" height="1225" alt="image" src="https://github.com/user-attachments/assets/481c21fd-03b5-4c1f-b59e-7f8c8017f9ce" /> ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <script setup>
 | |
| import Avatar from 'next/avatar/Avatar.vue';
 | |
| import Icon from 'dashboard/components-next/icon/Icon.vue';
 | |
| import Button from 'dashboard/components-next/button/Button.vue';
 | |
| import Spinner from 'dashboard/components-next/spinner/Spinner.vue';
 | |
| 
 | |
| defineProps({
 | |
|   items: {
 | |
|     type: Array,
 | |
|     default: () => [],
 | |
|   },
 | |
|   isFetching: {
 | |
|     type: Boolean,
 | |
|     default: false,
 | |
|   },
 | |
|   emptyStateMessage: {
 | |
|     type: String,
 | |
|     default: '',
 | |
|   },
 | |
| });
 | |
| 
 | |
| const emit = defineEmits(['delete']);
 | |
| 
 | |
| const handleDelete = itemId => {
 | |
|   emit('delete', itemId);
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <template>
 | |
|   <div
 | |
|     v-if="isFetching"
 | |
|     class="flex items-center justify-center py-3 w-full text-n-slate-11"
 | |
|   >
 | |
|     <Spinner />
 | |
|   </div>
 | |
|   <div
 | |
|     v-else-if="items.length === 0 && emptyStateMessage"
 | |
|     class="custom-dashed-border flex items-center justify-center py-6 w-full"
 | |
|   >
 | |
|     <span class="text-sm text-n-slate-11">
 | |
|       {{ emptyStateMessage }}
 | |
|     </span>
 | |
|   </div>
 | |
|   <div v-else class="flex flex-col divide-y divide-n-weak">
 | |
|     <div
 | |
|       v-for="item in items"
 | |
|       :key="item.id"
 | |
|       class="grid grid-cols-4 items-center gap-3 min-w-0 w-full justify-between h-[3.25rem] ltr:pr-2 rtl:pl-2"
 | |
|     >
 | |
|       <div class="flex items-center gap-2 col-span-2">
 | |
|         <Icon
 | |
|           v-if="item.icon"
 | |
|           :icon="item.icon"
 | |
|           class="size-4 text-n-slate-12 flex-shrink-0"
 | |
|         />
 | |
|         <Avatar
 | |
|           v-else
 | |
|           :title="item.name"
 | |
|           :src="item.avatarUrl"
 | |
|           :name="item.name"
 | |
|           :size="20"
 | |
|           rounded-full
 | |
|         />
 | |
|         <span class="text-sm text-n-slate-12 truncate min-w-0">
 | |
|           {{ item.name }}
 | |
|         </span>
 | |
|       </div>
 | |
| 
 | |
|       <div class="flex items-start gap-2 col-span-1">
 | |
|         <span
 | |
|           :title="item.email || item.phoneNumber"
 | |
|           class="text-sm text-n-slate-12 truncate min-w-0"
 | |
|         >
 | |
|           {{ item.email || item.phoneNumber }}
 | |
|         </span>
 | |
|       </div>
 | |
| 
 | |
|       <div class="col-span-1 justify-end flex items-center">
 | |
|         <Button
 | |
|           icon="i-lucide-trash"
 | |
|           slate
 | |
|           ghost
 | |
|           sm
 | |
|           type="button"
 | |
|           @click="handleDelete(item.id)"
 | |
|         />
 | |
|       </div>
 | |
|     </div>
 | |
|   </div>
 | |
| </template>
 |