Add var length operation (#245)

This commit is contained in:
Nikhil Rao 2023-01-10 18:13:22 -08:00 committed by GitHub
parent 51a635fe75
commit b40eafdbb0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 31 additions and 9 deletions

View File

@ -1 +1 @@
0.1.11 0.1.12

View File

@ -70,9 +70,6 @@ export const applyDelta = (state, delta) => {
*/ */
export const applyEvent = async (event, router, socket) => { export const applyEvent = async (event, router, socket) => {
// Handle special events // Handle special events
event.router_data = (({ pathname, query }) => ({ pathname, query }))(router);
if (event.name == "_redirect") { if (event.name == "_redirect") {
router.push(event.payload.path); router.push(event.payload.path);
return; return;
@ -90,6 +87,7 @@ export const applyEvent = async (event, router, socket) => {
// Send the event to the server. // Send the event to the server.
event.token = getToken(); event.token = getToken();
event.router_data = (({ pathname, query }) => ({ pathname, query }))(router);
if (socket) { if (socket) {
socket.send(JSON.stringify(event)); socket.send(JSON.stringify(event));
} }

View File

@ -439,6 +439,14 @@ class CustomComponent(Component):
type_ = props[key] type_ = props[key]
if utils._issubclass(type_, EventChain): if utils._issubclass(type_, EventChain):
value = self._create_event_chain(key, value) value = self._create_event_chain(key, value)
self.props[utils.to_camel_case(key)] = value
continue
type_ = utils.get_args(type_)[0]
if utils._issubclass(type_, Base):
try:
value = BaseVar(name=value.json(), type_=type_, is_local=True)
except:
value = Var.create(value)
else: else:
value = Var.create(value, is_string=type(value) is str) value = Var.create(value, is_string=type(value) is str)
self.props[utils.to_camel_case(key)] = value self.props[utils.to_camel_case(key)] = value
@ -480,7 +488,7 @@ class CustomComponent(Component):
return ( return (
{self} {self}
| super().get_custom_components() | super().get_custom_components()
| self.get_component().get_custom_components() # | self.get_component().get_custom_components()
) )
def _render(self) -> Tag: def _render(self) -> Tag:

View File

@ -261,15 +261,15 @@ class State(Base, ABC):
field.required = False field.required = False
field.default = default_value field.default = default_value
def get_current_page(cls) -> str: def get_current_page(self) -> str:
"""Obtain the path of current page from the router data. """Obtain the path of current page from the router data.
Returns: Returns:
The current page. The current page.
""" """
return cls.router_data.get("pathname", "") return self.router_data.get("pathname", "")
def get_query_params(cls) -> Dict[str, str]: def get_query_params(self) -> Dict[str, str]:
"""Obtain the query parameters for the queried page. """Obtain the query parameters for the queried page.
The query object contains both the URI parameters and the GET parameters. The query object contains both the URI parameters and the GET parameters.
@ -277,7 +277,7 @@ class State(Base, ABC):
Returns: Returns:
The dict of query parameters. The dict of query parameters.
""" """
return cls.router_data.get("query", {}) return self.router_data.get("query", {})
def __getattribute__(self, name: str) -> Any: def __getattribute__(self, name: str) -> Any:
"""Get the state var. """Get the state var.

View File

@ -279,6 +279,22 @@ class Var(ABC):
""" """
return self.operation(fn="Math.abs") return self.operation(fn="Math.abs")
def length(self) -> Var:
"""Get the length of a list var.
Returns:
A var with the absolute value.
Raises:
ValueError: If the var is not a list.
"""
if not utils._issubclass(self.type_, List):
raise ValueError(f"Cannot get length of non-list var {self}.")
return BaseVar(
name=f"{self.full_name}.length",
type_=int,
)
def __eq__(self, other: Var) -> Var: def __eq__(self, other: Var) -> Var:
"""Perform an equality comparison. """Perform an equality comparison.