change the way we're handling event actions

This commit is contained in:
Khaleel Al-Adhami 2024-10-01 16:29:08 -07:00
parent 4ceb07c4bc
commit 42a7fb2f39
3 changed files with 36 additions and 26 deletions

View File

@ -544,13 +544,19 @@ export const uploadFiles = async (
/** /**
* Create an event object. * Create an event object.
* @param name The name of the event. * @param {string} name The name of the event.
* @param payload The payload of the event. * @param {Object.<string, Any>} payload The payload of the event.
* @param handler The client handler to process event. * @param {Object.<string, (number|boolean)>} event_actions The actions to take on the event.
* @param {string} handler The client handler to process event.
* @returns The event object. * @returns The event object.
*/ */
export const Event = (name, payload = {}, handler = null) => { export const Event = (
return { name, payload, handler }; name,
payload = {},
event_actions = {},
handler = null
) => {
return { name, payload, handler, event_actions };
}; };
/** /**
@ -676,6 +682,12 @@ export const useEventLoop = (
if (!(args instanceof Array)) { if (!(args instanceof Array)) {
args = [args]; args = [args];
} }
const event_actions = events.reduce(
(acc, e) => ({ ...acc, ...e.event_actions }),
event_actions
);
const _e = args.filter((o) => o?.preventDefault !== undefined)[0]; const _e = args.filter((o) => o?.preventDefault !== undefined)[0];
if (event_actions?.preventDefault && _e?.preventDefault) { if (event_actions?.preventDefault && _e?.preventDefault) {

View File

@ -589,24 +589,18 @@ class Component(BaseComponent, ABC):
for e in events for e in events
] ]
# Collect event_actions from each spec
event_actions = {}
for e in events:
if isinstance(e, EventSpec):
event_actions.update(e.event_actions)
# Return the event chain. # Return the event chain.
if isinstance(args_spec, Var): if isinstance(args_spec, Var):
return EventChain( return EventChain(
events=events, events=events,
args_spec=None, args_spec=None,
event_actions=event_actions, event_actions={},
) )
else: else:
return EventChain( return EventChain(
events=events, events=events,
args_spec=args_spec, args_spec=args_spec,
event_actions=event_actions, event_actions={},
) )
def get_event_triggers(self) -> Dict[str, Any]: def get_event_triggers(self) -> Dict[str, Any]:

View File

@ -1167,20 +1167,25 @@ class LiteralEventVar(CachedVarOperation, LiteralVar, EventVar):
Returns: Returns:
The name of the var. The name of the var.
""" """
event_name = LiteralVar.create(
".".join(
filter(None, format.get_event_handler_parts(self._var_value.handler))
)
)
event_args = LiteralVar.create(
{str(name): value for name, value in self._var_value.args}
)
event_client_name = LiteralVar.create(self._var_value.client_handler_name)
return str( return str(
FunctionStringVar("Event").call( FunctionStringVar("Event").call(
event_name, # event handler name
event_args, ".".join(
*([event_client_name] if self._var_value.client_handler_name else []), filter(
None,
format.get_event_handler_parts(self._var_value.handler),
)
),
# event handler args
{str(name): value for name, value in self._var_value.args},
# event actions
self._var_value.event_actions,
# client handler name
*(
[self._var_value.client_handler_name]
if self._var_value.client_handler_name
else []
),
) )
) )
@ -1254,7 +1259,6 @@ class LiteralEventChainVar(CachedVarOperation, LiteralVar, EventChainVar):
[LiteralVar.create(event) for event in self._var_value.events] [LiteralVar.create(event) for event in self._var_value.events]
), ),
arg_def_expr, arg_def_expr,
LiteralVar.create(self._var_value.event_actions),
), ),
) )
) )