Skip to content

Commit

Permalink
Clean up + fix failing create test
Browse files Browse the repository at this point in the history
  • Loading branch information
Heenawter committed Jan 29, 2024
1 parent d001422 commit e9e8483
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 23 deletions.
2 changes: 2 additions & 0 deletions src/plugins/controls/public/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@
*/

export const MIN_POPOVER_WIDTH = 300;

export const CHANGE_CHECK_DEBOUNCE = 100;
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ export class ControlGroupContainer extends Container<
public onFiltersPublished$: Subject<Filter[]>;
public onControlRemoved$: Subject<string>;

/** This currently reports the **entire** control group input on unsaved changes */
/** This currently reports the **entire** persistable control group input on unsaved changes */
public unsavedChanges: BehaviorSubject<PersistableControlGroupInput | undefined>;

public fieldFilterPredicate: FieldFilterPredicate | undefined;
Expand All @@ -130,7 +130,7 @@ export class ControlGroupContainer extends Container<
this.onFiltersPublished$ = new Subject<Filter[]>();
this.onControlRemoved$ = new Subject<string>();

// start diffing dashboard state
// start diffing control group state
this.unsavedChanges = new BehaviorSubject<PersistableControlGroupInput | undefined>(undefined);
const diffingMiddleware = startDiffingControlGroupState.bind(this)();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* Side Public License, v 1.
*/

import { isEqual, pick } from 'lodash';
import React, {
forwardRef,
useEffect,
Expand All @@ -14,28 +15,31 @@ import React, {
useRef,
useState,
} from 'react';
import { isEqual } from 'lodash';
import { v4 as uuidv4 } from 'uuid';

import { compareFilters } from '@kbn/es-query';
import type { Filter, TimeRange, Query } from '@kbn/es-query';
import { EmbeddableFactory } from '@kbn/embeddable-plugin/public';
import type { Filter, Query, TimeRange } from '@kbn/es-query';
import { compareFilters } from '@kbn/es-query';

import {
getDefaultControlGroupInput,
getDefaultControlGroupPersistableInput,
persistableControlGroupInputKeys,
} from '../../../common';
import { ControlGroupContainer } from '../embeddable/control_group_container';
import { ControlGroupContainerFactory } from '../embeddable/control_group_container_factory';
import {
ControlGroupCreationOptions,
ControlGroupInput,
CONTROL_GROUP_TYPE,
ControlGroupOutput,
ControlGroupCreationOptions,
CONTROL_GROUP_TYPE,
} from '../types';
import {
ControlGroupAPI,
AwaitingControlGroupAPI,
buildApiFromControlGroupContainer,
ControlGroupAPI,
} from './control_group_api';
import { getDefaultControlGroupInput } from '../../../common';
import { controlGroupInputBuilder, ControlGroupInputBuilder } from './control_group_input_builder';
import { ControlGroupContainer } from '../embeddable/control_group_container';
import { ControlGroupContainerFactory } from '../embeddable/control_group_container_factory';

export interface ControlGroupRendererProps {
filters?: Filter[];
Expand Down Expand Up @@ -87,7 +91,13 @@ export const ControlGroupRenderer = forwardRef<AwaitingControlGroupAPI, ControlG
...initialInput,
},
undefined,
settings,
{
...settings,
lastSavedInput: {
...getDefaultControlGroupPersistableInput(),
...pick(initialInput, persistableControlGroupInputKeys),
},
},
fieldFilterPredicate
)) as ControlGroupContainer;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { debounceTime, Observable, startWith, Subject, switchMap } from 'rxjs';

import { ControlGroupContainer } from '..';
import { persistableControlGroupInputIsEqual } from '../../../common';
import { CHANGE_CHECK_DEBOUNCE } from '../../constants';
import { controlGroupReducers } from './control_group_reducers';

/**
Expand All @@ -33,7 +34,7 @@ export function startDiffingControlGroupState(this: ControlGroupContainer) {
checkForUnsavedChangesSubject$
.pipe(
startWith(null),
debounceTime(100), // TODO: constant
debounceTime(CHANGE_CHECK_DEBOUNCE),
switchMap(() => {
return new Observable((observer) => {
if (observer.closed) return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import { cloneDeep, identity, omit, pickBy } from 'lodash';
import { cloneDeep, identity, omit, pick, pickBy } from 'lodash';
import { BehaviorSubject, combineLatestWith, distinctUntilChanged, map, Subject } from 'rxjs';
import { v4 } from 'uuid';

Expand All @@ -14,7 +14,7 @@ import {
CONTROL_GROUP_TYPE,
getDefaultControlGroupInput,
getDefaultControlGroupPersistableInput,
PersistableControlGroupInput,
persistableControlGroupInputKeys,
} from '@kbn/controls-plugin/common';
import {
ControlGroupContainerFactory,
Expand Down Expand Up @@ -214,11 +214,6 @@ export const initializeDashboard = async ({
}),
'controlGroupInput'
);
const initialControlGroupInput: PersistableControlGroupInput | {} = {
...(loadDashboardReturn?.dashboardInput?.controlGroupInput ?? {}),
...(sessionStorageInput?.controlGroupInput ?? {}),
...(overrideInput?.controlGroupInput ?? {}),
};

// Back up any view mode passed in explicitly.
if (overrideInput?.viewMode) {
Expand Down Expand Up @@ -405,6 +400,11 @@ export const initializeDashboard = async ({
create: ControlGroupContainerFactory['create'];
};
const { filters, query, timeRange, viewMode, id } = initialDashboardInput;
const initialControlGroupInput: ControlGroupInput | {} = {
...(loadDashboardReturn?.dashboardInput?.controlGroupInput ?? {}),
...(sessionStorageInput?.controlGroupInput ?? {}),
...(overrideInput?.controlGroupInput ?? {}),
};
const fullControlGroupInput = {
id: `control_group_${id ?? 'new_dashboard'}`,
...getDefaultControlGroupInput(),
Expand All @@ -418,10 +418,18 @@ export const initializeDashboard = async ({
if (controlGroup) {
controlGroup.updateInputAndReinitialize(fullControlGroupInput);
} else {
const lastSavedControlGroupInput = pick(
{
...(loadDashboardReturn?.dashboardInput?.controlGroupInput ?? {}),
...(overrideInput?.controlGroupInput ?? {}),
},
persistableControlGroupInputKeys
);
const newControlGroup = await controlsGroupFactory?.create(fullControlGroupInput, this, {
lastSavedInput:
loadDashboardReturn?.dashboardInput.controlGroupInput ??
getDefaultControlGroupPersistableInput(),
lastSavedInput: {
...getDefaultControlGroupPersistableInput(),
...lastSavedControlGroupInput,
},
});
if (!newControlGroup || isErrorEmbeddable(newControlGroup)) {
throw new Error('Error in control group startup');
Expand Down

0 comments on commit e9e8483

Please sign in to comment.