mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	refactor: remove redux from addons components
This commit is contained in:
		
							parent
							
								
									46e3be8667
								
							
						
					
					
						commit
						e25b7b0a22
					
				@ -1,5 +1,4 @@
 | 
			
		||||
import React, { useContext, useEffect } from 'react';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import { useContext, useEffect } from 'react';
 | 
			
		||||
import ConfiguredAddons from './ConfiguredAddons';
 | 
			
		||||
import AvailableAddons from './AvailableAddons';
 | 
			
		||||
import { Avatar } from '@material-ui/core';
 | 
			
		||||
@ -14,6 +13,8 @@ import webhooksIcon from '../../../assets/icons/webhooks.svg';
 | 
			
		||||
import teamsIcon from '../../../assets/icons/teams.svg';
 | 
			
		||||
import dataDogIcon from '../../../assets/icons/datadog.svg';
 | 
			
		||||
import { formatAssetPath } from '../../../utils/format-path';
 | 
			
		||||
import useAddons from '../../../hooks/api/getters/useAddons/useAddons';
 | 
			
		||||
import { useHistory } from 'react-router-dom';
 | 
			
		||||
 | 
			
		||||
const style = {
 | 
			
		||||
    width: '40px',
 | 
			
		||||
@ -73,18 +74,14 @@ const getIcon = name => {
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const AddonList = ({
 | 
			
		||||
    addons,
 | 
			
		||||
    providers,
 | 
			
		||||
    fetchAddons,
 | 
			
		||||
    removeAddon,
 | 
			
		||||
    toggleAddon,
 | 
			
		||||
    history,
 | 
			
		||||
}) => {
 | 
			
		||||
const AddonList = () => {
 | 
			
		||||
    const { hasAccess } = useContext(AccessContext);
 | 
			
		||||
    const { addons, providers, refetchAddons } = useAddons();
 | 
			
		||||
    const history = useHistory();
 | 
			
		||||
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        if (addons.length === 0) {
 | 
			
		||||
            fetchAddons();
 | 
			
		||||
            refetchAddons();
 | 
			
		||||
        }
 | 
			
		||||
        // eslint-disable-next-line react-hooks/exhaustive-deps
 | 
			
		||||
    }, [addons.length]);
 | 
			
		||||
@ -96,9 +93,7 @@ const AddonList = ({
 | 
			
		||||
                show={
 | 
			
		||||
                    <ConfiguredAddons
 | 
			
		||||
                        addons={addons}
 | 
			
		||||
                        toggleAddon={toggleAddon}
 | 
			
		||||
                        hasAccess={hasAccess}
 | 
			
		||||
                        removeAddon={removeAddon}
 | 
			
		||||
                        getIcon={getIcon}
 | 
			
		||||
                    />
 | 
			
		||||
                }
 | 
			
		||||
@ -115,13 +110,4 @@ const AddonList = ({
 | 
			
		||||
    );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
AddonList.propTypes = {
 | 
			
		||||
    addons: PropTypes.array.isRequired,
 | 
			
		||||
    providers: PropTypes.array.isRequired,
 | 
			
		||||
    fetchAddons: PropTypes.func.isRequired,
 | 
			
		||||
    removeAddon: PropTypes.func.isRequired,
 | 
			
		||||
    toggleAddon: PropTypes.func.isRequired,
 | 
			
		||||
    history: PropTypes.object.isRequired,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default AddonList;
 | 
			
		||||
 | 
			
		||||
@ -13,6 +13,8 @@ import { CREATE_ADDON } from '../../../providers/AccessProvider/permissions';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
 | 
			
		||||
const AvailableAddons = ({ providers, getIcon, hasAccess, history }) => {
 | 
			
		||||
    
 | 
			
		||||
    console.log('this is ', providers)
 | 
			
		||||
    const renderProvider = provider => (
 | 
			
		||||
        <ListItem key={provider.name}>
 | 
			
		||||
            <ListItemAvatar>{getIcon(provider.name)}</ListItemAvatar>
 | 
			
		||||
 | 
			
		||||
@ -17,15 +17,51 @@ import {
 | 
			
		||||
import { Link } from 'react-router-dom';
 | 
			
		||||
import PageContent from '../../../common/PageContent/PageContent';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import useAddons from '../../../../hooks/api/getters/useAddons/useAddons';
 | 
			
		||||
import useToast from '../../../../hooks/useToast';
 | 
			
		||||
import useAddonsApi from '../../../../hooks/api/actions/useAddonsApi/useAddonsApi';
 | 
			
		||||
 | 
			
		||||
const ConfiguredAddons = ({ addons, hasAccess, getIcon }) => {
 | 
			
		||||
    const { refetchAddons } = useAddons();
 | 
			
		||||
    const { updateAddon, removeAddon } = useAddonsApi();
 | 
			
		||||
    const { setToastData } = useToast();
 | 
			
		||||
 | 
			
		||||
    const toggleAddon = async addon => {
 | 
			
		||||
        try {
 | 
			
		||||
            await updateAddon({ ...addon, enabled: !addon.enabled });
 | 
			
		||||
            refetchAddons();
 | 
			
		||||
            setToastData({
 | 
			
		||||
                type: 'success',
 | 
			
		||||
                title: 'Success',
 | 
			
		||||
                text: 'Addon state switched successfully',
 | 
			
		||||
            });
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
            setToastData({
 | 
			
		||||
                type: 'error',
 | 
			
		||||
                title: 'Error',
 | 
			
		||||
                text: 'Can not change addon state',
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const onRemoveAddon = addon => async () => {
 | 
			
		||||
        try {
 | 
			
		||||
            await removeAddon(addon.id);
 | 
			
		||||
            refetchAddons();
 | 
			
		||||
            setToastData({
 | 
			
		||||
                type: 'success',
 | 
			
		||||
                title: 'Success',
 | 
			
		||||
                text: 'Deleted addon successfully',
 | 
			
		||||
            });
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
            setToastData({
 | 
			
		||||
                type: 'error',
 | 
			
		||||
                title: 'Error',
 | 
			
		||||
                text: 'Can not delete addon',
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
const ConfiguredAddons = ({
 | 
			
		||||
    addons,
 | 
			
		||||
    hasAccess,
 | 
			
		||||
    removeAddon,
 | 
			
		||||
    getIcon,
 | 
			
		||||
    toggleAddon,
 | 
			
		||||
}) => {
 | 
			
		||||
    const onRemoveAddon = addon => () => removeAddon(addon);
 | 
			
		||||
    const renderAddon = addon => (
 | 
			
		||||
        <ListItem key={addon.id}>
 | 
			
		||||
            <ListItemAvatar>{getIcon(addon.provider)}</ListItemAvatar>
 | 
			
		||||
@ -95,7 +131,6 @@ const ConfiguredAddons = ({
 | 
			
		||||
ConfiguredAddons.propTypes = {
 | 
			
		||||
    addons: PropTypes.array.isRequired,
 | 
			
		||||
    hasAccess: PropTypes.func.isRequired,
 | 
			
		||||
    removeAddon: PropTypes.func.isRequired,
 | 
			
		||||
    toggleAddon: PropTypes.func.isRequired,
 | 
			
		||||
    getIcon: PropTypes.func.isRequired,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -10,15 +10,15 @@ import cloneDeep from 'lodash.clonedeep';
 | 
			
		||||
 | 
			
		||||
import styles from './form-addon-component.module.scss';
 | 
			
		||||
import PageContent from '../common/PageContent/PageContent';
 | 
			
		||||
import useAddonsApi from '../../hooks/api/actions/useAddonsApi/useAddonsApi';
 | 
			
		||||
import useToast from '../../hooks/useToast';
 | 
			
		||||
import { useHistory } from 'react-router-dom';
 | 
			
		||||
 | 
			
		||||
const AddonFormComponent = ({ editMode, provider, addon, fetch }) => {
 | 
			
		||||
    const { createAddon, updateAddon } = useAddonsApi();
 | 
			
		||||
    const { setToastData, setToastApiError } = useToast();
 | 
			
		||||
    const history = useHistory();
 | 
			
		||||
 | 
			
		||||
const AddonFormComponent = ({
 | 
			
		||||
    editMode,
 | 
			
		||||
    provider,
 | 
			
		||||
    addon,
 | 
			
		||||
    fetch,
 | 
			
		||||
    cancel,
 | 
			
		||||
    submit,
 | 
			
		||||
}) => {
 | 
			
		||||
    const [config, setConfig] = useState(addon);
 | 
			
		||||
    const [errors, setErrors] = useState({
 | 
			
		||||
        parameters: {},
 | 
			
		||||
@ -73,6 +73,10 @@ const AddonFormComponent = ({
 | 
			
		||||
        setErrors({ ...errors, events: undefined });
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const handleCancel = () => {
 | 
			
		||||
        history.goBack();
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const onSubmit = async evt => {
 | 
			
		||||
        evt.preventDefault();
 | 
			
		||||
        if (!provider) return;
 | 
			
		||||
@ -100,8 +104,25 @@ const AddonFormComponent = ({
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            await submit(config);
 | 
			
		||||
            if (editMode) {
 | 
			
		||||
                await updateAddon(config);
 | 
			
		||||
                history.push('/addons');
 | 
			
		||||
                setToastData({
 | 
			
		||||
                    type: 'success',
 | 
			
		||||
                    title: 'Addon updated successfully',
 | 
			
		||||
                });
 | 
			
		||||
            } else {
 | 
			
		||||
                await createAddon(config);
 | 
			
		||||
                history.push('/addons');
 | 
			
		||||
                setToastData({
 | 
			
		||||
                    type: 'success',
 | 
			
		||||
                    title: 'Addon created successfully',
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
            setToastApiError({
 | 
			
		||||
                text: e.toString(),
 | 
			
		||||
            });
 | 
			
		||||
            setErrors({ parameters: {}, general: e.message });
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
@ -175,7 +196,7 @@ const AddonFormComponent = ({
 | 
			
		||||
                    />
 | 
			
		||||
                </section>
 | 
			
		||||
                <section className={styles.formSection}>
 | 
			
		||||
                    <FormButtons submitText={submitText} onCancel={cancel} />
 | 
			
		||||
                    <FormButtons submitText={submitText} onCancel={handleCancel} />
 | 
			
		||||
                </section>
 | 
			
		||||
            </form>
 | 
			
		||||
        </PageContent>
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,7 @@
 | 
			
		||||
import { SWRConfiguration } from 'swr';
 | 
			
		||||
import { IAddons } from '../../../../interfaces/addons';
 | 
			
		||||
import useAPI from '../useApi/useApi';
 | 
			
		||||
 | 
			
		||||
const useAddonsApi = (options: SWRConfiguration = {}) => {
 | 
			
		||||
const useAddonsApi = () => {
 | 
			
		||||
    const { makeRequest, createRequest, errors, loading } = useAPI({
 | 
			
		||||
        propagateErrors: true,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ const useAddons = (options: SWRConfiguration = {}) => {
 | 
			
		||||
    const { data, error } = useSWR(KEY, fetcher, options);
 | 
			
		||||
    const [loading, setLoading] = useState(!error && !data);
 | 
			
		||||
 | 
			
		||||
    const refetch = () => {
 | 
			
		||||
    const refetchAddons = () => {
 | 
			
		||||
        mutate(KEY);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
@ -26,10 +26,11 @@ const useAddons = (options: SWRConfiguration = {}) => {
 | 
			
		||||
    }, [data, error]);
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
        addons: data || [],
 | 
			
		||||
        addons: data?.addons || [],
 | 
			
		||||
        providers: data?.providers || [],
 | 
			
		||||
        error,
 | 
			
		||||
        loading,
 | 
			
		||||
        refetch,
 | 
			
		||||
        refetchAddons,
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user