/* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the "Elastic License * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side * Public License v 1"; you may not use this file except in compliance with, at * your election, the "Elastic License 2.0", the "GNU Affero General Public * License v3.0 only", or the "Server Side Public License, v 1". */ import React from 'react'; import ReactDOM from 'react-dom'; import { KBN_FIELD_TYPES } from '@kbn/field-types'; import { AppMountParameters, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; import { FieldFormatsSetup, FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { IndexPatternFieldEditorStart, IndexPatternFieldEditorSetup, } from '@kbn/data-view-field-editor-plugin/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { registerExampleFormat } from './examples/2_creating_custom_formatter'; import { App } from './app'; import { registerExampleFormatEditor } from './examples/3_creating_custom_format_editor'; import img from './formats.png'; interface SetupDeps { developerExamples: DeveloperExamplesSetup; fieldFormats: FieldFormatsSetup; dataViewFieldEditor: IndexPatternFieldEditorSetup; } interface StartDeps { fieldFormats: FieldFormatsStart; dataViewFieldEditor: IndexPatternFieldEditorStart; data: DataPublicPluginStart; } export class FieldFormatsExamplePlugin implements Plugin { public setup(core: CoreSetup, deps: SetupDeps) { registerExampleFormat(deps.fieldFormats); registerExampleFormatEditor(deps.dataViewFieldEditor); // just for demonstration purposes: // opens a field editor using default data view and first number field const openDateViewNumberFieldEditor = async () => { const [, plugins] = await core.getStartServices(); const dataView = await plugins.data.dataViews.getDefault(); if (!dataView) { alert('Create at least one data view to continue with this example'); return; } const numberField = dataView.fields .getAll() .find((f) => !f.name.startsWith('_') && f.type === KBN_FIELD_TYPES.NUMBER && !f.scripted); if (!numberField) { alert( 'Default data view needs at least a single field of type `number` to continue with this example' ); return; } plugins.dataViewFieldEditor.openEditor({ ctx: { dataView, }, fieldName: numberField.name, }); }; // Register an application into the side navigation menu core.application.register({ id: 'fieldFormatsExample', title: 'Field formats example', visibleIn: [], async mount({ element }: AppMountParameters) { const [, plugins] = await core.getStartServices(); ReactDOM.render( , element ); return () => ReactDOM.unmountComponentAtNode(element); }, }); // This section is only needed to get this example plugin to show up in our Developer Examples. deps.developerExamples.register({ appId: 'fieldFormatsExample', title: 'Field formats example', description: `Learn how to use an existing field formats or how to create a custom one`, image: img, }); } public start(core: CoreStart) { return {}; } public stop() {} }