mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	 ef7bf66476
			
		
	
	ef7bf66476
	
	
	
		
			
			This PR introduces several improvements to the Captain AI dashboard section: - New billing page, with new colors, layout and meters for Captain usage - Updated the base paywall component to use new colors - Updated PageLayout.vue, it's more generic and can be used for other pages as well - Use flags to toggle empty state and loading state - Add prop for `featureFlag` to show the paywall slot based on feature enabled on account - Update `useAccount` to add a `isCloudFeatureEnabled` - **Removed feature flag checks from captain route definitions**, so the captain entry will always be visible on the sidebar - Add banner to Captain pages for the following cases - Responses usage is over 80% - Documents limit is fully exhausted ### Screenshots <details><summary>Free plan</summary> <p>   </p> </details> <details><summary>Paid plan</summary> <p>   </p> </details> --------- Co-authored-by: Sojan Jose <sojan@pepalo.com> Co-authored-by: Pranav <pranav@chatwoot.com> Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { inject, provide } from 'vue';
 | |
| import { useMapGetter } from 'dashboard/composables/store';
 | |
| import { usePolicy } from 'dashboard/composables/usePolicy';
 | |
| import { useRouter } from 'vue-router';
 | |
| 
 | |
| const SidebarControl = Symbol('SidebarControl');
 | |
| 
 | |
| export function useSidebarContext() {
 | |
|   const context = inject(SidebarControl, null);
 | |
|   if (context === null) {
 | |
|     throw new Error(`Component is missing a parent <Sidebar /> component.`);
 | |
|   }
 | |
| 
 | |
|   const router = useRouter();
 | |
|   const isOnChatwootCloud = useMapGetter('globalConfig/isOnChatwootCloud');
 | |
| 
 | |
|   const { checkFeatureAllowed, checkPermissions } = usePolicy();
 | |
| 
 | |
|   const resolvePath = to => {
 | |
|     if (to) return router.resolve(to)?.path || '/';
 | |
|     return '/';
 | |
|   };
 | |
| 
 | |
|   const resolvePermissions = to => {
 | |
|     if (to) return router.resolve(to)?.meta?.permissions ?? [];
 | |
|     return [];
 | |
|   };
 | |
| 
 | |
|   const resolveFeatureFlag = to => {
 | |
|     if (to) return router.resolve(to)?.meta?.featureFlag || '';
 | |
|     return '';
 | |
|   };
 | |
| 
 | |
|   const isAllowed = to => {
 | |
|     const permissions = resolvePermissions(to);
 | |
|     const featureFlag = resolveFeatureFlag(to);
 | |
| 
 | |
|     return checkPermissions(permissions) && checkFeatureAllowed(featureFlag);
 | |
|   };
 | |
| 
 | |
|   return {
 | |
|     ...context,
 | |
|     resolvePath,
 | |
|     resolvePermissions,
 | |
|     resolveFeatureFlag,
 | |
|     isAllowed,
 | |
|     isOnChatwootCloud,
 | |
|   };
 | |
| }
 | |
| 
 | |
| export function provideSidebarContext(context) {
 | |
|   provide(SidebarControl, context);
 | |
| }
 |