From 55c483e16f430d23b9b1a7d46a1b84a28ff986bb Mon Sep 17 00:00:00 2001 From: Anton Kulyk <kuliks.anton@gmail.com> Date: Tue, 15 Feb 2022 11:46:50 +0200 Subject: [PATCH] Fix permission error when opening revision history (#20421) --- .../metabase/entities/containers/EntityLink.jsx | 7 ++++++- .../entities/containers/EntityObjectLoader.jsx | 15 ++++++++++++--- .../src/metabase/lib/revisions/components.jsx | 4 ++++ frontend/src/metabase/lib/revisions/revisions.js | 1 + 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/frontend/src/metabase/entities/containers/EntityLink.jsx b/frontend/src/metabase/entities/containers/EntityLink.jsx index 4d4525b7e22..48b5b240888 100644 --- a/frontend/src/metabase/entities/containers/EntityLink.jsx +++ b/frontend/src/metabase/entities/containers/EntityLink.jsx @@ -8,6 +8,8 @@ const EntityLink = ({ entityId, name = "name", LinkComponent = Link, + dispatchApiErrorEvent = true, + fallback = null, ...linkProps }) => ( <EntityObjectLoader @@ -15,6 +17,7 @@ const EntityLink = ({ entityId={entityId} properties={[name]} loadingAndErrorWrapper={false} + dispatchApiErrorEvent={dispatchApiErrorEvent} wrapped > {({ object }) => @@ -22,7 +25,9 @@ const EntityLink = ({ <LinkComponent {...linkProps} to={object.getUrl()}> <span>{object.getName()}</span> </LinkComponent> - ) : null + ) : ( + fallback + ) } </EntityObjectLoader> ); diff --git a/frontend/src/metabase/entities/containers/EntityObjectLoader.jsx b/frontend/src/metabase/entities/containers/EntityObjectLoader.jsx index dd8f2380f79..4d5b44f8495 100644 --- a/frontend/src/metabase/entities/containers/EntityObjectLoader.jsx +++ b/frontend/src/metabase/entities/containers/EntityObjectLoader.jsx @@ -42,6 +42,7 @@ export default class EntityObjectLoader extends React.Component { loadingAndErrorWrapper: true, reload: false, wrapped: false, + dispatchApiErrorEvent: true, }; _getWrappedObject; @@ -61,11 +62,15 @@ export default class EntityObjectLoader extends React.Component { } UNSAFE_componentWillMount() { - const { entityId, fetch } = this.props; + const { entityId, fetch, dispatchApiErrorEvent } = this.props; if (entityId != null) { fetch( { id: entityId }, - { reload: this.props.reload, properties: this.props.properties }, + { + reload: this.props.reload, + properties: this.props.properties, + noEvent: !dispatchApiErrorEvent, + }, ); } } @@ -121,7 +126,11 @@ export default class EntityObjectLoader extends React.Component { reload = () => { return this.props.fetch( { id: this.props.entityId }, - { reload: true, properties: this.props.properties }, + { + reload: true, + properties: this.props.properties, + noEvent: !this.props.dispatchApiErrorEvent, + }, ); }; diff --git a/frontend/src/metabase/lib/revisions/components.jsx b/frontend/src/metabase/lib/revisions/components.jsx index 20c78cf0ec8..6e45289a5d3 100644 --- a/frontend/src/metabase/lib/revisions/components.jsx +++ b/frontend/src/metabase/lib/revisions/components.jsx @@ -16,6 +16,10 @@ export const EntityLink = styled(RawEntityLink)` } `; +EntityLink.defaultProps = { + dispatchApiErrorEvent: false, +}; + const revisionTitlePropTypes = { username: PropTypes.string.isRequired, message: PropTypes.node.isRequired, diff --git a/frontend/src/metabase/lib/revisions/revisions.js b/frontend/src/metabase/lib/revisions/revisions.js index d42f826a593..29483260b61 100644 --- a/frontend/src/metabase/lib/revisions/revisions.js +++ b/frontend/src/metabase/lib/revisions/revisions.js @@ -71,6 +71,7 @@ export function getCollectionChangeDescription(prevCollectionId, collectionId) { key={key} entityId={collectionId || "root"} entityType="collections" + fallback={t`Unknown`} /> )}`, ]; -- GitLab