Skip to content

Commit

Permalink
[Discover] move fetching methods
Browse files Browse the repository at this point in the history
  • Loading branch information
dimaanj committed May 25, 2021
1 parent 6411879 commit b81a4e2
Show file tree
Hide file tree
Showing 18 changed files with 448 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
anchor-id="contextAppRoute.anchorId"
columns="contextAppRoute.state.columns"
index-pattern="contextAppRoute.indexPattern"
index-pattern-id="contextAppRoute.indexPatternId"
app-state="contextAppRoute.state"
state-container="contextAppRoute.stateContainer"
filters="contextAppRoute.filters"
Expand Down
40 changes: 30 additions & 10 deletions src/plugins/discover/public/application/angular/context.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,19 @@

import _ from 'lodash';
import { i18n } from '@kbn/i18n';
import { CONTEXT_DEFAULT_SIZE_SETTING } from '../../../common';
import {
CONTEXT_DEFAULT_SIZE_SETTING,
CONTEXT_STEP_SETTING,
CONTEXT_TIE_BREAKER_FIELDS_SETTING,
SEARCH_FIELDS_FROM_SOURCE,
} from '../../../common';
import { getAngularModule, getServices } from '../../kibana_services';
import './context_app';
import { getState } from './context_state';
import contextAppRouteTemplate from './context.html';
import { getRootBreadcrumbs } from '../helpers/breadcrumbs';
import { getContextQueryDefaults } from './context_query_state';
import { getFirstSortableField } from './context/api/utils/sorting';

const k7Breadcrumbs = ($route) => {
const { indexPattern } = $route.current.locals;
Expand Down Expand Up @@ -49,15 +56,30 @@ getAngularModule().config(($routeProvider) => {
});

function ContextAppRouteController($routeParams, $scope, $route) {
this.indexPattern = $route.current.locals.indexPattern.ip;
this.anchorId = $routeParams.id;
this.indexPatternId = $route.current.params.indexPatternId;
const { uiSettings, history, core } = getServices();
const filterManager = getServices().filterManager;
const indexPattern = $route.current.locals.indexPattern.ip;

const stateContainer = getState({
defaultStepSize: getServices().uiSettings.get(CONTEXT_DEFAULT_SIZE_SETTING),
timeFieldName: indexPattern.timeFieldName,
storeInSessionStorage: getServices().uiSettings.get('state:storeInSessionStorage'),
history: getServices().history(),
toasts: getServices().core.notifications.toasts,
uiSettings: getServices().core.uiSettings,
defaultStepSize: parseInt(uiSettings.get(CONTEXT_DEFAULT_SIZE_SETTING), 10),
timeFieldName: this.indexPattern.timeFieldName,
storeInSessionStorage: uiSettings.get('state:storeInSessionStorage'),
history: history(),
toasts: core.notifications.toasts,
uiSettings: core.uiSettings,
getContextQueryDefaults: () =>
getContextQueryDefaults(
this.indexPatternId,
this.anchorId,
parseInt(uiSettings.get(CONTEXT_STEP_SETTING), 10),
getFirstSortableField(
this.indexPattern,
uiSettings.get(CONTEXT_TIE_BREAKER_FIELDS_SETTING)
),
!uiSettings.get(SEARCH_FIELDS_FROM_SOURCE)
),
});
const {
startSync: startStateSync,
Expand All @@ -70,8 +92,6 @@ function ContextAppRouteController($routeParams, $scope, $route) {
} = stateContainer;
this.stateContainer = stateContainer;
this.state = { ...appState.getState() };
this.anchorId = $routeParams.id;
this.indexPattern = indexPattern;
filterManager.setFilters(_.cloneDeep(getFilters()));
startStateSync();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,7 @@ import { getServices } from '../../../../kibana_services';

export type SurrDocType = 'successors' | 'predecessors';
export type EsHitRecord = Required<
Pick<
estypes.SearchResponse['hits']['hits'][number],
'_id' | 'fields' | 'sort' | '_index' | '_version'
>
Pick<estypes.SearchResponse['hits']['hits'][number], '_id' | 'fields' | 'sort'>
> & {
_source?: Record<string, unknown>;
_score?: number;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ import { fetchAnchorProvider } from '../api/anchor';
import { EsHitRecord, EsHitRecordList, fetchContextProvider, SurrDocType } from '../api/context';
import { getQueryParameterActions } from '../query_parameters';
import {
ContextAppState,
ContextQueryState,
FailureReason,
LoadingStatus,
LoadingStatusEntry,
LoadingStatusState,
QueryParameters,
} from '../../context_app_state';
} from '../../context_query_state';

interface DiscoverPromise extends PromiseConstructor {
try: <T>(fn: () => Promise<T>) => Promise<T>;
Expand All @@ -43,7 +43,7 @@ export function QueryActionsProvider(Promise: DiscoverPromise) {
indexPatterns
);

const setFailedStatus = (state: ContextAppState) => (
const setFailedStatus = (state: ContextQueryState) => (
subject: keyof LoadingStatusState,
details: LoadingStatusEntry = {}
) =>
Expand All @@ -53,17 +53,17 @@ export function QueryActionsProvider(Promise: DiscoverPromise) {
...details,
});

const setLoadedStatus = (state: ContextAppState) => (subject: keyof LoadingStatusState) =>
const setLoadedStatus = (state: ContextQueryState) => (subject: keyof LoadingStatusState) =>
(state.loadingStatus[subject] = {
status: LoadingStatus.LOADED,
});

const setLoadingStatus = (state: ContextAppState) => (subject: keyof LoadingStatusState) =>
const setLoadingStatus = (state: ContextQueryState) => (subject: keyof LoadingStatusState) =>
(state.loadingStatus[subject] = {
status: LoadingStatus.LOADING,
});

const fetchAnchorRow = (state: ContextAppState) => () => {
const fetchAnchorRow = (state: ContextQueryState) => () => {
const {
queryParameters: { indexPatternId, anchorId, sort, tieBreakerField },
} = state;
Expand Down Expand Up @@ -100,7 +100,7 @@ export function QueryActionsProvider(Promise: DiscoverPromise) {
);
};

const fetchSurroundingRows = (type: SurrDocType, state: ContextAppState) => {
const fetchSurroundingRows = (type: SurrDocType, state: ContextQueryState) => {
const {
queryParameters: { indexPatternId, sort, tieBreakerField },
rows: { anchor },
Expand Down Expand Up @@ -153,40 +153,40 @@ export function QueryActionsProvider(Promise: DiscoverPromise) {
);
};

const fetchContextRows = (state: ContextAppState) => () =>
const fetchContextRows = (state: ContextQueryState) => () =>
Promise.all([
fetchSurroundingRows('predecessors', state),
fetchSurroundingRows('successors', state),
]);

const fetchAllRows = (state: ContextAppState) => () =>
const fetchAllRows = (state: ContextQueryState) => () =>
Promise.try(fetchAnchorRow(state)).then(fetchContextRows(state));

const fetchContextRowsWithNewQueryParameters = (state: ContextAppState) => (
const fetchContextRowsWithNewQueryParameters = (state: ContextQueryState) => (
queryParameters: QueryParameters
) => {
setQueryParameters(state)(queryParameters);
return fetchContextRows(state)();
};

const fetchAllRowsWithNewQueryParameters = (state: ContextAppState) => (
const fetchAllRowsWithNewQueryParameters = (state: ContextQueryState) => (
queryParameters: QueryParameters
) => {
setQueryParameters(state)(queryParameters);
return fetchAllRows(state)();
};

const fetchGivenPredecessorRows = (state: ContextAppState) => (count: number) => {
const fetchGivenPredecessorRows = (state: ContextQueryState) => (count: number) => {
setPredecessorCount(state)(count);
return fetchSurroundingRows('predecessors', state);
};

const fetchGivenSuccessorRows = (state: ContextAppState) => (count: number) => {
const fetchGivenSuccessorRows = (state: ContextQueryState) => (count: number) => {
setSuccessorCount(state)(count);
return fetchSurroundingRows('successors', state);
};

const setAllRows = (state: ContextAppState) => (
const setAllRows = (state: ContextQueryState) => (
predecessorRows: EsHitRecordList,
anchorRow: EsHitRecord,
successorRows: EsHitRecordList
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* Side Public License, v 1.
*/

import { LoadingStatus, LoadingStatusState } from '../../context_app_state';
import { LoadingStatus, LoadingStatusState } from '../../context_query_state';

export function createInitialLoadingStatusState(): LoadingStatusState {
return {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
import { getQueryParameterActions } from './actions';
import { FilterManager, SortDirection } from '../../../../../../data/public';
import { coreMock } from '../../../../../../../core/public/mocks';
import { ContextAppState, LoadingStatus, QueryParameters } from '../../context_app_state';
import { ContextQueryState, LoadingStatus, QueryParameters } from '../../context_query_state';
import { EsHitRecord } from '../api/context';
const setupMock = coreMock.createSetup();

let state: ContextAppState;
let state: ContextQueryState;
let filterManager: FilterManager;
let filterManagerSpy: jest.SpyInstance;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,38 +16,38 @@ import {
IndexPatternField,
} from '../../../../../../data/public';
import { popularizeField } from '../../../helpers/popularize_field';
import { ContextAppState, QueryParameters } from '../../context_app_state';
import { ContextQueryState, QueryParameters } from '../../context_query_state';
import { MAX_CONTEXT_SIZE, MIN_CONTEXT_SIZE, QUERY_PARAMETER_KEYS } from './constants';

export function getQueryParameterActions(
filterManager: FilterManager,
indexPatterns?: IndexPatternsContract
) {
const setPredecessorCount = (state: ContextAppState) => (predecessorCount: number) => {
const setPredecessorCount = (state: ContextQueryState) => (predecessorCount: number) => {
return (state.queryParameters.predecessorCount = clamp(
MIN_CONTEXT_SIZE,
MAX_CONTEXT_SIZE,
predecessorCount
));
};

const setSuccessorCount = (state: ContextAppState) => (successorCount: number) => {
const setSuccessorCount = (state: ContextQueryState) => (successorCount: number) => {
return (state.queryParameters.successorCount = clamp(
MIN_CONTEXT_SIZE,
MAX_CONTEXT_SIZE,
successorCount
));
};

const setQueryParameters = (state: ContextAppState) => (queryParameters: QueryParameters) => {
const setQueryParameters = (state: ContextQueryState) => (queryParameters: QueryParameters) => {
return Object.assign(state.queryParameters, pick(queryParameters, QUERY_PARAMETER_KEYS));
};

const updateFilters = () => (filters: Filter[]) => {
filterManager.setFilters(filters);
};

const addFilter = (state: ContextAppState) => async (
const addFilter = (state: ContextQueryState) => async (
field: IndexPatternField | string,
values: unknown,
operation: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,19 @@
*/

export function createInitialQueryParametersState(
indexPatternId: string,
anchorId: string,
defaultStepSize: number = 5,
tieBreakerField: string = '_doc'
) {
return {
anchorId: null,
anchorId,
columns: [],
defaultStepSize,
filters: [],
indexPatternId: null,
predecessorCount: 0,
successorCount: 0,
indexPatternId,
predecessorCount: 5,
successorCount: 5,
sort: [],
tieBreakerField,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
filter="contextApp.actions.addFilter"
hits="contextApp.state.rows.all"
index-pattern="contextApp.indexPattern"
index-pattern-id="contextApp.indexPatternId"
app-state="contextApp.appState"
state-container="contextApp.stateContainer"
sorting="contextApp.state.queryParameters.sort"
columns="contextApp.state.queryParameters.columns"
minimum-visible-rows="contextApp.state.rows.all.length"
anchor-id="contextApp.anchorId"
anchor-status="contextApp.state.loadingStatus.anchor.status"
anchor-reason="contextApp.state.loadingStatus.anchor.reason"
default-step-size="contextApp.state.queryParameters.defaultStepSize"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ getAngularModule().directive('contextApp', function ContextApp() {
anchorId: '=',
columns: '=',
indexPattern: '=',
indexPatternId: '=',
appState: '=',
stateContainer: '=',
filters: '=',
Expand Down Expand Up @@ -89,13 +90,13 @@ function ContextAppController($scope, Private) {
newQueryParameters.anchorId !== queryParameters.anchorId ||
!_.isEqual(newQueryParameters.sort, queryParameters.sort)
) {
this.actions.fetchAllRowsWithNewQueryParameters(_.cloneDeep(newQueryParameters));
// this.actions.fetchAllRowsWithNewQueryParameters(_.cloneDeep(newQueryParameters));
} else if (
newQueryParameters.predecessorCount !== queryParameters.predecessorCount ||
newQueryParameters.successorCount !== queryParameters.successorCount ||
!_.isEqual(newQueryParameters.filters, queryParameters.filters)
) {
this.actions.fetchContextRowsWithNewQueryParameters(_.cloneDeep(newQueryParameters));
// this.actions.fetchContextRowsWithNewQueryParameters(_.cloneDeep(newQueryParameters));
}
}
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ import { Filter } from '../../../../data/public';
import { EsHitRecord } from './context/api/context';
import { EsHitRecordList } from './context/api/context';
import { SortDirection } from './context/api/utils/sorting';
import { createInitialLoadingStatusState } from './context/query';
import { createInitialQueryParametersState } from './context/query_parameters';

export interface ContextAppState {
export interface ContextQueryState {
loadingStatus: LoadingStatusState;
queryParameters: QueryParameters;
rows: ContextRows;
Expand Down Expand Up @@ -55,6 +57,35 @@ export interface QueryParameters {
interface ContextRows {
all: EsHitRecordList;
anchor: EsHitRecord;
predecessors: EsHitRecordList;
successors: EsHitRecordList;
// predecessors: EsHitRecordList;
// successors: EsHitRecordList;
}

export function getContextQueryDefaults(
indexPatternId: string,
anchorId: string,
defaultStepSize: number,
tieBreakerField: string,
useNewFieldsApi: boolean
): ContextQueryState {
return {
queryParameters: createInitialQueryParametersState(
indexPatternId,
anchorId,
defaultStepSize,
tieBreakerField
),
rows: {
all: [],
anchor: {
fields: [],
sort: [],
_id: '',
},
// predecessors: [],
// successors: [],
},
loadingStatus: createInitialLoadingStatusState(),
useNewFieldsApi,
};
}
Loading

0 comments on commit b81a4e2

Please sign in to comment.