mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Canvas: Inline element settings (#52771)
This commit is contained in:
parent
eab6365cf7
commit
7b249d19b2
@ -3905,12 +3905,6 @@ exports[`better eslint`] = {
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "1"]
|
||||
],
|
||||
"public/app/features/canvas/runtime/ables.tsx:5381": [
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "3"]
|
||||
],
|
||||
"public/app/features/canvas/runtime/element.tsx:5381": [
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
||||
[0, 0, 0, "Do not use any type assertions.", "1"],
|
||||
|
@ -4,11 +4,52 @@ import { HorizontalConstraint, VerticalConstraint } from '../types';
|
||||
|
||||
import { Scene } from './scene';
|
||||
|
||||
export const settingsViewable = (scene: Scene) => ({
|
||||
name: 'settingsViewable',
|
||||
props: {},
|
||||
events: {},
|
||||
render(moveable: MoveableManagerInterface<unknown, unknown>, React: Renderer) {
|
||||
// If selection is more than 1 element don't display settings button
|
||||
if (scene.selecto?.getSelectedTargets() && scene.selecto?.getSelectedTargets().length > 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
const rect = moveable.getRect();
|
||||
return (
|
||||
<div
|
||||
key={'settings-viewable'}
|
||||
className={'moveable-settings'}
|
||||
style={{
|
||||
position: 'absolute',
|
||||
left: `${rect.width + 18}px`,
|
||||
top: '0px',
|
||||
color: 'white',
|
||||
fontSize: '18px',
|
||||
cursor: 'pointer',
|
||||
userSelect: 'none',
|
||||
willChange: 'transform',
|
||||
transform: 'translate(-50%, 0px)',
|
||||
zIndex: 100,
|
||||
}}
|
||||
onClick={(event) => {
|
||||
const container = moveable.getContainer();
|
||||
const evt = new PointerEvent('contextmenu', { clientX: event.clientX, clientY: event.clientY });
|
||||
container.dispatchEvent(evt);
|
||||
}}
|
||||
>
|
||||
{``}
|
||||
⚙️
|
||||
{``}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
export const dimensionViewable = {
|
||||
name: 'dimensionViewable',
|
||||
props: {},
|
||||
events: {},
|
||||
render(moveable: MoveableManagerInterface<any, any>, React: Renderer) {
|
||||
render(moveable: MoveableManagerInterface<unknown, unknown>, React: Renderer) {
|
||||
const rect = moveable.getRect();
|
||||
return (
|
||||
<div
|
||||
@ -40,9 +81,9 @@ export const constraintViewable = (scene: Scene) => ({
|
||||
name: 'constraintViewable',
|
||||
props: {},
|
||||
events: {},
|
||||
render(moveable: MoveableManagerInterface<any, any>, React: Renderer) {
|
||||
render(moveable: MoveableManagerInterface<unknown, unknown>, React: Renderer) {
|
||||
const rect = moveable.getRect();
|
||||
const targetElement = scene.findElementByTarget(moveable.state.target);
|
||||
const targetElement = scene.findElementByTarget(moveable.state.target!);
|
||||
|
||||
// If selection is more than 1 element don't display constraint visualizations
|
||||
if (scene.selecto?.getSelectedTargets() && scene.selecto?.getSelectedTargets().length > 1) {
|
||||
|
@ -30,7 +30,7 @@ import { LayerActionID } from 'app/plugins/panel/canvas/types';
|
||||
|
||||
import { HorizontalConstraint, Placement, VerticalConstraint } from '../types';
|
||||
|
||||
import { constraintViewable, dimensionViewable } from './ables';
|
||||
import { constraintViewable, dimensionViewable, settingsViewable } from './ables';
|
||||
import { ElementState } from './element';
|
||||
import { FrameState } from './frame';
|
||||
import { RootElement } from './root';
|
||||
@ -334,10 +334,11 @@ export class Scene {
|
||||
this.moveable = new Moveable(this.div!, {
|
||||
draggable: allowChanges,
|
||||
resizable: allowChanges,
|
||||
ables: [dimensionViewable, constraintViewable(this)],
|
||||
ables: [dimensionViewable, constraintViewable(this), settingsViewable(this)],
|
||||
props: {
|
||||
dimensionViewable: allowChanges,
|
||||
constraintViewable: allowChanges,
|
||||
settingsViewable: allowChanges,
|
||||
},
|
||||
origin: false,
|
||||
className: this.styles.selected,
|
||||
|
@ -4,8 +4,7 @@ import { useObservable } from 'react-use';
|
||||
import { first } from 'rxjs/operators';
|
||||
|
||||
import { ContextMenu, MenuItem } from '@grafana/ui';
|
||||
|
||||
import { Scene } from '../../../features/canvas/runtime/scene';
|
||||
import { Scene } from 'app/features/canvas/runtime/scene';
|
||||
|
||||
import { activePanelSubject } from './CanvasPanel';
|
||||
import { LayerActionID } from './types';
|
||||
|
@ -194,6 +194,7 @@ export class CanvasPanel extends Component<Props, State> {
|
||||
renderInlineEdit = () => {
|
||||
return <InlineEdit onClose={() => this.closeInlineEdit()} id={this.props.id} scene={activeCanvasPanel!.scene} />;
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
<>
|
||||
|
Loading…
Reference in New Issue
Block a user