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.
* @param name The name of the event.
* @param payload The payload of the event.
* @param handler The client handler to process event.
* @param {string} name The name of the event.
* @param {Object.<string, Any>} payload The payload of the 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.
*/
export const Event = (name, payload = {}, handler = null) => {
return { name, payload, handler };
export const Event = (
name,
payload = {},
event_actions = {},
handler = null
) => {
return { name, payload, handler, event_actions };
};
/**
@ -676,6 +682,12 @@ export const useEventLoop = (
if (!(args instanceof Array)) {
args = [args];
}
const event_actions = events.reduce(
(acc, e) => ({ ...acc, ...e.event_actions }),
event_actions
);
const _e = args.filter((o) => o?.preventDefault !== undefined)[0];
if (event_actions?.preventDefault && _e?.preventDefault) {

View File

@ -589,24 +589,18 @@ class Component(BaseComponent, ABC):
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.
if isinstance(args_spec, Var):
return EventChain(
events=events,
args_spec=None,
event_actions=event_actions,
event_actions={},
)
else:
return EventChain(
events=events,
args_spec=args_spec,
event_actions=event_actions,
event_actions={},
)
def get_event_triggers(self) -> Dict[str, Any]:

View File

@ -1167,20 +1167,25 @@ class LiteralEventVar(CachedVarOperation, LiteralVar, EventVar):
Returns:
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(
FunctionStringVar("Event").call(
event_name,
event_args,
*([event_client_name] if self._var_value.client_handler_name else []),
# event handler name
".".join(
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]
),
arg_def_expr,
LiteralVar.create(self._var_value.event_actions),
),
)
)