mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	feat: add message banner API hooks (#5078)
https://linear.app/unleash/issue/2-1510/create-message-banner-hooks-that-connect-to-the-new-api-endpoints Adds new message banner API hooks that will allow us to do CRUD operations for message banners in the UI.
This commit is contained in:
		
							parent
							
								
									cd864ed09e
								
							
						
					
					
						commit
						5456d1d985
					
				| @ -0,0 +1,68 @@ | ||||
| import { IInternalMessageBanner } from 'interfaces/messageBanner'; | ||||
| import useAPI from '../useApi/useApi'; | ||||
| 
 | ||||
| const ENDPOINT = 'api/admin/message-banners'; | ||||
| 
 | ||||
| type AddOrUpdateMessageBanner = Omit< | ||||
|     IInternalMessageBanner, | ||||
|     'id' | 'createdAt' | ||||
| >; | ||||
| 
 | ||||
| export const useMessageBannersApi = () => { | ||||
|     const { loading, makeRequest, createRequest, errors } = useAPI({ | ||||
|         propagateErrors: true, | ||||
|     }); | ||||
| 
 | ||||
|     const addMessageBanner = async ( | ||||
|         messageBanner: AddOrUpdateMessageBanner, | ||||
|     ) => { | ||||
|         const requestId = 'addMessageBanner'; | ||||
|         const req = createRequest( | ||||
|             ENDPOINT, | ||||
|             { | ||||
|                 method: 'POST', | ||||
|                 body: JSON.stringify(messageBanner), | ||||
|             }, | ||||
|             requestId, | ||||
|         ); | ||||
| 
 | ||||
|         const response = await makeRequest(req.caller, req.id); | ||||
|         return response.json(); | ||||
|     }; | ||||
| 
 | ||||
|     const updateMessageBanner = async ( | ||||
|         messageBannerId: number, | ||||
|         messageBanner: AddOrUpdateMessageBanner, | ||||
|     ) => { | ||||
|         const requestId = 'updateMessageBanner'; | ||||
|         const req = createRequest( | ||||
|             `${ENDPOINT}/${messageBannerId}`, | ||||
|             { | ||||
|                 method: 'PUT', | ||||
|                 body: JSON.stringify(messageBanner), | ||||
|             }, | ||||
|             requestId, | ||||
|         ); | ||||
| 
 | ||||
|         await makeRequest(req.caller, req.id); | ||||
|     }; | ||||
| 
 | ||||
|     const removeMessageBanner = async (messageBannerId: number) => { | ||||
|         const requestId = 'removeMessageBanner'; | ||||
|         const req = createRequest( | ||||
|             `${ENDPOINT}/${messageBannerId}`, | ||||
|             { method: 'DELETE' }, | ||||
|             requestId, | ||||
|         ); | ||||
| 
 | ||||
|         await makeRequest(req.caller, req.id); | ||||
|     }; | ||||
| 
 | ||||
|     return { | ||||
|         addMessageBanner, | ||||
|         updateMessageBanner, | ||||
|         removeMessageBanner, | ||||
|         errors, | ||||
|         loading, | ||||
|     }; | ||||
| }; | ||||
| @ -0,0 +1,38 @@ | ||||
| import { useMemo } from 'react'; | ||||
| import { formatApiPath } from 'utils/formatPath'; | ||||
| import handleErrorResponses from '../httpErrorResponseHandler'; | ||||
| import { useConditionalSWR } from '../useConditionalSWR/useConditionalSWR'; | ||||
| import useUiConfig from '../useUiConfig/useUiConfig'; | ||||
| import { useUiFlag } from 'hooks/useUiFlag'; | ||||
| import { IInternalMessageBanner } from 'interfaces/messageBanner'; | ||||
| 
 | ||||
| const ENDPOINT = 'api/admin/message-banners'; | ||||
| 
 | ||||
| export const useMessageBanners = () => { | ||||
|     const { isEnterprise } = useUiConfig(); | ||||
|     const internalMessageBanners = useUiFlag('internalMessageBanners'); | ||||
| 
 | ||||
|     const { data, error, mutate } = useConditionalSWR( | ||||
|         isEnterprise() && internalMessageBanners, | ||||
|         { messageBanners: [] }, | ||||
|         formatApiPath(ENDPOINT), | ||||
|         fetcher, | ||||
|     ); | ||||
| 
 | ||||
|     return useMemo( | ||||
|         () => ({ | ||||
|             messageBanners: (data?.messageBanners ?? | ||||
|                 []) as IInternalMessageBanner[], | ||||
|             loading: !error && !data, | ||||
|             refetch: () => mutate(), | ||||
|             error, | ||||
|         }), | ||||
|         [data, error, mutate], | ||||
|     ); | ||||
| }; | ||||
| 
 | ||||
| const fetcher = (path: string) => { | ||||
|     return fetch(path) | ||||
|         .then(handleErrorResponses('Message Banners')) | ||||
|         .then((res) => res.json()); | ||||
| }; | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user