mirror of
https://git.shipoclu.com/moon/plspace.git
synced 2026-08-13 02:42:30 +00:00
public profile editing
This commit is contained in:
@@ -188,10 +188,23 @@
|
||||
busy = false
|
||||
}
|
||||
}
|
||||
|
||||
function composerShortcuts(form: HTMLFormElement): { destroy(): void } {
|
||||
function keydown(event: KeyboardEvent): void {
|
||||
if (event.key !== 'Enter' || (!event.metaKey && !event.ctrlKey)) return
|
||||
event.preventDefault()
|
||||
if (canPost) form.requestSubmit()
|
||||
}
|
||||
|
||||
form.addEventListener('keydown', keydown)
|
||||
return {
|
||||
destroy: () => form.removeEventListener('keydown', keydown),
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if session.signedIn}
|
||||
<form class="composer" onsubmit={submit}>
|
||||
<form class="composer" onsubmit={submit} use:composerShortcuts>
|
||||
{#if error}
|
||||
<p class="error-note" role="alert">{error}</p>
|
||||
{/if}
|
||||
@@ -329,7 +342,12 @@
|
||||
|
||||
<span class="composer-counter" data-over={remaining < 0 ? 'true' : 'false'}>{remaining}</span>
|
||||
|
||||
<button class="button button--primary" type="submit" disabled={!canPost}>
|
||||
<button
|
||||
class="button button--primary"
|
||||
type="submit"
|
||||
disabled={!canPost}
|
||||
title="Submit (Command+Enter or Ctrl+Enter)"
|
||||
>
|
||||
{busy ? 'Posting…' : submitLabel}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -79,4 +79,27 @@ describe('Composer', () => {
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
it.each([
|
||||
['Command+Enter', { metaKey: true }],
|
||||
['Ctrl+Enter', { ctrlKey: true }],
|
||||
])('submits with %s from the focused compose field', async (_label, modifier) => {
|
||||
const postStatus = vi.fn().mockResolvedValue(status())
|
||||
const services = testServices({
|
||||
session: session({ token: 'token', me: account(), signedIn: true }),
|
||||
endpoints: { postStatus },
|
||||
})
|
||||
const view = render(Composer, {
|
||||
props: { initialText: 'Keyboard-posted entry' },
|
||||
context: new Map([[APP_SERVICES, services]]),
|
||||
})
|
||||
|
||||
await fireEvent.keyDown(view.getByRole('textbox', { name: 'Entry text' }), {
|
||||
key: 'Enter',
|
||||
...modifier,
|
||||
})
|
||||
|
||||
await waitFor(() => expect(postStatus).toHaveBeenCalledOnce())
|
||||
expect(postStatus.mock.calls[0][1].status).toBe('Keyboard-posted entry')
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user