Add var length operation (#245)
This commit is contained in:
parent
51a635fe75
commit
b40eafdbb0
@ -1 +1 @@
|
|||||||
0.1.11
|
0.1.12
|
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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:
|
||||||
|
@ -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.
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user