From 1fae0a6ad55b2be890573d647a0fa4740ed56f9c Mon Sep 17 00:00:00 2001 From: Shefali Joshi Date: Mon, 22 Jul 2024 16:05:21 -0700 Subject: [PATCH] fix(#6812): Align Plot and Plan X-Axes in Time Strips (#7744) * DRAFT - alignment for axes * Use alignmentContext to manage tick widths instead of passing around as props * Remove log statements * Add ability to remove alignment widths for a given y axis * Fix computation of left margin and width of plan when in the timestrip * Remove excess padding when there is no left y axis * Use alignment composable to adjust left margin and width of time system axis * Fix now marker visibility * refactor: use built in `Map()` data structure * refactor: improve readability and conciseness * docs: improve jsdocs * refactor: move jsdoc typedefs to bottom of file * refactor: axis to use vue reactivity * fix: return alignment as an object of refs * alignmentMap needs to be shared state, move it out of the useAlignment composable. * Fix now marker offset * Add new visual test for time strips * update with animation stabilization * Fix failing test due to changed injected property (path -> objectPath) * change injected property from path to objectPath * Fix spelling * Remove unused arguments to function call --------- Co-authored-by: Jesse Mazzella Co-authored-by: Hill, John (ARC-TI)[KBR Wyle Services, LLC] --- .../planning-timestrip.visual.spec.js | 69 +++++++++ .../TelemetryFrame.vue | 2 +- .../plan/components/ActivityTimeline.vue | 45 +++++- src/plugins/plot/MctPlot.vue | 141 ++++------------- src/plugins/plot/MctTicks.vue | 29 +++- src/plugins/plot/PlotView.vue | 18 +-- src/plugins/plot/PlotViewProvider.js | 2 +- src/plugins/plot/axis/YAxis.vue | 60 +++----- src/plugins/plot/chart/MctChart.vue | 2 +- .../overlayPlot/OverlayPlotViewProvider.js | 2 +- src/plugins/plot/overlayPlot/pluginSpec.js | 4 +- src/plugins/plot/stackedPlot/StackedPlot.vue | 69 +++------ .../plot/stackedPlot/StackedPlotItem.vue | 17 +- .../stackedPlot/StackedPlotViewProvider.js | 2 +- .../stackedPlot/mixins/objectStyles-mixin.js | 2 +- src/plugins/plot/stackedPlot/pluginSpec.js | 2 +- src/plugins/timeline/TimelineViewLayout.vue | 21 ++- src/plugins/timeline/TimelineViewProvider.js | 4 +- src/ui/components/TimeSystemAxis.vue | 109 ++++++++----- src/ui/composables/alignmentContext.js | 145 ++++++++++++++++++ 20 files changed, 461 insertions(+), 284 deletions(-) create mode 100644 e2e/tests/visual-a11y/planning-timestrip.visual.spec.js create mode 100644 src/ui/composables/alignmentContext.js diff --git a/e2e/tests/visual-a11y/planning-timestrip.visual.spec.js b/e2e/tests/visual-a11y/planning-timestrip.visual.spec.js new file mode 100644 index 0000000000..897fa60213 --- /dev/null +++ b/e2e/tests/visual-a11y/planning-timestrip.visual.spec.js @@ -0,0 +1,69 @@ +/***************************************************************************** + * Open MCT, Copyright (c) 2014-2024, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT is licensed 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. + * + * Open MCT includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ + +import percySnapshot from '@percy/playwright'; +import fs from 'fs'; + +import { createDomainObjectWithDefaults, createPlanFromJSON } from '../../appActions.js'; +import { scanForA11yViolations, test } from '../../avpFixtures.js'; +import { waitForAnimations } from '../../baseFixtures.js'; +import { VISUAL_FIXED_URL } from '../../constants.js'; +import { setBoundsToSpanAllActivities } from '../../helper/planningUtils.js'; + +const examplePlanSmall2 = JSON.parse( + fs.readFileSync(new URL('../../test-data/examplePlans/ExamplePlan_Small2.json', import.meta.url)) +); + +test.describe('Visual - Time Strip @a11y', () => { + test.beforeEach(async ({ page }) => { + await page.goto(VISUAL_FIXED_URL, { waitUntil: 'domcontentloaded' }); + }); + test('Time Strip View', async ({ page, theme }) => { + const timeStrip = await createDomainObjectWithDefaults(page, { + type: 'Time Strip', + name: 'Time Strip Visual Test' + }); + await createPlanFromJSON(page, { + json: examplePlanSmall2, + parent: timeStrip.uuid + }); + await createDomainObjectWithDefaults(page, { + type: 'Sine Wave Generator', + parent: timeStrip.uuid + }); + await page.goto(VISUAL_FIXED_URL, { waitUntil: 'domcontentloaded' }); + + //This will indirectly modify the url such that the SWG is not rendered + await setBoundsToSpanAllActivities(page, examplePlanSmall2, timeStrip.url); + + //TODO Find a way to set the "now" activity line + + //This will stabilize the state of the test and allow the SWG to render as empty + await waitForAnimations(page.getByLabel('Plot Canvas')); + + await percySnapshot(page, `Time Strip View (theme: ${theme}) - With SWG and Plan`); + }); +}); + +test.afterEach(async ({ page }, testInfo) => { + await scanForA11yViolations(page, testInfo.title); +}); diff --git a/src/plugins/inspectorDataVisualization/TelemetryFrame.vue b/src/plugins/inspectorDataVisualization/TelemetryFrame.vue index 37f6a70ab9..23009d7581 100644 --- a/src/plugins/inspectorDataVisualization/TelemetryFrame.vue +++ b/src/plugins/inspectorDataVisualization/TelemetryFrame.vue @@ -74,7 +74,7 @@ export default { provide() { return { domainObject: this.telemetryObject, - path: this.path, + objectPath: this.path, renderWhenVisible: this.renderWhenVisible }; }, diff --git a/src/plugins/plan/components/ActivityTimeline.vue b/src/plugins/plan/components/ActivityTimeline.vue index 66047170ab..062b39ce36 100644 --- a/src/plugins/plan/components/ActivityTimeline.vue +++ b/src/plugins/plan/components/ActivityTimeline.vue @@ -25,7 +25,7 @@ {{ heading }}