From abb73fe6030ed7ef02cba0faab7765522eb1ac5b Mon Sep 17 00:00:00 2001 From: Nabil BENDAFI Date: Tue, 30 Jun 2020 16:43:14 +0200 Subject: [PATCH] Update for Kibana 7.6 https://www.elastic.co/guide/en/kibana/current/breaking-changes-7.6.html#_use_np_registry_instead_of_uiregistryfield_formats --- README.md | 14 ++++--- images/configuration.jpg | Bin 10212 -> 38334 bytes index.js | 9 ----- kibana.json | 10 +++++ package.json | 12 ++++-- public/country-flag.js | 80 --------------------------------------- public/country-flag.ts | 52 +++++++++++++++++++++++++ public/index.ts | 26 +++++++++++++ public/plugin.ts | 71 ++++++++++++++++++++++++++++++++++ public/types.ts | 21 ++++++++++ tsconfig.json | 7 ++++ 11 files changed, 205 insertions(+), 97 deletions(-) delete mode 100644 index.js create mode 100644 kibana.json delete mode 100644 public/country-flag.js create mode 100644 public/country-flag.ts create mode 100644 public/index.ts create mode 100644 public/plugin.ts create mode 100644 public/types.ts create mode 100644 tsconfig.json diff --git a/README.md b/README.md index 8c8f607..82b663b 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,16 @@ Older version: ### Usage Installation steps: ``` -$ cd KIBANA_HOME/plugins -$ git clone https://github.com/nabilbendafi/country-flag-fieldformatters.git country-flag-fieldformatters -$ cd country-flag-fieldformatters -$ npm install +$ git clone -b v7.6.2 https://github.com/elastic/kibana +$ cd kibana +$ git clone https://github.com/nabilbendafi/country-flag-fieldformatters.git plugins/country-flag-fieldformatters +$ cd plugins/country-flag-fieldformatters +$ yarn kbn bootstrap +$ yarn build ``` -or +This will provide a `build/country-flag-fieldformatters-X.X.X.zip` ready to be installed + +or install released plugin from Github. ``` $ bin/kibana-plugin install https://github.com/nabilbendafi/country-flag-fieldformatters/releases/download/v1.3.0/country-flag-fieldformatters-1.3.0.zip ``` diff --git a/images/configuration.jpg b/images/configuration.jpg index 82f4cef13cf33ff2a6ef7e2973ed6fb1bab78b5f..99f632af50eb4f988daed22ff82286f25176283b 100644 GIT binary patch literal 38334 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 A9smFU literal 10212 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 Qo8SJ0`TzTZBfBI23vbx<&;S4c diff --git a/index.js b/index.js deleted file mode 100644 index 0086e95..0000000 --- a/index.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = function (kibana) { - return new kibana.Plugin({ - name: 'country-flag-fieldformatters', - require: ['kibana'], - uiExports: { - fieldFormats: ['plugins/country-flag-fieldformatters/country-flag'] - } - }); -}; diff --git a/kibana.json b/kibana.json new file mode 100644 index 0000000..dd4f91f --- /dev/null +++ b/kibana.json @@ -0,0 +1,10 @@ +{ + "id": "countryFlag", + "version": "7.6.2", + "server": false, + "ui": true, + "requiredPlugins": [ + "data" + ], + "optionalPlugins": [] +} diff --git a/package.json b/package.json index 89dfd8a..971b6f8 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,12 @@ "description": "Field formatters plugin for Kibana that display country flag based on its 'ISO 3166-1 alpha-2' code.", "url": "https://github.com/nabilbendafi/country-flag-fieldformatters/issues", "author": "Nabil Bendafi ", + "main": "public/index.ts", "kibana": { "version": "7.3.0" }, "scripts": { + "kbn": "node ../../scripts/kbn", "start": "plugin-helpers start", "test:server": "plugin-helpers test:server", "test:browser": "plugin-helpers test:browser", @@ -21,14 +23,18 @@ "flag-icon-css": "2.8.0" }, "devDependencies": { - "@elastic/eslint-config-kibana": "0.0.2", - "@elastic/plugin-helpers": "^6.0.0", + "@elastic/eslint-config-kibana": "link:../../packages/eslint-config-kibana", + "@kbn/plugin-helpers": "link:../../packages/kbn-plugin-helpers", "babel-eslint": "^4.1.6", "babel-preset-es2015": "^6.3.13", "babel-register": "^6.4.3", "bluebird": "^3.1.5", "eslint": ">=4.18.2", "eslint-plugin-mocha": "^1.1.0", - "lodash": "^4.0.1" + "lodash": "^4.0.1", + "typescript": "4.0.2" + }, + "engines": { + "yarn": "^1.21.1" } } diff --git a/public/country-flag.js b/public/country-flag.js deleted file mode 100644 index 273371a..0000000 --- a/public/country-flag.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import _ from 'lodash'; - -import { FieldFormat } from '../../../src/legacy/ui/field_formats/field_format'; -import { fieldFormats } from 'ui/registry/field_formats'; - -function CountryFlagProvider(Private) { - - // Include CSS file from [flag-icon-css](https://www.npmjs.com/package/flag-icon-css) - require('flag-icon-css/css/flag-icon.css'); - - // Create a new FieldFormat type and inherit FieldFormat - class CountryFlag extends FieldFormat { - constructor(params) { - super(params); - } - } - - // The id of this field format - CountryFlag.id = 'country'; - // The title of the field format, shown to the user - CountryFlag.title = 'Country Flag'; - // An array of types, which this field formatter can be used for. - // You can only apply this field formatter to fields, that have one - // of the here specified types. Possible types are: - // number, boolean, date, ip, attachment, geo_point, geo_shape, string, murmur3 - // murmur3 (Murmur3 plugin hashes), unknown (unknown field type), - // conflict (fields that have different types in different indices matched by the index pattern) - CountryFlag.fieldType = [ - 'string', - 'unknown' - ]; - - /* - Will be used to render the field with this formatter. - If you specify a function, the return value will be rendered (without interpreting HTML in it). - If you specify an object, you can have a key html and a key text with a function as - a value. The text function works as if you would have specified only a function. The return value - of the function you applied to the html key, will be interpreted as HTML (as seen below). - The first argument to the function will be the value that should be rendered. - The second argument will be the field, that should be rendered. - The object contains information like the type (`field.type`), that you might want to use - if you want to render differently depending on the field's type. - This can also be undefined, e.g. when formatting the field in a visualization due to the aggregation - this information is lost. - */ - - CountryFlag.prototype._convert = { - text: function (value) { - return value; - }, - html: function (value) { - var html = ''; - return html; - } - }; - - return CountryFlag; -} - -// Register the provider to the field_formats registry -fieldFormats.register(CountryFlagProvider); diff --git a/public/country-flag.ts b/public/country-flag.ts new file mode 100644 index 0000000..8e2471c --- /dev/null +++ b/public/country-flag.ts @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import _ from 'lodash'; + +import { FieldFormat, KBN_FIELD_TYPES } from '../../../src/plugins/data/public'; + +// Include CSS file from [flag-icon-css](https://www.npmjs.com/package/flag-icon-css) +import 'flag-icon-css/css/flag-icon.css'; + +// Create a new FieldFormat type and inherit FieldFormat +export class CountryFlagFieldFormat extends FieldFormat { + // The id of this field format + static id = 'countryFlag'; + // The title of the field format, shown to the user + static title = 'Country Flag'; + // An array of types, which this field formatter can be used for. + // You can only apply this field formatter to fields, that have one + // of the here specified types. Possible types are: + // number, boolean, date, ip, attachment, geo_point, geo_shape, string, murmur3 + // murmur3 (Murmur3 plugin hashes), unknown (unknown field type), + // conflict (fields that have different types in different indices matched by the index pattern) + static fieldType = [ + KBN_FIELD_TYPES.STRING, + KBN_FIELD_TYPES.UNKNOWN + ]; + + textConvert = (value: string) => { + return value; + }; + + htmlConvert = (value: string) => { + var html = ''; + return html; + } +}; diff --git a/public/index.ts b/public/index.ts new file mode 100644 index 0000000..4d2ea5a --- /dev/null +++ b/public/index.ts @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { CountryFlagFieldFormatsPlugin } from './plugin'; + +export function plugin() { + return new CountryFlagFieldFormatsPlugin(); +} + +export { CountryFlagFieldFormatsPluginSetup, CountryFlagFieldFormatsPluginStart } from './types'; diff --git a/public/plugin.ts b/public/plugin.ts new file mode 100644 index 0000000..410528b --- /dev/null +++ b/public/plugin.ts @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + CoreSetup, + CoreStart, + Plugin, + PluginInitializerContext, +} from '../../../src/core/public'; +import { + DataPublicPluginStart, + DataPublicPluginSetup +} from '../../../src/plugins/data/public'; + +import { CountryFlagFieldFormat } from './country-flag'; + +import { CountryFlagFieldFormatsPluginSetup, CountryFlagFieldFormatsPluginStart } from './types'; + +interface CountryFlagFieldFormatsPluginSetupDeps { + data: DataPublicPluginSetup; +} + +interface CountryFlagFieldFormatsPluginStartDeps { + data: DataPublicPluginStart; +} + +export class CountryFlagFieldFormatsPlugin + implements Plugin { + + initializerContext: PluginInitializerContext; + + constructor(initializerContext: PluginInitializerContext) { + this.initializerContext = initializerContext; + } + + public setup( + core: CoreSetup, + { data }: CountryFlagFieldFormatsPluginSetupDeps + ): CountryFlagFieldFormatsPluginSetup { + data.fieldFormats.register([CountryFlagFieldFormat]); + + return {}; + } + + public start( + core: CoreStart, + { data }: CountryFlagFieldFormatsPluginStartDeps + ): CountryFlagFieldFormatsPluginStart { + data.fieldFormats.getType('countryFlag'); + + return {}; + } + + public stop() {} +} diff --git a/public/types.ts b/public/types.ts new file mode 100644 index 0000000..0b803c6 --- /dev/null +++ b/public/types.ts @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export interface CountryFlagFieldFormatsPluginSetup {} +export interface CountryFlagFieldFormatsPluginStart {} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..74b1fd0 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "include": [ + "server/**/*", + "public/**/*" + ] +}