Skip to content

Commit 19bda1f

Browse files
Reactify visualize app (#67848)
* Reactify visualize app * Fix typescript failures after merging master * Make sure refresh button works * Subscribe filter manager fetches * Use redirect to landing page * Update savedSearch type * Add check for TSVB is loaded * Fix comments * Fix uiState persistence on vis load * Remove extra div around TableListView * Update DTS selectors * Add error handling for embeddable * Remove extra argument from useEditorUpdates effect * Update comments, fix typos * Remove extra div wrapper * Apply design suggestions * Revert accidental config changes * Apply navigating to dashboard * Apply redirect legacy urls * Apply incoming changes * Apply incoming changes Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
1 parent dbdc3cd commit 19bda1f

File tree

73 files changed

+2092
-2123
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+2092
-2123
lines changed

src/plugins/input_control_vis/public/input_control_vis_type.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import { createInputControlVisController } from './vis_controller';
2323
import { getControlsTab } from './components/editor/controls_tab';
2424
import { OptionsTab } from './components/editor/options_tab';
2525
import { InputControlVisDependencies } from './plugin';
26-
import { defaultFeedbackMessage } from '../../kibana_utils/public';
2726

2827
export function createInputControlVisTypeDefinition(deps: InputControlVisDependencies) {
2928
const InputControlVisController = createInputControlVisController(deps);
@@ -39,7 +38,6 @@ export function createInputControlVisTypeDefinition(deps: InputControlVisDepende
3938
defaultMessage: 'Create interactive controls for easy dashboard manipulation.',
4039
}),
4140
stage: 'experimental',
42-
feedbackMessage: defaultFeedbackMessage,
4341
visualization: InputControlVisController,
4442
visConfig: {
4543
defaults: {

src/plugins/kibana_utils/common/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,3 @@ export { distinctUntilChangedWithInitialValue } from './distinct_until_changed_w
2828
export { url } from './url';
2929
export { now } from './now';
3030
export { calculateObjectHash } from './calculate_object_hash';
31-
export { defaultFeedbackMessage } from './default_feedback_message';

src/plugins/kibana_utils/public/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export {
3131
UiComponentInstance,
3232
url,
3333
createGetterSetter,
34-
defaultFeedbackMessage,
3534
} from '../common';
3635
export * from './core';
3736
export * from '../common/errors';

src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import { ButtonIconSide } from '@elastic/eui';
2121

22-
export type TopNavMenuAction = (anchorElement: EventTarget) => void;
22+
export type TopNavMenuAction = (anchorElement: HTMLElement) => void;
2323

2424
export interface TopNavMenuData {
2525
id?: string;
@@ -29,7 +29,7 @@ export interface TopNavMenuData {
2929
testId?: string;
3030
className?: string;
3131
disableButton?: boolean | (() => boolean);
32-
tooltip?: string | (() => string);
32+
tooltip?: string | (() => string | undefined);
3333
emphasize?: boolean;
3434
iconType?: string;
3535
iconSide?: ButtonIconSide;

src/plugins/saved_objects/public/saved_object/saved_object_loader.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,17 @@ export class SavedObjectLoader {
5151
}
5252

5353
/**
54-
* Retrieve a saved object by id. Returns a promise that completes when the object finishes
54+
* Retrieve a saved object by id or create new one.
55+
* Returns a promise that completes when the object finishes
5556
* initializing.
56-
* @param id
57+
* @param opts
5758
* @returns {Promise<SavedObject>}
5859
*/
59-
async get(id?: string) {
60+
async get(opts?: Record<string, unknown> | string) {
61+
// can accept object as argument in accordance to SavedVis class
62+
// see src/plugins/saved_objects/public/saved_object/saved_object_loader.ts
6063
// @ts-ignore
61-
const obj = new this.Class(id);
64+
const obj = new this.Class(opts);
6265
return obj.init();
6366
}
6467

src/plugins/saved_objects/public/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ export interface SavedObjectSaveOpts {
6363
confirmOverwrite?: boolean;
6464
isTitleDuplicateConfirmed?: boolean;
6565
onTitleDuplicate?: () => void;
66+
returnToOrigin?: boolean;
6667
}
6768

6869
export interface SavedObjectCreationOpts {

src/plugins/vis_default_editor/public/components/sidebar/sidebar.tsx

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,13 @@ import { i18n } from '@kbn/i18n';
2323
import { keyCodes, EuiButtonIcon, EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
2424
import { EventEmitter } from 'events';
2525

26-
import { Vis, PersistedState } from 'src/plugins/visualizations/public';
27-
import { SavedSearch } from 'src/plugins/discover/public';
26+
import {
27+
Vis,
28+
PersistedState,
29+
VisualizeEmbeddableContract,
30+
} from 'src/plugins/visualizations/public';
2831
import { TimeRange } from 'src/plugins/data/public';
32+
import { SavedObject } from 'src/plugins/saved_objects/public';
2933
import { DefaultEditorNavBar, OptionTab } from './navbar';
3034
import { DefaultEditorControls } from './controls';
3135
import { setStateParamValue, useEditorReducer, useEditorFormState, discardChanges } from './state';
@@ -34,18 +38,20 @@ import { SidebarTitle } from './sidebar_title';
3438
import { Schema } from '../../schemas';
3539

3640
interface DefaultEditorSideBarProps {
41+
embeddableHandler: VisualizeEmbeddableContract;
3742
isCollapsed: boolean;
3843
onClickCollapse: () => void;
3944
optionTabs: OptionTab[];
4045
uiState: PersistedState;
4146
vis: Vis;
4247
isLinkedSearch: boolean;
4348
eventEmitter: EventEmitter;
44-
savedSearch?: SavedSearch;
49+
savedSearch?: SavedObject;
4550
timeRange: TimeRange;
4651
}
4752

4853
function DefaultEditorSideBar({
54+
embeddableHandler,
4955
isCollapsed,
5056
onClickCollapse,
5157
optionTabs,
@@ -104,12 +110,12 @@ function DefaultEditorSideBar({
104110
aggs: state.data.aggs ? (state.data.aggs.aggs.map((agg) => agg.toJSON()) as any) : [],
105111
},
106112
});
107-
eventEmitter.emit('updateVis');
113+
embeddableHandler.reload();
108114
eventEmitter.emit('dirtyStateChange', {
109115
isDirty: false,
110116
});
111117
setTouched(false);
112-
}, [vis, state, formState.invalid, setTouched, isDirty, eventEmitter]);
118+
}, [vis, state, formState.invalid, setTouched, isDirty, eventEmitter, embeddableHandler]);
113119

114120
const onSubmit: KeyboardEventHandler<HTMLFormElement> = useCallback(
115121
(event) => {

src/plugins/vis_default_editor/public/components/sidebar/sidebar_title.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,17 @@ import { FormattedMessage } from '@kbn/i18n/react';
3636
import { i18n } from '@kbn/i18n';
3737

3838
import { Vis } from 'src/plugins/visualizations/public';
39-
import { SavedSearch } from 'src/plugins/discover/public';
39+
import { SavedObject } from 'src/plugins/saved_objects/public';
4040
import { useKibana } from '../../../../kibana_react/public';
4141

4242
interface LinkedSearchProps {
43-
savedSearch: SavedSearch;
43+
savedSearch: SavedObject;
4444
eventEmitter: EventEmitter;
4545
}
4646

4747
interface SidebarTitleProps {
4848
isLinkedSearch: boolean;
49-
savedSearch?: SavedSearch;
49+
savedSearch?: SavedObject;
5050
vis: Vis;
5151
eventEmitter: EventEmitter;
5252
}

src/plugins/vis_default_editor/public/default_editor.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ function DefaultEditor({
5959

6060
embeddableHandler.render(visRef.current);
6161
setTimeout(() => {
62-
eventEmitter.emit('apply');
62+
eventEmitter.emit('embeddableRendered');
6363
});
6464

6565
return () => embeddableHandler.destroy();
@@ -102,6 +102,7 @@ function DefaultEditor({
102102
initialWidth={editorInitialWidth}
103103
>
104104
<DefaultEditorSideBar
105+
embeddableHandler={embeddableHandler}
105106
isCollapsed={isCollapsed}
106107
onClickCollapse={onClickCollapse}
107108
optionTabs={optionTabs}

src/plugins/vis_type_timeseries/public/application/components/vis_editor.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export class VisEditor extends Component {
8080

8181
updateVisState = debounce(() => {
8282
this.props.vis.params = this.state.model;
83-
this.props.eventEmitter.emit('updateVis');
83+
this.props.embeddableHandler.reload();
8484
this.props.eventEmitter.emit('dirtyStateChange', {
8585
isDirty: false,
8686
});
@@ -187,6 +187,7 @@ export class VisEditor extends Component {
187187
autoApply={this.state.autoApply}
188188
model={model}
189189
embeddableHandler={this.props.embeddableHandler}
190+
eventEmitter={this.props.eventEmitter}
190191
vis={this.props.vis}
191192
timeRange={this.props.timeRange}
192193
uiState={this.uiState}

0 commit comments

Comments
 (0)