brad
May 1, 2025, 5:54pm
1
Wappler Version : Wappler 7 Beta 29
Operating System : MacOS
Server Model: PHP
Database Type: MySQL
Hosting Type:
Expected behavior
What do you think should happen?
Tables built with generator should be filterable and paging and filtering should work.
Actual behavior
What actually happens?
Filtering wih a select menu only changes first record
Paging (generator) sometimes changes only the first record, sometimes it doesn't page at all, sometimes it only changes a few records
Sorting no longer works at all
have They are completely broken. Very erratic behaviour
How to reproduce
Create a table with the generator that has a filter with a select
Add the paging from the generator.
Rolling back the changes solves the problem. So something is definately broke in the new App Connect Build.
Please share your page/table/filter code.
brad
May 1, 2025, 6:33pm
3
I had to revert ....
What code specifically do you want? Here is just one of the tables that is broken.
<div class="table-responsive">
<table class="table table-striped table-hover table-sm">
<thead>
<tr>
<th class="sorting" dmx-on:click="queryTableSort.set('sqp_client_sort','client_last');queryTableSort.set('sqp_client_dir',queryTableSort.data.sqp_client_dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="queryTableSort.data.sqp_client_sort=='client_last' && queryTableSort.data.sqp_client_dir == 'asc'" dmx-class:sorting_desc="queryTableSort.data.sqp_client_sort=='client_last' && queryTableSort.data.sqp_client_dir == 'desc'">Client Name</th>
<th class="sorting" dmx-on:click="queryTableSort.set('sqp_client_sort','sqp_startdate');queryTableSort.set('sqp_client_dir',queryTableSort.data.sqp_client_dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="queryTableSort.data.sqp_client_sort=='sqp_startdate' && queryTableSort.data.sqp_client_dir == 'asc'" dmx-class:sorting_desc="queryTableSort.data.sqp_client_sort=='sqp_startdate' && queryTableSort.data.sqp_client_dir == 'desc'">Program Start</th>
<th class="sorting" dmx-on:click="queryTableSort.set('sqp_client_sort','sqp_reviewdate');queryTableSort.set('sqp_client_dir',queryTableSort.data.sqp_client_dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="queryTableSort.data.sqp_client_sort=='sqp_reviewdate' && queryTableSort.data.sqp_client_dir == 'asc'" dmx-class:sorting_desc="queryTableSort.data.sqp_client_sort=='sqp_reviewdate' && queryTableSort.data.sqp_client_dir == 'desc'">Review Date</th>
<th class="sorting" dmx-on:click="queryTableSort.set('sqp_client_sort','sqp_enddate');queryTableSort.set('sqp_client_dir',queryTableSort.data.sqp_client_dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="queryTableSort.data.sqp_client_sort=='sqp_enddate' && queryTableSort.data.sqp_client_dir == 'asc'" dmx-class:sorting_desc="queryTableSort.data.sqp_client_sort=='sqp_enddate' && queryTableSort.data.sqp_client_dir == 'desc'">Program End</th>
<th class="sorting" dmx-on:click="queryTableSort.set('sqp_client_sort','sqp_progoutcome');queryTableSort.set('sqp_client_dir',queryTableSort.data.sqp_client_dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="queryTableSort.data.sqp_client_sort=='sqp_progoutcome' && queryTableSort.data.sqp_client_dir == 'asc'" dmx-class:sorting_desc="queryTableSort.data.sqp_client_sort=='sqp_progoutcome' && queryTableSort.data.sqp_client_dir == 'desc'">Program Outcome</th>
<th class="sorting" dmx-on:click="queryTableSort.set('sqp_client_sort','sqp_followup1date');queryTableSort.set('sqp_client_dir',queryTableSort.data.sqp_client_dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="queryTableSort.data.sqp_client_sort=='sqp_followup1date' && queryTableSort.data.sqp_client_dir == 'asc'" dmx-class:sorting_desc="queryTableSort.data.sqp_client_sort=='sqp_followup1date' && queryTableSort.data.sqp_client_dir == 'desc'">6 Month Follow Up</th>
<th class="sorting" dmx-on:click="queryTableSort.set('sqp_client_sort','sqp_followoutcome1');queryTableSort.set('sqp_client_dir',queryTableSort.data.sqp_client_dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="queryTableSort.data.sqp_client_sort=='sqp_followoutcome1' && queryTableSort.data.sqp_client_dir == 'asc'" dmx-class:sorting_desc="queryTableSort.data.sqp_client_sort=='sqp_followoutcome1' && queryTableSort.data.sqp_client_dir == 'desc'">6 Month Outcome</th>
<th class="sorting" dmx-on:click="queryTableSort.set('sqp_client_sort','sqp_followup2date');queryTableSort.set('sqp_client_dir',queryTableSort.data.sqp_client_dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="queryTableSort.data.sqp_client_sort=='sqp_followup2date' && queryTableSort.data.sqp_client_dir == 'asc'" dmx-class:sorting_desc="queryTableSort.data.sqp_client_sort=='sqp_followup2date' && queryTableSort.data.sqp_client_dir == 'desc'">1 Year Follow Up</th>
<th class="sorting" dmx-on:click="queryTableSort.set('sqp_client_sort','sqp_followoutcome2');queryTableSort.set('sqp_client_dir',queryTableSort.data.sqp_client_dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="queryTableSort.data.sqp_client_sort=='sqp_followoutcome2' && queryTableSort.data.sqp_client_dir == 'asc'" dmx-class:sorting_desc="queryTableSort.data.sqp_client_sort=='sqp_followoutcome2' && queryTableSort.data.sqp_client_dir == 'desc'">1 Year Outcome</th>
</tr>
</thead>
<tbody is="dmx-repeat" dmx-generator="bs5table" dmx-bind:repeat="clientList.data.query.data" id="tableRepeat1" dmx-state="queryTableSort" dmx-sort="sqp_client_sort" dmx-order="sqp_client_dir">
<tr>
<td><a href="javascript:void(0);" dmx-bind:href="'/prog_profile/22/'+inst_id+'/'+inst_clientid">{{client_last}}, {{client_first}}</a></td>
<td dmx-text="sqp_startdate.formatDate('MMMM d, yyyy')"></td>
<td><span dmx-class:text-warning="sqp_reviewdate>=varDateTime.datetime&&sqp_reviewdate<=varDateTime.datetime.addDays(15)" dmx-class:text-danger="sqp_reviewdate<varDateTime.datetime" dmx-show="client_employ.contains('Looking For Work')&&!sqp_reviewdate.isEmpty()">{{sqp_reviewdate.formatDate('MMMM d, yyyy')}}</span><span class="text-danger" dmx-show="client_employ.contains('Looking For Work')&&sqp_reviewdate.isEmpty()">Unscheduled</span><span class="text-secondary" dmx-show="client_employ!='Looking For Work'">Not Applicable</span></td>
<td dmx-text="sqp_enddate.formatDate('MMMM d, yyyy')"></td>
<td dmx-text="sqp_progoutcome"></td>
<td dmx-text="sqp_followup1date.formatDate('MMMM d, yyyy')"></td>
<td dmx-text="sqp_followoutcome1"></td>
<td dmx-text="sqp_followup2date.formatDate('MMMM d, yyyy')"></td>
<td dmx-text="sqp_followoutcome2"></td>
</tr>
</tbody>
</table>
</div>
brad:
I had to revert ....
What did you need to revert exactly?
Which part is “broken”? Which part of the code is not working?
brad
May 1, 2025, 8:01pm
5
I had to revert the today's App Connect updates.
Basically nothing works in a repeat region. Even going from a list to a data detail region for a record selects the wrong record (if it even selects a record).
In my provided code, everything I listed above is wrong with it.
Reverting back to App Connect works again.
/*!
App Connect
Version: 2.0.20
(c) 2025 Wappler.io
@build 2025-01-16 16:15:48
*/
Applying the update in today's build breaks everything.
Brad, it’s not clear what is not working for you. Are there any errors in the dev tools? Which part exactly is not working?
brad
May 1, 2025, 8:35pm
8
repeat.js:255 Uncaught TypeError: Cannot read properties of null (reading '$type')
at repeat.js:255:1
at Array.forEach (<anonymous>)
at s.performUpdate (repeat.js:250:1)
at BaseComponent.js:452:1
at appConnect.js:235:1
(anonymous) @ repeat.js:255
performUpdate @ repeat.js:250
(anonymous) @ BaseComponent.js:452
(anonymous) @ appConnect.js:235
postMessage
dmx.nextTick @ appConnect.js:242
requestUpdate @ BaseComponent.js:448
set @ BaseComponent.js:26
(anonymous) @ BaseComponent.js:395
(anonymous) @ BaseComponent.js:492
XMLHttpRequest.send
_fetch @ fetch.js:338
_fetch @ serverconnect.js:37
n @ events.js:6
requestAnimationFrame
(anonymous) @ events.js:14
performUpdate @ fetch.js:169
(anonymous) @ BaseComponent.js:452
(anonymous) @ appConnect.js:235
postMessage
dmx.nextTick @ appConnect.js:242
requestUpdate @ BaseComponent.js:448
set @ BaseComponent.js:26
(anonymous) @ fetch.js:181
(anonymous) @ BaseComponent.js:492
postMessage
dmx.nextTick @ appConnect.js:242
requestUpdate @ BaseComponent.js:448
set @ BaseComponent.js:26
(anonymous) @ BaseComponent.js:395
(anonymous) @ BaseComponent.js:492
XMLHttpRequest.send
_fetch @ fetch.js:338
_fetch @ serverconnect.js:37
n @ events.js:6
requestAnimationFrame
(anonymous) @ events.js:14
performUpdate @ fetch.js:169
(anonymous) @ BaseComponent.js:452
(anonymous) @ appConnect.js:235
postMessage
dmx.nextTick @ appConnect.js:242
(anonymous) @ select.js:144
(anonymous) @ appConnect.js:235
postMessage
dmx.nextTick @ appConnect.js:242
_changeHandler @ select.js:140
TMR
May 1, 2025, 8:41pm
9
I having similar issues after installing the updates to 6.8 stable, it's broken a lot of stuff on an existing site - had to revert - I'm investigating now and will post a separate report.
1 Like
Checked a few of our Projects and all seem fine with filtering and paging (calendars, charts, tables, lists, etc). We don't use the Generators though... Still a lot of paging and filtering but all seems to be working as it should. Beta 29, NodeJS via Docker, on Ubuntu.
brad
May 1, 2025, 10:17pm
12
Seems to be effecting only paged query recordsets as far as I can tell. Is that the case for you as well?
TMR
May 2, 2025, 7:00am
13
Yes, it seems that way. I'm using a filter on my table (using paged query RS) to only show certain records on the click of a button. When I try to apply the filter random records are shown instead of filtered records. I was expecting this to fix after I reverted but it's still not working as it should - seems something else is broken now too.
I'm still trying to get to the bottom of it. I'll post back with my findings.
brad
May 2, 2025, 3:24pm
16
Thanks @patrick , this update seems to have solved it.
This is now fixed in an inline extension update.
1 Like
system
Closed
May 4, 2025, 3:48pm
20
This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.