adminjs
Version:
Admin panel for apps written in node.js
94 lines • 3.46 kB
JavaScript
import { Box } from '@adminjs/design-system';
import React, { useState } from 'react';
import { connect } from 'react-redux';
import { useParams } from 'react-router';
import allowOverride from '../../hoc/allow-override.js';
import { actionHasDisabledComponent } from '../../interfaces/index.js';
import BaseActionComponent from '../app/base-action-component.js';
import DrawerPortal from '../app/drawer-portal.js';
import { NoActionError, NoResourceError } from '../app/error-message.js';
import FilterDrawer from '../app/filter-drawer.js';
import { ActionHeader } from '../app/index.js';
import Wrapper from './utils/wrapper.js';
import { getResourceElementCss } from '../../utils/data-css-name.js';
const ResourceAction = props => {
const params = useParams();
const {
resources
} = props;
const {
resourceId,
actionName
} = params;
const [tag, setTag] = useState('');
const [filterVisible, setFilterVisible] = useState(false);
const resource = resources.find(r => r.id === resourceId);
if (!resource) {
return /*#__PURE__*/React.createElement(NoResourceError, {
resourceId: resourceId
});
}
const action = resource.resourceActions.find(r => r.name === actionName);
if (!action || actionHasDisabledComponent(action)) {
return /*#__PURE__*/React.createElement(NoActionError, {
resourceId: resourceId,
actionName: actionName
});
}
const listActionName = 'list';
const listAction = resource.resourceActions.find(r => r.name === listActionName);
const contentTag = getResourceElementCss(resource.id, action.name);
if (action.showInDrawer) {
if (!listAction) {
return /*#__PURE__*/React.createElement(DrawerPortal, {
width: action.containerWidth
}, /*#__PURE__*/React.createElement(BaseActionComponent, {
action: action,
resource: resource
}));
}
const toggleFilter = listAction.showFilter ? () => setFilterVisible(!filterVisible) : undefined;
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DrawerPortal, {
width: action.containerWidth
}, /*#__PURE__*/React.createElement(BaseActionComponent, {
action: action,
resource: resource,
setTag: setTag
})), /*#__PURE__*/React.createElement(Wrapper, {
width: listAction.containerWidth
}, /*#__PURE__*/React.createElement(ActionHeader, {
resource: resource,
action: listAction,
tag: tag,
toggleFilter: toggleFilter
}), /*#__PURE__*/React.createElement(BaseActionComponent, {
action: listAction,
resource: resource,
setTag: setTag
})));
}
return /*#__PURE__*/React.createElement(Wrapper, {
width: action.containerWidth,
showFilter: action.showFilter,
"data-css": contentTag
}, /*#__PURE__*/React.createElement(Box, {
flex: true,
flexDirection: "column",
flexGrow: 1
}, /*#__PURE__*/React.createElement(ActionHeader, {
resource: resource,
action: action,
toggleFilter: action.showFilter,
tag: tag
}), /*#__PURE__*/React.createElement(BaseActionComponent, {
action: action,
resource: resource,
setTag: setTag
})), action.showFilter && /*#__PURE__*/React.createElement(FilterDrawer, {
resource: resource
}));
};
const mapStateToProps = state => ({
resources: state.resources
});
export default allowOverride(connect(mapStateToProps)(ResourceAction), 'ResourceActionRoute');