Fixes #11628 PR #6389 caused bug #11628, which is a regression, as it had already been fixed in #4441 It is likely that some things have changed because [Lexical had recently made improvements](https://github.com/facebook/lexical/pull/7046) to address selection normalization. Although it wasn't necessary to resolve the issue, I added a `NormalizeSelectionPlugin` to the editor, which makes selection handling in the editor more robust. I'm also adding a new collection to the Lexical test suite, intending it to be used by default for most tests going forward. I've left an explanatory comment on the dashboard. ___ Looking at #11628's video, it seems users also want to be able to prevent the first paragraph from being empty. This makes sense to me, so I think in another PR we could add a button at the top, just [like we did at the bottom of the editor](https://github.com/payloadcms/payload/pull/10530).
50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
import type { Page } from 'playwright'
|
|
|
|
import { expect } from '@playwright/test'
|
|
|
|
export class LexicalHelpers {
|
|
page: Page
|
|
constructor(page: Page) {
|
|
this.page = page
|
|
}
|
|
|
|
async save(container: 'document' | 'drawer') {
|
|
if (container === 'drawer') {
|
|
await this.drawer.getByText('Save').click()
|
|
} else {
|
|
throw new Error('Not implemented')
|
|
}
|
|
await this.page.waitForTimeout(1000)
|
|
}
|
|
|
|
async slashCommand(
|
|
// prettier-ignore
|
|
command: 'block' | 'check' | 'code' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' |'h6' | 'inline'
|
|
| 'link' | 'ordered' | 'paragraph' | 'quote' | 'relationship' | 'unordered' | 'upload',
|
|
) {
|
|
await this.page.keyboard.press(`/`)
|
|
|
|
const slashMenuPopover = this.page.locator('#slash-menu .slash-menu-popup')
|
|
await expect(slashMenuPopover).toBeVisible()
|
|
await this.page.keyboard.type(command)
|
|
await this.page.keyboard.press(`Enter`)
|
|
await expect(slashMenuPopover).toBeHidden()
|
|
}
|
|
|
|
get decorator() {
|
|
return this.editor.locator('[data-lexical-decorator="true"]')
|
|
}
|
|
|
|
get drawer() {
|
|
return this.page.locator('.drawer__content')
|
|
}
|
|
|
|
get editor() {
|
|
return this.page.locator('[data-lexical-editor="true"]')
|
|
}
|
|
|
|
get paragraph() {
|
|
return this.editor.locator('p')
|
|
}
|
|
}
|