[Eg-newdevs] get_tcn function scope

Josh Stompro stomproj at gsuite.larl.org
Thu Jun 17 14:46:26 EDT 2021


Thank you Dan, that was very helpful to understand what wasn't working.

To answer your last question, we were trying to allow the get_tcn function
to be more generic, so it could be used to grab the TCNs for an error
message that pops up when you choose a different overlay target in another
tab, then switch back to the original tab and try to overlay.  See this
ticket. https://bugs.launchpad.net/evergreen/+bug/1932199

So we want to pull in the TCN for both old and new overlay targets and
display them to the user.

Like so
                if (overlay_target != live_overlay_target) {
                    var confirm_title =
egCore.strings.OVERLAY_CHANGED_TITLE;
                    var confirm_msg = egCore.strings.OVERLAY_CHANGED;

                    if (live_overlay_target == 0) { // someone unset the
target...
                        confirm_title =
egCore.strings.OVERLAY_REMOVED_TITLE;
                        confirm_msg = egCore.strings.OVERLAY_REMOVED;
                    }

                    egConfirmDialog.open(
                        confirm_title,
                        confirm_msg,
                        { id : overlay_target, live_id :
live_overlay_target, id_tcn :
                       * get_tcn(overlay_target)*, live_id_tcn :
*get_tcn(live_overlay_target*)}



Josh

On Thu, Jun 17, 2021 at 1:33 PM Dan Briem via Eg-newdevs <
eg-newdevs at list.evergreen-ils.org> wrote:

> egCore.pcrud.retrieve is a promise. The idea is that it needs to run a
> network request and you don't want your program to stall while waiting for
> a response back. So, with promises, the .then() doesn't run right away -
> it's like you're just setting it up to run later when the response comes
> back, and in the meantime your program will continue on to the next line
> while that promise is doing its thing.
>
> So the order things happen:
>
>    1. send request
>    2. return $scope.thisTCN (undefined probably?)
>    3. response comes back and $scope.thisTCN is set to rec.tcn_value()
>
> The next time it runs:
>
>    1. send request
>    2. return $scope.thisTCN (previous value it was set to before)
>    3. response comes back and $scope.thisTCN is set to rec.tcn_value()
>
> If you want to wrap the egCore.pcrud call in its own function and return
> the value, you could just return the whole promise and then call
> get_tcn(someRecordId).then() when you want to assign
> $scope.local_overlay_target_tcn. For example:
>
> get_tcn($scope.local_overlay_target).then(function(rec) {
>   $scope.local_overlay_target_tcn = rec.tcn_value();
> });
>
> ...........
>
> function get_tcn(currTarget) {
>   return egCore.pcrud.retrieve('bre', currTarget, {
>     select: {bre: ['tcn_value']}
>   });
> }
>
> This assumes you aren't using $scope.thisTCN anywhere else and can just
> remove that assignment.
>
> I'm also curious, because I looked at the patch you shared before the
> meeting, what wasn't working about it? (the reason I ask is because this
> should be close to the same thing)
>
> On Thu, Jun 17, 2021 at 1:12 PM Terran McCanna via Eg-newdevs <
> eg-newdevs at list.evergreen-ils.org> wrote:
>
>> Okay, gang. I'm missing something and it's probably obvious to someone
>> more familiar with chained functions and scope, but I can't figure it out.
>> After trying a bunch of different approaches, this is the closest I've been
>> able to get. It's writing the correct value to the console log, but it is
>> displaying the *previous* value in the interface. Argh. See video demo of
>> the problem:
>>
>> https://screencast-o-matic.com/watch/cr1bDNV16uo
>>
>> **********
>>
>>     $scope.local_overlay_target =
>> egCore.hatch.getLocalItem('eg.cat.marked_overlay_record') || 0;
>>     if($scope.local_overlay_target) {
>>         var currTarget = $scope.local_overlay_target;
>>        * $scope.local_overlay_target_tcn = get_tcn(currTarget);*
>>     }
>>     $scope.mark_as_overlay_target = function() {
>>         var items = $scope.gridControls.selectedItems();
>>         if ($scope.local_overlay_target == items[0]['bibid']) {
>>             $scope.local_overlay_target = 0;
>>             $scope.local_overlay_target_tcn = 0;
>>         } else {
>>             $scope.local_overlay_target = items[0]['bibid'];
>>             var currTarget = items[0]['bibid'];
>>             *$scope.local_overlay_target_tcn = get_tcn(currTarget);*
>>         }
>>
>> egCore.hatch.setLocalItem('eg.cat.marked_overlay_record',$scope.local_overlay_target);
>>     }
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *    function get_tcn(currTarget) {        egCore.pcrud.retrieve('bre',
>> currTarget, {            select: {bre: ['tcn_value']}
>> }).then(function(rec) {            $scope.thisTCN = rec.tcn_value();
>>     console.log("TEST: " + $scope.thisTCN);        });        return
>> $scope.thisTCN;    };*
>>
>> **********
>>
>> This writes the correct TCN value to the console, but it does not always
>> load that value to $scope.local_overlay_target_tcn. If I have an item
>> marked for overlay and I load the page, it displays the correct TCN. But,
>> if I use the interface to select a different item, it keeps the original
>> TCN in the display.
>>
>> When I tried setting a regular variable (instead of a $scope variable) in
>> the "then" part of the chained function, I couldn't access it from outside
>> that part of the function. Am I creating the thisTCN variable wrong? Or
>> returning it wrong? Or ... ???
>>
>>
>> Terran McCanna, PINES Program Manager
>> ------------------------------
>>
>> Georgia Public Library Service | University System of Georgia
>>
>> 2872 Woodcock Blvd, Suite 250 l Atlanta, GA 30341
>>
>> (404) 235-7138 | tmccanna at georgialibraries.org
>>
>> http://help.georgialibraries.org | help at georgialibraries.org
>>
>> <https://www.facebook.com/georgialibraries>
>> <https://www.twitter.com/georgialibs>
>> <https://www.instagram.com/georgialibraries/>
>> <https://www.twitter.com/georgialibs>
>>
>> Join our email list <http://georgialibraries.org> for stories of Georgia
>> libraries making an impact in our communities.
>>
>>
>>
>> On Wed, Jun 16, 2021 at 4:36 PM Josh Stompro via Eg-newdevs <
>> eg-newdevs at list.evergreen-ils.org> wrote:
>>
>>> Terran, I think the get_tcn function is in scope... it just doesn't
>>> return a value.  I followed the code in the developer console and it does
>>> grab the tcn.
>>>
>>> The function sets the $scope.local_overlay_target_tcn to be equal to the
>>> found tcn value.  But it doesn't return it.
>>>
>>>     function get_tcn(currTarget) {
>>>         egCore.pcrud.retrieve('bre', currTarget, {
>>>             select: {bre: ['tcn_value']}
>>>         }).then(function(rec) {
>>>             $scope.local_overlay_target_tcn = rec.tcn_value();
>>>         });
>>>         return;
>>>     };
>>>
>>> Maybe the function should just return the value... and then instead of
>>> just calling it like
>>>
>>>   } else {
>>>             $scope.local_overlay_target = items[0]['bibid'];
>>>             var currTarget = items[0] ['bibid'];
>>>             get_tcn(currTarget);
>>>         }
>>>
>>> You would use
>>>
>>>   } else {
>>>             $scope.local_overlay_target = items[0]['bibid'];
>>>             var currTarget = items[0] ['bibid'];
>>>             $scope.local_overlay_target_tcn = get_tcn(currTarget);
>>>         }
>>>
>>> Josh
>>> [image: Company logo]
>>> *Josh Stompro*
>>>
>>> *IT Director stomproj at gsuite.larl.org <stomproj at gsuite.larl.org>*
>>> *218-233-3757 ext. 139* | *Mobile: 218-790-2110*
>>>
>>> *Lake Agassiz Regional Library | **www.larl.org <http://www.larl.org>*
>>> 118 5th ST S
>>> Moorhead MN 56560
>>> *Celebrating 60 Years of Service in 2021!*
>>> _______________________________________________
>>> Eg-newdevs mailing list
>>> Eg-newdevs at list.evergreen-ils.org
>>> http://list.evergreen-ils.org/cgi-bin/mailman/listinfo/eg-newdevs
>>>
>> _______________________________________________
>> Eg-newdevs mailing list
>> Eg-newdevs at list.evergreen-ils.org
>> http://list.evergreen-ils.org/cgi-bin/mailman/listinfo/eg-newdevs
>>
>
>
> --
> Dan Briem
> Harrison Public Library
> 2 Bruce Ave. Harrison, NY 10528
> (914) 835-0324
> harrisonpl.org <https://www.harrisonpl.org>
> _______________________________________________
> Eg-newdevs mailing list
> Eg-newdevs at list.evergreen-ils.org
> http://list.evergreen-ils.org/cgi-bin/mailman/listinfo/eg-newdevs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.evergreen-ils.org/pipermail/eg-newdevs/attachments/20210617/b37ceec9/attachment-0001.html>


More information about the Eg-newdevs mailing list