diff --git a/components/sharing-dialog/src/sharing-dialog.js b/components/sharing-dialog/src/sharing-dialog.js index e5412d72c..7c271e510 100644 --- a/components/sharing-dialog/src/sharing-dialog.js +++ b/components/sharing-dialog/src/sharing-dialog.js @@ -91,6 +91,7 @@ export const SharingDialog = ({ initialSharingSettings = defaultInitialSharingSettings, dataTest = 'dhis2-uicore-sharingdialog', dataSharing = false, + cascadeDashboardSharing = true, }) => { const { show: showError } = useAlert((error) => error, { critical: true }) const mappedInitialSharingSettings = mapInitialSharingSettings( @@ -161,6 +162,7 @@ export const SharingDialog = ({ onChange={() => {}} onRemove={() => {}} dataSharing={dataSharing} + cascadeDashboardSharing={cascadeDashboardSharing} /> @@ -224,6 +226,7 @@ export const SharingDialog = ({ onChange={onChange} onRemove={onRemove} dataSharing={dataSharing} + cascadeDashboardSharing={cascadeDashboardSharing} /> @@ -235,6 +238,8 @@ SharingDialog.propTypes = { id: PropTypes.string.isRequired, /** The type of object to share */ type: PropTypes.oneOf(DIALOG_TYPES_LIST).isRequired, + /** Whether to show the tabbed sharing interface for applying cascade sharing of dashboard items */ + cascadeDashboardSharing: PropTypes.bool, /** Whether to expose the ability to set data sharing (in addition to metadata sharing) */ dataSharing: PropTypes.bool, dataTest: PropTypes.string, diff --git a/components/sharing-dialog/src/sharing-dialog.prod.stories.js b/components/sharing-dialog/src/sharing-dialog.prod.stories.js index 232f09dd9..9d95d3cce 100644 --- a/components/sharing-dialog/src/sharing-dialog.prod.stories.js +++ b/components/sharing-dialog/src/sharing-dialog.prod.stories.js @@ -259,6 +259,18 @@ ForDashboardWithCascadeSharingPartialSuccess.storyName = 'For dashboard with cascading sharing partial success' ForDashboardWithCascadeSharingPartialSuccess.args = { type: 'dashboard' } +export const ForDashboardWithoutCascadeSharing = (args) => ( + + + +) +ForDashboardWithoutCascadeSharing.storyName = + 'For dashboard without cascading sharing (embedded dashboard)' +ForDashboardWithoutCascadeSharing.args = { + type: 'dashboard', + cascadeDashboardSharing: false, +} + export const RTL = (args) => { useEffect(() => { document.body.dir = 'rtl' diff --git a/components/sharing-dialog/src/tabs/tabbed-content.js b/components/sharing-dialog/src/tabs/tabbed-content.js index 76de4ffec..251656f6e 100644 --- a/components/sharing-dialog/src/tabs/tabbed-content.js +++ b/components/sharing-dialog/src/tabs/tabbed-content.js @@ -24,10 +24,11 @@ export const TabbedContent = ({ onChange, onRemove, dataSharing, + cascadeDashboardSharing, }) => { const [activeTabIndex, setActiveTabIndex] = useState(0) - if (type === DIALOG_TYPES.DASHBOARD) { + if (type === DIALOG_TYPES.DASHBOARD && cascadeDashboardSharing) { return ( <> @@ -91,6 +92,7 @@ export const TabbedContent = ({ TabbedContent.propTypes = { allowPublicAccess: PropTypes.bool.isRequired, + cascadeDashboardSharing: PropTypes.bool.isRequired, dataSharing: PropTypes.bool.isRequired, groups: PropTypes.arrayOf( PropTypes.shape({ diff --git a/components/sharing-dialog/types/index.d.ts b/components/sharing-dialog/types/index.d.ts index 90b68873e..5a77ac7e6 100644 --- a/components/sharing-dialog/types/index.d.ts +++ b/components/sharing-dialog/types/index.d.ts @@ -93,6 +93,7 @@ export interface SharingDialogProps { */ initialSharingSettings?: SharingDialogInitialSharingSettings dataSharing?: boolean + cascadeDashboardSharing?: boolean onClose?: ModalOnCloseEventHandler onError?: (error: any) => void onSave?: () => void