Skip to content

Commit

Permalink
Moving ftd::interpreter::Component related struct
Browse files Browse the repository at this point in the history
  • Loading branch information
Arpita-Jaiswal committed Nov 13, 2024
1 parent 55729af commit 8640c0a
Show file tree
Hide file tree
Showing 14 changed files with 627 additions and 457 deletions.
2 changes: 2 additions & 0 deletions ftd/src/executor/dummy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ impl DummyElement {
inherited_variables: &mut ftd::VecMap<(String, Vec<usize>)>,
found_elements: &mut std::collections::HashSet<String>,
) -> ftd::executor::Result<ftd::executor::Element> {
use ftd::executor::fastn_type_functions::ComponentExt;

if let Some(iteration) = instruction.iteration.take() {
return Ok(ftd::executor::Element::IterativeElement(
ftd::executor::IterativeElement {
Expand Down
4 changes: 2 additions & 2 deletions ftd/src/executor/element.rs
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ impl ImageSrc {
doc: &ftd::executor::TDoc,
line_number: usize,
) -> ftd::executor::Result<ImageSrc> {
use ftd::executor::fastn_type_functions::PropertyValueExt as _;
use ftd::executor::fastn_type_functions::{PropertySourceExt, PropertyValueExt as _};
use ftd::interpreter::{PropertyValueExt, ValueExt};

let light = {
Expand Down Expand Up @@ -388,7 +388,7 @@ impl RawImage {
doc: &ftd::executor::TDoc,
line_number: usize,
) -> ftd::executor::Result<RawImage> {
use ftd::executor::fastn_type_functions::PropertyValueExt as _;
use ftd::executor::fastn_type_functions::{PropertySourceExt, PropertyValueExt as _};
use ftd::interpreter::{PropertyValueExt, ValueExt};

let src = {
Expand Down
69 changes: 69 additions & 0 deletions ftd/src/executor/fastn_type_functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,72 @@ impl PropertyValueExt for fastn_type::PropertyValue {
}
}
}

pub(crate) trait ComponentExt {
fn get_children(
&self,
doc: &ftd::interpreter::TDoc,
) -> ftd::interpreter::Result<Vec<fastn_type::Component>>;
fn get_children_property(&self) -> Option<fastn_type::Property>;
fn get_children_properties(&self) -> Vec<fastn_type::Property>;
fn is_variable(&self) -> bool;
}

impl ComponentExt for fastn_type::Component {
fn get_children(
&self,
doc: &ftd::interpreter::TDoc,
) -> ftd::interpreter::Result<Vec<fastn_type::Component>> {
use ftd::interpreter::PropertyValueExt;

let property = if let Some(property) = self.get_children_property() {
property
} else {
return Ok(vec![]);
};

let value = property.value.clone().resolve(doc, property.line_number)?;
if let fastn_type::Value::UI { component, .. } = value {
return Ok(vec![component]);
}
if let fastn_type::Value::List { data, kind } = value {
if kind.is_ui() {
let mut children = vec![];
for value in data {
let value = value.resolve(doc, property.line_number)?;
if let fastn_type::Value::UI { component, .. } = value {
children.push(component);
}
}
return Ok(children);
}
}

Ok(vec![])
}

fn get_children_property(&self) -> Option<fastn_type::Property> {
self.get_children_properties().first().map(|v| v.to_owned())
}

fn get_children_properties(&self) -> Vec<fastn_type::Property> {
ftd::interpreter::utils::get_children_properties_from_properties(&self.properties)
}

fn is_variable(&self) -> bool {
self.source.eq(&fastn_type::ComponentSource::Variable)
}
}

pub(crate) trait PropertySourceExt {
fn header(name: &str) -> fastn_type::PropertySource;
}

impl PropertySourceExt for fastn_type::PropertySource {
fn header(name: &str) -> fastn_type::PropertySource {
fastn_type::PropertySource::Header {
name: name.to_string(),
mutable: false,
}
}
}
3 changes: 3 additions & 0 deletions ftd/src/executor/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,8 @@ impl ExecuteDoc<'_> {
start_index: usize,
inherited_variables: &mut ftd::VecMap<(String, Vec<usize>)>,
) -> ftd::executor::Result<Vec<(Option<String>, Vec<usize>, fastn_type::Component)>> {
use ftd::js::fastn_type_functions::ComponentExt;

if instruction.is_loop() {
ExecuteDoc::get_loop_instructions(
instruction,
Expand Down Expand Up @@ -436,6 +438,7 @@ impl ExecuteDoc<'_> {
instructions: &[fastn_type::Component],
doc: &mut ftd::executor::TDoc,
) -> ftd::executor::Result<Vec<ftd::executor::Element>> {
use ftd::executor::fastn_type_functions::ComponentExt;
use ftd::interpreter::{PropertyValueExt, ValueExt};

let mut elements = vec![];
Expand Down
14 changes: 8 additions & 6 deletions ftd/src/executor/styles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -458,8 +458,9 @@ impl BreakpointWidth {
doc: &ftd::executor::TDoc,
line_number: usize,
) -> ftd::executor::Result<BreakpointWidth> {
use ftd::executor::fastn_type_functions::PropertyValueExt as _;
use ftd::executor::fastn_type_functions::{PropertySourceExt, PropertyValueExt as _};
use ftd::interpreter::{PropertyValueExt, ValueExt};

let get_property_value = |field_name: &str| {
values
.get(field_name)
Expand Down Expand Up @@ -935,7 +936,7 @@ impl BackgroundImage {
doc: &ftd::executor::TDoc,
line_number: usize,
) -> ftd::executor::Result<ftd::executor::BackgroundImage> {
use ftd::executor::fastn_type_functions::PropertyValueExt;
use ftd::executor::fastn_type_functions::{PropertySourceExt, PropertyValueExt};

let get_property_value = |field_name: &str| {
values
Expand Down Expand Up @@ -1109,7 +1110,7 @@ impl LinearGradientColor {
doc: &ftd::executor::TDoc,
line_number: usize,
) -> ftd::executor::Result<LinearGradientColor> {
use ftd::executor::fastn_type_functions::PropertyValueExt;
use ftd::executor::fastn_type_functions::{PropertySourceExt, PropertyValueExt};

let get_property_value = |field_name: &str| {
values
Expand Down Expand Up @@ -1332,7 +1333,8 @@ impl LinearGradient {
doc: &ftd::executor::TDoc,
line_number: usize,
) -> ftd::executor::Result<ftd::executor::LinearGradient> {
use ftd::executor::fastn_type_functions::PropertyValueExt;
use ftd::executor::fastn_type_functions::{PropertySourceExt, PropertyValueExt};

let get_property_value = |field_name: &str| {
values
.get(field_name)
Expand Down Expand Up @@ -1822,7 +1824,7 @@ impl Shadow {
doc: &ftd::executor::TDoc,
line_number: usize,
) -> ftd::executor::Result<ftd::executor::Shadow> {
use ftd::executor::fastn_type_functions::PropertyValueExt as _;
use ftd::executor::fastn_type_functions::{PropertySourceExt, PropertyValueExt as _};
use ftd::interpreter::{PropertyValueExt, ValueExt};

let get_property_value = |field_name: &str| {
Expand Down Expand Up @@ -1999,7 +2001,7 @@ impl Color {
doc: &ftd::executor::TDoc,
line_number: usize,
) -> ftd::executor::Result<Color> {
use ftd::executor::fastn_type_functions::PropertyValueExt as _;
use ftd::executor::fastn_type_functions::{PropertySourceExt, PropertyValueExt as _};
use ftd::interpreter::{PropertyValueExt, ValueExt};

let light = {
Expand Down
2 changes: 2 additions & 0 deletions ftd/src/executor/tdoc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ impl TDoc<'_> {
inherited_variables: &mut ftd::VecMap<(String, Vec<usize>)>,
insert_null: bool,
) -> ftd::executor::Result<Option<(String, String, Vec<String>)>> {
use ftd::interpreter::PropertyExt;

let string_container = ftd::executor::utils::get_string_container(container);
let source = argument.to_sources();
let properties = ftd::interpreter::utils::find_properties_by_source(
Expand Down
2 changes: 2 additions & 0 deletions ftd/src/executor/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@ pub(crate) fn update_local_variable_references_in_component_(
doc: &mut ftd::executor::TDoc,
is_children: bool,
) {
use ftd::executor::fastn_type_functions::ComponentExt;

if component.is_variable() {
let mut component_name = fastn_type::PropertyValue::Reference {
name: component.name.to_string(),
Expand Down
2 changes: 2 additions & 0 deletions ftd/src/executor/value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ pub(crate) fn find_value_by_argument(
is_dummy: bool,
inherited_variables: &ftd::VecMap<(String, Vec<usize>)>,
) -> ftd::executor::Result<ftd::executor::Value<Option<fastn_type::Value>>> {
use ftd::interpreter::PropertyExt;

let properties = {
let new_properties = ftd::interpreter::utils::find_properties_by_source(
source,
Expand Down
27 changes: 27 additions & 0 deletions ftd/src/interpreter/fastn_type_functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2121,6 +2121,33 @@ impl FunctionCallExt for fastn_type::FunctionCall {
}
}

pub(crate) trait PropertyExt {
fn resolve(
&self,
doc: &ftd::interpreter::TDoc,
inherited_variables: &ftd::VecMap<(String, Vec<usize>)>,
) -> ftd::interpreter::Result<Option<fastn_type::Value>>;
}

impl PropertyExt for fastn_type::Property {
fn resolve(
&self,
doc: &ftd::interpreter::TDoc,
inherited_variables: &ftd::VecMap<(String, Vec<usize>)>,
) -> ftd::interpreter::Result<Option<fastn_type::Value>> {
use ftd::interpreter::PropertyValueExt;

Ok(match self.condition {
Some(ref condition) if !condition.eval(doc)? => None,
_ => Some(self.value.clone().resolve_with_inherited(
doc,
self.line_number,
inherited_variables,
)?),
})
}
}

pub fn check_for_caption_and_body(s: &mut String) -> (bool, bool) {
use itertools::Itertools;

Expand Down
2 changes: 1 addition & 1 deletion ftd/src/interpreter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ pub use prelude::*;

pub use fastn_type_functions::KindDataExt;
pub(crate) use fastn_type_functions::{
FunctionCallExt, PropertyValueExt, PropertyValueSourceExt, ValueExt,
FunctionCallExt, PropertyExt, PropertyValueExt, PropertyValueSourceExt, ValueExt,
};
pub use tdoc::{BagOrState, TDoc};
pub use things::expression;
Expand Down
21 changes: 2 additions & 19 deletions ftd/src/interpreter/things/component.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pub struct ComponentDefinition {
pub name: String,
pub arguments: Vec<Argument>,
pub definition: Component,
pub definition: fastn_type::Component,
pub css: Option<fastn_type::PropertyValue>,
pub line_number: usize,
}
Expand Down Expand Up @@ -639,23 +639,6 @@ pub struct Property {
}

impl Property {
pub(crate) fn resolve(
&self,
doc: &ftd::interpreter::TDoc,
inherited_variables: &ftd::VecMap<(String, Vec<usize>)>,
) -> ftd::interpreter::Result<Option<fastn_type::Value>> {
use ftd::interpreter::PropertyValueExt;

Ok(match self.condition {
Some(ref condition) if !condition.eval(doc)? => None,
_ => Some(self.value.clone().resolve_with_inherited(
doc,
self.line_number,
inherited_variables,
)?),
})
}

fn from_ast_properties_and_children(
ast_properties: Vec<ftd_ast::Property>,
ast_children: Vec<ftd_ast::ComponentInvocation>,
Expand Down Expand Up @@ -1311,7 +1294,7 @@ fn get_module_name_and_thing(
definition_name_with_arguments: &mut Option<(&str, &mut [Argument])>,
component_argument: &ftd::interpreter::Argument,
) -> ftd::interpreter::Result<(String, ftd::Map<ftd::interpreter::ModuleThing>)> {
use ftd::interpreter::PropertyValueExt;
use ftd::interpreter::{PropertyExt, PropertyValueExt};

let default_things = {
let value = if let Some(ref value) = component_argument.value {
Expand Down
47 changes: 2 additions & 45 deletions ftd/src/js/element.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2642,6 +2642,8 @@ impl Common {
doc: &ftd::interpreter::TDoc,
rdata: &ftd::js::ResolverData,
) -> Vec<fastn_js::ComponentStatement> {
use ftd::js::fastn_type_functions::EventExt;

let mut component_statements = vec![];
for event in self.events.iter() {
if let Some(event_handler) = event.to_event_handler_js(element_name, doc, rdata) {
Expand Down Expand Up @@ -3279,51 +3281,6 @@ impl Common {
}
}

impl fastn_type::Event {
pub(crate) fn to_event_handler_js(
&self,
element_name: &str,
doc: &ftd::interpreter::TDoc,
rdata: &ftd::js::ResolverData,
) -> Option<fastn_js::EventHandler> {
use ftd::js::fastn_type_functions::FunctionCallExt;

self.name
.to_js_event_name()
.map(|event| fastn_js::EventHandler {
event,
action: self.action.to_js_function(doc, rdata),
element_name: element_name.to_string(),
})
}
}

impl fastn_type::EventName {
fn to_js_event_name(&self) -> Option<fastn_js::Event> {
use itertools::Itertools;

match self {
fastn_type::EventName::Click => Some(fastn_js::Event::Click),
fastn_type::EventName::MouseEnter => Some(fastn_js::Event::MouseEnter),
fastn_type::EventName::MouseLeave => Some(fastn_js::Event::MouseLeave),
fastn_type::EventName::ClickOutside => Some(fastn_js::Event::ClickOutside),
fastn_type::EventName::GlobalKey(gk) => Some(fastn_js::Event::GlobalKey(
gk.iter().map(|v| ftd::js::utils::to_key(v)).collect_vec(),
)),
fastn_type::EventName::GlobalKeySeq(gk) => Some(fastn_js::Event::GlobalKeySeq(
gk.iter().map(|v| ftd::js::utils::to_key(v)).collect_vec(),
)),
fastn_type::EventName::Input => Some(fastn_js::Event::Input),
fastn_type::EventName::Change => Some(fastn_js::Event::Change),
fastn_type::EventName::Blur => Some(fastn_js::Event::Blur),
fastn_type::EventName::Focus => Some(fastn_js::Event::Focus),
fastn_type::EventName::RivePlay(_)
| fastn_type::EventName::RivePause(_)
| fastn_type::EventName::RiveStateChange(_) => None,
}
}
}

pub fn is_kernel(s: &str) -> bool {
[
"ftd#text",
Expand Down
Loading

0 comments on commit 8640c0a

Please sign in to comment.