Skip to content
This repository has been archived by the owner on Jan 16, 2025. It is now read-only.

Commit

Permalink
Add isKatalonEmbeddedMode flag
Browse files Browse the repository at this point in the history
  • Loading branch information
triquanminh committed Mar 20, 2024
1 parent 8139ea1 commit 460c596
Show file tree
Hide file tree
Showing 6 changed files with 178 additions and 39 deletions.
23 changes: 18 additions & 5 deletions superset-frontend/src/dashboard/components/SliceAdder.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ import { slicePropShape } from 'src/dashboard/util/propShapes';
import { debounce, pickBy } from 'lodash';
import Checkbox from 'src/components/Checkbox';
import { InfoTooltipWithTrigger } from '@superset-ui/chart-controls';
import { getUrlParam } from 'src/utils/urlUtils';
import { URL_PARAMS } from 'src/constants';
import AddSliceCard from './AddSliceCard';
import AddSliceDragPreview from './dnd/AddSliceDragPreview';
import DragDroppable from './dnd/DragDroppable';
Expand Down Expand Up @@ -331,11 +333,22 @@ class SliceAdder extends React.Component {
<NewChartButton
buttonStyle="link"
buttonSize="xsmall"
onClick={() =>
window.location.assign(
`/explore/?dashboard_id=${this.props.dashboardId}&isKatalonEmbeddedMode=true`,
)
}
onClick={() => {
const isKatalonEmbeddedDashboard = getUrlParam(
URL_PARAMS.isKatalonEmbeddedMode,
);
if (isKatalonEmbeddedDashboard) {
window.location.assign(
`/explore/?dashboard_id=${this.props.dashboardId}&isKatalonEmbeddedMode=true`,
);
} else {
window.open(
`/chart/add?dashboard_id=${this.props.dashboardId}`,
'_blank',
'noopener noreferrer',
);
}
}}
>
<Icons.PlusSmall />
{t('Create new chart')}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ import { ExploreActions } from 'src/explore/actions/exploreActions';
import { ChartState, ExplorePageState } from 'src/explore/types';
import { Tooltip } from 'src/components/Tooltip';
import Icons from 'src/components/Icons';
import { getUrlParam } from 'src/utils/urlUtils';
import { URL_PARAMS } from 'src/constants';
import ControlRow from './ControlRow';
import Control from './Control';
import { ExploreAlert } from './ExploreAlert';
Expand Down Expand Up @@ -739,16 +741,50 @@ export const ControlPanelsContainer = (props: ControlPanelsContainerProps) => {
return <Loading />;
}

const showCustomizeTab = customizeSections.length > 0;

const isKatalonEmbeddedMode = getUrlParam(URL_PARAMS.isKatalonEmbeddedMode);

return (
<Styles ref={containerRef}>
<Collapse
defaultActiveKey={expandedQuerySections}
expandIconPosition="right"
ghost
>
{querySections.map(renderControlPanelSection)}
</Collapse>

{!isKatalonEmbeddedMode ? (
<ControlPanelsTabs
id="controlSections"
data-test="control-tabs"
fullWidth={showCustomizeTab}
allowOverflow={false}
>
<Tabs.TabPane key="query" tab={dataTabTitle}>
<Collapse
defaultActiveKey={expandedQuerySections}
expandIconPosition="right"
ghost
>
{showDatasourceAlert && <DatasourceAlert />}
{querySections.map(renderControlPanelSection)}
</Collapse>
</Tabs.TabPane>
{showCustomizeTab && (
<Tabs.TabPane key="display" tab={t('Customize')}>
<Collapse
defaultActiveKey={expandedCustomizeSections}
expandIconPosition="right"
ghost
>
{customizeSections.map(renderControlPanelSection)}
</Collapse>
</Tabs.TabPane>
)}
</ControlPanelsTabs>
) : (
<Collapse
defaultActiveKey={expandedQuerySections}
expandIconPosition="right"
ghost
>
{querySections.map(renderControlPanelSection)}
</Collapse>
)}
<div css={actionButtonsContainerStyles}>
<RunQueryButton
onQuery={props.onQuery}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,8 @@ function ExploreViewContainer(props) {
return renderChartContainer();
}

const isKatalonEmbeddedMode = getUrlParam(URL_PARAMS.isKatalonEmbeddedMode);

return (
<ExploreContainer>
<ConnectedExploreChartHeader
Expand Down Expand Up @@ -699,7 +701,11 @@ function ExploreViewContainer(props) {
actions={props.actions}
form_data={props.form_data}
sliceName={props.sliceName}
dashboardId={getUrlParam(URL_PARAMS.dashboardId)}
dashboardId={
!isKatalonEmbeddedMode
? props.dashboardId
: getUrlParam(URL_PARAMS.dashboardId)
}
/>
)}
</ExploreContainer>
Expand Down
102 changes: 78 additions & 24 deletions superset-frontend/src/explore/components/SaveModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -279,9 +279,15 @@ class SaveModal extends React.Component<SaveModalProps, SaveModalState> {

// Go to new dashboard url
if (gotodash && dashboard) {
this.props.history.push(
`${dashboard.url}?standalone=1&isKatalonEmbeddedMode=true`,
const isKatalonEmbeddedMode = getUrlParam(
URL_PARAMS.isKatalonEmbeddedMode,
);
let { url } = dashboard;
if (isKatalonEmbeddedMode) {
url += '?standalone=1&isKatalonEmbeddedMode=true';
}

this.props.history.push(url);
return;
}

Expand Down Expand Up @@ -392,6 +398,33 @@ class SaveModal extends React.Component<SaveModalProps, SaveModalState> {
/>
</FormItem>
)}
{!(
isKatalonEmbeddedMode &&
isFeatureEnabled(FeatureFlag.DASHBOARD_NATIVE_FILTERS) &&
this.state.vizType === 'filter_box'
) && (
<FormItem
label={t('Add to dashboard')}
data-test="save-chart-modal-select-dashboard-form"
>
<AsyncSelect
allowClear
allowNewOptions
ariaLabel={t('Select a dashboard')}
options={this.loadDashboards}
onChange={this.onDashboardChange}
value={this.state.dashboard}
placeholder={
<div>
<b>{t('Select')}</b>
{t(' a dashboard OR ')}
<b>{t('create')}</b>
{t(' a new one')}
</div>
}
/>
</FormItem>
)}
{info && <Alert type="info" message={info} closable={false} />}
{this.props.alert && (
<Alert
Expand Down Expand Up @@ -426,28 +459,49 @@ class SaveModal extends React.Component<SaveModalProps, SaveModalState> {
return null;
};

renderFooter = () => (
<div data-test="save-modal-footer">
<Button id="btn_cancel" buttonSize="small" onClick={this.onHide}>
{t('Cancel')}
</Button>
<Button
id="btn_modal_save_goto_dash"
buttonSize="small"
disabled={
!this.state.newSliceName ||
!this.state.dashboard ||
(this.props.datasource?.type !== DatasourceType.Table &&
!this.state.datasetName) ||
(isFeatureEnabled(FeatureFlag.DASHBOARD_NATIVE_FILTERS) &&
this.state.vizType === 'filter_box')
}
onClick={() => this.saveOrOverwrite(true)}
>
{t('Save')}
</Button>
</div>
);
renderFooter = () => {
const isKatalonEmbeddedMode = getUrlParam(URL_PARAMS.isKatalonEmbeddedMode);

return (
<div data-test="save-modal-footer">
<Button id="btn_cancel" buttonSize="small" onClick={this.onHide}>
{t('Cancel')}
</Button>
<Button
id="btn_modal_save_goto_dash"
buttonSize="small"
disabled={
!this.state.newSliceName ||
!this.state.dashboard ||
(this.props.datasource?.type !== DatasourceType.Table &&
!this.state.datasetName) ||
(isFeatureEnabled(FeatureFlag.DASHBOARD_NATIVE_FILTERS) &&
this.state.vizType === 'filter_box')
}
onClick={() => this.saveOrOverwrite(true)}
>
{t('Save & go to dashboard')}
</Button>
{!isKatalonEmbeddedMode && (
<Button
id="btn_modal_save"
buttonSize="small"
buttonStyle="primary"
onClick={() => this.saveOrOverwrite(false)}
disabled={
this.state.isLoading ||
!this.state.newSliceName ||
(this.props.datasource?.type !== DatasourceType.Table &&
!this.state.datasetName)
}
data-test="btn-modal-save"
>
{t('Save')}
</Button>
)}
</div>
);
};

render() {
return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -392,8 +392,12 @@ class DatasourceControl extends React.PureComponent {
}
}

const isKatalonEmbeddedMode = getUrlParam(URL_PARAMS.isKatalonEmbeddedMode);
const text = !isKatalonEmbeddedMode
? t('Missing dataset')
: 'Select a dataset';
const titleText = isMissingDatasource
? t('Select a dataset')
? t(text)
: getDatasourceTitle(datasource);

const tooltip = titleText;
Expand Down Expand Up @@ -426,6 +430,25 @@ class DatasourceControl extends React.PureComponent {
/>
</AntdDropdown>
</div>
{/* missing dataset */}
{!isKatalonEmbeddedMode && isMissingDatasource && isMissingParams && (
<div className="error-alert">
<ErrorAlert
level="warning"
title={t('Missing URL parameters')}
source="explore"
subtitle={
<>
<p>
{t(
'The URL is missing the dataset_id or slice_id parameters.',
)}
</p>
</>
}
/>
</div>
)}
{isMissingDatasource && !isMissingParams && (
<div className="error-alert">
<ErrorAlert
Expand Down
7 changes: 7 additions & 0 deletions superset-frontend/src/pages/Chart/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,13 @@ export default function ExplorePage() {
})
.catch(err => {
dispatch(hydrateExplore(fallbackExploreInitialData));

const isKatalonEmbeddedMode = getUrlParam(
URL_PARAMS.isKatalonEmbeddedMode,
);
if (!isKatalonEmbeddedMode) {
dispatch(addDangerToast(err.message));
}
})
.finally(() => {
setIsLoaded(true);
Expand Down

0 comments on commit 460c596

Please sign in to comment.