mikebridge commented on issue #39209:
URL: https://github.com/apache/superset/issues/39209#issuecomment-4410125119

   I don't know if this is necessary for the SIP, but policy-wise, we may also 
want to think about standardizing query-keys and cache expiry---in the past 
I've used something similar to this with React Query to prevent drift:
   
   _(claude-generated)_
   
   ```typescript
     // src/dashboard/queries/keys.ts                                           
                                                                                
                                         
     export const dashboardKeys = {                                             
                                                                                
                                         
       all: ['dashboard'] as const,               
       lists: () => [...dashboardKeys.all, 'list'] as const,                    
                                                                                
                                         
       list: (filters: ListFilters) => [...dashboardKeys.lists(), filters] as 
const,                                                                          
                                           
       details: () => [...dashboardKeys.all, 'detail'] as const,
       detail: (id: number) => [...dashboardKeys.details(), id] as const,       
                                                                                
                                         
       charts: (id: number) => [...dashboardKeys.detail(id), 'charts'] as const,
     };                                                                         
                                                                                
                                         
   ```
   
   ```typescript                                                    
     // src/dashboard/queries/useDashboard.ts                                   
                                                                                
                                         
     export function useDashboard(id: number) {        
       return useQuery({                                                        
                                                                                
                                         
         queryKey: dashboardKeys.detail(id),           
         queryFn: () => SupersetClient.get({ endpoint: 
`/api/v1/dashboard/${id}` })
           .then(r => r.json.result),                                           
                                                                                
                                         
       });                                                                      
                                                                                
                                         
     }  
                                                                                
                                                                                
                                      
     export function useDashboardCharts(id: number) {  
       return useQuery({                          
         queryKey: dashboardKeys.charts(id),                                    
                                                                                
                                         
         queryFn: () => SupersetClient.get({ endpoint: 
`/api/v1/dashboard/${id}/charts` })
           .then(r => r.json.result),                                           
                                                                                
                                         
       });                                             
     }   
   ```
                                                                                
                                                                                
                                   
   ```typescript                                                    
     // src/dashboard/queries/useInvalidateDashboards.ts
     export function useInvalidateDashboards() {
       const queryClient = useQueryClient();                                    
                                                                                
                                         
       return {
         one: (id: number) =>                                                   
                                                                                
                                         
           queryClient.invalidateQueries({ queryKey: dashboardKeys.detail(id) 
}),
         charts: (id: number) =>                                                
                                                                                
                                         
           queryClient.invalidateQueries({ queryKey: dashboardKeys.charts(id) 
}),
         list: () =>                                                            
                                                                                
                                         
           queryClient.invalidateQueries({ queryKey: dashboardKeys.lists() }),  
                                                                                
                                         
         everything: () =>                        
           queryClient.invalidateQueries({ queryKey: dashboardKeys.all }),      
                                                                                
                                         
         // remove (not invalidate) for hard cache eviction:                    
                                                                                
                                         
         forget: (id: number) =>                                                
                                                                                
                                         
           queryClient.removeQueries({ queryKey: dashboardKeys.detail(id) }),   
                                                                                
                                         
       };                                                                       
                                                                                
                                         
     }   
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to