l filtro @angularjs se basa en valores coincidentes en una matriz anidada

Aquí está mi código. Ejecute el script para ver cómo funciona:

var app = angular.module('myApp', []);

app.controller('listdata', function($scope, $http) {
var data = [{
    "name": "John",
    "queue": [{
        "number": "456",
        "status": "Unavailable"
    },
    {
        "number": "111",
        "status": "Unavailable"
    },
    {
        "number": "201",
        "status": "Paused"
    }],
    "phone": "7411173737"
},
{
    "name": "George",
    "queue": [{
        "number": "111",
        "status": "Paused"
    },
    {
        "number": "456",
        "status": "Unavailable"
    }],
    "phone": "8558855858"
},
{
    "name": "Hilary",
    "queue": [{
        "number": "456",
        "status": "Unavailable"
    }],
    "phone": "5454573737"
},
{
    "name": "Edmond",
    "queue": [{
        "number": "665",
        "status": "Unavailable"
    }],
    "phone": "7454543737"
}];
$scope.a = [];
$scope.users = [];
for(i=0;i<data.length;i++){
    for(j=0;j<data[i].queue.length;j++){
        if(data[i].queue[j].number == 111 || data[i].queue[j].number == 456){
            $scope.a.push(data[i]);
        }
    }
}
$scope.users = $scope.a;
//console.log($scope.users);
   $scope.filter111 = function (user) {
            return (user.queue.find(({number}) => number === '111'));
        }
    $scope.filter456 = function (user) {
           return (user.queue.find(({number}) => number === '456'));
        }
});

app.filter('unique', function() {
   return function(collection, keyname) {
      var output = [],
          keys = [];
      angular.forEach(collection, function(item) {
          var key = item[keyname];
          if(keys.indexOf(key) === -1) {
              keys.push(key);
              output.push(item);
          }
      });
      return output;
   };
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="myApp">

<label class="switch">
  <input type="checkbox" ng-model="queue111">111
</label>
<label class="switch">
  <input type="checkbox" ng-model="queue456">456
</label>
<label class="switch">
  <input type="checkbox" ng-true-value='"Paused"' ng-false-value='' ng-model="paused">Paused
</label>
<div class="row" ng-controller="listdata">

  <div ng-repeat="user in users|filter: queue111? filter111: ''|unique:'name'|filter: queue456? filter456: ''|filter: paused track by $index">
    <p> {{user.name}} {{user.phone}}</p>
  </div>
</div>

</div>

Del código anterior, mi matriz de datos contiene objetos que tienen el nombre de un usuario, su número de teléfono y la cola de llamadas a la que pertenece.

Tengo cuatro colas de llamadas 111,456,201 y 665 respectivamente.

Un usuario puede estar en cualquier número de colas de llamadas. He filtrado los datos en el controlador de modo que solo muestre a los usuarios que pertenecen a la cola 111 o a la cola 456 en el extremo frontal.

Así que, desde mi código, el usuario Edmond pertenece a la cola 665, por lo tanto, sus detalles no se muestran en el front end. Los otros 3 usuarios pertenecen a 111, 456 o ambos, por lo tanto, sus detalles se muestran en el panel de usuario.

Entonces, el filtro 111 muestra solo aquellos usuarios que pertenecen a la cola 111. El filtro 456 mostrará solo aquellos usuarios que pertenecen a la cola 456.

Ahora un usuario tiene un estado para cada cola. El estado puede ser comoUnavailable, Paused etc.

Tengo un filtro llamadoPaused en el extremo frontal, como se muestra en el código, y se supone que este filtro solo generará aquellos usuarios cuyo estado esté Pausado en la cola 111 o 456 solamente. No debería enviar al usuario si su estado no está en pausa en 111 o 456.

Cuando hago clic enPaused filter muestra el nombre de John y George. Esta salida es realmente incorrecta porque solo quiero mostrar aquellos cuyo estado está en pausa en la cola 111 o 456. Por lo tanto, en la salida, el resultado para George es correcto, ya que su estado es Pausado en la cola 456, pero para John la salida es incorrecta, ya que no está en pausa en la cola 111 o 456. Está en pausa en la cola 201 y todavía lo muestra el filtro en pausa que no es el resultado esperado.

La salida esperada es que solo debe mostrar datos para George, ya que en realidad pertenece a una de las dos colas (111 o 456) y su estado se detiene en una de las colas (111 o 456) que estoy mostrando en la interfaz cuando Hago clic en el filtro En pausa. ¿Cómo hago esto

Respuestas a la pregunta(1)

Su respuesta a la pregunta