import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import { translate as __ } from 'foremanReact/common/I18n';
import Loading from 'foremanReact/components/Loading';
import {
permissionCheck,
permissionDeniedMsg,
} from '../helpers/permissionsHelper';
import EmptyState from './EmptyState';
const errorStateTitle = __('Error!');
const emptyStateBody = '';
const pluckData = (data, path) => {
const split = path.split('.');
return split.reduce((memo, item) => {
if (item) {
return memo[item];
}
throw new Error('Unexpected empty segment in response data path');
}, data);
};
const withLoading = Component => {
const Subcomponent = ({
fetchFn,
resultPath,
renameData,
emptyStateTitle,
permissions,
primaryButton,
shouldRefetch,
...rest
}) => {
const { loading, error, data, refetch } = fetchFn(rest);
useEffect(() => {
if (shouldRefetch) {
refetch();
}
}, [shouldRefetch, refetch]);
if (loading) {
return ;
}
if (error) {
return (
);
}
const check = permissionCheck(data.currentUser, permissions);
if (!check.allowed) {
return (
item.name))}
/>
);
}
const result = pluckData(data, resultPath);
if ((Array.isArray(result) && result.length === 0) || !result) {
return (
);
}
return ;
};
Subcomponent.propTypes = {
fetchFn: PropTypes.func.isRequired,
resultPath: PropTypes.string.isRequired,
renameData: PropTypes.func,
emptyStateTitle: PropTypes.string.isRequired,
permissions: PropTypes.array,
primaryButton: PropTypes.node,
shouldRefetch: PropTypes.bool,
};
Subcomponent.defaultProps = {
renameData: data => data,
permissions: [],
primaryButton: null,
shouldRefetch: false,
};
return Subcomponent;
};
export default withLoading;