[Eg-newdevs] get_tcn function scope
Terran McCanna
tmccanna at georgialibraries.org
Thu Jun 17 17:44:02 EDT 2021
Ack, hit send before I was done. I am getting the correct value in the
console with this part, but it's not letting me grab that value from
$scope.overlay_record = function() {
var items = $scope.gridControls.selectedItems();
var overlay_target = $scope.local_overlay_target;
*var overlay_target_tcn = $scope.local_overlay_target_tcn; <--this
part works and I can display it in the popup*
var live_overlay_target =
egCore.hatch.getLocalItem('eg.cat.marked_overlay_record') || 0;
*get_tcn(live_overlay_target).then(function(rec) {
$scope.live_overlay_target_tcn = rec.tcn_value();
console.log('LIVE TCN: ' + $scope.live_overlay_target_tcn); <--this grabs
correct tcn });*
But if I try to grab $scope.live_overlay_target_tcn for the popup then it
says it's undefined. :(
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 Thu, Jun 17, 2021 at 5:39 PM Terran McCanna <
tmccanna at georgialibraries.org> wrote:
> I followed Dan's advice and the original bug is now working properly, and
> I realized that since we have already set $scope.local_overlay_target_tcn
> that we can access that in the message, but I'm still struggling to
> understand how to get the other "live" value to appear in the pop-up
> message.
>
> $scope.overlay_record = function() {
> var items = $scope.gridControls.selectedItems();
> var overlay_target = $scope.local_overlay_target;
> *var overlay_target_tcn = $scope.local_overlay_target_tcn;
> <--this part works*
> var live_overlay_target =
> egCore.hatch.getLocalItem('eg.cat.marked_overlay_record') || 0;
>
>
>
> *get_tcn(live_overlay_target).then(function(rec) {
> $scope.live_overlay_target_tcn = rec.tcn_value(); console.log('LIVE TCN: '
> + $scope.live_overlay_target_tcn); });*
>
> 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 Thu, Jun 17, 2021 at 2:46 PM Josh Stompro <stomproj at gsuite.larl.org>
> wrote:
>
>> 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/27461b7b/attachment-0001.html>
More information about the Eg-newdevs
mailing list