feat(视口): 支持恢复受控缩放范围
All checks were successful
Package component / package (push) Successful in 4m38s
All checks were successful
Package component / package (push) Successful in 4m38s
This commit is contained in:
@@ -119,6 +119,108 @@ describe('WaveformChart viewport reset', () => {
|
||||
expect(wrapper.findAll('.waveform-chart__axis-endpoint--end')[0].text()).toBe('1000')
|
||||
})
|
||||
|
||||
it('keeps a controlled shared viewport when the data reference changes', async () => {
|
||||
const wrapper = await mountSizedChart(
|
||||
{
|
||||
kind: 'points',
|
||||
points: [
|
||||
{ x: 0, y: 0 },
|
||||
{ x: 1, y: 1 },
|
||||
],
|
||||
},
|
||||
{ displayMode: 'separated' },
|
||||
)
|
||||
const chart = wrapper.vm as unknown as {
|
||||
setViewportDomain: (domain: [number, number], trackIndex?: number) => void
|
||||
}
|
||||
chart.setViewportDomain([0.25, 0.75])
|
||||
await flushPromises()
|
||||
|
||||
const startBefore = Number(wrapper.get('.waveform-chart__axis-endpoint--start').text())
|
||||
const endBefore = Number(wrapper.get('.waveform-chart__axis-endpoint--end').text())
|
||||
expect(startBefore).toBeGreaterThan(0)
|
||||
expect(endBefore).toBeLessThan(1000)
|
||||
|
||||
await wrapper.setProps({
|
||||
data: {
|
||||
kind: 'points',
|
||||
points: [
|
||||
{ x: 0, y: 10 },
|
||||
{ x: 1, y: 11 },
|
||||
],
|
||||
},
|
||||
})
|
||||
await flushPromises()
|
||||
|
||||
expect(Number(wrapper.get('.waveform-chart__axis-endpoint--start').text())).toBeCloseTo(
|
||||
startBefore,
|
||||
10,
|
||||
)
|
||||
expect(Number(wrapper.get('.waveform-chart__axis-endpoint--end').text())).toBeCloseTo(
|
||||
endBefore,
|
||||
10,
|
||||
)
|
||||
})
|
||||
|
||||
it('keeps independently controlled track viewports when the data reference changes', async () => {
|
||||
const wrapper = await mountSizedChart(gridSeries(2), {
|
||||
displayMode: 'independent',
|
||||
grid: { rowCount: 1, columnCount: 2 },
|
||||
})
|
||||
const chart = wrapper.vm as unknown as {
|
||||
setViewportDomain: (domain: [number, number], trackIndex?: number) => void
|
||||
}
|
||||
chart.setViewportDomain([0.2, 0.8], 0)
|
||||
chart.setViewportDomain([0.1, 0.9], 1)
|
||||
await flushPromises()
|
||||
|
||||
const endpoints = () =>
|
||||
wrapper.findAll('.waveform-chart__track').map((track) => ({
|
||||
start: track.get('.waveform-chart__axis-endpoint--start').text(),
|
||||
end: track.get('.waveform-chart__axis-endpoint--end').text(),
|
||||
}))
|
||||
const endpointsBefore = endpoints()
|
||||
expect(Number(endpointsBefore[0].start)).toBeGreaterThan(0)
|
||||
expect(Number(endpointsBefore[0].end)).toBeLessThan(1000)
|
||||
expect(Number(endpointsBefore[1].start)).toBeGreaterThan(0)
|
||||
expect(Number(endpointsBefore[1].end)).toBeLessThan(1000)
|
||||
|
||||
await wrapper.setProps({ data: gridSeries(2) })
|
||||
await flushPromises()
|
||||
|
||||
const endpointsAfter = endpoints()
|
||||
endpointsAfter.forEach((endpoint, index) => {
|
||||
expect(Number(endpoint.start)).toBeCloseTo(Number(endpointsBefore[index].start), 10)
|
||||
expect(Number(endpoint.end)).toBeCloseTo(Number(endpointsBefore[index].end), 10)
|
||||
})
|
||||
})
|
||||
|
||||
it('ignores invalid domains and applies viewport constraints', async () => {
|
||||
const wrapper = await mountSizedChart(
|
||||
{
|
||||
kind: 'points',
|
||||
points: [
|
||||
{ x: 0, y: 0 },
|
||||
{ x: 1, y: 1 },
|
||||
],
|
||||
},
|
||||
{ displayMode: 'separated', minZoomSpan: 0.2 },
|
||||
)
|
||||
const chart = wrapper.vm as unknown as {
|
||||
setViewportDomain: (domain: [number, number], trackIndex?: number) => void
|
||||
}
|
||||
chart.setViewportDomain([Number.NaN, 0.5])
|
||||
await flushPromises()
|
||||
expect(wrapper.get('.waveform-chart__axis-endpoint--start').text()).toBe('0')
|
||||
expect(wrapper.get('.waveform-chart__axis-endpoint--end').text()).toBe('1000')
|
||||
|
||||
chart.setViewportDomain([0.49, 0.51])
|
||||
await flushPromises()
|
||||
const start = Number(wrapper.get('.waveform-chart__axis-endpoint--start').text())
|
||||
const end = Number(wrapper.get('.waveform-chart__axis-endpoint--end').text())
|
||||
expect(end - start).toBeGreaterThanOrEqual(200)
|
||||
})
|
||||
|
||||
it('resets shared and independent explicit domains to their included nice bounds', async () => {
|
||||
const shared = await mountSizedChart(
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user