I am firing the onBlur from multiple components in a ListView, here is one recrod:
Everyone of those has an onBlur event that calls this jsQuery which checks which component called it, verifies that it is dirty and then saves the new value to the underlying data source which is a Temp Var.
// jsSaveRTCaptionField
// No judgement on my code repetition please, still in development!
if (triggeredById === 'selRTCaptionTimeZone') {
if (listView1.data[i].selRTCaptionTimeZone != captionJobs.value[i].time_zone) {
captionJobs.setIn([i, 'time_zone'], listView1.data[i].selRTCaptionTimeZone)
}
return
}
if (triggeredById === 'txtRTCaptionPublicJobNote') {
if (listView1.data[i].txtRTCaptionPublicJobNote != captionJobs.value[i].note_public) {
captionJobs.setIn([i, 'note_public'], listView1.data[i].txtRTCaptionPublicJobNote)
}
return
}
if (triggeredById === 'txtRTCaptionPrivateJobNote') {
if (listView1.data[i].txtRTCaptionPrivateJobNote != captionJobs.value[i].note_private) {
captionJobs.setIn([i, 'note_private'], listView1.data[i].txtRTCaptionPrivateJobNote)
}
return
}
if (triggeredById === 'txtRTCaptionTaskCaptionNote') {
if (listView1.data[i].txtRTCaptionTaskCaptionNote != captionJobs.value[i].caption_task_note) {
captionJobs.setIn([i, 'caption_task_note'], listView1.data[i].txtRTCaptionTaskCaptionNote)
}
return
}
if (triggeredById === 'txtRTCaptionMonitorTaskNote') {
if (listView1.data[i].txtRTCaptionMonitorTaskNote != captionJobs.value[i].monitor_task_note) {
captionJobs.setIn([i, 'monitor_task_note'], listView1.data[i].txtRTCaptionMonitorTaskNote)
}
return
}
if (triggeredById === 'dtRTCaptionJobDate') {
if (listView1.data[i].dtRTCaptionJobDate != captionJobs.value[i].job_date) {
captionJobs.setIn([i, 'job_date'], listView1.data[i].dtRTCaptionJobDate)
}
return
}
//debugger
if (triggeredById === 'tmRTCaptionStartTime') {
if (listView1.data[i].tmRTCaptionStartTime != captionJobs.value[i].start_time) {
captionJobs.setIn([i, 'start_time'], listView1.data[i].tmRTCaptionStartTime)
}
return
}
if (triggeredById === 'tmRTCaptionEndTime') {
if (listView1.data[i].tmRTCaptionEndTime != captionJobs.value[i].end_time) {
captionJobs.setIn([i, 'end_time'], listView1.data[i].tmRTCaptionEndTime)
}
return
}
if (triggeredById === 'curRTCaptionClientPrice') {
if (listView1.data[i].curRTCaptionClientPrice != captionJobs.value[i].client_price) {
captionJobs.setIn([i, 'client_price'], listView1.data[i].curRTCaptionClientPrice)
}
return
}
if (triggeredById === 'curRTCaptionICCost') {
if (listView1.data[i].curRTCaptionICCost != captionJobs.value[i].ic_cost) {
captionJobs.setIn([i, 'ic_cost'], listView1.data[i].curRTCaptionICCost)
}
return
}
if (triggeredById === 'txtRTCaptionLocation') {
if (listView1.data[i].txtRTCaptionLocation != captionJobs.value[i].location) {
captionJobs.setIn([i, 'location'], listView1.data[i].txtRTCaptionLocation)
}
return
}
if (triggeredById === 'txtRTCaptionJobName') {
if (listView1.data[i].txtRTCaptionJobName != captionJobs.value[i].job_name) {
captionJobs.setIn([i, 'job_name'], listView1.data[i].txtRTCaptionJobName)
}
if (listView1.data[i].txtRTCaptionSTName === null || listView1.data[i].txtRTCaptionSTName === '') {
debugger
let v = listView1.data[i].txtRTCaptionJobName
captionJobs.setIn([i, 'st_job_name'], v.indexOf(' ') === -1 ? v : v.substring(0, v.indexOf(' ')))
}
return
}
if (triggeredById === 'txtRTCaptionSTName') {
if (listView1.data[i].txtRTCaptionSTName != captionJobs.value[i].st_job_name) {
captionJobs.setIn([i, 'st_job_name'], listView1.data[i].txtRTCaptionSTName)
}
return
}
When the user has edited say, the Job Name field and goes to click the Save button, I run this to do the save:
await new Promise(resolve => setTimeout(resolve, 1000))
await qryUpload.trigger()
That timeout lets the onBlur finish.
But I just had an idea. What if I await
each setIn()
?
As a note, this is a very large app with 150+ components. which may be contributing to delays?