pcon / SalesforceApps

A collection of apps written for the Salesforce platform
GNU General Public License v2.0
36 stars 12 forks source link

Add advanced search functionality to object list #7

Open pcon opened 6 years ago

pcon commented 6 years ago

Need to covert the code below to SLDS styling and add it to the objDesc app's sidebar search

<div>
    <a style="margin-right: 5px; width: 100%;" class="pull-right text-right" onclick="toggleAdvancedSearch()" data-toggle="collapse" aria-expanded="false" aria-controls="advancedSearch">Advanced...</a>
</div>
<div class="clearfix"></div>
<div class="collapse" id="advancedSearch">
    <div style="width: 100%;" class="form-group">
        <label for="namespace" class="text-muted" style="font-weight: normal;">Namespace</label>
        <select class="pull-right form-control" id="namespace" ng-model="namespace">
            <option value="all" selected>All</option>
            <option value="none">None</option>
            <option ng-repeat="namespace in namespaces" value="{{ namespace }}">{{ namespace }}</option>
        </select>
    </div>
    <div style="width: 100%;" class="form-group">
        <label class="text-muted" style="width: 100%; font-weight: normal;">Include Tags <input type="checkbox" class="pull-right" ng-model="includeTags"></label>
    </div>
    <div style="width: 100%;" class="form-group">
        <label class="text-muted" style="width: 100%; font-weight: normal;">Include History <input type="checkbox" class="pull-right" ng-model="includeHistory"></label>
    </div>
    <div style="width: 100%;" class="form-group">
        <label class="text-muted" style="width: 100%; font-weight: normal;">Include Shares <input type="checkbox" class="pull-right" ng-model="includeShares"></label>
    </div>
</div>

Also an update to the query

<li ng-repeat="object in objects | filterNamespace:namespace | removeTags:includeTags | removeShares:includeShares | removeHistory:includeHistory | filter:query">

Will also require the following to the controller

function getNamespace(name) {
    'use strict';
    var name_parts = name.replace(/__c$/, '').replace(/__Tag$/, '').replace(/__History$/).replace(/__Share$/).split('__');
    if (name_parts.length === 2) {
        return name_parts[0];
    }
    return undefined;
}

//CUT
$scope.namespaces = [];
_.forEach($scope.objects, function (object) {
    var namespace = getNamespace(object.name);
    if (namespace) {
        $scope.namespaces.push(namespace);
    }
});
$scope.namespaces = _.sortedUniq($scope.namespaces);
$scope.namespace = 'all';

//CUT
angular.module('ccmApp').filter('removeTags', function () {
    'use strict';
    return function (objects, includeTags) {
        if (includeTags) {
            return objects;
        }
        return filterName(objects, '__tag');
    };
});
angular.module('ccmApp').filter('removeShares', function () {
    'use strict';
    return function (objects, includeShares) {
        if (includeShares) {
            return objects;
        }
        return filterName(objects, '__share');
    };
});
angular.module('ccmApp').filter('removeHistory', function () {
    'use strict';
    return function (objects, includeHistory) {
        if (includeHistory) {
            return objects;
        }
        return filterName(objects, '__history');
    };
});

angular.module('ccmApp').filter('filterNamespace', function () {
    'use strict';
    return function (objects, namespace) {
        if (!namespace || namespace === 'all') {
            return objects;
        }
        var results = [];
        _.forEach(objects, function (object) {
            if (namespace === 'none') {
                if (getNamespace(object.name) === undefined) {
                    results.push(object);
                }
            } else if (_.startsWith(object.name.toLowerCase(), namespace.toLowerCase() + '__')) {
                results.push(object);
            }
        });
        return results;
    };
});