diff --git a/src/state/pages/actions.js b/src/state/pages/actions.js
index 7175c0d01..08d840aec 100644
--- a/src/state/pages/actions.js
+++ b/src/state/pages/actions.js
@@ -212,6 +212,13 @@ export const sendDeletePage = (page, successRedirect = true) => async (dispatch)
const response = await deletePage(page);
const json = await response.json();
if (response) {
+ dispatch(addToast({
+ id: 'app.deleted',
+ values: {
+ type: 'page',
+ code: page.code,
+ },
+ }, TOAST_SUCCESS));
dispatch(removePage(page));
if (page.tourProgress === APP_TOUR_CANCELLED) return;
if ((page.tourProgress !== APP_TOUR_STARTED && successRedirect) || page.redirectToPageTree) {
diff --git a/src/state/pages/reducer.js b/src/state/pages/reducer.js
index fbb3aa851..a6896522c 100644
--- a/src/state/pages/reducer.js
+++ b/src/state/pages/reducer.js
@@ -123,7 +123,7 @@ const childrenMap = (state = {}, action = {}) => {
case REMOVE_PAGE: {
const { parentCode, code } = action.payload.page;
const newState = { ...state };
- if (parentCode) {
+ if (parentCode && newState[parentCode]) {
newState[parentCode] = newState[parentCode].filter(f => f !== code);
}
delete newState[code];
diff --git a/src/state/pages/selectors.js b/src/state/pages/selectors.js
index 05cbb176a..f7022afcf 100644
--- a/src/state/pages/selectors.js
+++ b/src/state/pages/selectors.js
@@ -19,12 +19,12 @@ export const getDashboardPages = state => state.pages.dashboard;
export const getIsVirtualRootOn = state => state.pages.virtualRoot;
export const getSearchPages = createSelector(
- [getSearchPagesRaw, getChildrenMap],
- (pages, pageChildren) => {
+ [getSearchPagesRaw],
+ (pages) => {
if (!pages) return pages;
return pages.map(page => ({
...page,
- isEmpty: pageChildren[page.code] && page.children.length === 0,
+ isEmpty: page.children.length === 0,
}));
},
);
diff --git a/src/ui/pages/common/DeletePageModalContainer.js b/src/ui/pages/common/DeletePageModalContainer.js
index 9ee6524a9..edcec95d3 100644
--- a/src/ui/pages/common/DeletePageModalContainer.js
+++ b/src/ui/pages/common/DeletePageModalContainer.js
@@ -7,7 +7,7 @@ import { getPagesMap } from 'state/pages/selectors';
export const mapStateToProps = state => ({
info: getInfo(state),
- page: getPagesMap(state)[getInfo(state).code],
+ page: getInfo(state).page || getPagesMap(state)[getInfo(state).code],
});
export const mapDispatchToProps = dispatch => ({
diff --git a/src/ui/pages/common/PageTree.js b/src/ui/pages/common/PageTree.js
index 00383d348..635fc8295 100644
--- a/src/ui/pages/common/PageTree.js
+++ b/src/ui/pages/common/PageTree.js
@@ -191,6 +191,7 @@ class PageTree extends Component {
locale={this.props.locale}
domain={this.props.domain}
myGroupIds={this.props.myGroupIds}
+ isSearchMode={!!this.props.searchPages}
/>
);
}
diff --git a/src/ui/pages/common/PageTreeActionMenu.js b/src/ui/pages/common/PageTreeActionMenu.js
index 4afb120d2..f4ed399bb 100644
--- a/src/ui/pages/common/PageTreeActionMenu.js
+++ b/src/ui/pages/common/PageTreeActionMenu.js
@@ -28,13 +28,13 @@ class PageTreeActionMenu extends Component {
const {
page, onClickAdd, onClickEdit, onClickConfigure, onClickDetails,
onClickClone, onClickDelete, onClickPublish, onClickUnpublish,
- onClickViewPublishedPage, onClickPreview, myGroupIds,
+ onClickViewPublishedPage, onClickPreview, myGroupIds, isSearchMode,
} = this.props;
const disableDueToLackOfGroupAccess = !myGroupIds.includes(page.ownerGroup);
let disabled = false;
- if (!page.isEmpty && page.status === PAGE_STATUS_PUBLISHED) {
+ if (!page.isEmpty && page.status === PAGE_STATUS_PUBLISHED && !isSearchMode) {
disabled = true;
}
if (page.expanded) {
@@ -42,7 +42,7 @@ class PageTreeActionMenu extends Component {
}
const disablePublishAction = (page.status === PAGE_STATUS_UNPUBLISHED &&
- page.parentStatus === PAGE_STATUS_UNPUBLISHED)
+ page.parentStatus === PAGE_STATUS_UNPUBLISHED && !isSearchMode)
|| disableDueToLackOfGroupAccess;
const changePublishStatus = page.status === PAGE_STATUS_PUBLISHED ?
(
@@ -176,6 +176,7 @@ PageTreeActionMenu.propTypes = {
domain: PropTypes.string.isRequired,
locale: PropTypes.string.isRequired,
myGroupIds: PropTypes.arrayOf(PropTypes.string),
+ isSearchMode: PropTypes.bool,
};
PageTreeActionMenu.defaultProps = {
@@ -190,6 +191,7 @@ PageTreeActionMenu.defaultProps = {
onClickViewPublishedPage: null,
onClickPreview: null,
myGroupIds: [],
+ isSearchMode: false,
};
export default PageTreeActionMenu;
diff --git a/src/ui/pages/common/PageTreeContainer.js b/src/ui/pages/common/PageTreeContainer.js
index 1678dc028..9a5572bed 100644
--- a/src/ui/pages/common/PageTreeContainer.js
+++ b/src/ui/pages/common/PageTreeContainer.js
@@ -72,15 +72,15 @@ export const mapDispatchToProps = (dispatch, ownProps) => ({
},
onClickDelete: (page) => {
dispatch(setVisibleModal(MODAL_ID));
- dispatch(setInfo({ type: 'page', code: page.code }));
+ dispatch(setInfo({ type: 'page', code: page.code, page }));
},
onClickPublish: (page) => {
dispatch(setVisibleModal(PUBLISH_MODAL_ID));
- dispatch(setInfo({ type: 'page', code: page.code }));
+ dispatch(setInfo({ type: 'page', code: page.code, page }));
},
onClickUnPublish: (page) => {
dispatch(setVisibleModal(UNPUBLISH_MODAL_ID));
- dispatch(setInfo({ type: 'page', code: page.code }));
+ dispatch(setInfo({ type: 'page', code: page.code, page }));
},
onClickDetails: (page) => {
dispatch(setSelectedPage(page));
diff --git a/src/ui/pages/common/PublishPageModalContainer.js b/src/ui/pages/common/PublishPageModalContainer.js
index 0b23c7ce4..b239c0b34 100644
--- a/src/ui/pages/common/PublishPageModalContainer.js
+++ b/src/ui/pages/common/PublishPageModalContainer.js
@@ -8,7 +8,7 @@ import { getPagesMap } from 'state/pages/selectors';
export const mapStateToProps = state => ({
info: getInfo(state),
- page: getPagesMap(state)[getInfo(state).code],
+ page: getInfo(state).page || getPagesMap(state)[getInfo(state).code],
});
export const mapDispatchToProps = dispatch => ({
diff --git a/src/ui/pages/common/UnpublishPageModalContainer.js b/src/ui/pages/common/UnpublishPageModalContainer.js
index 217687512..38fc7a78d 100644
--- a/src/ui/pages/common/UnpublishPageModalContainer.js
+++ b/src/ui/pages/common/UnpublishPageModalContainer.js
@@ -8,7 +8,7 @@ import { getPagesMap } from 'state/pages/selectors';
export const mapStateToProps = state => ({
info: getInfo(state),
- page: getPagesMap(state)[getInfo(state).code],
+ page: getInfo(state).page || getPagesMap(state)[getInfo(state).code],
});
export const mapDispatchToProps = dispatch => ({
diff --git a/src/ui/pages/list/PageListSearchTable.js b/src/ui/pages/list/PageListSearchTable.js
index 7c06a9179..1af4208d9 100644
--- a/src/ui/pages/list/PageListSearchTable.js
+++ b/src/ui/pages/list/PageListSearchTable.js
@@ -4,6 +4,8 @@ import { Paginator, Spinner, Alert } from 'patternfly-react';
import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
import { DataTable } from '@entando/datatable';
import DeletePageModalContainer from 'ui/pages/common/DeletePageModalContainer';
+import PublishPageModalContainer from 'ui/pages/common/PublishPageModalContainer';
+import UnpublishPageModalContainer from 'ui/pages/common/UnpublishPageModalContainer';
import paginatorMessages from 'ui/paginatorMessages';
class PageListSearchTable extends Component {
@@ -125,6 +127,8 @@ class PageListSearchTable extends Component {
{this.renderTable()}
+
+
);
}
diff --git a/test/state/pages/actions.test.js b/test/state/pages/actions.test.js
index 66ac625bb..a172ed112 100644
--- a/test/state/pages/actions.test.js
+++ b/test/state/pages/actions.test.js
@@ -543,8 +543,9 @@ describe('state/pages/actions', () => {
store.dispatch(sendDeletePage(DASHBOARD_PAYLOAD)).then(() => {
expect(deletePage).toHaveBeenCalled();
const actions = store.getActions();
- expect(actions).toHaveLength(1);
- expect(actions[0]).toHaveProperty('type', REMOVE_PAGE);
+ expect(actions).toHaveLength(2);
+ expect(actions[0]).toHaveProperty('type', ADD_TOAST);
+ expect(actions[1]).toHaveProperty('type', REMOVE_PAGE);
expect(history.push).toHaveBeenCalledWith(ROUTE_PAGE_TREE);
done();
}).catch(done.fail);
diff --git a/test/ui/pages/common/PageTreeContainer.test.js b/test/ui/pages/common/PageTreeContainer.test.js
index 59c57d0cf..1490249e9 100644
--- a/test/ui/pages/common/PageTreeContainer.test.js
+++ b/test/ui/pages/common/PageTreeContainer.test.js
@@ -119,7 +119,7 @@ describe('PageTreeContainer', () => {
it('should dispatch an action if onClickDelete is called', () => {
props.onClickDelete({ code: 'pagecode' });
expect(setVisibleModal).toHaveBeenCalledWith(MODAL_ID);
- expect(setInfo).toHaveBeenCalledWith({ type: 'page', code: 'pagecode' });
+ expect(setInfo).toHaveBeenCalledWith({ type: 'page', code: 'pagecode', page: { code: 'pagecode' } });
});
it('should dispatch an action if onClickClone is called', () => {
@@ -130,13 +130,13 @@ describe('PageTreeContainer', () => {
it('should dispatch an action if onClickPublish is called', () => {
props.onClickPublish({ code: 'pagecode', status: 'publish' });
expect(setVisibleModal).toHaveBeenCalledWith(PUBLISH_MODAL_ID);
- expect(setInfo).toHaveBeenCalledWith({ type: 'page', code: 'pagecode' });
+ expect(setInfo).toHaveBeenCalledWith({ type: 'page', code: 'pagecode', page: { code: 'pagecode', status: 'publish' } });
});
it('should dispatch an action if onClickUnPublish is called', () => {
props.onClickUnPublish({ code: 'pagecode', status: 'unpublish' });
expect(setVisibleModal).toHaveBeenCalledWith(UNPUBLISH_MODAL_ID);
- expect(setInfo).toHaveBeenCalledWith({ type: 'page', code: 'pagecode' });
+ expect(setInfo).toHaveBeenCalledWith({ type: 'page', code: 'pagecode', page: { code: 'pagecode', status: 'unpublish' } });
});
it('should dispatch an action if "onClickDetails" is called', () => {