JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js"></script>
<div ng-controller="FilterController">
    <p>Prio:</p>
    <p>
    <div ng-repeat="prio in prios">
        <input type="checkbox" ng-model="prio.checked"> {{prio.id}}
    </div>
    </p>

    <p>Type:</p>
    <p>
    <div ng-repeat="type in types">
        <input type="checkbox" ng-model="type.checked"> {{type.id}}
    </div>
    </p>
    <p>
        {{ filteredItems.length }} items
    </p>
    <ul class="unstyled">
        <!--<li ng-repeat="vorgang in items | filter:doFilterPrio">-->
        <li ng-repeat="item in filteredItems = (items | byPrio: prios | byTyp: types)">
            Id: {{item.id}}
            Prio: {{item.prio}}
            Typ: {{item.type}}
        </li>
    </ul>
</div>

JavaScript

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

strugApp.factory('dummyData', function () {
    var items = [];
    for (var i = 0; i < 30; i++) {
        var randomVal = Math.floor((Math.random()*3)+1); // random zw. 1-3
        var prio;
        switch (randomVal) {
            case 1: prio = "high"; break;
            case 2: prio = "normal"; break;
            case 3: prio = "low"; break;
        }
        randomVal = Math.floor((Math.random()*3)+1); // random zw. 1-3
        var type;
        switch (randomVal) {
            case 1: type = "A"; break;
            case 2: type = "B"; break;
            case 3: type = "C"; break;
        }
        randomVal = Math.floor((Math.random()*1000)+1);
        var item = {id: randomVal, prio: prio, type:type};
        items.push(item);
    }
//    console.log(JSON.stringify(items))
    return items;
});


function FilterController($scope, dummyData) {

    $scope.items = dummyData;

    $scope.types = [{id: 'A', checked :false}, {id: 'B', checked:false}, {id: 'C', checked:false}];

    $scope.prios = [{id: 'high', checked :false}, {id: 'normal', checked:false}, {id: 'low', checked:false}];

    $scope.filteredItems = [];

}

strugApp.filter('byPrio', function () {
    return function (items, prios) {
        var filteredItems = [];
        for (var i = 0; i < items.length; i++) {
            var item = items[i];

            var noneIsChecked = true;
            for (var j = 0; j < prios.length; j++) {
                if (prios[j].checked == true) {noneIsChecked = false; };
                if (prios[j].id == item.prio && prios[j].checked == true) {
                    filteredItems.push(item);
                }
            }
            if (noneIsChecked) {
                filteredItems.push(item);
            }
        }
        return filteredItems;
    };
})

strugApp.filter('byTyp', function () {
    return function (items, types) {
        var filteredItems = [];
        for (var i = 0; i < items.length; i++) {
 ...