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