Skip to content

Commit

Permalink
index pattern(s) take dependencies as object (#69055)
Browse files Browse the repository at this point in the history
* index pattern(s) take dependencies as object
  • Loading branch information
mattkime committed Jun 13, 2020
1 parent 0577f9b commit 85ebaed
Show file tree
Hide file tree
Showing 8 changed files with 108 additions and 98 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,13 @@ Constructs a new instance of the `IndexPattern` class
<b>Signature:</b>

```typescript
constructor(id: string | undefined, getConfig: any, savedObjectsClient: SavedObjectsClientContract, apiClient: IIndexPatternsApiClient, patternCache: PatternCache, fieldFormats: FieldFormatsStartCommon, onNotification: OnNotification, onError: OnError);
constructor(id: string | undefined, { getConfig, savedObjectsClient, apiClient, patternCache, fieldFormats, onNotification, onError, }: IndexPatternDeps);
```

## Parameters

| Parameter | Type | Description |
| --- | --- | --- |
| id | <code>string &#124; undefined</code> | |
| getConfig | <code>any</code> | |
| savedObjectsClient | <code>SavedObjectsClientContract</code> | |
| apiClient | <code>IIndexPatternsApiClient</code> | |
| patternCache | <code>PatternCache</code> | |
| fieldFormats | <code>FieldFormatsStartCommon</code> | |
| onNotification | <code>OnNotification</code> | |
| onError | <code>OnError</code> | |
| { getConfig, savedObjectsClient, apiClient, patternCache, fieldFormats, onNotification, onError, } | <code>IndexPatternDeps</code> | |

Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export declare class IndexPattern implements IIndexPattern
| Constructor | Modifiers | Description |
| --- | --- | --- |
| [(constructor)(id, getConfig, savedObjectsClient, apiClient, patternCache, fieldFormats, onNotification, onError)](./kibana-plugin-plugins-data-public.indexpattern._constructor_.md) | | Constructs a new instance of the <code>IndexPattern</code> class |
| [(constructor)(id, { getConfig, savedObjectsClient, apiClient, patternCache, fieldFormats, onNotification, onError, })](./kibana-plugin-plugins-data-public.indexpattern._constructor_.md) | | Constructs a new instance of the <code>IndexPattern</code> class |
## Properties
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import mockLogStashFields from '../../../../../fixtures/logstash_fields';
import { stubbedSavedObjectIndexPattern } from '../../../../../fixtures/stubbed_saved_object_index_pattern';
import { Field } from '../fields';

import { FieldFormatsStartCommon } from '../../field_formats';
import { fieldFormatsMock } from '../../field_formats/mocks';

jest.mock('../../field_mapping', () => {
const originalModule = jest.requireActual('../../field_mapping');
Expand Down Expand Up @@ -97,16 +97,15 @@ const apiClient = {

// helper function to create index patterns
function create(id: string, payload?: any): Promise<IndexPattern> {
const indexPattern = new IndexPattern(
id,
(cfg: any) => config.get(cfg),
savedObjectsClient as any,
const indexPattern = new IndexPattern(id, {
getConfig: (cfg: any) => config.get(cfg),
savedObjectsClient: savedObjectsClient as any,
apiClient,
patternCache,
({ getDefaultInstance: () => {}, getType: () => {} } as unknown) as FieldFormatsStartCommon,
() => {},
() => {}
);
fieldFormats: fieldFormatsMock,
onNotification: () => {},
onError: () => {},
});

setDocsourcePayload(id, payload);

Expand Down Expand Up @@ -363,31 +362,29 @@ describe('IndexPattern', () => {
},
});
// Create a normal index pattern
const pattern = new IndexPattern(
'foo',
(cfg: any) => config.get(cfg),
savedObjectsClient as any,
const pattern = new IndexPattern('foo', {
getConfig: (cfg: any) => config.get(cfg),
savedObjectsClient: savedObjectsClient as any,
apiClient,
patternCache,
({ getDefaultInstance: () => {}, getType: () => {} } as unknown) as FieldFormatsStartCommon,
() => {},
() => {}
);
fieldFormats: fieldFormatsMock,
onNotification: () => {},
onError: () => {},
});
await pattern.init();

expect(get(pattern, 'version')).toBe('fooa');

// Create the same one - we're going to handle concurrency
const samePattern = new IndexPattern(
'foo',
(cfg: any) => config.get(cfg),
savedObjectsClient as any,
const samePattern = new IndexPattern('foo', {
getConfig: (cfg: any) => config.get(cfg),
savedObjectsClient: savedObjectsClient as any,
apiClient,
patternCache,
({ getDefaultInstance: () => {}, getType: () => {} } as unknown) as FieldFormatsStartCommon,
() => {},
() => {}
);
fieldFormats: fieldFormatsMock,
onNotification: () => {},
onError: () => {},
});
await samePattern.init();

expect(get(samePattern, 'version')).toBe('fooaa');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@ import { expandShorthand, FieldMappingSpec, MappingObject } from '../../field_ma
const MAX_ATTEMPTS_TO_RESOLVE_CONFLICTS = 3;
const type = 'index-pattern';

interface IndexPatternDeps {
getConfig: any;
savedObjectsClient: SavedObjectsClientContract;
apiClient: IIndexPatternsApiClient;
patternCache: PatternCache;
fieldFormats: FieldFormatsStartCommon;
onNotification: OnNotification;
onError: OnError;
}

export class IndexPattern implements IIndexPattern {
[key: string]: any;

Expand Down Expand Up @@ -97,13 +107,15 @@ export class IndexPattern implements IIndexPattern {

constructor(
id: string | undefined,
getConfig: any,
savedObjectsClient: SavedObjectsClientContract,
apiClient: IIndexPatternsApiClient,
patternCache: PatternCache,
fieldFormats: FieldFormatsStartCommon,
onNotification: OnNotification,
onError: OnError
{
getConfig,
savedObjectsClient,
apiClient,
patternCache,
fieldFormats,
onNotification,
onError,
}: IndexPatternDeps
) {
this.id = id;
this.savedObjectsClient = savedObjectsClient;
Expand Down Expand Up @@ -400,16 +412,15 @@ export class IndexPattern implements IIndexPattern {
async create(allowOverride: boolean = false) {
const _create = async (duplicateId?: string) => {
if (duplicateId) {
const duplicatePattern = new IndexPattern(
duplicateId,
this.getConfig,
this.savedObjectsClient,
this.apiClient,
this.patternCache,
this.fieldFormats,
this.onNotification,
this.onError
);
const duplicatePattern = new IndexPattern(duplicateId, {
getConfig: this.getConfig,
savedObjectsClient: this.savedObjectsClient,
apiClient: this.apiClient,
patternCache: this.patternCache,
fieldFormats: this.fieldFormats,
onNotification: this.onNotification,
onError: this.onError,
});

await duplicatePattern.destroy();
}
Expand Down Expand Up @@ -453,16 +464,15 @@ export class IndexPattern implements IIndexPattern {
_.get(err, 'res.status') === 409 &&
saveAttempts++ < MAX_ATTEMPTS_TO_RESOLVE_CONFLICTS
) {
const samePattern = new IndexPattern(
this.id,
this.getConfig,
this.savedObjectsClient,
this.apiClient,
this.patternCache,
this.fieldFormats,
this.onNotification,
this.onError
);
const samePattern = new IndexPattern(this.id, {
getConfig: this.getConfig,
savedObjectsClient: this.savedObjectsClient,
apiClient: this.apiClient,
patternCache: this.patternCache,
fieldFormats: this.fieldFormats,
onNotification: this.onNotification,
onError: this.onError,
});
return samePattern.init().then(() => {
// What keys changed from now and what the server returned
const updatedBody = samePattern.prepBody();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,15 @@ describe('IndexPatterns', () => {
}) as Promise<SavedObjectsFindResponsePublic<any>>
);

indexPatterns = new IndexPatternsService(
core.uiSettings,
indexPatterns = new IndexPatternsService({
uiSettings: core.uiSettings,
savedObjectsClient,
http,
fieldFormats,
() => {},
() => {},
() => {}
);
onNotification: () => {},
onError: () => {},
onRedirectNoIndexPattern: () => {},
});
});

test('does cache gets for the same id', async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,16 @@ export interface IndexPatternSavedObjectAttrs {
title: string;
}

interface IndexPatternsServiceDeps {
uiSettings: CoreStart['uiSettings'];
savedObjectsClient: SavedObjectsClientContract;
http: HttpStart;
fieldFormats: FieldFormatsStartCommon;
onNotification: OnNotification;
onError: OnError;
onRedirectNoIndexPattern: () => void;
}

export class IndexPatternsService {
private config: IUiSettingsClient;
private savedObjectsClient: SavedObjectsClientContract;
Expand All @@ -65,15 +75,15 @@ export class IndexPatternsService {
shortDotsEnable: boolean
) => Field;

constructor(
uiSettings: CoreStart['uiSettings'],
savedObjectsClient: SavedObjectsClientContract,
http: HttpStart,
fieldFormats: FieldFormatsStartCommon,
onNotification: OnNotification,
onError: OnError,
onRedirectNoIndexPattern: () => void
) {
constructor({
uiSettings,
savedObjectsClient,
http,
fieldFormats,
onNotification,
onError,
onRedirectNoIndexPattern,
}: IndexPatternsServiceDeps) {
this.apiClient = new IndexPatternsApiClient(http);
this.config = uiSettings;
this.savedObjectsClient = savedObjectsClient;
Expand Down Expand Up @@ -186,16 +196,15 @@ export class IndexPatternsService {
};

make = (id?: string): Promise<IndexPattern> => {
const indexPattern = new IndexPattern(
id,
(cfg: any) => this.config.get(cfg),
this.savedObjectsClient,
this.apiClient,
indexPatternCache,
this.fieldFormats,
this.onNotification,
this.onError
);
const indexPattern = new IndexPattern(id, {
getConfig: (cfg: any) => this.config.get(cfg),
savedObjectsClient: this.savedObjectsClient,
apiClient: this.apiClient,
patternCache: indexPatternCache,
fieldFormats: this.fieldFormats,
onNotification: this.onNotification,
onError: this.onError,
});

return indexPattern.init();
};
Expand Down
16 changes: 10 additions & 6 deletions src/plugins/data/public/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,17 +164,21 @@ export class DataPublicPlugin implements Plugin<DataPublicPluginSetup, DataPubli
const fieldFormats = this.fieldFormatsService.start();
setFieldFormats(fieldFormats);

const indexPatterns = new IndexPatternsService(
const indexPatterns = new IndexPatternsService({
uiSettings,
savedObjects.client,
savedObjectsClient: savedObjects.client,
http,
fieldFormats,
(toastInputFields) => {
onNotification: (toastInputFields) => {
notifications.toasts.add(toastInputFields);
},
notifications.toasts.addError,
onRedirectNoIndexPattern(application.capabilities, application.navigateToApp, overlays)
);
onError: notifications.toasts.addError,
onRedirectNoIndexPattern: onRedirectNoIndexPattern(
application.capabilities,
application.navigateToApp,
overlays
),
});
setIndexPatterns(indexPatterns);

const query = this.queryService.start(savedObjects);
Expand Down
8 changes: 2 additions & 6 deletions src/plugins/data/public/public.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -978,12 +978,8 @@ export type IMetricAggType = MetricAggType;
//
// @public (undocumented)
export class IndexPattern implements IIndexPattern {
// Warning: (ae-forgotten-export) The symbol "IIndexPatternsApiClient" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "PatternCache" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "FieldFormatsStartCommon" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "OnNotification" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "OnError" needs to be exported by the entry point index.d.ts
constructor(id: string | undefined, getConfig: any, savedObjectsClient: SavedObjectsClientContract, apiClient: IIndexPatternsApiClient, patternCache: PatternCache, fieldFormats: FieldFormatsStartCommon, onNotification: OnNotification, onError: OnError);
// Warning: (ae-forgotten-export) The symbol "IndexPatternDeps" needs to be exported by the entry point index.d.ts
constructor(id: string | undefined, { getConfig, savedObjectsClient, apiClient, patternCache, fieldFormats, onNotification, onError, }: IndexPatternDeps);
// (undocumented)
[key: string]: any;
// (undocumented)
Expand Down

0 comments on commit 85ebaed

Please sign in to comment.