Skip to content

Commit

Permalink
moving resolver to own file
Browse files Browse the repository at this point in the history
  • Loading branch information
jgowdyelastic committed Dec 9, 2019
1 parent b5a840e commit 7a0f92e
Show file tree
Hide file tree
Showing 21 changed files with 109 additions and 84 deletions.
64 changes: 1 addition & 63 deletions x-pack/legacy/plugins/ml/public/application/routing/router.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,12 @@
* you may not use this file except in compliance with the Elastic License.
*/

import React, { FC, useEffect, useState } from 'react';
import React, { FC } from 'react';
import { HashRouter, Route, RouteProps } from 'react-router-dom';
import { Location } from 'history';
import { I18nContext } from 'ui/i18n';

import { IndexPatterns } from 'ui/index_patterns';
import {
getIndexPatternById,
getIndexPatternsContract,
getIndexPatternAndSavedSearch,
} from '../util/index_utils';
import { createSearchItems } from '../jobs/new_job/utils/new_job_utils';
import { ResolverResults, Resolvers } from './resolvers';
import { KibanaContext, KibanaConfigTypeFix, KibanaContextValue } from '../contexts/kibana';
import { ChromeBreadcrumb } from '../../../../../../../src/core/public';

Expand Down Expand Up @@ -76,58 +69,3 @@ export const MlRouter: FC<{
</HashRouter>
);
};

export const useResolver = (
indexPatternId: string | undefined,
savedSearchId: string | undefined,
config: KibanaConfigTypeFix,
resolvers: Resolvers
): { context: KibanaContextValue; results: ResolverResults } => {
const funcNames = Object.keys(resolvers); // Object.entries gets this wrong?!
const funcs = Object.values(resolvers); // Object.entries gets this wrong?!
const tempResults = funcNames.reduce((p, c) => {
p[c] = {};
return p;
}, {} as ResolverResults);

const [context, setContext] = useState<any | null>(null);
const [results, setResults] = useState(tempResults);

useEffect(() => {
(async () => {
try {
const res = await Promise.all(funcs.map(r => r()));
res.forEach((r, i) => (tempResults[funcNames[i]] = r));
setResults(tempResults);

if (indexPatternId !== undefined || savedSearchId !== undefined) {
// note, currently we're using our own kibana context that requires a current index pattern to be set
// this means, if the page uses this context, useResolver must be passed a string for the index pattern id
// and loadIndexPatterns must be part of the resolvers.
const { indexPattern, savedSearch } =
savedSearchId !== undefined
? await getIndexPatternAndSavedSearch(savedSearchId)
: { savedSearch: null, indexPattern: await getIndexPatternById(indexPatternId!) };

const { combinedQuery } = createSearchItems(config, indexPattern!, savedSearch);

setContext({
combinedQuery,
currentIndexPattern: indexPattern,
currentSavedSearch: savedSearch,
indexPatterns: getIndexPatternsContract()!,
kibanaConfig: config,
});
} else {
setContext({});
}
} catch (error) {
// quietly fail. Let the resolvers handle the redirection if any fail to resolve
// eslint-disable-next-line no-console
console.error(error);
}
})();
}, []);

return { context, results };
};
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

import React, { FC } from 'react';
import { i18n } from '@kbn/i18n';
import { MlRoute, PageLoader, useResolver, PageProps } from '../router';
import { MlRoute, PageLoader, PageProps } from '../router';
import { useResolver } from '../use_resolver';
import { Page } from '../../access_denied';

const breadcrumbs = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ import { decode } from 'rison-node';

// @ts-ignore
import queryString from 'query-string';
import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';
import { basicResolvers } from '../../resolvers';
import { Page } from '../../../data_frame_analytics/pages/analytics_exploration';
import { ANALYSIS_CONFIG_TYPE } from '../../../data_frame_analytics/common/analytics';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
import React, { FC } from 'react';
import { i18n } from '@kbn/i18n';

import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';
import { basicResolvers } from '../../resolvers';
import { Page } from '../../../data_frame_analytics/pages/analytics_management';
import { ML_BREADCRUMB } from '../../breadcrumbs';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ import React, { FC } from 'react';

// @ts-ignore
import queryString from 'query-string';
import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';
import { DatavisualizerSelector } from '../../../datavisualizer';

import { checkBasicLicense } from '../../../license/check_license';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ import { i18n } from '@kbn/i18n';

// @ts-ignore
import queryString from 'query-string';
import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';
import { FileDataVisualizerPage } from '../../../datavisualizer/file_based';

import { checkBasicLicense } from '../../../license/check_license';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import { i18n } from '@kbn/i18n';

// @ts-ignore
import queryString from 'query-string';
import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';
import { Page } from '../../../datavisualizer/index_based';

import { checkBasicLicense } from '../../../license/check_license';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,11 @@ import { Subscription } from 'rxjs';
// @ts-ignore
import queryString from 'query-string';
import { timefilter } from 'ui/timefilter';
// import { AppState as IAppState, AppStateClass } from 'ui/state_management/app_state';
import { MlRoute, PageLoader, useResolver, PageProps } from '../router';
import { MlRoute, PageLoader, PageProps } from '../router';
import { useResolver } from '../use_resolver';
import { basicResolvers } from '../resolvers';
import { Explorer } from '../../explorer';
import { mlJobService } from '../../services/job_service';
// import { APP_STATE_ACTION } from '../../timeseriesexplorer/timeseriesexplorer_constants';
import { getExplorerDefaultAppState, ExplorerAppState } from '../../explorer/reducers';
import { explorerService } from '../../explorer/explorer_dashboard_service';
import { jobSelectServiceFactory } from '../../components/job_selector/job_select_service_utils';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

import React, { FC } from 'react';
import { i18n } from '@kbn/i18n';
import { MlRoute, PageLoader, useResolver, PageProps } from '../router';
import { MlRoute, PageLoader, PageProps } from '../router';
import { useResolver } from '../use_resolver';
import { basicResolvers } from '../resolvers';
import { JobsPage } from '../../jobs/jobs_list';
import { ANOMALY_DETECTION_BREADCRUMB, ML_BREADCRUMB } from '../breadcrumbs';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

import React, { FC } from 'react';
import { i18n } from '@kbn/i18n';
import { MlRoute, PageLoader, useResolver, PageDependencies } from '../../router';
import { MlRoute, PageLoader, PageDependencies } from '../../router';
import { useResolver } from '../../use_resolver';
import { basicResolvers } from '../../resolvers';
import { Page, preConfiguredJobRedirect } from '../../../jobs/new_job/pages/index_or_search';
import { ANOMALY_DETECTION_BREADCRUMB, ML_BREADCRUMB } from '../../breadcrumbs';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import { i18n } from '@kbn/i18n';

// @ts-ignore
import queryString from 'query-string';
import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';
import { basicResolvers } from '../../resolvers';
import { Page } from '../../../jobs/new_job/pages/job_type';
import { ANOMALY_DETECTION_BREADCRUMB, ML_BREADCRUMB } from '../../breadcrumbs';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import { i18n } from '@kbn/i18n';
// @ts-ignore
import queryString from 'query-string';

import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';
import { basicResolvers } from '../../resolvers';
import { Page } from '../../../jobs/new_job/recognize';
import { checkViewOrCreateJobs } from '../../../jobs/new_job/recognize/resolvers';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ import { i18n } from '@kbn/i18n';
import queryString from 'query-string';

import { basicResolvers } from '../../resolvers';
import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';
import { Page } from '../../../jobs/new_job/pages/new_job';
import { JOB_TYPE } from '../../../jobs/new_job/common/job_creator/util/constants';
import { mlJobService } from '../../../services/job_service';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ import React, { FC } from 'react';
import { i18n } from '@kbn/i18n';

import { Redirect } from 'react-router-dom';
import { MlRoute, PageLoader, useResolver, PageProps } from '../router';
import { MlRoute, PageLoader, PageProps } from '../router';
import { useResolver } from '../use_resolver';
import { OverviewPage } from '../../overview';

import { checkFullLicense } from '../../license/check_license';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
import React, { FC } from 'react';
import { i18n } from '@kbn/i18n';

import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';

import { checkFullLicense } from '../../../license/check_license';
import { checkGetJobsPrivilege, checkPermission } from '../../../privilege/check_privilege';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ import { i18n } from '@kbn/i18n';
// @ts-ignore
import queryString from 'query-string';

import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';

import { checkFullLicense } from '../../../license/check_license';
import { checkGetJobsPrivilege, checkPermission } from '../../../privilege/check_privilege';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
import React, { FC } from 'react';
import { i18n } from '@kbn/i18n';

import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';

import { checkFullLicense } from '../../../license/check_license';
import { checkGetJobsPrivilege, checkPermission } from '../../../privilege/check_privilege';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ import { i18n } from '@kbn/i18n';
// @ts-ignore
import queryString from 'query-string';

import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';

import { checkFullLicense } from '../../../license/check_license';
import { checkGetJobsPrivilege, checkPermission } from '../../../privilege/check_privilege';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@

import React, { FC } from 'react';

import { MlRoute, PageLoader, useResolver, PageProps } from '../../router';
import { MlRoute, PageLoader, PageProps } from '../../router';
import { useResolver } from '../../use_resolver';

import { checkFullLicense } from '../../../license/check_license';
import { checkGetJobsPrivilege, checkPermission } from '../../../privilege/check_privilege';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ import { Subscription } from 'rxjs';
// @ts-ignore
import queryString from 'query-string';
import { timefilter } from 'ui/timefilter';
import { MlRoute, PageLoader, useResolver, PageProps } from '../router';
import { MlRoute, PageLoader, PageProps } from '../router';
import { useResolver } from '../use_resolver';
import { basicResolvers } from '../resolvers';
import { TimeSeriesExplorer } from '../../timeseriesexplorer';
import { mlJobService } from '../../services/job_service';
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/

import { useEffect, useState } from 'react';
import {
getIndexPatternById,
getIndexPatternsContract,
getIndexPatternAndSavedSearch,
} from '../util/index_utils';
import { createSearchItems } from '../jobs/new_job/utils/new_job_utils';
import { ResolverResults, Resolvers } from './resolvers';
import { KibanaConfigTypeFix, KibanaContextValue } from '../contexts/kibana';

export const useResolver = (
indexPatternId: string | undefined,
savedSearchId: string | undefined,
config: KibanaConfigTypeFix,
resolvers: Resolvers
): { context: KibanaContextValue; results: ResolverResults } => {
const funcNames = Object.keys(resolvers); // Object.entries gets this wrong?!
const funcs = Object.values(resolvers); // Object.entries gets this wrong?!
const tempResults = funcNames.reduce((p, c) => {
p[c] = {};
return p;
}, {} as ResolverResults);

const [context, setContext] = useState<any | null>(null);
const [results, setResults] = useState(tempResults);

useEffect(() => {
(async () => {
try {
const res = await Promise.all(funcs.map(r => r()));
res.forEach((r, i) => (tempResults[funcNames[i]] = r));
setResults(tempResults);

if (indexPatternId !== undefined || savedSearchId !== undefined) {
// note, currently we're using our own kibana context that requires a current index pattern to be set
// this means, if the page uses this context, useResolver must be passed a string for the index pattern id
// and loadIndexPatterns must be part of the resolvers.
const { indexPattern, savedSearch } =
savedSearchId !== undefined
? await getIndexPatternAndSavedSearch(savedSearchId)
: { savedSearch: null, indexPattern: await getIndexPatternById(indexPatternId!) };

const { combinedQuery } = createSearchItems(config, indexPattern!, savedSearch);

setContext({
combinedQuery,
currentIndexPattern: indexPattern,
currentSavedSearch: savedSearch,
indexPatterns: getIndexPatternsContract()!,
kibanaConfig: config,
});
} else {
setContext({});
}
} catch (error) {
// quietly fail. Let the resolvers handle the redirection if any fail to resolve
// eslint-disable-next-line no-console
console.error(error);
}
})();
}, []);

return { context, results };
};

0 comments on commit 7a0f92e

Please sign in to comment.