mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-22 01:22:54 +00:00
feat: update components
This commit is contained in:
@@ -13,10 +13,25 @@
|
|||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {Component, Input} from '@angular/core';
|
import {Component, Input} from '@angular/core';
|
||||||
import {AlertController} from '@ionic/angular/standalone';
|
import {
|
||||||
|
AlertController,
|
||||||
|
IonCard,
|
||||||
|
IonCardContent,
|
||||||
|
IonCardHeader,
|
||||||
|
IonCardSubtitle,
|
||||||
|
IonInput,
|
||||||
|
IonItem,
|
||||||
|
IonNote,
|
||||||
|
IonSelect,
|
||||||
|
IonSelectOption,
|
||||||
|
IonToggle,
|
||||||
|
} from '@ionic/angular/standalone';
|
||||||
import {LangChangeEvent, TranslateService} from '@ngx-translate/core';
|
import {LangChangeEvent, TranslateService} from '@ngx-translate/core';
|
||||||
import {SCLanguageCode, SCSetting, SCSettingValue, SCSettingValues} from '@openstapps/core';
|
import {SCLanguageCode, SCSetting, SCSettingValue, SCSettingValues} from '@openstapps/core';
|
||||||
import {SettingsProvider} from '../settings.provider';
|
import {SettingsProvider} from '../settings.provider';
|
||||||
|
import {CommonModule, NgForOf, NgIf, NgSwitch, NgSwitchCase} from '@angular/common';
|
||||||
|
import {ThingTranslateModule} from '../../../translation/thing-translate.module';
|
||||||
|
import {FormsModule} from '@angular/forms';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setting item component
|
* Setting item component
|
||||||
@@ -25,6 +40,26 @@ import {SettingsProvider} from '../settings.provider';
|
|||||||
selector: 'stapps-settings-item',
|
selector: 'stapps-settings-item',
|
||||||
templateUrl: 'settings-item.html',
|
templateUrl: 'settings-item.html',
|
||||||
styleUrls: ['settings-item.scss'],
|
styleUrls: ['settings-item.scss'],
|
||||||
|
standalone: true,
|
||||||
|
imports: [
|
||||||
|
IonCard,
|
||||||
|
IonCardHeader,
|
||||||
|
NgIf,
|
||||||
|
CommonModule,
|
||||||
|
ThingTranslateModule,
|
||||||
|
IonCardSubtitle,
|
||||||
|
IonCardContent,
|
||||||
|
IonNote,
|
||||||
|
NgSwitch,
|
||||||
|
IonItem,
|
||||||
|
IonInput,
|
||||||
|
FormsModule,
|
||||||
|
IonToggle,
|
||||||
|
IonSelect,
|
||||||
|
NgSwitchCase,
|
||||||
|
IonSelectOption,
|
||||||
|
NgForOf,
|
||||||
|
],
|
||||||
})
|
})
|
||||||
export class SettingsItemComponent {
|
export class SettingsItemComponent {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -14,20 +14,22 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<ion-card *ngIf="setting">
|
<ion-card *ngIf="setting">
|
||||||
<ion-card-header
|
@if (setting.name && setting.description) {
|
||||||
*ngIf="
|
<ion-card-header
|
||||||
{
|
*ngIf="
|
||||||
name: ('name' | thingTranslate: setting | titlecase),
|
{
|
||||||
desc: ('description' | thingTranslate: setting | titlecase)
|
name: ('name' | thingTranslate: setting | titlecase),
|
||||||
};
|
desc: ('description' | thingTranslate: setting | titlecase)
|
||||||
let vals
|
};
|
||||||
"
|
let vals
|
||||||
>
|
"
|
||||||
<ion-card-subtitle>
|
>
|
||||||
{{ vals.name }}
|
<ion-card-subtitle>
|
||||||
<ion-icon *ngIf="compactView" name="info" (click)="presentAlert(vals.name, vals.desc)"></ion-icon>
|
{{ vals.name }}
|
||||||
</ion-card-subtitle>
|
<ion-icon *ngIf="compactView" name="info" (click)="presentAlert(vals.name, vals.desc)"></ion-icon>
|
||||||
</ion-card-header>
|
</ion-card-subtitle>
|
||||||
|
</ion-card-header>
|
||||||
|
}
|
||||||
<ion-card-content>
|
<ion-card-content>
|
||||||
<ion-note *ngIf="!compactView">{{ 'description' | thingTranslate: setting | titlecase }}</ion-note>
|
<ion-note *ngIf="!compactView">{{ 'description' | thingTranslate: setting | titlecase }}</ion-note>
|
||||||
|
|
||||||
|
|||||||
@@ -15,14 +15,28 @@
|
|||||||
|
|
||||||
import {Component, OnInit} from '@angular/core';
|
import {Component, OnInit} from '@angular/core';
|
||||||
import {AddEventReviewModalComponent} from '../../calendar/add-event-review-modal.component';
|
import {AddEventReviewModalComponent} from '../../calendar/add-event-review-modal.component';
|
||||||
import {ModalController} from '@ionic/angular/standalone';
|
import {
|
||||||
|
IonButton,
|
||||||
|
IonCard,
|
||||||
|
IonCardContent,
|
||||||
|
IonCardHeader,
|
||||||
|
IonCardSubtitle,
|
||||||
|
IonIcon,
|
||||||
|
IonItem,
|
||||||
|
IonItemDivider,
|
||||||
|
IonItemGroup,
|
||||||
|
IonLabel,
|
||||||
|
IonList,
|
||||||
|
IonToggle,
|
||||||
|
ModalController,
|
||||||
|
} from '@ionic/angular/standalone';
|
||||||
import {ScheduleProvider} from '../../calendar/schedule.provider';
|
import {ScheduleProvider} from '../../calendar/schedule.provider';
|
||||||
import {Directory, Encoding, Filesystem} from '@capacitor/filesystem';
|
import {Directory, Encoding, Filesystem} from '@capacitor/filesystem';
|
||||||
import {Share} from '@capacitor/share';
|
import {Share} from '@capacitor/share';
|
||||||
import {Device} from '@capacitor/device';
|
import {Device} from '@capacitor/device';
|
||||||
import {Dialog} from '@capacitor/dialog';
|
import {Dialog} from '@capacitor/dialog';
|
||||||
import {SCUuid} from '@openstapps/core';
|
import {SCUuid} from '@openstapps/core';
|
||||||
import {TranslateService} from '@ngx-translate/core';
|
import {TranslateModule, TranslateService} from '@ngx-translate/core';
|
||||||
import {StorageProvider} from '../../storage/storage.provider';
|
import {StorageProvider} from '../../storage/storage.provider';
|
||||||
import {ScheduleSyncService} from '../../background/schedule/schedule-sync.service';
|
import {ScheduleSyncService} from '../../background/schedule/schedule-sync.service';
|
||||||
import {CalendarService} from '../../calendar/calendar.service';
|
import {CalendarService} from '../../calendar/calendar.service';
|
||||||
@@ -40,6 +54,22 @@ import {
|
|||||||
selector: 'calendar-sync-settings',
|
selector: 'calendar-sync-settings',
|
||||||
templateUrl: 'calendar-sync-settings.html',
|
templateUrl: 'calendar-sync-settings.html',
|
||||||
styleUrls: ['calendar-sync-settings.scss'],
|
styleUrls: ['calendar-sync-settings.scss'],
|
||||||
|
standalone: true,
|
||||||
|
imports: [
|
||||||
|
IonCard,
|
||||||
|
IonCardHeader,
|
||||||
|
IonCardSubtitle,
|
||||||
|
IonCardContent,
|
||||||
|
IonList,
|
||||||
|
IonItemGroup,
|
||||||
|
IonItemDivider,
|
||||||
|
IonLabel,
|
||||||
|
IonItem,
|
||||||
|
IonToggle,
|
||||||
|
IonButton,
|
||||||
|
IonIcon,
|
||||||
|
TranslateModule,
|
||||||
|
],
|
||||||
})
|
})
|
||||||
export class CalendarSyncSettingsComponent implements OnInit {
|
export class CalendarSyncSettingsComponent implements OnInit {
|
||||||
isWeb = true;
|
isWeb = true;
|
||||||
|
|||||||
@@ -13,10 +13,26 @@
|
|||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {ChangeDetectorRef, Component, OnInit} from '@angular/core';
|
import {ChangeDetectorRef, Component, OnInit} from '@angular/core';
|
||||||
import {AlertController, ToastController} from '@ionic/angular/standalone';
|
import {
|
||||||
import {TranslateService} from '@ngx-translate/core';
|
AlertController,
|
||||||
|
IonBackButton,
|
||||||
|
IonButton,
|
||||||
|
IonButtons,
|
||||||
|
IonContent,
|
||||||
|
IonHeader,
|
||||||
|
IonIcon,
|
||||||
|
IonList,
|
||||||
|
IonTitle,
|
||||||
|
IonToolbar,
|
||||||
|
ToastController,
|
||||||
|
} from '@ionic/angular/standalone';
|
||||||
|
import {TranslateModule, TranslateService} from '@ngx-translate/core';
|
||||||
import {SCSettingMeta} from '@openstapps/core';
|
import {SCSettingMeta} from '@openstapps/core';
|
||||||
import {SettingsCache, SettingsProvider} from '../settings.provider';
|
import {SettingsCache, SettingsProvider} from '../settings.provider';
|
||||||
|
import {IonContentParallaxDirective} from '../../../util/ion-content-parallax.directive';
|
||||||
|
import {SettingsItemComponent} from '../item/settings-item.component';
|
||||||
|
import {CalendarSyncSettingsComponent} from './calendar-sync-settings.component';
|
||||||
|
import {NgForOf, NgIf, TitleCasePipe} from '@angular/common';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings page component
|
* Settings page component
|
||||||
@@ -25,6 +41,25 @@ import {SettingsCache, SettingsProvider} from '../settings.provider';
|
|||||||
selector: 'stapps-settings-page',
|
selector: 'stapps-settings-page',
|
||||||
templateUrl: 'settings-page.html',
|
templateUrl: 'settings-page.html',
|
||||||
styleUrls: ['settings-page.scss'],
|
styleUrls: ['settings-page.scss'],
|
||||||
|
standalone: true,
|
||||||
|
imports: [
|
||||||
|
IonHeader,
|
||||||
|
IonToolbar,
|
||||||
|
IonButtons,
|
||||||
|
IonBackButton,
|
||||||
|
IonTitle,
|
||||||
|
IonContent,
|
||||||
|
IonContentParallaxDirective,
|
||||||
|
IonList,
|
||||||
|
SettingsItemComponent,
|
||||||
|
CalendarSyncSettingsComponent,
|
||||||
|
IonButton,
|
||||||
|
IonIcon,
|
||||||
|
TranslateModule,
|
||||||
|
NgForOf,
|
||||||
|
NgIf,
|
||||||
|
TitleCasePipe,
|
||||||
|
],
|
||||||
})
|
})
|
||||||
export class SettingsPageComponent implements OnInit {
|
export class SettingsPageComponent implements OnInit {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -26,20 +26,6 @@
|
|||||||
<div class="settings-content">
|
<div class="settings-content">
|
||||||
<ng-container *ngFor="let categoryKey of categoriesOrder">
|
<ng-container *ngFor="let categoryKey of categoriesOrder">
|
||||||
<ion-list *ngIf="objectKeys(settingsCache).includes(categoryKey)">
|
<ion-list *ngIf="objectKeys(settingsCache).includes(categoryKey)">
|
||||||
<!-- <ion-item-divider>
|
|
||||||
<h2>
|
|
||||||
{{
|
|
||||||
'categories[0]'
|
|
||||||
| thingTranslate
|
|
||||||
: $any(
|
|
||||||
settingsCache[categoryKey]?.settings[
|
|
||||||
objectKeys(settingsCache[categoryKey]?.settings)[0]
|
|
||||||
]
|
|
||||||
)
|
|
||||||
| titlecase
|
|
||||||
}}
|
|
||||||
</h2>
|
|
||||||
</ion-item-divider> -->
|
|
||||||
<stapps-settings-item
|
<stapps-settings-item
|
||||||
*ngFor="let settingKeys of objectKeys(settingsCache[categoryKey].settings)"
|
*ngFor="let settingKeys of objectKeys(settingsCache[categoryKey].settings)"
|
||||||
[setting]="settingsCache[categoryKey].settings[settingKeys]"
|
[setting]="settingsCache[categoryKey].settings[settingKeys]"
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import {ThingTranslateService} from '../../translation/thing-translate.service';
|
|||||||
*/
|
*/
|
||||||
@Pipe({
|
@Pipe({
|
||||||
name: 'settingValueTranslate',
|
name: 'settingValueTranslate',
|
||||||
|
standalone: true,
|
||||||
})
|
})
|
||||||
export class SettingTranslatePipe implements PipeTransform {
|
export class SettingTranslatePipe implements PipeTransform {
|
||||||
constructor(
|
constructor(
|
||||||
|
|||||||
@@ -12,91 +12,14 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {CommonModule} from '@angular/common';
|
|
||||||
import {NgModule} from '@angular/core';
|
import {NgModule} from '@angular/core';
|
||||||
import {FormsModule} from '@angular/forms';
|
import {RouterModule} from '@angular/router';
|
||||||
import {RouterModule, Routes} from '@angular/router';
|
|
||||||
import {TranslateModule} from '@ngx-translate/core';
|
|
||||||
|
|
||||||
import {ThingTranslateModule} from '../../translation/thing-translate.module';
|
|
||||||
import {ConfigProvider} from '../config/config.provider';
|
|
||||||
import {SettingsItemComponent} from './item/settings-item.component';
|
|
||||||
import {SettingsPageComponent} from './page/settings-page.component';
|
import {SettingsPageComponent} from './page/settings-page.component';
|
||||||
import {SettingTranslatePipe} from './setting-translate.pipe';
|
|
||||||
import {SettingsProvider} from './settings.provider';
|
|
||||||
import {CalendarSyncSettingsComponent} from './page/calendar-sync-settings.component';
|
|
||||||
import {ScheduleProvider} from '../calendar/schedule.provider';
|
|
||||||
import {ThingTranslatePipe} from '../../translation/thing-translate.pipe';
|
|
||||||
import {ScheduleSyncService} from '../background/schedule/schedule-sync.service';
|
|
||||||
import {CalendarService} from '../calendar/calendar.service';
|
|
||||||
import {CalendarModule} from '../calendar/calendar.module';
|
|
||||||
import {BackgroundModule} from '../background/background.module';
|
|
||||||
import {UtilModule} from '../../util/util.module';
|
|
||||||
import {IonIconModule} from '../../util/ion-icon/ion-icon.module';
|
|
||||||
import {
|
|
||||||
IonButton,
|
|
||||||
IonButtons,
|
|
||||||
IonCard,
|
|
||||||
IonCardContent,
|
|
||||||
IonCardHeader,
|
|
||||||
IonCardSubtitle,
|
|
||||||
IonHeader,
|
|
||||||
IonItem,
|
|
||||||
IonItemDivider,
|
|
||||||
IonItemGroup,
|
|
||||||
IonLabel,
|
|
||||||
IonList,
|
|
||||||
IonTitle,
|
|
||||||
IonToggle,
|
|
||||||
IonToolbar,
|
|
||||||
} from '@ionic/angular/standalone';
|
|
||||||
|
|
||||||
const settingsRoutes: Routes = [{path: 'settings', component: SettingsPageComponent}];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings Module
|
* Settings Module
|
||||||
*/
|
*/
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
imports: [RouterModule.forChild([{path: 'settings', component: SettingsPageComponent}])],
|
||||||
SettingsPageComponent,
|
|
||||||
SettingsItemComponent,
|
|
||||||
SettingTranslatePipe,
|
|
||||||
CalendarSyncSettingsComponent,
|
|
||||||
],
|
|
||||||
exports: [SettingsItemComponent, SettingTranslatePipe],
|
|
||||||
imports: [
|
|
||||||
CommonModule,
|
|
||||||
FormsModule,
|
|
||||||
CalendarModule,
|
|
||||||
IonIconModule,
|
|
||||||
BackgroundModule,
|
|
||||||
TranslateModule.forChild(),
|
|
||||||
ThingTranslateModule.forChild(),
|
|
||||||
RouterModule.forChild(settingsRoutes),
|
|
||||||
UtilModule,
|
|
||||||
IonHeader,
|
|
||||||
IonToolbar,
|
|
||||||
IonButtons,
|
|
||||||
IonTitle,
|
|
||||||
IonList,
|
|
||||||
IonButton,
|
|
||||||
IonCard,
|
|
||||||
IonCardHeader,
|
|
||||||
IonCardSubtitle,
|
|
||||||
IonCardContent,
|
|
||||||
IonItemGroup,
|
|
||||||
IonItemDivider,
|
|
||||||
IonLabel,
|
|
||||||
IonItem,
|
|
||||||
IonToggle,
|
|
||||||
],
|
|
||||||
providers: [
|
|
||||||
ScheduleSyncService,
|
|
||||||
ConfigProvider,
|
|
||||||
SettingsProvider,
|
|
||||||
CalendarService,
|
|
||||||
ScheduleProvider,
|
|
||||||
ThingTranslatePipe,
|
|
||||||
],
|
|
||||||
})
|
})
|
||||||
export class SettingsModule {}
|
export class SettingsModule {}
|
||||||
|
|||||||
@@ -18,17 +18,33 @@ import {
|
|||||||
ActionSheetController,
|
ActionSheetController,
|
||||||
AlertController,
|
AlertController,
|
||||||
Config,
|
Config,
|
||||||
|
IonButton,
|
||||||
|
IonButtons,
|
||||||
|
IonHeader,
|
||||||
IonModal,
|
IonModal,
|
||||||
IonRouterOutlet,
|
IonRouterOutlet,
|
||||||
|
IonTitle,
|
||||||
|
IonToolbar,
|
||||||
ModalController,
|
ModalController,
|
||||||
} from '@ionic/angular/standalone';
|
} from '@ionic/angular/standalone';
|
||||||
import {pendingChangesActionSheet, PendingChangesRole} from './pending-changes-action-sheet';
|
import {pendingChangesActionSheet, PendingChangesRole} from './pending-changes-action-sheet';
|
||||||
import {TranslatePipe} from '@ngx-translate/core';
|
import {TranslateModule, TranslatePipe} from '@ngx-translate/core';
|
||||||
|
import {NgTemplateOutlet} from '@angular/common';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'stapps-edit-modal',
|
selector: 'stapps-edit-modal',
|
||||||
templateUrl: 'edit-modal.html',
|
templateUrl: 'edit-modal.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
|
imports: [
|
||||||
|
IonModal,
|
||||||
|
IonHeader,
|
||||||
|
IonToolbar,
|
||||||
|
IonButtons,
|
||||||
|
IonTitle,
|
||||||
|
IonButton,
|
||||||
|
NgTemplateOutlet,
|
||||||
|
TranslateModule,
|
||||||
|
],
|
||||||
})
|
})
|
||||||
export class EditModalComponent {
|
export class EditModalComponent {
|
||||||
@ContentChild(TemplateRef) content: TemplateRef<unknown>;
|
@ContentChild(TemplateRef) content: TemplateRef<unknown>;
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ import {ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef} fr
|
|||||||
import {interval, Observable} from 'rxjs';
|
import {interval, Observable} from 'rxjs';
|
||||||
import {fromOpeningHours} from './opening-hours';
|
import {fromOpeningHours} from './opening-hours';
|
||||||
import {map, startWith} from 'rxjs/operators';
|
import {map, startWith} from 'rxjs/operators';
|
||||||
|
import {AsyncPipe, NgIf} from '@angular/common';
|
||||||
|
import {IonBadge} from '@ionic/angular/standalone';
|
||||||
|
import {TranslateModule} from '@ngx-translate/core';
|
||||||
|
import {FormatDistanceToNowStrictPipeModule, FormatRelativeToNowPipeModule} from 'ngx-date-fns';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'stapps-opening-hours',
|
selector: 'stapps-opening-hours',
|
||||||
@@ -23,6 +27,14 @@ import {map, startWith} from 'rxjs/operators';
|
|||||||
styleUrl: 'opening-hours.scss',
|
styleUrl: 'opening-hours.scss',
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
standalone: true,
|
standalone: true,
|
||||||
|
imports: [
|
||||||
|
AsyncPipe,
|
||||||
|
IonBadge,
|
||||||
|
TranslateModule,
|
||||||
|
FormatDistanceToNowStrictPipeModule,
|
||||||
|
FormatRelativeToNowPipeModule,
|
||||||
|
NgIf,
|
||||||
|
],
|
||||||
})
|
})
|
||||||
export class OpeningHoursComponent {
|
export class OpeningHoursComponent {
|
||||||
@ContentChild(TemplateRef) content: TemplateRef<unknown>;
|
@ContentChild(TemplateRef) content: TemplateRef<unknown>;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import {fromMutationObserver} from './rxjs/mutation-observer';
|
|||||||
import {combineLatestWith, mergeMap, OperatorFunction, ReplaySubject, takeLast} from 'rxjs';
|
import {combineLatestWith, mergeMap, OperatorFunction, ReplaySubject, takeLast} from 'rxjs';
|
||||||
import {distinctUntilChanged, filter, map, startWith} from 'rxjs/operators';
|
import {distinctUntilChanged, filter, map, startWith} from 'rxjs/operators';
|
||||||
import {fromIntersectionObserver} from './rxjs/from-intersection-observer';
|
import {fromIntersectionObserver} from './rxjs/from-intersection-observer';
|
||||||
import {IonCol, IonRow, IonGrid, IonLabel, IonButton} from '@ionic/angular/standalone';
|
import {IonCol, IonRow, IonGrid, IonLabel, IonButton, IonIcon} from '@ionic/angular/standalone';
|
||||||
import {AsyncPipe, NgIf, NgTemplateOutlet} from '@angular/common';
|
import {AsyncPipe, NgIf, NgTemplateOutlet} from '@angular/common';
|
||||||
import {RouterLink} from '@angular/router';
|
import {RouterLink} from '@angular/router';
|
||||||
|
|
||||||
@@ -46,7 +46,18 @@ function isSlideVisible(
|
|||||||
styleUrls: ['section.scss'],
|
styleUrls: ['section.scss'],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
imports: [IonCol, IonRow, IonGrid, IonLabel, NgIf, RouterLink, NgTemplateOutlet, IonButton, AsyncPipe],
|
imports: [
|
||||||
|
IonCol,
|
||||||
|
IonRow,
|
||||||
|
IonGrid,
|
||||||
|
IonLabel,
|
||||||
|
NgIf,
|
||||||
|
RouterLink,
|
||||||
|
NgTemplateOutlet,
|
||||||
|
IonButton,
|
||||||
|
AsyncPipe,
|
||||||
|
IonIcon,
|
||||||
|
],
|
||||||
})
|
})
|
||||||
export class SectionComponent implements AfterContentInit {
|
export class SectionComponent implements AfterContentInit {
|
||||||
@Input() title = '';
|
@Input() title = '';
|
||||||
|
|||||||
@@ -18,5 +18,8 @@
|
|||||||
"module": "ES2022",
|
"module": "ES2022",
|
||||||
"moduleResolution": "Node"
|
"moduleResolution": "Node"
|
||||||
},
|
},
|
||||||
|
"angularCompilerOptions": {
|
||||||
|
"strictTemplates": true
|
||||||
|
},
|
||||||
"exclude": ["**/*.spec.ts"]
|
"exclude": ["**/*.spec.ts"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -670,7 +670,7 @@ export type SCNationality =
|
|||||||
* Translations for specific languages
|
* Translations for specific languages
|
||||||
* @see https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
* @see https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||||
*/
|
*/
|
||||||
export interface SCTranslations<T> {
|
export interface SCTranslations<T extends Record<string, string>> {
|
||||||
/**
|
/**
|
||||||
* German translations
|
* German translations
|
||||||
*/
|
*/
|
||||||
@@ -691,8 +691,8 @@ type RecursivePartial<T> = {
|
|||||||
[P in keyof T]-?: T[P] extends Array<infer U>
|
[P in keyof T]-?: T[P] extends Array<infer U>
|
||||||
? Array<RecursivePartial<U>>
|
? Array<RecursivePartial<U>>
|
||||||
: T[P] extends object
|
: T[P] extends object
|
||||||
? RecursivePartial<T[P]>
|
? RecursivePartial<T[P]>
|
||||||
: T[P];
|
: T[P];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -705,14 +705,14 @@ type SCRequiredTranslationKeys<T> = {
|
|||||||
/**
|
/**
|
||||||
* Type that allows mapping from available keys of SCTranslations to SCRequiredTranslationKeys
|
* Type that allows mapping from available keys of SCTranslations to SCRequiredTranslationKeys
|
||||||
*/
|
*/
|
||||||
type SCRequiredTranslation<T> = {
|
type SCRequiredTranslation<T extends Record<string, string>> = {
|
||||||
[key in keyof SCTranslations<T>]: SCRequiredTranslationKeys<T>;
|
[key in keyof SCTranslations<T>]: SCRequiredTranslationKeys<T>;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface to be implemented by all Meta classes
|
* Interface to be implemented by all Meta classes
|
||||||
*/
|
*/
|
||||||
export interface SCMetaTranslations<T> {
|
export interface SCMetaTranslations<T extends Record<string, string>> {
|
||||||
/**
|
/**
|
||||||
* Field translations
|
* Field translations
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user