From 97b2ebc0bbb6da1570c6d4922ff150257e448075 Mon Sep 17 00:00:00 2001 From: David 'Epper' Marshall Date: Tue, 10 Oct 2023 16:29:01 -0400 Subject: [PATCH] Fix remaining `vue-compat` warnings (#6966) * PascalCase files * emit warnings * minor updates * merge conflict resolve pt 1 * part 2 * update to eventbus * eventbus spelling * fix: import * fix: eventBus injection * fix: import * fix(test): provide eventBus in overlay plot tests * refactor: EventBus as composable * chore: lint:fix * chore: require vue event hyphenation * fix: revert event renames * refactor: use PascalCase name * fix: ensure `$attrs` are properly bound * fix: emit `click` event from SearchComponent * chore: remove rules already included in `vue/vue3-recommended` ruleset * fix: remove `Vue` import * chore: remove unused files * fix: fix lint scripts and make them cross-platform * refactor: rename `DataImagery.vue` -> `ImageryInspectorView.vue` * refactor: rename `NumericData.vue` -> `NumericDataInspectorView.vue` * refactor: rename components * refactor: rename `GeneralIndicators.vue` -> `StatusIndicators.vue` * refactor: rename components --------- Co-authored-by: Jesse Mazzella --- .eslintrc.js | 17 +++--- example/simpleVuePlugin/HelloWorld.vue | 19 ------- example/simpleVuePlugin/plugin.js | 36 ------------- package.json | 5 +- src/MCT.js | 2 +- src/api/forms/FormController.js | 6 +-- src/api/forms/FormsAPI.js | 2 +- src/api/forms/components/FormProperties.vue | 9 ++-- src/api/forms/components/FormRow.vue | 5 +- .../components/controls/AutoCompleteField.vue | 3 +- .../controls/ClockDisplayFormatField.vue | 5 +- .../{Composite.vue => CompositeContainer.vue} | 5 +- .../components/controls/CompositeItem.vue | 5 +- .../{Datetime.vue => DatetimeField.vue} | 3 +- .../forms/components/controls/FileInput.vue | 7 +-- .../{Locator.vue => LocatorField.vue} | 3 +- .../forms/components/controls/NumberField.vue | 3 +- .../forms/components/controls/SelectField.vue | 3 +- .../components/controls/TextAreaField.vue | 3 +- .../forms/components/controls/TextField.vue | 3 +- src/api/forms/toggle-check-box-mixin.js | 3 +- .../{Menu.vue => MenuComponent.vue} | 0 src/api/menu/menu.js | 2 +- .../overlays/components/OverlayComponent.vue | 1 + src/plugins/LADTable/components/LadRow.vue | 3 +- src/plugins/LADTable/components/LadTable.vue | 10 ++-- src/plugins/charts/bar/BarGraphPlot.vue | 1 + .../charts/bar/inspector/SeriesOptions.vue | 2 +- .../charts/scatter/ScatterPlotForm.vue | 3 +- .../scatter/ScatterPlotWithUnderlay.vue | 1 + .../scatter/inspector/PlotOptionsEdit.vue | 2 +- src/plugins/charts/scatter/plugin.js | 2 +- src/plugins/clock/ClockViewProvider.js | 2 +- .../{Clock.vue => ClockComponent.vue} | 0 .../components/ConditionCollection.vue | 31 ++++++----- .../{Condition.vue => ConditionItem.vue} | 22 +++++--- .../condition/components/ConditionSet.vue | 13 ++--- .../{Criterion.vue => CriterionItem.vue} | 1 + src/plugins/condition/components/TestData.vue | 3 +- .../components/inspector/StyleEditor.vue | 1 + .../displayLayout/components/BoxView.vue | 5 +- .../components/DisplayLayout.vue | 10 ++-- .../displayLayout/components/EditMarquee.vue | 3 +- .../displayLayout/components/EllipseView.vue | 5 +- .../displayLayout/components/ImageView.vue | 5 +- .../displayLayout/components/LayoutFrame.vue | 3 +- .../displayLayout/components/LineView.vue | 5 +- .../components/SubobjectView.vue | 5 +- .../components/TelemetryView.vue | 9 ++-- .../displayLayout/components/TextView.vue | 5 +- .../FaultManagementListHeader.vue | 7 +-- .../FaultManagementListItem.vue | 9 ++-- .../FaultManagementListView.vue | 18 +++---- .../faultManagement/FaultManagementSearch.vue | 9 ++-- .../FaultManagementToolbar.vue | 5 +- .../filters/components/FilterField.vue | 14 +++-- .../filters/components/FilterObject.vue | 19 +++---- .../filters/components/FiltersView.vue | 4 +- .../filters/components/GlobalFilters.vue | 17 +++--- .../{Container.vue => ContainerComponent.vue} | 3 +- .../flexibleLayout/components/DropHint.vue | 1 + .../components/FlexibleLayout.vue | 2 +- .../{Frame.vue => FrameComponent.vue} | 0 .../components/ResizeHandle.vue | 1 + src/plugins/gauge/GaugePlugin.js | 2 +- src/plugins/gauge/GaugeViewProvider.js | 2 +- .../{Gauge.vue => GaugeComponent.vue} | 1 - .../gauge/components/GaugeFormController.vue | 5 +- .../{Compass.vue => CompassComponent.vue} | 1 + .../imagery/components/Compass/pluginSpec.js | 2 +- .../imagery/components/FilterSettings.vue | 3 +- .../imagery/components/ImageControls.vue | 40 ++++++++------ .../imagery/components/ImageThumbnail.vue | 1 + .../imagery/components/ImageryView.vue | 21 ++++---- .../imagery/components/LayerSettings.vue | 3 +- .../imagery/components/ZoomSettings.vue | 9 ++-- .../DataVisualization.vue | 16 +++--- .../{Imagery.vue => ImageryInspectorView.vue} | 0 ...cData.vue => NumericDataInspectorView.vue} | 2 +- .../annotations/tags/TagEditor.vue | 5 +- .../annotations/tags/TagSelection.vue | 7 +-- .../inspectorViews/elements/ElementItem.vue | 1 + .../elements/ElementItemGroup.vue | 1 + .../inspectorViews/elements/ElementsPool.vue | 2 +- .../elements/PlotElementsPool.vue | 2 +- .../{Location.vue => LocationComponent.vue} | 0 ...Properties.vue => PropertiesComponent.vue} | 2 +- .../properties/PropertiesViewProvider.js | 2 +- .../inspectorViews/styles/FontStyleEditor.vue | 1 + .../styles/SavedStyleSelector.vue | 1 + .../styles/StylesInspectorView.vue | 4 +- .../{Licenses.vue => LicensesComponent.vue} | 0 src/plugins/licenses/plugin.js | 2 +- src/plugins/notebook/NotebookViewProvider.js | 2 +- .../{Notebook.vue => NotebookComponent.vue} | 35 ++++++------- .../notebook/components/NotebookEmbed.vue | 5 +- .../notebook/components/NotebookEntry.vue | 21 +++++--- .../components/NotebookSnapshotContainer.vue | 2 +- .../notebook/components/PageCollection.vue | 19 +++---- .../notebook/components/PageComponent.vue | 7 +-- .../notebook/components/SearchResults.vue | 17 +++--- .../notebook/components/SectionCollection.vue | 15 +++--- .../notebook/components/SectionComponent.vue | 7 +-- .../{Sidebar.vue => SidebarComponent.vue} | 41 +++++++++------ .../components/NotificationsList.vue | 1 + src/plugins/plan/PlanViewProvider.js | 2 +- .../components/{Plan.vue => PlanView.vue} | 0 src/plugins/plan/pluginSpec.js | 2 +- src/plugins/plot/MctPlot.vue | 52 +++++++++++++------ src/plugins/plot/MctTicks.vue | 3 +- src/plugins/plot/{Plot.vue => PlotView.vue} | 40 ++++++++------ src/plugins/plot/PlotViewProvider.js | 2 +- src/plugins/plot/axis/XAxis.vue | 5 +- src/plugins/plot/axis/YAxis.vue | 9 ++-- src/plugins/plot/chart/MctChart.vue | 5 +- .../plot/inspector/PlotOptionsEdit.vue | 4 +- .../plot/inspector/forms/SeriesForm.vue | 9 ++-- .../plot/inspector/forms/YAxisForm.vue | 5 +- src/plugins/plot/legend/PlotLegend.vue | 7 +-- .../plot/legend/PlotLegendItemCollapsed.vue | 3 +- .../plot/legend/PlotLegendItemExpanded.vue | 3 +- .../overlayPlot/OverlayPlotViewProvider.js | 2 +- src/plugins/plot/overlayPlot/pluginSpec.js | 2 +- src/plugins/plot/pluginSpec.js | 2 +- src/plugins/plot/stackedPlot/StackedPlot.vue | 14 ++--- .../plot/stackedPlot/StackedPlotItem.vue | 37 ++++++++----- .../{Tabs.vue => TabsComponent.vue} | 0 src/plugins/tabs/tabs.js | 2 +- .../telemetryTable/TelemetryTableView.js | 23 +++++++- .../telemetryTable/components/SizingRow.vue | 1 + .../components/TableColumnHeader.vue | 20 ++++--- .../{Table.vue => TableComponent.vue} | 30 ++++++----- .../telemetryTable/components/TableRow.vue | 16 +++--- src/plugins/timeConductor/ConductorAxis.vue | 11 ++-- src/plugins/timeConductor/ConductorClock.vue | 3 +- .../{Conductor.vue => ConductorComponent.vue} | 18 +++---- .../timeConductor/ConductorInputsFixed.vue | 5 +- .../timeConductor/ConductorInputsRealtime.vue | 5 +- src/plugins/timeConductor/ConductorMode.vue | 3 +- src/plugins/timeConductor/ConductorPopUp.vue | 40 ++++++++------ src/plugins/timeConductor/DatePicker.vue | 1 + src/plugins/timeConductor/TimePopupFixed.vue | 1 + .../timeConductor/TimePopupRealtime.vue | 1 + .../independent/IndependentClock.vue | 3 +- .../independent/IndependentMode.vue | 3 +- .../independent/IndependentTimeConductor.vue | 11 ++-- src/plugins/timeConductor/plugin.js | 2 +- .../{Timelist.vue => TimelistComponent.vue} | 0 src/plugins/timelist/TimelistViewProvider.js | 2 +- .../timelist/inspector/EventProperties.vue | 1 + .../{Filtering.vue => FilteringComponent.vue} | 1 + .../inspector/TimelistPropertiesView.vue | 2 +- src/plugins/timer/TimerViewProvider.js | 2 +- .../{Timer.vue => TimerComponent.vue} | 0 .../viewLargeAction/viewLargeAction.js | 6 +-- src/ui/color/ColorSwatch.vue | 3 +- src/ui/components/List/ListHeader.vue | 1 + src/ui/components/ObjectView.vue | 1 + .../{Search.vue => SearchComponent.vue} | 31 +++++------ src/ui/components/ToggleSwitch.vue | 1 + src/ui/components/ViewControl.vue | 1 + .../{Inspector.vue => InspectorPanel.vue} | 0 src/ui/inspector/InspectorTabs.vue | 1 + src/ui/layout/{Layout.vue => AppLayout.vue} | 18 +++---- src/ui/layout/LayoutSpec.js | 2 +- src/ui/layout/MctTree.vue | 3 +- .../{Multipane.vue => MultipaneContainer.vue} | 0 src/ui/layout/{Pane.vue => PaneContainer.vue} | 1 + src/ui/layout/RecentObjectsList.vue | 9 ++-- src/ui/layout/RecentObjectsListItem.vue | 3 +- src/ui/layout/TreeItem.vue | 6 +++ src/ui/layout/ViewSwitcher.vue | 3 +- src/ui/layout/search/GrandSearch.vue | 2 +- src/ui/layout/search/ObjectSearchResult.vue | 1 + .../{Indicators.vue => StatusIndicators.vue} | 0 src/ui/preview/PreviewAction.js | 6 +-- .../{Preview.vue => PreviewContainer.vue} | 0 src/ui/preview/PreviewHeader.vue | 3 +- .../{Toolbar.vue => ToolbarContainer.vue} | 0 src/ui/toolbar/components/ToolbarButton.vue | 1 + src/ui/toolbar/components/ToolbarCheckbox.vue | 1 + .../toolbar/components/ToolbarColorPicker.vue | 1 + src/ui/toolbar/components/ToolbarInput.vue | 1 + src/ui/toolbar/components/ToolbarMenu.vue | 1 + .../toolbar/components/ToolbarSelectMenu.vue | 1 + .../components/ToolbarToggleButton.vue | 1 + src/utils/useEventBus.js | 19 +++++++ 187 files changed, 731 insertions(+), 533 deletions(-) delete mode 100644 example/simpleVuePlugin/HelloWorld.vue delete mode 100644 example/simpleVuePlugin/plugin.js rename src/api/forms/components/controls/{Composite.vue => CompositeContainer.vue} (94%) rename src/api/forms/components/controls/{Datetime.vue => DatetimeField.vue} (98%) rename src/api/forms/components/controls/{Locator.vue => LocatorField.vue} (96%) rename src/api/menu/components/{Menu.vue => MenuComponent.vue} (100%) rename src/plugins/clock/components/{Clock.vue => ClockComponent.vue} (100%) rename src/plugins/condition/components/{Condition.vue => ConditionItem.vue} (96%) rename src/plugins/condition/components/{Criterion.vue => CriterionItem.vue} (99%) rename src/plugins/flexibleLayout/components/{Container.vue => ContainerComponent.vue} (98%) rename src/plugins/flexibleLayout/components/{Frame.vue => FrameComponent.vue} (100%) rename src/plugins/gauge/components/{Gauge.vue => GaugeComponent.vue} (99%) rename src/plugins/imagery/components/Compass/{Compass.vue => CompassComponent.vue} (98%) rename src/plugins/inspectorDataVisualization/{Imagery.vue => ImageryInspectorView.vue} (100%) rename src/plugins/inspectorDataVisualization/{NumericData.vue => NumericDataInspectorView.vue} (99%) rename src/plugins/inspectorViews/properties/{Location.vue => LocationComponent.vue} (100%) rename src/plugins/inspectorViews/properties/{Properties.vue => PropertiesComponent.vue} (99%) rename src/plugins/licenses/{Licenses.vue => LicensesComponent.vue} (100%) rename src/plugins/notebook/components/{Notebook.vue => NotebookComponent.vue} (97%) rename src/plugins/notebook/components/{Sidebar.vue => SidebarComponent.vue} (88%) rename src/plugins/plan/components/{Plan.vue => PlanView.vue} (100%) rename src/plugins/plot/{Plot.vue => PlotView.vue} (88%) rename src/plugins/tabs/components/{Tabs.vue => TabsComponent.vue} (100%) rename src/plugins/telemetryTable/components/{Table.vue => TableComponent.vue} (97%) rename src/plugins/timeConductor/{Conductor.vue => ConductorComponent.vue} (96%) rename src/plugins/timelist/{Timelist.vue => TimelistComponent.vue} (100%) rename src/plugins/timelist/inspector/{Filtering.vue => FilteringComponent.vue} (99%) rename src/plugins/timer/components/{Timer.vue => TimerComponent.vue} (100%) rename src/ui/components/{Search.vue => SearchComponent.vue} (74%) rename src/ui/inspector/{Inspector.vue => InspectorPanel.vue} (100%) rename src/ui/layout/{Layout.vue => AppLayout.vue} (94%) rename src/ui/layout/{Multipane.vue => MultipaneContainer.vue} (100%) rename src/ui/layout/{Pane.vue => PaneContainer.vue} (99%) rename src/ui/layout/status-bar/{Indicators.vue => StatusIndicators.vue} (100%) rename src/ui/preview/{Preview.vue => PreviewContainer.vue} (100%) rename src/ui/toolbar/{Toolbar.vue => ToolbarContainer.vue} (100%) create mode 100644 src/utils/useEventBus.js diff --git a/.eslintrc.js b/.eslintrc.js index 66e1c13ae4..9408c0a069 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -145,29 +145,26 @@ module.exports = { 'no-implicit-coercion': 'error', //https://eslint.org/docs/rules/no-unneeded-ternary 'no-unneeded-ternary': 'error', - "unicorn/filename-case": [ - "error", + 'unicorn/filename-case': [ + 'error', { - "cases": { - "pascalCase": true + cases: { + pascalCase: true }, - "ignore": [ - "^.*\\.js$" - ] + ignore: ['^.*\\.js$'] } ], 'vue/first-attribute-linebreak': 'error', 'vue/multiline-html-element-content-newline': 'off', 'vue/singleline-html-element-content-newline': 'off', - 'vue/multi-word-component-names': 'off', // TODO enable, align with conventions - 'vue/no-mutating-props': 'off' + 'vue/no-mutating-props': 'off' // TODO: Remove this rule and fix resulting errors }, overrides: [ { files: LEGACY_FILES, rules: { 'no-unused-vars': [ - 'warn', + 'error', { vars: 'all', args: 'none', diff --git a/example/simpleVuePlugin/HelloWorld.vue b/example/simpleVuePlugin/HelloWorld.vue deleted file mode 100644 index dc6b4272cc..0000000000 --- a/example/simpleVuePlugin/HelloWorld.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - - - diff --git a/example/simpleVuePlugin/plugin.js b/example/simpleVuePlugin/plugin.js deleted file mode 100644 index 9ff73043f8..0000000000 --- a/example/simpleVuePlugin/plugin.js +++ /dev/null @@ -1,36 +0,0 @@ -import Vue from 'vue'; - -import HelloWorld from './HelloWorld.vue'; - -function SimpleVuePlugin() { - return function install(openmct) { - openmct.types.addType('hello-world', { - name: 'Hello World', - description: 'An introduction object', - creatable: true - }); - openmct.objectViews.addProvider({ - name: 'demo-provider', - key: 'hello-world', - cssClass: 'icon-packet', - canView: function (d) { - return d.type === 'hello-world'; - }, - view: function (domainObject) { - var vm; - - return { - show: function (container) { - vm = new Vue(HelloWorld); - container.appendChild(vm.$mount().$el); - }, - destroy: function (container) { - //vm.$destroy(); - } - }; - } - }); - }; -} - -export default SimpleVuePlugin; diff --git a/package.json b/package.json index 0f18f327b0..7584141d5b 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "sass-loader": "13.3.2", "sinon": "15.1.0", "style-loader": "3.3.3", + "tiny-emitter": "2.1.0", "typescript": "5.2.2", "uuid": "9.0.0", "vue": "3.3.4", @@ -85,8 +86,8 @@ "start": "npx webpack serve --config ./.webpack/webpack.dev.js", "start:prod": "npx webpack serve --config ./.webpack/webpack.prod.js", "start:coverage": "npx webpack serve --config ./.webpack/webpack.coverage.js", - "lint:js": "eslint example src e2e --ext .js openmct.js --max-warnings=0", - "lint:vue": "eslint example src --ext .vue", + "lint:js": "eslint \"example/**/*.js\" \"src/**/*.js\" \"e2e/**/*.js\" \"openmct.js\" --max-warnings=0", + "lint:vue": "eslint \"src/**/*.vue\"", "lint:spelling": "cspell \"**/*.{js,md,vue}\" --show-context --gitignore --quiet", "lint": "run-p \"lint:js -- {1}\" \"lint:vue -- {1}\" \"lint:spelling -- {1}\" --", "lint:fix": "eslint example src e2e --ext .js,.vue openmct.js --fix", diff --git a/src/MCT.js b/src/MCT.js index 199e2f61fc..9fa755d7a3 100644 --- a/src/MCT.js +++ b/src/MCT.js @@ -33,7 +33,7 @@ define([ './ui/registries/ToolbarRegistry', './ui/router/ApplicationRouter', './ui/router/Browse', - './ui/layout/Layout.vue', + './ui/layout/AppLayout.vue', './ui/preview/plugin', './api/Branding', './plugins/licenses/plugin', diff --git a/src/api/forms/FormController.js b/src/api/forms/FormController.js index eb608e0f7e..4c946573c9 100644 --- a/src/api/forms/FormController.js +++ b/src/api/forms/FormController.js @@ -3,9 +3,9 @@ import mount from 'utils/mount'; import AutoCompleteField from './components/controls/AutoCompleteField.vue'; import CheckBoxField from './components/controls/CheckBoxField.vue'; import ClockDisplayFormatField from './components/controls/ClockDisplayFormatField.vue'; -import Datetime from './components/controls/Datetime.vue'; +import Datetime from './components/controls/DatetimeField.vue'; import FileInput from './components/controls/FileInput.vue'; -import Locator from './components/controls/Locator.vue'; +import Locator from './components/controls/LocatorField.vue'; import NumberField from './components/controls/NumberField.vue'; import SelectField from './components/controls/SelectField.vue'; import TextAreaField from './components/controls/TextAreaField.vue'; @@ -87,7 +87,7 @@ export default class FormControl { onChange }; }, - template: `` + template: `` }, { element, diff --git a/src/api/forms/FormsAPI.js b/src/api/forms/FormsAPI.js index 367aca18a1..0564a2cc1c 100644 --- a/src/api/forms/FormsAPI.js +++ b/src/api/forms/FormsAPI.js @@ -171,7 +171,7 @@ export default class FormsAPI { }; }, template: - '' + '' }, { element, diff --git a/src/api/forms/components/FormProperties.vue b/src/api/forms/components/FormProperties.vue index b4c0676b45..71fc0cb33f 100644 --- a/src/api/forms/components/FormProperties.vue +++ b/src/api/forms/components/FormProperties.vue @@ -44,7 +44,7 @@ :css-class="row.cssClass" :first="index < 1" :row="row" - @onChange="onChange" + @on-change="onChange" /> @@ -94,6 +94,7 @@ export default { } } }, + emits: ['on-change', 'on-save', 'on-cancel'], data() { return { invalidProperties: {}, @@ -144,13 +145,13 @@ export default { onChange(data) { this.invalidProperties[data.model.key] = data.invalid; - this.$emit('onChange', data); + this.$emit('on-change', data); }, onCancel() { - this.$emit('onCancel'); + this.$emit('on-cancel'); }, onSave() { - this.$emit('onSave'); + this.$emit('on-save'); } } }; diff --git a/src/api/forms/components/FormRow.vue b/src/api/forms/components/FormRow.vue index ccff26a7fb..1cf2496825 100644 --- a/src/api/forms/components/FormRow.vue +++ b/src/api/forms/components/FormRow.vue @@ -21,7 +21,7 @@ --> @@ -46,12 +46,13 @@ export default { required: true } }, + emits: ['on-change'], mounted() { this.model.items.forEach((item, index) => (item.key = `${this.model.key}.${index}`)); }, methods: { onChange(data) { - this.$emit('onChange', data); + this.$emit('on-change', data); } } }; diff --git a/src/api/forms/components/controls/CompositeItem.vue b/src/api/forms/components/controls/CompositeItem.vue index 42ab07d025..c94b26d07e 100644 --- a/src/api/forms/components/controls/CompositeItem.vue +++ b/src/api/forms/components/controls/CompositeItem.vue @@ -22,7 +22,7 @@