UNPKG

strapi-plugin-users-permissions

Version:

Protect your API with a full-authentication process based on JWT

74 lines (64 loc) 1.91 kB
import { useCallback, useEffect, useReducer } from 'react'; import { request } from 'strapi-helper-plugin'; import { useIntl } from 'react-intl'; import { get } from 'lodash'; import init from './init'; import pluginId from '../../pluginId'; import { cleanPermissions, formatPolicies, getTrad } from '../../utils'; import reducer, { initialState } from './reducer'; const usePlugins = (shouldFetchData = true) => { const { formatMessage } = useIntl(); const [{ permissions, routes, policies, isLoading }, dispatch] = useReducer( reducer, initialState, () => init(initialState, shouldFetchData) ); const fetchPlugins = useCallback(async () => { try { dispatch({ type: 'GET_DATA', }); const [{ permissions }, { routes }, { policies }] = await Promise.all( [`/${pluginId}/permissions`, `/${pluginId}/routes`, `/${pluginId}/policies`].map(endpoint => request(endpoint, { method: 'GET' }) ) ); dispatch({ type: 'GET_DATA_SUCCEEDED', permissions: cleanPermissions(permissions), routes, policies: [ { label: formatMessage({ id: getTrad('Policies.InputSelect.empty') }), value: 'empty__string_value', }, ...formatPolicies(policies), ], }); } catch (err) { const message = get(err, ['response', 'payload', 'message'], 'An error occured'); dispatch({ type: 'GET_DATA_ERROR', }); if (message !== 'Forbidden') { strapi.notification.toggle({ type: 'warning', message, }); } } }, [formatMessage]); useEffect(() => { if (shouldFetchData) { fetchPlugins(); } }, [fetchPlugins, shouldFetchData]); return { permissions, routes, policies, getData: fetchPlugins, isLoading, }; }; export default usePlugins;