Getting data from a promise as result of a firestore database call

I am trying to fetch data from my firestore database and then use the returned array of objects into my template.
What I expected to be an array of objects is in fact a promise. and I can’t seem to figure out how to extract it’s data.

Here is the function that that does two calls to my firestore database, then combines both results into an array. The func returns this array.

async getOtherArticles (src, target){
    try {
        var tempArticles = []
        const q = query(collection(projectFirestore, "database")
        ,where('target', '==', target)
        ,where('src','==',src));
        const docs = await getDocs(q);
                    
        if(docs){
            docs.forEach((doc) => { tempArticles.push(doc.data()) })
        }
                    

         const q2 = query(collection(projectFirestore, "database")
         ,where('target', '==', src)
         ,where('src','==',target));
         const docs2 = await getDocs(q2);
         if(docs2){
             docs2.forEach((doc2) => { tempArticles.push(doc2.data()) })
         }
         return tempArticles
                    
     } catch (err) {
         throw new Error(err.message) 
     }
 }

Then I simply call the previous func in order to it’s result as in the example below

this.similarArticles = this.getOtherArticles(this.drawerLinkData.src,this.drawerLinkData.target).then( function(val){return val})

When I console.log the result, I get :

Promise {<pending>}
[[Prototype]]: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Array(1)
0: {region: Array(1), technology: Array(1), target: 'Yandex', video: '', summary: '<p>Yandex announced that it has entered into a bin…rship in the business.</strong></p>n<p>&nbsp;</p>', …}
length: 1
[[Prototype]]: Array(0)

I wish to get only what is in [[PromiseResult]]. How can I achieve this?

Issue with props, getting undefined in Vuejs?

A.vue

<script>
  import {pathdata} from "../../assets/pathdata";
data() {
    return {
      pathdata: [],
    };
  },
  mounted() {
    pathdata().then((r) => {
      this.matchingData = r.data;
    });
  },
}
  </script>

List.vue

<template>
  <div>
    <div v-if="matchingData.length > 0" class="line">
      <div
        v-for="match in matchingData"
        :key="match.PipelineID"
        :class="{
          green: match.OverallStatus === 'healthy',
          red: match.OverallStatus === 'down',
        }"
      >
        {{ match.OverallStatus }}
      </div>
    </div>
    <div v-else><p>No matching data</p></div>
  </div>
</template>
<script>
export default {
  components: {},
  props: {
    data: {
      type: Array,
      required: true,
    },
    SourceDatabaseName: {
      type: String,
      required: true,
    },
  },
  data: function () {
    return {};
  },
  methods: {},
  computed: {
    matchingData() {
      return this.data.filter(
        (a) => (a.SourceDatabaseName === this.SourceDatabaseName)
      );
    },
  },
};
</script>

Error:-
matchingData:Cannot read properties of undefined (reading ‘filter’)

Vue Dev Tools screenshoot:-

enter image description here

As you can see in List.vue component, i have props which consists of data and sourcedatabasename….. Where i am able to get the sourcedatabasename but data is data:undefined.

and also minly in computed property, because data is undefined, filter also not working and throwing error as matchingData:Cannot read properties of undefined (reading ‘filter’)

Can you please help me out why it is getting as undefined?? Thanks.

How to open eml file with attachement in outlook with javascript recieved from backend?

I recieve a eml like this from the backend :

    To: to
Message-ID: <-870410845.53.1646749975436.JavaMail.Administrator@belnbdev>
Subject: subject
MIME-Version: 1.0
Content-Type: multipart/mixed; 
    boundary="----=_Part_52_541745725.1646749975436"

------=_Part_52_541745725.1646749975436
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

body
------=_Part_52_541745725.1646749975436
Content-Type: application/octet-stream; name=Attachement
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=Attachement

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
------=_Part_52_541745725.1646749975436--

I’m trying to open it like this in outlook with javascript

ex.replace('body','<html><body>');
                ex += '</body></html>';
                var encodedUri = encodeURI(ex); //encode spaces etc like a url
                var a = document.createElement('a'); //make a link in document
                var linkText = document.createTextNode("fileLink");
                a.appendChild(linkText);
                a.href = encodedUri;
                a.id = 'fileLink';
                a.download = 'download.eml';
                a.style = "display:none;"; //hidden link
                document.body.appendChild(a);
                document.getElementById('fileLink').click();

But it gives me the error

Failed to launch 'from:%20from%0D%0ATo:%20to%0D%0AMessage-ID:%20%3C-870410845.53.1646749975436.JavaMail.Administrator@belnbdev%3E%0D%0ASubject:%20subject%0D%0AMIME-Version:%201.0%0D%0AContent-Type:%20multipart/mixed;%20%0D%0A%09boundary=%22----=_Part_52_541745725.1646749975436%22%0D%0A%0D%0A------=_Part_52_541745725.1646749975436%0D%0AContent-Type:%20text/plain;%20charset=us-ascii%0D%0AContent-Transfer-Encoding:%207bit%0D%0A%0D%0Abody%0D%0A------=_Part_52_541745725.1646749975436%0D%0AContent-Type:%20application/octet-stream;%20name=Attachement%0D%0AContent-Transfer-Encoding:%20base64%0D%0AContent-Disposition:%20attachment;%20filename=Attachement%0D%0A%0D%0A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%0D%0A------=_Part_52_541745725.1646749975436--%0D%0A%3C/body%3E%3C/html%3E' **because the scheme does not have a registered handler**.

How to solve the doesn’t have a registred handler error?

Or how do i have to write the javascript properly? Or should i handle the eml response differently?

Thanks in advance

How can I console.log the last value from a for loop?

I am trying to get the last value from a for loop. I have tried a number of things including pop() and lastchild but all I get is the “This is not a function” error. Can someone offer any help with this?

  var totalAppointments =  Array.from(recordXmlNode.children[1].innerHTML);

  var numberAppointments = totalAppointments.map(Number);


  for (let i = 0; i < numberAppointments.length; i++) {
       sum += numberAppointments[i];
  }

  console.log(sum);

Thanks

possible to use variable variables to reference the real object stored as a reference in JSON from a nodejs function

Is it possible to use variable variables in JS so that a JSON config file can be used to set the required object name and be accessed by a function?

take the following POST express code

//form passed to express has a field
req.body = {"myFieldA":"hello","myFieldB":"world"}

// store that as a reference in a JSON config file
config.js
{
   myFields:{
     alpha:"req.body.myFieldA",
     beta: "req.body.myFieldB"
   }
 }


//in server.js access the object by the JSON reference
import config from './config.js';
myVal = config.myFields.alpha;

// myval should now = "hello"

confused about scoping rules in the functions [duplicate]

I have just decided to learn the programming concept of javascript. And I can’t skip the parts which i dont understand while im learning something.

I was reading this page and trying to understand difference between var and let; https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

After the read the scoping rules part, i have run those two code blocks;

function x() {
    var x = 5;
    {
        var x = 6;
        console.log("inner: " + x);
    }
    console.log("outer: " + x);
}

x();

The output was;

inner: 6
outer: 6

But in the this version;

function x() {
    var x = 5;
    function y() {
        var x = 6;
        console.log("inner: " + x);
    }
    y();
    console.log("outer: " + x);
}

x();

The output was;

inner: 6
outer: 5

Im just wondering which language concept causes this difference? In the both code, { } and function y() are in the function x() scope. Isnt it? What am i missing?

How to save afterSaveCell in react bootstrap save to database

I am using react-bootstrap-table-next to implement crud functionalities. I need a situation whereby after the inline editing is done the data is saved to the database. Right now, after reloading the page the data-table returns back to its initial state.

These are my codes below

const

   const [data, setData] = useState([]);
   const apiUrl = 'api/terminals';

cellEdit-block

   const cellEdit = cellEditFactory({
   mode: 'dbclick',
   blurToSave: true,
   afterSaveCell: onAfterSaveCell,
   }); 

api call

const onAfterSaveCell = (value, name) => {
axios({
method: 'POST',
url: apiUrl,
headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json',
  },
  data: {
    name: value[name],
  },
  }).then(response => {
  setData(response);
});
};

jsx

 <>
    <BootstrapTable
    keyField="id"
    data={data}
    columns={columns}
    striped
    hover
    condensed
    pagination={paginationFactory()}
    cellEdit={cellEdit}
    filter={filterFactory()}
    noDataIndication="Table is Empty"
    
  />
 </>

I get these errors on the console when I try this formula

   react.development.js:220 Warning: Failed prop type: Invalid prop `data` of type `object` 
   supplied to `DataProvider`, expected `array`.

TypeError: Cannot read properties of null (reading ‘concat’)

if (ctrl.initialized.MedicalHistoryForms) {
  var clonedList = _.cloneDeep($scope.timelineRecords);
  clonedList = ctrl.resetItemsInTimeLine(ctrl.medicalHistoryForms, clonedList, 'MedicalHx', 'FormAnswersId');
  $scope.timelineRecords = clonedList;
} else {
  $scope.timelineRecords = $scope.timelineRecords.concat(ctrl.medicalHistoryForms);
  ctrl.initialized.MedicalHistoryForms = true;
}

Redirecting script on webpage with delay location.redirect not working javascript

This is in script tag in my base html

 const arraypathname = [`array of paths`]

 var i = 0; 

```
this function loops array of paths and should redirect on every path url from array  with delay
```

function redirectFunc(){
  setTimeout(function() {  
    var path_to_redirect = arraypathname[i];
    window.location.redirect(path_to_redirect);
    
        ```
this doesn work when i used alert() with path it work and every 3 sec i get alert with different path. Why windows.location.replace not working?
        ```
    i++;             
    if (i < 10) {         
      redirectFunc();      
    }                      
  }, 3000)
  
}

```
i have a base.html file witch is used on every page on my site and i want to do presentation script witch will loop through all paths on web with delay
```

i dont now why its not working like that when i used alert(path_to_redirect) every
3 seconds it alert me with url

Merge objects in array based on one key using reduce

I have array of objects:

[{sku: "BS-WHITE-1", GB: 15, total: 0, inbound: 0, available: 0, …},
{sku: "BS-WHITE-1", DE: 4},
{sku: "BS-WHITE-1", ES: 0},
{sku: "BS-WHITE-1", IT: 3},
{sku: "BS-WHITE-1", FR: 0},
{sku: "BS-WHITE-2", GB: 19, total: 40, inbound: 0, available: 40, …}
{sku: "BS-WHITE-2", DE: 2},
{sku: "BS-WHITE-2", FR: 5},
{sku: "BS-WHITE-2", ES: 3},
{sku: "BS-WHITE-2", IT: 6},
{sku: "BS-WHITE-3", GB: 21, total: 51, inbound: 1, available: 50, …}
{sku: "BS-WHITE-3", DE: 1},
{sku: "BS-WHITE-3", ES: 1},
{sku: "BS-WHITE-3", IT: 2},
{sku: "BS-WHITE-3", FR: 2},
{sku: "BS-WHITE-4", GB: 43, total: 42, inbound: 8, available: 31, …},
{sku: "BS-WHITE-4", DE: 8},
{sku: "BS-WHITE-4", FR: 7},
{sku: "BS-WHITE-4", ES: 3},
{sku: "BS-WHITE-4", IT: 17}]

And I want to merge objects based on key “sku” to get

[{sku: "BS-WHITE-1", GB: 15, DE: 4,ES: 0,IT: 3, FR: 0, total: 0, …},
{sku: "BS-WHITE-2", GB: 19, DE: 2,ES: 3,IT:6, FR: 5, total: 0, …},
{sku: "BS-WHITE-3", GB: 21, DE: 1,ES: 1,IT:2, FR: 2, total: 0, …},
{sku: "BS-WHITE-4", GB: 43, DE: 8,ES: 3,IT:17, FR: 7, total: 0, …}]

to do it I use reduce

const out = map.reduce((a, v) => {
  if (a[v.sku]) {
    a[v.sku].GB = a[v.sku].GB; //ok
    a[v.sku].DE = (v.DE) ? v.DE : 222; //?
    a[v.sku].FR = a[v.sku].FR ? a[v.sku].FR : 555; //?
    a[v.sku].IT = 2; //
    a[v.sku].ES = a[v.sku].ES; //?
  } else {
    a[v.sku] = v;
  }
  return a;
}, {});
console.log(Object.values(out));
<script>
const map = [{sku: "BS-WHITE-1", GB: 15, total: 0, inbound: 0, available: 0 },
    {sku: "BS-WHITE-1", DE: 4},
    {sku: "BS-WHITE-1", ES: 0},
    {sku: "BS-WHITE-1", IT: 3},
    {sku: "BS-WHITE-1", FR: 0},
    {sku: "BS-WHITE-2", GB: 19, total: 40, inbound: 0, available: 40},
    {sku: "BS-WHITE-2", DE: 2},
    {sku: "BS-WHITE-2", FR: 5},
    {sku: "BS-WHITE-2", ES: 3},
    {sku: "BS-WHITE-2", IT: 6},
    {sku: "BS-WHITE-3", GB: 21, total: 51, inbound: 1, available: 50},
    {sku: "BS-WHITE-3", DE: 1},
    {sku: "BS-WHITE-3", ES: 1},
    {sku: "BS-WHITE-3", IT: 2},
    {sku: "BS-WHITE-3", FR: 2},
    {sku: "BS-WHITE-4", GB: 43, total: 42, inbound: 8, available: 31},
    {sku: "BS-WHITE-4", DE: 8},
    {sku: "BS-WHITE-4", FR: 7},
    {sku: "BS-WHITE-4", ES: 3},
    {sku: "BS-WHITE-4", IT: 17}]
</script>    

Unfortunately, I can’t find values of keys DE, FR, IT, ES which are in other objects. Only the first GB is OK. Any help?

If a point in lng and lat is on line Segment or it only 2 meters away

Here is what I am trying to achieve,( please do not put duplicate has I cannot ask questions),I want to find if the point cLng, cLat is on the Segment line aLng,alat to bLng,bLng. My problem is that my distance check is not working at 2.00 meters which is EPSILON.
Any help in improving this code would be much appreciated.

        var crossProduct = (cLat - aLat) * (bLng - aLng) - (cLng - aLng) * (bLat - aLat);
        if (Math.Abs(crossProduct) == 0)
        {
            return true;
        }
        
        var dotProduct = (cLng - aLng) * (bLng - aLng) + (cLat - aLat) * (bLat - aLat);

        var squaredLength = (bLng - aLng) * (bLng - aLng) + (bLat - aLat) * (bLat - aLat);
        

        var param = -1d;
        if (squaredLength != 0) //in case of 0 length line
        {
            param = dotProduct / squaredLength;
        }

        double xx = param < 0 ? aLng : param >  1 ? bLng: aLng + param * bLng - aLng;
        double yy = param < 0 ? aLat : param >  1 ? bLat: aLat + param * bLat - aLat; 
        var dx = cLng - xx;
        var dy = cLat - yy;
        var sqrt = Math.Sqrt(dx * dx + dy * dy);
        return sqrt < EPSILON;

Place string based on the format on an Array

Hi all sorry if the title is not right but i don’t know how to put it in a title haha, my first post!

explanation: I have a javascript code in a file and i want to put it as text in an Array!
also heads up, i am using React-ts

Basically the js file:

console.log('test me')
const data = 'my data'
const numbData = 1233
const myObj = {data: 123123}
const myArr = ['ewqeqw', '132312']
function myFunc(param) {
    console.log(param)
}
myFunc('testFunc')

What i tried:

  const [updated, setUpdate] = useState<boolean>(false);
  const [file, setFile] = useState();
  const areaRef = useRef<HTMLTextAreaElement | null>(null);
  const codeRef = useRef<HTMLParagraphElement | null>(null);

  const reader = new FileReader();

  function handleChange(event: any) {
    setFile(event.target.files[0]);
  }

  reader.addEventListener('loadend', function () {
    document.getElementById('newText').innerHTML = reader.result;
    setUpdate(true);
  });

  if (file) {
    reader.readAsText(file);
  }

  if (updated) {
    let data = codeRef.current?.innerText;
    let bodyTextArray = data?.split(/(n)/);
    console.log(data);
    console.log(bodyTextArray);
  }

What i get :
Console Log result

What i want:

[“console.log(‘test me’)”, “const data = ‘my data'”, “const numbData = 1233”, “const myObj = {data: 123123}”, “const myArr = [‘ewqeqw’, ‘132312’]”, “function myFunc(param) {
console.log(param)
}”, “myFunc(‘testFunc’)”]

Basically every peice of code (variable declaration, functions…) on it’s own!

Thank you and any solution would be be appreciated!

Passing two spread objects as props on a conditional basis

I have a component which is currently taking in a object value as a prop which is being spread.

const primaryProps = {/* about 10 key/values in here */}

<Component
  {...primaryProps}
/>

This works as intended. But now I am try to add an OR to it and add another object which is spread. But this is throwing syntax errors. Is there a way around it? Thanks.

Tried following which doesn’t work.

const primaryProps = {/* about 10 key/values in here. Can also be empty/null */}
const secondaryProps = {/* about 10 key/values in here */}

<Component
  {...primaryProps || ...secondaryProps}
/>


<Component
  `${primaryProps.join(",") || secondaryProps.join(",")}`
/>