Data manager and hooks

This commit is contained in:
Virginie Ky 2019-12-16 00:01:52 +01:00
parent d39c538138
commit 3023c70e30
6 changed files with 137 additions and 0 deletions

View File

@ -0,0 +1,99 @@
import React, { useEffect, useReducer, memo } from 'react';
import PropTypes from 'prop-types';
//import { request } from 'strapi-helper-plugin';
import WebhooksDataManagerContext from '../../contexts/WebhooksDataManager';
import init from './init';
import reducer, { initialState } from './reducer';
const WebhooksDataManagerProvider = ({ children }) => {
const [reducerState, dispatch] = useReducer(reducer, initialState, init);
const { webhooks } = reducerState.toJS();
useEffect(() => {
const fetchData = async () => {
try {
// const { data } = await request(`/admin/webhooks`, {
// method: 'GET',
// });
const list = [
{
id: 0,
name: 'gatsby',
isEnabled: false,
url: 'http://thisisanexample.com/1234867874',
headers: {
Authorisation: 'x-secret',
},
hooks: ['createEntry', 'editEntry', 'deleteEntry', 'createMedia'],
links: [
{
icon: 'pencil',
onClick: () => {
console.log('edit');
},
},
{
icon: 'trash',
onClick: () => {
console.log('delete');
},
},
],
},
{
id: 1,
name: 'gatsby',
isEnabled: false,
url: 'http://thisisanexample.com/1234867874',
headers: {
Authorisation: 'x-secret',
},
hooks: ['createEntry', 'editEntry', 'deleteEntry', 'createMedia'],
links: [
{
icon: 'pencil',
onClick: () => {
console.log('edit');
},
},
{
icon: 'trash',
onClick: () => {
console.log('delete');
},
},
],
},
];
dispatch({
type: 'GET_DATA_SUCCEEDED',
data: list,
});
} catch (err) {
if (err.code !== 20) {
strapi.notification.error('notification.error');
}
}
};
fetchData();
}, []);
return (
<WebhooksDataManagerContext.Provider
value={{
webhooks,
}}
>
{children}
</WebhooksDataManagerContext.Provider>
);
};
WebhooksDataManagerProvider.propTypes = {
children: PropTypes.node.isRequired,
};
export default memo(WebhooksDataManagerProvider);

View File

@ -0,0 +1,5 @@
function init(initialState) {
return initialState;
}
export default init;

View File

@ -0,0 +1,17 @@
import { fromJS } from 'immutable';
const initialState = fromJS({
webhooks: [],
});
const reducer = (state, action) => {
switch (action.type) {
case 'GET_DATA_SUCCEEDED':
return state.update('webhooks', () => fromJS(action.data));
default:
return state;
}
};
export default reducer;
export { initialState };

View File

@ -0,0 +1,5 @@
import { createContext } from 'react';
const WebhooksContext = createContext();
export default WebhooksContext;

View File

@ -0,0 +1,5 @@
import { createContext } from 'react';
const WebhooksDataManagerContext = createContext();
export default WebhooksDataManagerContext;

View File

@ -0,0 +1,6 @@
import { useContext } from 'react';
import WebhooksDataManagerContext from '../contexts/WebhooksDataManager';
const useDataManager = () => useContext(WebhooksDataManagerContext);
export default useDataManager;