Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions lib/datastar/server_sent_event_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,16 @@ class ServerSentEventGenerator

DEFAULT_SSE_RETRY_DURATION = 1000
DEFAULT_ELEMENTS_USE_VIEW_TRANSITIONS = false
DEFAULT_ELEMENTS_VIEW_TRANSITION_SELECTOR = ''
DEFAULT_ELEMENTS_NAMESPACE = 'html'
DEFAULT_PATCH_SIGNALS_ONLY_IF_MISSING = false

SELECTOR_DATALINE_LITERAL = 'selector'
MODE_DATALINE_LITERAL = 'mode'
ELEMENTS_DATALINE_LITERAL = 'elements'
USE_VIEW_TRANSITION_DATALINE_LITERAL = 'useViewTransition'
VIEW_TRANSITION_SELECTOR_DATALINE_LITERAL = 'viewTransitionSelector'
NAMESPACE_DATALINE_LITERAL = 'namespace'
SIGNALS_DATALINE_LITERAL = 'signals'
ONLY_IF_MISSING_DATALINE_LITERAL = 'onlyIfMissing'

Expand All @@ -56,6 +60,8 @@ class ServerSentEventGenerator
'retry' => DEFAULT_SSE_RETRY_DURATION,
MODE_DATALINE_LITERAL => DEFAULT_ELEMENT_PATCH_MODE,
USE_VIEW_TRANSITION_DATALINE_LITERAL => DEFAULT_ELEMENTS_USE_VIEW_TRANSITIONS,
VIEW_TRANSITION_SELECTOR_DATALINE_LITERAL => DEFAULT_ELEMENTS_VIEW_TRANSITION_SELECTOR,
NAMESPACE_DATALINE_LITERAL => DEFAULT_ELEMENTS_NAMESPACE,
ONLY_IF_MISSING_DATALINE_LITERAL => DEFAULT_PATCH_SIGNALS_ONLY_IF_MISSING,
}.freeze

Expand Down
44 changes: 44 additions & 0 deletions spec/dispatcher_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,50 @@ def wait_for_close(&)
expect(socket.lines).to eq([%(event: datastar-patch-elements\nid: 72\nretry: 2000\ndata: useViewTransition true\ndata: elements <div id="foo">\ndata: elements <span>hello</span>\ndata: elements </div>\n\n)])
end

it 'takes a viewTransitionSelector option' do
dispatcher.patch_elements(
%(<div id="foo">\n<span>hello</span>\n</div>),
view_transition_selector: '#main',
)
socket = TestSocket.new
dispatcher.response.body.call(socket)
expect(socket.open).to be(false)
expect(socket.lines).to eq([%(event: datastar-patch-elements\ndata: viewTransitionSelector #main\ndata: elements <div id="foo">\ndata: elements <span>hello</span>\ndata: elements </div>\n\n)])
end

it 'omits viewTransitionSelector if using default value' do
dispatcher.patch_elements(
%(<div id="foo">\n<span>hello</span>\n</div>),
view_transition_selector: '',
)
socket = TestSocket.new
dispatcher.response.body.call(socket)
expect(socket.open).to be(false)
expect(socket.lines).to eq([%(event: datastar-patch-elements\ndata: elements <div id="foo">\ndata: elements <span>hello</span>\ndata: elements </div>\n\n)])
end

it 'takes a namespace option' do
dispatcher.patch_elements(
%(<div id="foo">\n<span>hello</span>\n</div>),
namespace: 'svg',
)
socket = TestSocket.new
dispatcher.response.body.call(socket)
expect(socket.open).to be(false)
expect(socket.lines).to eq([%(event: datastar-patch-elements\ndata: namespace svg\ndata: elements <div id="foo">\ndata: elements <span>hello</span>\ndata: elements </div>\n\n)])
end

it 'omits namespace if using default value' do
dispatcher.patch_elements(
%(<div id="foo">\n<span>hello</span>\n</div>),
namespace: 'html',
)
socket = TestSocket.new
dispatcher.response.body.call(socket)
expect(socket.open).to be(false)
expect(socket.lines).to eq([%(event: datastar-patch-elements\ndata: elements <div id="foo">\ndata: elements <span>hello</span>\ndata: elements </div>\n\n)])
end

it 'omits retry if using default value' do
dispatcher.patch_elements(
%(<div id="foo">\n<span>hello</span>\n</div>\n),
Expand Down
Loading