mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-21 00:52:55 +00:00
78 lines
2.5 KiB
TypeScript
78 lines
2.5 KiB
TypeScript
/*
|
|
* Copyright (C) 2023 StApps
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the Free
|
|
* Software Foundation, version 3.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
import {Component, OnInit} from '@angular/core';
|
|
import {Router} from '@angular/router';
|
|
import {NewsPageComponent} from '../../../news/page/news-page.component';
|
|
import {NewsProvider} from '../../../news/news.provider';
|
|
import {SettingsProvider} from '../../../settings/settings.provider';
|
|
import {newsFilterSettingsFieldsMapping, NewsFilterSettingsNames} from '../../../news/news-filter-settings';
|
|
import {DataProvider} from '../../../data/data.provider';
|
|
import {SCSearchValueFilter} from '@openstapps/core';
|
|
import {animate, style, transition, trigger} from '@angular/animations';
|
|
|
|
/**
|
|
* Shows a section with news
|
|
*/
|
|
@Component({
|
|
selector: 'stapps-news-section',
|
|
templateUrl: 'news-section.component.html',
|
|
styleUrls: ['news-section.component.scss'],
|
|
animations: [
|
|
trigger('fade', [
|
|
transition(':enter', [
|
|
style({opacity: '0', transform: 'translateX(100px)'}),
|
|
animate('250ms ease', style({opacity: '1', transform: 'translateX(0)'})),
|
|
]),
|
|
]),
|
|
],
|
|
})
|
|
export class NewsSectionComponent extends NewsPageComponent implements OnInit {
|
|
pageSize = 5;
|
|
|
|
/**
|
|
* A map of the filters where the keys are settings names
|
|
*/
|
|
filtersMap = new Map<NewsFilterSettingsNames, SCSearchValueFilter>();
|
|
|
|
constructor(newsProvider: NewsProvider, settingsProvider: SettingsProvider, private router: Router) {
|
|
super(newsProvider, settingsProvider);
|
|
}
|
|
|
|
async ngOnInit() {
|
|
await super.ngOnInit();
|
|
for (const setting of this.settings) {
|
|
this.filtersMap.set(
|
|
setting.name as NewsFilterSettingsNames,
|
|
DataProvider.createValueFilter(
|
|
newsFilterSettingsFieldsMapping[setting.name as NewsFilterSettingsNames],
|
|
setting.value as string,
|
|
),
|
|
);
|
|
}
|
|
|
|
this.filters = [...this.filtersMap.values()];
|
|
|
|
try {
|
|
await this.fetchNews();
|
|
} catch {
|
|
this.news = [];
|
|
}
|
|
}
|
|
|
|
onMoreNewsClicked() {
|
|
void this.router.navigate(['/news']);
|
|
}
|
|
}
|