Skip to content
This repository was archived by the owner on Nov 29, 2023. It is now read-only.

Commit fe84607

Browse files
[Hacky] Fix nested repeats with relevance
This is a targeted fix for one user, addressing a case where relevance on a nested/grouped repeat only works for the first top-level repeat. It causes a test failure for another use case, which provides helpful testing context and sort of hints at a likely direction for a more general fix.
1 parent 9151c91 commit fe84607

File tree

2 files changed

+161
-2
lines changed

2 files changed

+161
-2
lines changed

src/js/relevant.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,9 @@ export default {
8787
* but currently has 0 repeats, the context will not be available. This same logic is applied in output.js.
8888
*/
8989
let context = p.path;
90-
if ( getChild( node, `.or-repeat-info[data-name="${p.path}"]` ) && !getChild( node, `.or-repeat[name="${p.path}"]` ) ) {
91-
context = null;
90+
const repeatInfo = getChild( node, `.or-repeat-info[data-name="${p.path}"]` );
91+
if ( repeatInfo != null && !getChild( node, `.or-repeat[name="${p.path}"]` ) ) {
92+
this.form.repeats.add( repeatInfo );
9293
}
9394

9495
/*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
<?xml version="1.0"?>
2+
<h:html xmlns="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:jr="http://openrosa.org/javarosa" xmlns:odk="http://www.opendatakit.org/xforms" xmlns:orx="http://openrosa.org/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3+
<h:head>
4+
<h:title>enketo-repeat-bug</h:title>
5+
<model odk:xforms-version="1.0.0">
6+
<instance>
7+
<data id="enketo-repeat-bug" version="2021081700">
8+
<field_asset_exists>yes</field_asset_exists>
9+
<field_asset_rpt jr:template="">
10+
<field_asset_rpt_grp>
11+
<asset_name />
12+
<documentation_exists />
13+
<documentation_rpt jr:template="">
14+
<documentation_rpt_grp>
15+
<documentation_type />
16+
<documentation_file />
17+
<documentation_photo />
18+
</documentation_rpt_grp>
19+
</documentation_rpt>
20+
<documentation_rpt>
21+
<documentation_rpt_grp>
22+
<documentation_type />
23+
<documentation_file />
24+
<documentation_photo />
25+
</documentation_rpt_grp>
26+
</documentation_rpt>
27+
<instrumentation_exists />
28+
<instrumentation_rpt jr:template="">
29+
<instrumentation_rpt_grp>
30+
<instrumentation_tag />
31+
<instrumentation_measurement />
32+
<instrumentation_measurement_other />
33+
</instrumentation_rpt_grp>
34+
</instrumentation_rpt>
35+
<instrumentation_rpt>
36+
<instrumentation_rpt_grp>
37+
<instrumentation_tag />
38+
<instrumentation_measurement />
39+
<instrumentation_measurement_other />
40+
</instrumentation_rpt_grp>
41+
</instrumentation_rpt>
42+
</field_asset_rpt_grp>
43+
</field_asset_rpt>
44+
<field_asset_rpt>
45+
<field_asset_rpt_grp>
46+
<asset_name />
47+
<documentation_exists>no</documentation_exists>
48+
<documentation_rpt>
49+
<documentation_rpt_grp>
50+
<documentation_type />
51+
<documentation_file />
52+
<documentation_photo />
53+
</documentation_rpt_grp>
54+
</documentation_rpt>
55+
<instrumentation_exists>yes</instrumentation_exists>
56+
<instrumentation_rpt>
57+
<instrumentation_rpt_grp>
58+
<instrumentation_tag />
59+
<instrumentation_measurement />
60+
<instrumentation_measurement_other />
61+
</instrumentation_rpt_grp>
62+
</instrumentation_rpt>
63+
</field_asset_rpt_grp>
64+
</field_asset_rpt>
65+
<meta>
66+
<instanceID />
67+
</meta>
68+
</data>
69+
</instance>
70+
71+
<bind nodeset="/data/field_asset_exists" required="true()" type="string" />
72+
<bind nodeset="/data/field_asset_rpt" relevant="selected( /data/field_asset_exists , 'yes')" />
73+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/asset_name" type="string" />
74+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/documentation_exists" required="true()" type="string" />
75+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/documentation_rpt" relevant="selected( ../documentation_exists , 'yes')" />
76+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/documentation_rpt/documentation_rpt_grp/documentation_type" required="true()" type="string" />
77+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/documentation_rpt/documentation_rpt_grp/documentation_file" type="binary" />
78+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/documentation_rpt/documentation_rpt_grp/documentation_photo" orx:max-pixels="1000" relevant=" ../documentation_file = ''" type="binary" />
79+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_exists" required="true()" type="string" />
80+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_rpt" relevant="selected( ../instrumentation_exists , 'yes')" />
81+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_rpt/instrumentation_rpt_grp/instrumentation_tag" type="string" />
82+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_rpt/instrumentation_rpt_grp/instrumentation_measurement" required="true()" type="string" />
83+
<bind nodeset="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_rpt/instrumentation_rpt_grp/instrumentation_measurement_other" relevant="selected( ../instrumentation_measurement , 'other')" required="true()" type="string" />
84+
<bind jr:preload="uid" nodeset="/data/meta/instanceID" readonly="true()" type="string" />
85+
</model>
86+
</h:head>
87+
<h:body>
88+
<select1 ref="/data/field_asset_exists"><label>Is there at least 1 field asset?</label>
89+
<item><label>Yes</label>
90+
<value>yes</value>
91+
</item>
92+
<item><label>No</label>
93+
<value>no</value>
94+
</item>
95+
</select1>
96+
<group ref="/data/field_asset_rpt"><label>Field asset</label>
97+
<repeat nodeset="/data/field_asset_rpt">
98+
<group ref="/data/field_asset_rpt/field_asset_rpt_grp"><label><output value=" ../field_asset_rpt_grp/asset_name " /></label><input ref="/data/field_asset_rpt/field_asset_rpt_grp/asset_name"><label>Asset name</label></input>
99+
<select1 ref="/data/field_asset_rpt/field_asset_rpt_grp/documentation_exists"><label>Is there at least 1 piece of documentation?</label>
100+
<item><label>Yes</label>
101+
<value>yes</value>
102+
</item>
103+
<item><label>No</label>
104+
<value>no</value>
105+
</item>
106+
</select1>
107+
<group ref="/data/field_asset_rpt/field_asset_rpt_grp/documentation_rpt"><label>Documentation</label>
108+
<repeat nodeset="/data/field_asset_rpt/field_asset_rpt_grp/documentation_rpt">
109+
<group ref="/data/field_asset_rpt/field_asset_rpt_grp/documentation_rpt/documentation_rpt_grp"><label><output value=" ../documentation_rpt_grp/documentation_type " /></label>
110+
<select1 ref="/data/field_asset_rpt/field_asset_rpt_grp/documentation_rpt/documentation_rpt_grp/documentation_type"><label>Documentation type</label>
111+
<item><label>Drawing set</label>
112+
<value>drawing_set</value>
113+
</item>
114+
<item><label>Maintenance schedule</label>
115+
<value>maintenance_schedule</value>
116+
</item>
117+
<item><label>Other</label>
118+
<value>other</value>
119+
</item>
120+
</select1>
121+
<upload mediatype="application/*" ref="/data/field_asset_rpt/field_asset_rpt_grp/documentation_rpt/documentation_rpt_grp/documentation_file"><label>Documentation file</label>
122+
<hint>If no file available, go to next question to take a photo</hint>
123+
</upload>
124+
<upload mediatype="image/*" ref="/data/field_asset_rpt/field_asset_rpt_grp/documentation_rpt/documentation_rpt_grp/documentation_photo"><label>Documentation photo</label></upload>
125+
</group>
126+
</repeat>
127+
</group>
128+
<select1 ref="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_exists"><label>Is there at least 1 piece of instrumentation?</label>
129+
<item><label>Yes</label>
130+
<value>yes</value>
131+
</item>
132+
<item><label>No</label>
133+
<value>no</value>
134+
</item>
135+
</select1>
136+
<group ref="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_rpt"><label>Instrumentation</label>
137+
<repeat nodeset="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_rpt">
138+
<group ref="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_rpt/instrumentation_rpt_grp"><label><output value=" ../instrumentation_rpt_grp/instrumentation_tag " /></label><input ref="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_rpt/instrumentation_rpt_grp/instrumentation_tag"><label>Instrumentation tag</label>
139+
<hint>If available</hint></input>
140+
<select1 ref="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_rpt/instrumentation_rpt_grp/instrumentation_measurement"><label>Instrumentation measurement</label>
141+
<item><label>Conductivity</label>
142+
<value>conductivity</value>
143+
</item>
144+
<item><label>Flow</label>
145+
<value>flow</value>
146+
</item>
147+
<item><label>Other</label>
148+
<value>other</value>
149+
</item>
150+
</select1><input ref="/data/field_asset_rpt/field_asset_rpt_grp/instrumentation_rpt/instrumentation_rpt_grp/instrumentation_measurement_other"><label>Specify other instrumentation measurement</label></input>
151+
</group>
152+
</repeat>
153+
</group>
154+
</group>
155+
</repeat>
156+
</group>
157+
</h:body>
158+
</h:html>

0 commit comments

Comments
 (0)