Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Disable duplicate visualization and enable edit panel #554

Merged
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import {
visName,
composition,
newName,
} from '../utils/panel_constants';
} from '../utils/app_constants';
import { supressResizeObserverIssue } from '../utils/constants';

describe('Creating application', () => {
Expand Down
2 changes: 2 additions & 0 deletions dashboards-observability/.cypress/utils/app_constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { supressResizeObserverIssue } from './constants';

export const delay = 700;

export const moveToHomePage = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,8 @@ export const CustomPanelView = ({
setPanelVisualizations={setPanelVisualizations}
isFlyoutReplacement={isFlyoutReplacement}
replaceVisualizationId={replaceVisualizationId}
appPanel={appPanel}
appId={appId}
/>
);
}
Expand Down Expand Up @@ -678,15 +680,34 @@ export const CustomPanelView = ({
</EuiFlexItem>
{appPanel && (
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will keeping this as && restrict the edit button to be run only in app-panels?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is another one above that includes the edit button, etc. with the condition appPanel ||. I had to do them separately because they are in different places. appPanel will not need a header area.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏽 Got it we can create a more modular header for panels later.

<>
<EuiFlexItem grow={false}>
<EuiButton
iconType="pencil"
onClick={() => editPanel('edit')}
isDisabled={editDisabled}
>
Edit
</EuiButton>
</EuiFlexItem>
{editMode ? (
<>
<EuiFlexItem grow={false}>
<EuiButton
iconType="cross"
color="danger"
onClick={() => editPanel('cancel')}
>
Cancel
</EuiButton>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiButton iconType="save" onClick={() => editPanel('save')}>
Save
</EuiButton>
</EuiFlexItem>
</>
) : (
<EuiFlexItem grow={false}>
<EuiButton
iconType="pencil"
onClick={() => editPanel('edit')}
disabled={editDisabled}
>
Edit
</EuiButton>
</EuiFlexItem>
)}
<EuiFlexItem grow={false}>
<EuiButton
iconType="plusInCircle"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

exports[`Visualization Flyout Component renders add visualization Flyout 1`] = `
<VisaulizationFlyout
appPanel={false}
closeFlyout={[MockFunction]}
end="now"
http={[MockFunction]}
Expand Down Expand Up @@ -1061,6 +1062,7 @@ exports[`Visualization Flyout Component renders add visualization Flyout 1`] = `

exports[`Visualization Flyout Component renders replace visualization Flyout 1`] = `
<VisaulizationFlyout
appPanel={false}
closeFlyout={[MockFunction]}
end="2011-08-12T01:23:45.678Z"
http={[MockFunction]}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ describe('Visualization Flyout Component', () => {
http={httpClientMock}
pplService={pplService}
isFlyoutReplacement={isFlyoutReplacement}
appPanel={false}
/>
);

Expand Down Expand Up @@ -68,6 +69,7 @@ describe('Visualization Flyout Component', () => {
pplService={pplService}
isFlyoutReplacement={isFlyoutReplacement}
replaceVisualizationId={replaceVisualizationId}
appPanel={false}
/>
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/
/* eslint-disable no-console */
/* eslint-disable react-hooks/exhaustive-deps */

import {
EuiButton,
Expand Down Expand Up @@ -56,7 +58,7 @@ import { uiSettingsService } from '../../../../../common/utils';
* replaceVisualizationId: string id of the visualization to be replaced
*/

type Props = {
interface VisualizationFlyoutProps {
panelId: string;
pplFilterValue: string;
closeFlyout: () => void;
Expand All @@ -73,10 +75,14 @@ type Props = {
setPanelVisualizations: React.Dispatch<React.SetStateAction<VisualizationType[]>>;
isFlyoutReplacement?: boolean | undefined;
replaceVisualizationId?: string | undefined;
};
appPanel: boolean;
appId?: string;
}

export const VisaulizationFlyout = ({
panelId,
appId,
appPanel,
pplFilterValue,
closeFlyout,
start,
Expand All @@ -87,11 +93,11 @@ export const VisaulizationFlyout = ({
setPanelVisualizations,
isFlyoutReplacement,
replaceVisualizationId,
}: Props) => {
}: VisualizationFlyoutProps) => {
const [newVisualizationTitle, setNewVisualizationTitle] = useState('');
const [newVisualizationType, setNewVisualizationType] = useState('');
const [newVisualizationTimeField, setNewVisualizationTimeField] = useState('');
const [previewMetaData, setPreviewMetaData] = useState();
const [previewMetaData, setPreviewMetaData] = useState<SavedVisualizationType>();
const [pplQuery, setPPLQuery] = useState('');
const [previewData, setPreviewData] = useState<pplResponse>({} as pplResponse);
const [previewArea, setPreviewArea] = useState(<></>);
Expand Down Expand Up @@ -125,7 +131,7 @@ export const VisaulizationFlyout = ({
http
.post(`${CUSTOM_PANELS_API_PREFIX}/visualizations/replace`, {
body: JSON.stringify({
panelId: panelId,
panelId,
savedVisualizationId: selectValue,
oldVisualizationId: replaceVisualizationId,
}),
Expand All @@ -142,7 +148,7 @@ export const VisaulizationFlyout = ({
http
.post(`${CUSTOM_PANELS_API_PREFIX}/visualizations`, {
body: JSON.stringify({
panelId: panelId,
panelId,
savedVisualizationId: selectValue,
}),
})
Expand Down Expand Up @@ -259,7 +265,7 @@ export const VisaulizationFlyout = ({
) : (
<EuiFlyoutBody banner={emptySavedVisualizations}>
<>
<div>Please use the "create new visualization" option in add visualization menu.</div>
<div>{'Please use the "create new visualization" option in add visualization menu.'}</div>
</>
</EuiFlyoutBody>
);
Expand All @@ -286,8 +292,15 @@ export const VisaulizationFlyout = ({
.then((res) => {
if (res.visualizations.length > 0) {
setSavedVisualizations(res.visualizations);
const filterAppVis = res.visualizations.filter((vis: SavedVisualizationType) => {
return appPanel
? vis.hasOwnProperty('application_id')
? vis.application_id === appId
: false
: !vis.hasOwnProperty('application_id');
});
setVisualizationOptions(
res.visualizations.map((visualization: SavedVisualizationType) => {
filterAppVis.map((visualization: SavedVisualizationType) => {
return { value: visualization.id, text: visualization.name };
})
);
Expand All @@ -306,7 +319,7 @@ export const VisaulizationFlyout = ({
<EuiFlexItem>
{previewLoading ? (
<EuiLoadingChart size="xl" mono className="visualization-loading-chart-preview" />
) : isPreviewError != '' ? (
) : isPreviewError !== '' ? (
<div className="visualization-error-div-preview">
<EuiIcon type="alert" color="danger" size="s" />
<EuiSpacer size="s" />
Expand All @@ -328,7 +341,7 @@ export const VisaulizationFlyout = ({

// On change of selected visualization change options
useEffect(() => {
for (var i = 0; i < savedVisualizations.length; i++) {
for (let i = 0; i < savedVisualizations.length; i++) {
const visualization = savedVisualizations[i];
if (visualization.id === selectValue) {
setPPLQuery(visualization.query);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,10 @@ export const Paragraphs = forwardRef((props: ParagraphProps, ref) => {
await http
.get(`${CUSTOM_PANELS_API_PREFIX}/visualizations`)
.then((res) => {
opt2 = res.visualizations.map((vizObject) => ({
const noAppVisualizations = res.visualizations.filter((vis) => {
return !!!vis.application_id;
});
opt2 = noAppVisualizations.map((vizObject) => ({
label: vizObject.name,
key: vizObject.id,
className: 'OBSERVABILITY_VISUALIZATION',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,17 +217,16 @@ export class CustomPanelsAdaptor {
const response = await client.callAsCurrentUser('observability.getObject', {
objectType: 'savedVisualization',
});
return response.observabilityObjectList
.filter((visualization: any) => {
return !!!visualization.savedVisualization.application_id;
})
.map((visualization: any) => ({
id: visualization.objectId,
name: visualization.savedVisualization.name,
query: visualization.savedVisualization.query,
type: visualization.savedVisualization.type,
timeField: visualization.savedVisualization.selected_timestamp.name,
}));
return response.observabilityObjectList.map((visualization: any) => ({
id: visualization.objectId,
name: visualization.savedVisualization.name,
query: visualization.savedVisualization.query,
type: visualization.savedVisualization.type,
timeField: visualization.savedVisualization.selected_timestamp.name,
...(visualization.savedVisualization.application_id
? { application_id: visualization.savedVisualization.application_id }
: {}),
}));
Copy link
Member

@ps48 ps48 Mar 9, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This function is changed in #550. Can you please sync those changes or wait till that PR is merged?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eugenesk24 you may want to resolve the conflicts here.

} catch (error) {
throw new Error('View Saved Visualizations Error:' + error);
}
Expand Down