Commit bb1bd1cc authored by Sven Franck's avatar Sven Franck

app: inherit dynamic state down the element tree

parent 846eec2b
......@@ -3662,7 +3662,7 @@
delete flux._temp[set_flux];
} else {
// translation!?
setter.direct.value = setter.logic.noFlux;
setter.direct.value = logic.noFlux;
}
}
}
......@@ -3674,15 +3674,24 @@
if (!!item.direct) {
setValue(item);
} else if (!!item.generate) {
// we must declare wrap for non-form elements here, because they
// NOTE: we must declare wrap for non-form elements here, because they
// don't belong into any widget
// NOTE: persist if set!
container = getHelp({
"wrap": "section",
"persist": item.property_dict.persist,
"class_list": "span_" + (item.property_dict.wrap || 1)
});
container.children.push(item);
} else {
helper = getHelp({"wrap": "fragment"});
// NOTE: since we are creating 2 levels in the DOM tree (fragment &
// sections), the normal inheritance will break, because a wrapper
// will be missing state. Therefore we add the state manually here,
// TODO: don't do 2 level stuff.... and complain later when debugging
helper = getHelp({
"wrap": "fragment",
"state": spec.wrapper.property_dict.state
});
}
// nothing to do, pass back directly
......@@ -3998,6 +4007,8 @@
.fail(app.util.error);
}
// NOTE: must set property_dict on the controlbar in order to inherit
// dynamic data to the contained field elements
section_list[j] = RSVP.all(field_list)
.then(function (field_response_list) {
section = getHelp({
......@@ -6250,12 +6261,14 @@
* @return {object} response object/promise
**/
// TODO: refactor... appocalyptic
// TODO: determine what should be inherit and make inherit object, that
// will be passed down the rendering tree
app.content.make = function (reply) {
var pass, method, type, kids, promise_list, route,
search, search_id, kid, is_html, is_dynamic, is_id, i, j, k, last,
encoded, wrapper, active, selector, update_target, target, widget,
quirk_dict, generator, pointer_results, data_total_rows, is_parameter,
param_len, parameter, no_item, dyno, container;
param_len, parameter, no_item, dyno, container, has_props, widget_dyno;
pass = reply.pass;
pass.config_dict = pass.config_dict || {};
......@@ -6347,7 +6360,6 @@
// make properties available to children in need
wrapper.property_dict = quirk_dict;
// no records returned, no_show set below on dyno
// TODO: find better way to set dynamic flag
if (quirk_dict.no_show) {
......@@ -6366,13 +6378,18 @@
// TODO: 10 if-else...
if (!pass.skip) {
// =====================================================================
// NOTE: store state on wrapper property_dict to inherit!
wrapper.property_dict.state = pass.state
// =====================================================================
// inherit item id, so it's available in form as indentifier
if (pointer_results.data.total_rows === 1) {
quirk_dict.data = {"_id": pointer_results.data.rows[0].doc._id};
}
// no items, need no show! (default to empty {} if none provided
if (pointer_results.data.total_rows === 0) {
if (quirk_dict.allow_new) {
if (quirk_dict.allow_new || quirk_dict.force_new) {
pointer_results = {"data": {"total_rows": 1, "rows": [{"doc": {}}]}};
} else {
quirk_dict.no_show = quirk_dict.no_items || {};
......@@ -6401,6 +6418,7 @@
});
container.appendChild(dyno);
}
wrapper.fragment.appendChild(container || dyno);
wrapper.child_selector = wrapper.fragment.querySelector(
"#" + quirk_dict.reference
......@@ -6504,7 +6522,7 @@
if (quirk_dict.direct_map) {
kid.property_dict.data = pointer_results.data.rows[0];
// set "grant-children", which will be mapped into ?
// NOTE: we may be setting on a wrapper!
} else {
kid.property_dict = util.mergeObject(kid.property_dict, quirk_dict);
kid.children = util.inherit(
......@@ -6514,10 +6532,22 @@
}
}
// setParam(s)
// ===================================================================
is_parameter = (kid.logic || {}).setParam;
has_props = kid.property_dict;
// inherit dynamic state to all children with property_dict
if (has_props && wrapper.property_dict.state) {
kid.property_dict.state = wrapper.property_dict.state;
}
// set dynamic Param(s)
if (is_parameter) {
kid = app.util.setParam(kid, wrapper);
}
// ===================================================================
if (quirk_dict.update !== true || is_dynamic || quirk_dict.dynamic) {
// for content loaded via href, generate URL dict and undefine kid
......@@ -6525,6 +6555,7 @@
if (wrapper.is_page && kid.href) {
wrapper.inherit = {
"href": kid.href,
"url_query": pass.url_dict.url_query,
"fragment_list": pass.url_dict.fragment_list,
"layout_level": pass.url_dict.layout_level,
"inherit": true,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment