var filterDefaults = function()

in public/lib/filter-defaults.js [26:217]


var filterDefaults = function (statuses, wfFiltersService, featureSwitches = {}) {

    return [
        {
            title: 'Status',
            namespace: 'status',
            listIsOpen: true,
            multi: true,
            filterOptions: statuses.map((status) => {
                return {
                    caption: status,
                    value: status
                };
            })
        },
        {
            title: 'Your Content',
            listIsOpen: false,
            individualNamespaces: true,
            multi: true,
            filterOptions: [
                { caption: 'Assigned to you', value: _wfConfig.user.email, namespace: 'assigneeEmail' },
                { caption: 'Edited by you', value: _wfConfig.user.email, namespace: 'touched' }
            ]
        },
        {
            title: 'Content type',
            namespace: 'article-format',
            listIsOpen: false,
            multi: true,
            filterOptions: [
                { caption: 'Article', value: 'article', icon: 'article' },
                { caption: 'Gallery', value: 'gallery', icon: 'gallery' },
                { caption: 'Interactive', value: 'interactive', icon: 'interactive' },
                { caption: 'Liveblog', value: 'liveblog', icon: 'liveblog' },
                { caption: 'Picture', value: 'picture', icon: 'picture' },
                { caption: 'Video', value: 'video,media', icon: 'video' },
                { caption: 'Audio', value: 'audio', icon: 'audio' },
                ...provideListElementFormatsForFilterList(featureSwitches),
                ...provideNonListElementDisplayHintFormatsForFilterList(),
            ]
        },
        {
            title: 'Atom type',
            namespace: 'atom-type',
            listIsOpen: false,
            multi: true,
            filterOptions: [
                { caption: 'Media', value: 'media', icon: 'media' },
                { caption: 'Charts', value: 'chart', icon: 'chart' }
            ]
        },
        {
            title: 'Created',
            namespace: 'created',
            listIsOpen: false,
            filterOptions: [
                { caption: 'Yesterday', value: 'yesterday' },
                { caption: 'Today', value: 'today' },
                { caption: 'Last 24 hours', value: 'last24' },
                { caption: 'Last 48 hours', value: 'last48' }
            ]
        },
        {
            title: 'State',
            namespace: 'state',
            listIsOpen: false,
            multi: false,
            filterOptions: [
                { caption: 'Draft', value: 'draft' },
                { caption: 'Published', value: 'published' },
                { caption: 'Taken down', value: 'takendown' },
                { caption: 'Scheduled', value: 'scheduled' },
                { caption: 'Embargoed', value: 'embargoed' }
            ]
        },
        {
            title: 'Flags',
            namespace: 'flags',
            listIsOpen: false,
            multi: true,
            filterOptions: [
                { caption: 'Needs Legal', value: 'needsLegal' },
                { caption: 'Legal approved', value: 'legalApproved' },
                { caption: 'Needs Picture Desk', value: 'needsPictureDesk' },
                { caption: 'Picture Desk checked', value: 'pictureDeskChecked' }
            ]
        },
        {
            title: 'Deadline',
            namespace: 'deadline',
            listIsOpen: false,
            filterOptions: [
                { caption: 'Today', value: 'today' },
                { caption: 'Tomorrow', value: 'tomorrow' },
                { caption: 'This weekend', value: 'weekend' },
                {
                    caption: 'Choose date',
                    value: 'customDate',
                    url: '/assets/components/sidebar-filter/custom-filter-templates/deadline-date-select.html'
                }
            ],

            /**
             * Custom linking function that enables the use of a date dropdown for a filter option
             */
            customLinkFunction: ['wfDateParser', '$scope', (wfDateParser, $scope) => {

                $scope.dateOptions = wfDateParser.getDaysThisWeek();
                const storedSelectedDate = wfFiltersService.get('deadline');
                const deadline = storedSelectedDate ? storedSelectedDate : '';

                // Can our deadline be parsed into a date?
                // If so, it's a custom date filter (rather than 'today', 'tomorrow' etc)
                const parsedDate = moment(deadline)
                if (parsedDate.isValid()) {
                    $scope.selectedFilters = ['customDate']
                }

                $scope.select = { // Angular weirdness
                    deadline: new Date(deadline)
                };

                $scope.deadlineSelectActive = function () {
                    return moment($scope.select.deadline).isValid();
                };

                $scope.$watch('select.deadline', function (newValue, oldValue) {
                    if (newValue !== oldValue && newValue) {  // Prevents fire change event on init
                        $scope.$emit('filtersChanged.deadline', $scope.select.deadline);
                        if (newValue !== null) {
                            $scope.selectFilter('customDate');
                        } else {
                            $scope.selectedFilters = [];
                        }
                    }
                });
            }]
        },
        {
            title: 'InCopy',
            namespace: 'incopy',
            listIsOpen: false,
            multi: false,
            filterOptions: [
                { caption: 'In InCopy', value: 'true' },
                { caption: 'Not in InCopy', value: 'false' }
            ]
        },
        {
            title: 'Print Info',
            namespace: 'hasPrintInfo',
            listIsOpen: false,
            multi: false,
            filterOptions: [
                { caption: 'Has page number', value: 'true' },
                { caption: 'No page number', value: 'false' }
            ]
        },
        {
            title: 'Main Media',
            namespace: 'hasMainMedia',
            listIsOpen: false,
            multi: false,
            filterOptions: [
                { caption: 'Has Main Media', value: 'true' },
                { caption: 'No Main Media', value: 'false' }
            ]
        },
        {
            title: 'Syndication',
            namespace: 'rights',
            listIsOpen: false,
            multi: false,
            filterOptions: [
                { caption: 'Has any rights set', value: 'has-rights' },
                { caption: 'No rights set', value: 'no-rights' },
                { caption: 'Reviewed', value: 'reviewed' },
                { caption: 'Needs review', value: 'not-reviewed' }
            ]
        },
        {
            title: 'Trashed',
            namespace: 'trashed',
            listIsOpen: false,
            multi: false,
            filterOptions: [
                { caption: 'Trashed', value: 'true' }
            ]
        } // When adding filters, please keep Trashed at the bottom per Mariana / Mateusz request
    ].filter(notEmpty);
};