mirror of
https://github.com/richard-loafle/fuse-angular.git
synced 2025-01-09 12:05:08 +00:00
Merge branch 'dev' into dev-starter
This commit is contained in:
commit
8e513ccf1e
|
@ -2,7 +2,9 @@
|
|||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
||||
"version": 1,
|
||||
"cli": {
|
||||
"defaultCollection": "@angular-eslint/schematics"
|
||||
"schematicCollections": [
|
||||
"@angular-eslint/schematics"
|
||||
]
|
||||
},
|
||||
"newProjectRoot": "projects",
|
||||
"projects": {
|
||||
|
@ -139,6 +141,5 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultProject": "fuse"
|
||||
}
|
||||
}
|
||||
|
|
7834
package-lock.json
generated
7834
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
97
package.json
97
package.json
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@fuse/starter",
|
||||
"version": "14.2.0",
|
||||
"name": "fuse-angular",
|
||||
"version": "15.0.0",
|
||||
"description": "Fuse - Angular Admin Template and Starter Project",
|
||||
"author": "https://themeforest.net/user/srcn",
|
||||
"license": "https://themeforest.net/licenses/standard",
|
||||
|
@ -14,68 +14,67 @@
|
|||
"lint": "ng lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@angular/animations": "13.2.3",
|
||||
"@angular/cdk": "13.2.3",
|
||||
"@angular/common": "13.2.3",
|
||||
"@angular/compiler": "13.2.3",
|
||||
"@angular/core": "13.2.3",
|
||||
"@angular/forms": "13.2.3",
|
||||
"@angular/material": "13.2.3",
|
||||
"@angular/material-moment-adapter": "13.2.3",
|
||||
"@angular/platform-browser": "13.2.3",
|
||||
"@angular/platform-browser-dynamic": "13.2.3",
|
||||
"@angular/router": "13.2.3",
|
||||
"@ngneat/transloco": "3.1.4",
|
||||
"apexcharts": "3.33.1",
|
||||
"@angular/animations": "14.0.0",
|
||||
"@angular/cdk": "14.0.0",
|
||||
"@angular/common": "14.0.0",
|
||||
"@angular/compiler": "14.0.0",
|
||||
"@angular/core": "14.0.0",
|
||||
"@angular/forms": "14.0.0",
|
||||
"@angular/material": "14.0.0",
|
||||
"@angular/material-moment-adapter": "14.0.0",
|
||||
"@angular/platform-browser": "14.0.0",
|
||||
"@angular/platform-browser-dynamic": "14.0.0",
|
||||
"@angular/router": "14.0.0",
|
||||
"@ngneat/transloco": "4.0.0",
|
||||
"apexcharts": "3.35.3",
|
||||
"crypto-js": "3.3.0",
|
||||
"highlight.js": "11.4.0",
|
||||
"highlight.js": "11.5.1",
|
||||
"lodash-es": "4.17.21",
|
||||
"moment": "2.29.1",
|
||||
"ng-apexcharts": "1.7.0",
|
||||
"moment": "2.29.3",
|
||||
"ng-apexcharts": "1.7.1",
|
||||
"ngx-markdown": "13.1.0",
|
||||
"ngx-quill": "16.1.2",
|
||||
"perfect-scrollbar": "1.5.3",
|
||||
"ngx-quill": "17.0.0",
|
||||
"perfect-scrollbar": "1.5.5",
|
||||
"quill": "1.3.7",
|
||||
"rxjs": "7.5.4",
|
||||
"tslib": "2.3.1",
|
||||
"zone.js": "0.11.4"
|
||||
"rxjs": "7.5.5",
|
||||
"tslib": "2.4.0",
|
||||
"zone.js": "0.11.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "13.2.4",
|
||||
"@angular-eslint/builder": "13.1.0",
|
||||
"@angular-eslint/eslint-plugin": "13.1.0",
|
||||
"@angular-eslint/eslint-plugin-template": "13.1.0",
|
||||
"@angular-eslint/schematics": "13.1.0",
|
||||
"@angular-eslint/template-parser": "13.1.0",
|
||||
"@angular/cli": "13.2.4",
|
||||
"@angular/compiler-cli": "13.2.3",
|
||||
"@angular-devkit/build-angular": "14.0.0",
|
||||
"@angular-eslint/builder": "13.2.1",
|
||||
"@angular-eslint/eslint-plugin": "13.2.1",
|
||||
"@angular-eslint/eslint-plugin-template": "13.2.1",
|
||||
"@angular-eslint/schematics": "13.2.1",
|
||||
"@angular-eslint/template-parser": "13.2.1",
|
||||
"@angular/cli": "14.0.0",
|
||||
"@angular/compiler-cli": "14.0.0",
|
||||
"@tailwindcss/aspect-ratio": "0.4.0",
|
||||
"@tailwindcss/line-clamp": "0.3.1",
|
||||
"@tailwindcss/line-clamp": "0.4.0",
|
||||
"@tailwindcss/typography": "0.5.2",
|
||||
"@types/chroma-js": "2.1.3",
|
||||
"@types/crypto-js": "3.1.47",
|
||||
"@types/highlight.js": "10.1.0",
|
||||
"@types/jasmine": "3.10.3",
|
||||
"@types/lodash": "4.14.178",
|
||||
"@types/jasmine": "4.0.3",
|
||||
"@types/lodash": "4.14.182",
|
||||
"@types/lodash-es": "4.17.6",
|
||||
"@types/node": "12.20.46",
|
||||
"@typescript-eslint/eslint-plugin": "5.12.0",
|
||||
"@typescript-eslint/parser": "5.12.0",
|
||||
"autoprefixer": "10.4.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.27.0",
|
||||
"@typescript-eslint/parser": "5.27.0",
|
||||
"autoprefixer": "10.4.7",
|
||||
"chroma-js": "2.4.2",
|
||||
"eslint": "8.9.0",
|
||||
"eslint-plugin-import": "2.25.4",
|
||||
"eslint-plugin-jsdoc": "37.9.4",
|
||||
"eslint": "8.16.0",
|
||||
"eslint-plugin-import": "2.26.0",
|
||||
"eslint-plugin-jsdoc": "39.3.2",
|
||||
"eslint-plugin-prefer-arrow": "1.2.3",
|
||||
"jasmine-core": "4.0.0",
|
||||
"karma": "6.3.16",
|
||||
"karma-chrome-launcher": "3.1.0",
|
||||
"karma-coverage": "2.1.1",
|
||||
"karma-jasmine": "4.0.1",
|
||||
"jasmine-core": "4.1.1",
|
||||
"karma": "6.3.20",
|
||||
"karma-chrome-launcher": "3.1.1",
|
||||
"karma-coverage": "2.2.0",
|
||||
"karma-jasmine": "5.0.1",
|
||||
"karma-jasmine-html-reporter": "1.7.0",
|
||||
"lodash": "4.17.21",
|
||||
"postcss": "8.4.6",
|
||||
"tailwindcss": "3.0.23",
|
||||
"typescript": "4.5.5"
|
||||
"postcss": "8.4.14",
|
||||
"tailwindcss": "3.0.24",
|
||||
"typescript": "4.7.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,6 +53,7 @@ export class FuseAlertComponent implements OnChanges, OnInit, OnDestroy
|
|||
*/
|
||||
@HostBinding('class') get classList(): any
|
||||
{
|
||||
/* eslint-disable @typescript-eslint/naming-convention */
|
||||
return {
|
||||
'fuse-alert-appearance-border' : this.appearance === 'border',
|
||||
'fuse-alert-appearance-fill' : this.appearance === 'fill',
|
||||
|
@ -70,6 +71,7 @@ export class FuseAlertComponent implements OnChanges, OnInit, OnDestroy
|
|||
'fuse-alert-type-warning' : this.type === 'warning',
|
||||
'fuse-alert-type-error' : this.type === 'error'
|
||||
};
|
||||
/* eslint-enable @typescript-eslint/naming-convention */
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -38,12 +38,14 @@ export class FuseCardComponent implements OnChanges
|
|||
*/
|
||||
@HostBinding('class') get classList(): any
|
||||
{
|
||||
/* eslint-disable @typescript-eslint/naming-convention */
|
||||
return {
|
||||
'fuse-card-expanded' : this.expanded,
|
||||
'fuse-card-face-back' : this.flippable && this.face === 'back',
|
||||
'fuse-card-face-front': this.flippable && this.face === 'front',
|
||||
'fuse-card-flippable' : this.flippable
|
||||
};
|
||||
/* eslint-enable @typescript-eslint/naming-convention */
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -32,6 +32,7 @@ export class FuseDrawerComponent implements OnChanges, OnInit, OnDestroy
|
|||
@Output() readonly positionChanged: EventEmitter<FuseDrawerPosition> = new EventEmitter<FuseDrawerPosition>();
|
||||
|
||||
private _animationsEnabled: boolean = false;
|
||||
private readonly _handleOverlayClick: any;
|
||||
private _hovered: boolean = false;
|
||||
private _overlay: HTMLElement;
|
||||
private _player: AnimationPlayer;
|
||||
|
@ -47,6 +48,9 @@ export class FuseDrawerComponent implements OnChanges, OnInit, OnDestroy
|
|||
private _fuseUtilsService: FuseUtilsService
|
||||
)
|
||||
{
|
||||
this._handleOverlayClick = (): void => {
|
||||
this.close();
|
||||
};
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
@ -58,6 +62,7 @@ export class FuseDrawerComponent implements OnChanges, OnInit, OnDestroy
|
|||
*/
|
||||
@HostBinding('class') get classList(): any
|
||||
{
|
||||
/* eslint-disable @typescript-eslint/naming-convention */
|
||||
return {
|
||||
'fuse-drawer-animations-enabled' : this._animationsEnabled,
|
||||
'fuse-drawer-fixed' : this.fixed,
|
||||
|
@ -66,6 +71,7 @@ export class FuseDrawerComponent implements OnChanges, OnInit, OnDestroy
|
|||
'fuse-drawer-opened' : this.opened,
|
||||
[`fuse-drawer-position-${this.position}`]: true
|
||||
};
|
||||
/* eslint-enable @typescript-eslint/naming-convention */
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -318,12 +324,6 @@ export class FuseDrawerComponent implements OnChanges, OnInit, OnDestroy
|
|||
// Create the backdrop element
|
||||
this._overlay = this._renderer2.createElement('div');
|
||||
|
||||
// Return if overlay couldn't be create for some reason
|
||||
if ( !this._overlay )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Add a class to the backdrop element
|
||||
this._overlay.classList.add('fuse-drawer-overlay');
|
||||
|
||||
|
@ -342,27 +342,17 @@ export class FuseDrawerComponent implements OnChanges, OnInit, OnDestroy
|
|||
// Append the backdrop to the parent of the drawer
|
||||
this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);
|
||||
|
||||
// Create the enter animation and attach it to the player
|
||||
// Create enter animation and attach it to the player
|
||||
this._player = this._animationBuilder.build([
|
||||
style({opacity: 0}),
|
||||
animate('300ms cubic-bezier(0.25, 0.8, 0.25, 1)', style({opacity: 1}))
|
||||
]).create(this._overlay);
|
||||
|
||||
// Once the animation is done...
|
||||
this._player.onDone(() => {
|
||||
|
||||
// Destroy the player
|
||||
this._player.destroy();
|
||||
this._player = null;
|
||||
});
|
||||
|
||||
// Play the animation
|
||||
this._player.play();
|
||||
|
||||
// Add an event listener to the overlay
|
||||
this._overlay.addEventListener('click', () => {
|
||||
this.close();
|
||||
});
|
||||
this._overlay.addEventListener('click', this._handleOverlayClick);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -388,14 +378,13 @@ export class FuseDrawerComponent implements OnChanges, OnInit, OnDestroy
|
|||
// Once the animation is done...
|
||||
this._player.onDone(() => {
|
||||
|
||||
// Destroy the player
|
||||
this._player.destroy();
|
||||
this._player = null;
|
||||
|
||||
// If the backdrop still exists...
|
||||
// If the overlay still exists...
|
||||
if ( this._overlay )
|
||||
{
|
||||
// Remove the backdrop
|
||||
// Remove the event listener
|
||||
this._overlay.removeEventListener('click', this._handleOverlayClick);
|
||||
|
||||
// Remove the overlay
|
||||
this._overlay.parentNode.removeChild(this._overlay);
|
||||
this._overlay = null;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,10 @@
|
|||
class="fuse-horizontal-navigation-item"
|
||||
[ngClass]="{'fuse-horizontal-navigation-item-active-forced': item.active}"
|
||||
[routerLink]="[item.link]"
|
||||
[fragment]="item.fragment ?? null"
|
||||
[preserveFragment]="item.preserveFragment ?? false"
|
||||
[queryParams]="item.queryParams ?? null"
|
||||
[queryParamsHandling]="item.queryParamsHandling ?? null"
|
||||
[routerLinkActive]="'fuse-horizontal-navigation-item-active'"
|
||||
[routerLinkActiveOptions]="isActiveMatchOptions"
|
||||
[matTooltip]="item.tooltip || ''">
|
||||
|
@ -45,6 +49,10 @@
|
|||
class="fuse-horizontal-navigation-item"
|
||||
[ngClass]="{'fuse-horizontal-navigation-item-active-forced': item.active}"
|
||||
[routerLink]="[item.link]"
|
||||
[fragment]="item.fragment ?? null"
|
||||
[preserveFragment]="item.preserveFragment ?? false"
|
||||
[queryParams]="item.queryParams ?? null"
|
||||
[queryParamsHandling]="item.queryParamsHandling ?? null"
|
||||
[routerLinkActive]="'fuse-horizontal-navigation-item-active'"
|
||||
[routerLinkActiveOptions]="isActiveMatchOptions"
|
||||
[matTooltip]="item.tooltip || ''"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { IsActiveMatchOptions } from '@angular/router';
|
||||
import { IsActiveMatchOptions, Params, QueryParamsHandling } from '@angular/router';
|
||||
|
||||
export interface FuseNavigationItem
|
||||
{
|
||||
|
@ -17,6 +17,10 @@ export interface FuseNavigationItem
|
|||
disabled?: boolean;
|
||||
tooltip?: string;
|
||||
link?: string;
|
||||
fragment?: string;
|
||||
preserveFragment?: boolean;
|
||||
queryParams?: Params | null;
|
||||
queryParamsHandling?: QueryParamsHandling | null;
|
||||
externalLink?: boolean;
|
||||
target?:
|
||||
| '_blank'
|
||||
|
|
|
@ -10,6 +10,10 @@
|
|||
class="fuse-vertical-navigation-item"
|
||||
[ngClass]="{'fuse-vertical-navigation-item-active-forced': item.active}"
|
||||
[routerLink]="[item.link]"
|
||||
[fragment]="item.fragment ?? null"
|
||||
[preserveFragment]="item.preserveFragment ?? false"
|
||||
[queryParams]="item.queryParams ?? null"
|
||||
[queryParamsHandling]="item.queryParamsHandling ?? null"
|
||||
[routerLinkActive]="'fuse-vertical-navigation-item-active'"
|
||||
[routerLinkActiveOptions]="isActiveMatchOptions"
|
||||
[matTooltip]="item.tooltip || ''">
|
||||
|
@ -45,6 +49,10 @@
|
|||
class="fuse-vertical-navigation-item"
|
||||
[ngClass]="{'fuse-vertical-navigation-item-active-forced': item.active}"
|
||||
[routerLink]="[item.link]"
|
||||
[fragment]="item.fragment ?? null"
|
||||
[preserveFragment]="item.preserveFragment ?? false"
|
||||
[queryParams]="item.queryParams ?? null"
|
||||
[queryParamsHandling]="item.queryParamsHandling ?? null"
|
||||
[routerLinkActive]="'fuse-vertical-navigation-item-active'"
|
||||
[routerLinkActiveOptions]="isActiveMatchOptions"
|
||||
[matTooltip]="item.tooltip || ''"
|
||||
|
|
|
@ -48,10 +48,12 @@ export class FuseVerticalNavigationCollapsableItemComponent implements OnInit, O
|
|||
*/
|
||||
@HostBinding('class') get classList(): any
|
||||
{
|
||||
/* eslint-disable @typescript-eslint/naming-convention */
|
||||
return {
|
||||
'fuse-vertical-navigation-item-collapsed': this.isCollapsed,
|
||||
'fuse-vertical-navigation-item-expanded' : this.isExpanded
|
||||
};
|
||||
/* eslint-enable @typescript-eslint/naming-convention */
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -337,7 +337,10 @@ fuse-vertical-navigation {
|
|||
}
|
||||
|
||||
> .fuse-vertical-navigation-item-children {
|
||||
margin-top: 6px;
|
||||
|
||||
> *:first-child {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
> *:last-child {
|
||||
padding-bottom: 6px;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@import 'styles/appearances/default';
|
||||
@import 'styles/appearances/compact';
|
||||
@import 'styles/appearances/dense';
|
||||
@import 'styles/appearances/thin';
|
||||
@use 'styles/appearances/default';
|
||||
@use 'styles/appearances/compact';
|
||||
@use 'styles/appearances/dense';
|
||||
@use 'styles/appearances/thin';
|
||||
|
|
|
@ -89,6 +89,7 @@ export class FuseVerticalNavigationComponent implements OnChanges, OnInit, After
|
|||
*/
|
||||
@HostBinding('class') get classList(): any
|
||||
{
|
||||
/* eslint-disable @typescript-eslint/naming-convention */
|
||||
return {
|
||||
'fuse-vertical-navigation-animations-enabled' : this._animationsEnabled,
|
||||
[`fuse-vertical-navigation-appearance-${this.appearance}`]: true,
|
||||
|
@ -100,6 +101,7 @@ export class FuseVerticalNavigationComponent implements OnChanges, OnInit, After
|
|||
'fuse-vertical-navigation-position-left' : this.position === 'left',
|
||||
'fuse-vertical-navigation-position-right' : this.position === 'right'
|
||||
};
|
||||
/* eslint-enable @typescript-eslint/naming-convention */
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,6 +4,7 @@ import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
|
|||
import { FuseConfirmationModule } from '@fuse/services/confirmation';
|
||||
import { FuseLoadingModule } from '@fuse/services/loading';
|
||||
import { FuseMediaWatcherModule } from '@fuse/services/media-watcher/media-watcher.module';
|
||||
import { FusePlatformModule } from '@fuse/services/platform/platform.module';
|
||||
import { FuseSplashScreenModule } from '@fuse/services/splash-screen/splash-screen.module';
|
||||
import { FuseUtilsModule } from '@fuse/services/utils/utils.module';
|
||||
|
||||
|
@ -12,6 +13,7 @@ import { FuseUtilsModule } from '@fuse/services/utils/utils.module';
|
|||
FuseConfirmationModule,
|
||||
FuseLoadingModule,
|
||||
FuseMediaWatcherModule,
|
||||
FusePlatformModule,
|
||||
FuseSplashScreenModule,
|
||||
FuseUtilsModule
|
||||
],
|
||||
|
|
|
@ -35,6 +35,7 @@ export class FuseConfigService
|
|||
this._config.next(config);
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/member-ordering
|
||||
get config$(): Observable<any>
|
||||
{
|
||||
return this._config.asObservable();
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
import { Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { Component, Inject, ViewEncapsulation } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { FuseConfirmationConfig } from '@fuse/services/confirmation/confirmation.types';
|
||||
|
||||
@Component({
|
||||
selector : 'fuse-confirmation-dialog',
|
||||
templateUrl : './dialog.component.html',
|
||||
styles : [
|
||||
/* language=SCSS */
|
||||
`
|
||||
.fuse-confirmation-dialog-panel {
|
||||
@screen md {
|
||||
|
@ -21,32 +20,13 @@ import { FuseConfirmationConfig } from '@fuse/services/confirmation/confirmation
|
|||
],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class FuseConfirmationDialogComponent implements OnInit
|
||||
export class FuseConfirmationDialogComponent
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
constructor(
|
||||
@Inject(MAT_DIALOG_DATA) public data: FuseConfirmationConfig,
|
||||
public matDialogRef: MatDialogRef<FuseConfirmationDialogComponent>
|
||||
)
|
||||
constructor(@Inject(MAT_DIALOG_DATA) public data: FuseConfirmationConfig)
|
||||
{
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Lifecycle hooks
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* On init
|
||||
*/
|
||||
ngOnInit(): void
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Public methods
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
||||
}
|
||||
|
|
1
src/@fuse/services/platform/index.ts
Normal file
1
src/@fuse/services/platform/index.ts
Normal file
|
@ -0,0 +1 @@
|
|||
export * from '@fuse/services/platform/public-api';
|
17
src/@fuse/services/platform/platform.module.ts
Normal file
17
src/@fuse/services/platform/platform.module.ts
Normal file
|
@ -0,0 +1,17 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { FusePlatformService } from '@fuse/services/platform/platform.service';
|
||||
|
||||
@NgModule({
|
||||
providers: [
|
||||
FusePlatformService
|
||||
]
|
||||
})
|
||||
export class FusePlatformModule
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
constructor(private _fusePlatformService: FusePlatformService)
|
||||
{
|
||||
}
|
||||
}
|
59
src/@fuse/services/platform/platform.service.ts
Normal file
59
src/@fuse/services/platform/platform.service.ts
Normal file
|
@ -0,0 +1,59 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { Platform } from '@angular/cdk/platform';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class FusePlatformService
|
||||
{
|
||||
osName = 'os-unknown';
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
constructor(private _platform: Platform)
|
||||
{
|
||||
// If the platform is not a browser, return immediately
|
||||
if ( !this._platform.isBrowser )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Windows
|
||||
if ( navigator.userAgent.includes('Win') )
|
||||
{
|
||||
this.osName = 'os-windows';
|
||||
}
|
||||
|
||||
// Mac OS
|
||||
if ( navigator.userAgent.includes('Mac') )
|
||||
{
|
||||
this.osName = 'os-mac';
|
||||
}
|
||||
|
||||
// Unix
|
||||
if ( navigator.userAgent.includes('X11') )
|
||||
{
|
||||
this.osName = 'os-unix';
|
||||
}
|
||||
|
||||
// Linux
|
||||
if ( navigator.userAgent.includes('Linux') )
|
||||
{
|
||||
this.osName = 'os-linux';
|
||||
}
|
||||
|
||||
// iOS
|
||||
if ( this._platform.IOS )
|
||||
{
|
||||
this.osName = 'os-ios';
|
||||
}
|
||||
|
||||
// Android
|
||||
if ( this._platform.ANDROID )
|
||||
{
|
||||
this.osName = 'os-android';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
1
src/@fuse/services/platform/public-api.ts
Normal file
1
src/@fuse/services/platform/public-api.ts
Normal file
|
@ -0,0 +1 @@
|
|||
export * from '@fuse/services/platform/platform.service';
|
|
@ -1,9 +1,9 @@
|
|||
/* 1. Components */
|
||||
@import 'components/example-viewer';
|
||||
@import 'components/input';
|
||||
@use 'components/example-viewer';
|
||||
@use 'components/input';
|
||||
|
||||
/* 2. Overrides */
|
||||
@import 'overrides/angular-material';
|
||||
@import 'overrides/highlightjs';
|
||||
@import 'overrides/perfect-scrollbar';
|
||||
@import 'overrides/quill';
|
||||
@use 'overrides/angular-material';
|
||||
@use 'overrides/highlightjs';
|
||||
@use 'overrides/perfect-scrollbar';
|
||||
@use 'overrides/quill';
|
||||
|
|
|
@ -80,7 +80,9 @@
|
|||
}
|
||||
|
||||
.ql-container {
|
||||
overflow: hidden;
|
||||
overflow: auto;
|
||||
min-height: 160px;
|
||||
max-height: 400px;
|
||||
border-radius: 0 0 6px 6px;
|
||||
@apply border-gray-300 border-opacity-100 shadow-sm #{'!important'};
|
||||
|
||||
|
@ -89,17 +91,52 @@
|
|||
}
|
||||
|
||||
.ql-editor {
|
||||
min-height: 160px;
|
||||
max-height: 160px;
|
||||
height: 160px;
|
||||
@apply bg-card;
|
||||
|
||||
.dark & {
|
||||
background-color: rgba(0, 0, 0, 0.05);
|
||||
//background-color: rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
&.ql-blank::before {
|
||||
@apply text-hint;
|
||||
}
|
||||
}
|
||||
|
||||
.ql-tooltip {
|
||||
@apply px-3 py-1 shadow-sm rounded-md bg-gray-100 border-gray-300;
|
||||
|
||||
.dark & {
|
||||
@apply shadow-lg bg-gray-700 border-gray-700 #{'!important'};
|
||||
}
|
||||
|
||||
// Label
|
||||
&:before {
|
||||
@apply text-secondary;
|
||||
}
|
||||
|
||||
.ql-action,
|
||||
.ql-remove {
|
||||
@apply text-primary border-gray-300;
|
||||
|
||||
.dark & {
|
||||
@apply text-primary-400 border-gray-300;
|
||||
}
|
||||
}
|
||||
|
||||
.ql-action:after {
|
||||
@apply border-r border-r-gray-300 #{'!important'};
|
||||
|
||||
.dark & {
|
||||
@apply border-r-gray-500 #{'!important'};
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
@apply rounded-sm text-default bg-white border-gray-300 #{'!important'};
|
||||
|
||||
.dark & {
|
||||
@apply bg-gray-700 border-gray-500 #{'!important'};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,6 +76,46 @@
|
|||
}
|
||||
}
|
||||
|
||||
/* Style scrollbars on platforms other than MacOS and iOS */
|
||||
@media only screen and (min-width: 960px) {
|
||||
|
||||
body:not(.os-mac) {
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar:hover {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background-color: rgba(0, 0, 0, 0.06);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
border: 2px solid transparent;
|
||||
border-radius: 20px;
|
||||
box-shadow: inset 0 0 0 20px rgba(0, 0, 0, 0.24);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
border-radius: 20px;
|
||||
box-shadow: inset 0 0 0 20px rgba(0, 0, 0, 0.37);
|
||||
}
|
||||
|
||||
&.dark {
|
||||
::-webkit-scrollbar-thumb {
|
||||
box-shadow: inset 0 0 0 20px rgba(255, 255, 255, 0.24);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
box-shadow: inset 0 0 0 20px rgba(255, 255, 255, 0.37);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[disabled] * {
|
||||
@apply text-disabled #{'!important'};
|
||||
}
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
import { Version } from '@fuse/version/version';
|
||||
|
||||
export const FUSE_VERSION = new Version('14.2.0').full;
|
||||
export const FUSE_VERSION = new Version('15.0.0').full;
|
||||
|
|
|
@ -96,8 +96,8 @@ export class AuthService
|
|||
*/
|
||||
signInUsingToken(): Observable<any>
|
||||
{
|
||||
// Renew token
|
||||
return this._httpClient.post('api/auth/refresh-access-token', {
|
||||
// Sign in using the token
|
||||
return this._httpClient.post('api/auth/sign-in-with-token', {
|
||||
accessToken: this.accessToken
|
||||
}).pipe(
|
||||
catchError(() =>
|
||||
|
@ -107,8 +107,17 @@ export class AuthService
|
|||
),
|
||||
switchMap((response: any) => {
|
||||
|
||||
// Store the access token in the local storage
|
||||
this.accessToken = response.accessToken;
|
||||
// Replace the access token with the new one if it's available on
|
||||
// the response object.
|
||||
//
|
||||
// This is an added optional step for better security. Once you sign
|
||||
// in using the token, you should generate a new one on the server
|
||||
// side and attach it to the response object. Then the following
|
||||
// piece of code can replace the token with the refreshed one.
|
||||
if ( response.accessToken )
|
||||
{
|
||||
this.accessToken = response.accessToken;
|
||||
}
|
||||
|
||||
// Set the authenticated flag to true
|
||||
this._authenticated = true;
|
||||
|
|
|
@ -17,7 +17,6 @@ export class IconsModule
|
|||
this._matIconRegistry.addSvgIconSet(this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/material-twotone.svg'));
|
||||
this._matIconRegistry.addSvgIconSetInNamespace('mat_outline', this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/material-outline.svg'));
|
||||
this._matIconRegistry.addSvgIconSetInNamespace('mat_solid', this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/material-solid.svg'));
|
||||
this._matIconRegistry.addSvgIconSetInNamespace('iconsmind', this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/iconsmind.svg'));
|
||||
this._matIconRegistry.addSvgIconSetInNamespace('feather', this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/feather.svg'));
|
||||
this._matIconRegistry.addSvgIconSetInNamespace('heroicons_outline', this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/heroicons-outline.svg'));
|
||||
this._matIconRegistry.addSvgIconSetInNamespace('heroicons_solid', this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/heroicons-solid.svg'));
|
||||
|
|
|
@ -178,8 +178,8 @@
|
|||
<ng-template #selectChatOrStartNew>
|
||||
<div class="flex flex-col flex-auto items-center justify-center w-full h-full p-4">
|
||||
<mat-icon
|
||||
class="icon-size-20"
|
||||
[svgIcon]="'iconsmind:speach_bubble'"></mat-icon>
|
||||
class="icon-size-24"
|
||||
[svgIcon]="'heroicons_outline:chat'"></mat-icon>
|
||||
<div class="mt-4 text-xl text-center font-medium tracking-tight text-secondary">Select a conversation</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
|
|
@ -18,11 +18,12 @@
|
|||
class="w-full h-full px-16 sm:px-18"
|
||||
[formControl]="searchControl"
|
||||
[matAutocomplete]="matAutocomplete"
|
||||
[placeholder]="'Search for a page or a contact'"
|
||||
[placeholder]="'Search...'"
|
||||
(keydown)="onKeydown($event)"
|
||||
#barSearchInput>
|
||||
<mat-autocomplete
|
||||
class="max-h-128 sm:px-2 border-t rounded-b shadow-md"
|
||||
[autoSelectActiveOption]="true"
|
||||
[disableRipple]="true"
|
||||
#matAutocomplete="matAutocomplete">
|
||||
<mat-option
|
||||
|
@ -37,7 +38,8 @@
|
|||
<ng-container *ngFor="let result of resultSet.results; trackBy: trackByFn">
|
||||
<mat-option
|
||||
class="group relative mb-1 py-0 px-6 text-md rounded-md hover:bg-gray-100 dark:hover:bg-hover"
|
||||
[routerLink]="result.link">
|
||||
[routerLink]="result.link"
|
||||
[value]="result.value">
|
||||
<!-- Contacts -->
|
||||
<ng-container *ngIf="resultSet.id === 'contacts'">
|
||||
<ng-container *ngTemplateOutlet="contactResult; context: {$implicit: result}"></ng-container>
|
||||
|
@ -74,11 +76,12 @@
|
|||
matInput
|
||||
[formControl]="searchControl"
|
||||
[matAutocomplete]="matAutocomplete"
|
||||
[placeholder]="'Search for a page or a contact'"
|
||||
[placeholder]="'Search...'"
|
||||
(keydown)="onKeydown($event)">
|
||||
</mat-form-field>
|
||||
<mat-autocomplete
|
||||
class="max-h-128 mt-1 rounded"
|
||||
[autoSelectActiveOption]="true"
|
||||
[disableRipple]="true"
|
||||
#matAutocomplete="matAutocomplete">
|
||||
<mat-option
|
||||
|
@ -93,7 +96,8 @@
|
|||
<ng-container *ngFor="let result of resultSet.results; trackBy: trackByFn">
|
||||
<mat-option
|
||||
class="group relative mb-1 py-0 px-6 text-md rounded-md hover:bg-gray-100 dark:hover:bg-hover"
|
||||
[routerLink]="result.link">
|
||||
[routerLink]="result.link"
|
||||
[value]="result.value">
|
||||
<!-- Contacts -->
|
||||
<ng-container *ngIf="resultSet.id === 'contacts'">
|
||||
<ng-container *ngTemplateOutlet="contactResult; context: {$implicit: result}"></ng-container>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { Component, ElementRef, EventEmitter, HostBinding, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import { FormControl } from '@angular/forms';
|
||||
import { UntypedFormControl } from '@angular/forms';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { MatAutocomplete } from '@angular/material/autocomplete';
|
||||
import { debounceTime, filter, map, Subject, takeUntil } from 'rxjs';
|
||||
import { fuseAnimations } from '@fuse/animations/public-api';
|
||||
|
||||
|
@ -20,7 +21,8 @@ export class SearchComponent implements OnChanges, OnInit, OnDestroy
|
|||
|
||||
opened: boolean = false;
|
||||
resultSets: any[];
|
||||
searchControl: FormControl = new FormControl();
|
||||
searchControl: UntypedFormControl = new UntypedFormControl();
|
||||
private _matAutocomplete: MatAutocomplete;
|
||||
private _unsubscribeAll: Subject<any> = new Subject<any>();
|
||||
|
||||
/**
|
||||
|
@ -59,7 +61,7 @@ export class SearchComponent implements OnChanges, OnInit, OnDestroy
|
|||
set barSearchInput(value: ElementRef)
|
||||
{
|
||||
// If the value exists, it means that the search input
|
||||
// is now in the DOM and we can focus on the input..
|
||||
// is now in the DOM, and we can focus on the input..
|
||||
if ( value )
|
||||
{
|
||||
// Give Angular time to complete the change detection cycle
|
||||
|
@ -71,6 +73,17 @@ export class SearchComponent implements OnChanges, OnInit, OnDestroy
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for mat-autocomplete element reference
|
||||
*
|
||||
* @param value
|
||||
*/
|
||||
@ViewChild('matAutocomplete')
|
||||
set matAutocomplete(value: MatAutocomplete)
|
||||
{
|
||||
this._matAutocomplete = value;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Lifecycle hooks
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
@ -152,14 +165,12 @@ export class SearchComponent implements OnChanges, OnInit, OnDestroy
|
|||
*/
|
||||
onKeydown(event: KeyboardEvent): void
|
||||
{
|
||||
// Listen for escape to close the search
|
||||
// if the appearance is 'bar'
|
||||
if ( this.appearance === 'bar' )
|
||||
// Escape
|
||||
if ( event.code === 'Escape' )
|
||||
{
|
||||
// Escape
|
||||
if ( event.code === 'Escape' )
|
||||
// If the appearance is 'bar' and the mat-autocomplete is not open, close the search
|
||||
if ( this.appearance === 'bar' && !this._matAutocomplete.isOpen )
|
||||
{
|
||||
// Close the search
|
||||
this.close();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div
|
||||
class="fixed flex items-center justify-center right-0 w-10 h-10 shadow-lg rounded-l-lg z-90 cursor-pointer bg-red-600 bg-opacity-90 print:hidden"
|
||||
class="settings-cog fixed flex items-center justify-center right-0 w-10 h-10 shadow-lg rounded-l-lg z-90 cursor-pointer bg-red-600 bg-opacity-90 print:hidden"
|
||||
[class.lg:right-0]="config.layout === 'centered' || config.layout === 'material'"
|
||||
[class.lg:right-16]="config.layout !== 'centered' && config.layout !== 'material'"
|
||||
style="top: 275px"
|
||||
|
|
|
@ -16,6 +16,13 @@ import { Layout } from 'app/layout/layout.types';
|
|||
flex: none;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
@media (screen and min-width: 1280px) {
|
||||
|
||||
empty-layout + settings .settings-cog {
|
||||
right: 0 !important;
|
||||
}
|
||||
}
|
||||
`
|
||||
],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { Overlay, OverlayRef } from '@angular/cdk/overlay';
|
||||
import { TemplatePortal } from '@angular/cdk/portal';
|
||||
import { MatButton } from '@angular/material/button';
|
||||
|
@ -20,7 +20,7 @@ export class ShortcutsComponent implements OnInit, OnDestroy
|
|||
@ViewChild('shortcutsPanel') private _shortcutsPanel: TemplateRef<any>;
|
||||
|
||||
mode: 'view' | 'modify' | 'add' | 'edit' = 'view';
|
||||
shortcutForm: FormGroup;
|
||||
shortcutForm: UntypedFormGroup;
|
||||
shortcuts: Shortcut[];
|
||||
private _overlayRef: OverlayRef;
|
||||
private _unsubscribeAll: Subject<any> = new Subject<any>();
|
||||
|
@ -30,7 +30,7 @@ export class ShortcutsComponent implements OnInit, OnDestroy
|
|||
*/
|
||||
constructor(
|
||||
private _changeDetectorRef: ChangeDetectorRef,
|
||||
private _formBuilder: FormBuilder,
|
||||
private _formBuilder: UntypedFormBuilder,
|
||||
private _shortcutsService: ShortcutsService,
|
||||
private _overlay: Overlay,
|
||||
private _viewContainerRef: ViewContainerRef
|
||||
|
|
|
@ -4,6 +4,7 @@ import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
|||
import { combineLatest, filter, map, Subject, takeUntil } from 'rxjs';
|
||||
import { FuseConfigService } from '@fuse/services/config';
|
||||
import { FuseMediaWatcherService } from '@fuse/services/media-watcher';
|
||||
import { FusePlatformService } from '@fuse/services/platform';
|
||||
import { FUSE_VERSION } from '@fuse/version';
|
||||
import { Layout } from 'app/layout/layout.types';
|
||||
import { AppConfig } from 'app/core/config/app.config';
|
||||
|
@ -31,7 +32,8 @@ export class LayoutComponent implements OnInit, OnDestroy
|
|||
private _renderer2: Renderer2,
|
||||
private _router: Router,
|
||||
private _fuseConfigService: FuseConfigService,
|
||||
private _fuseMediaWatcherService: FuseMediaWatcherService
|
||||
private _fuseMediaWatcherService: FuseMediaWatcherService,
|
||||
private _fusePlatformService: FusePlatformService
|
||||
)
|
||||
{
|
||||
}
|
||||
|
@ -102,6 +104,9 @@ export class LayoutComponent implements OnInit, OnDestroy
|
|||
|
||||
// Set the app version
|
||||
this._renderer2.setAttribute(this._document.querySelector('[ng-version]'), 'fuse-version', FUSE_VERSION);
|
||||
|
||||
// Set the OS name
|
||||
this._renderer2.addClass(this._document.body, this._fusePlatformService.osName);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -38,8 +38,8 @@ export class FileManagerMockApi
|
|||
// Clone the items
|
||||
let items = cloneDeep(this._items);
|
||||
|
||||
// See if a folder id exist
|
||||
const folderId = request.params.get('folderId') ?? null;
|
||||
// See if the folder id exist
|
||||
const folderId = request.params.get('folderId') === 'null' ? null : request.params.get('folderId');
|
||||
|
||||
// Filter the items by folder id. If folder id is null,
|
||||
// that means we want to root items which have folder id
|
||||
|
|
|
@ -87,10 +87,10 @@ export class AuthMockApi
|
|||
});
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Verify and refresh the access token - POST
|
||||
// @ Sign in using the access token - POST
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
this._fuseMockApiService
|
||||
.onPost('api/auth/refresh-access-token')
|
||||
.onPost('api/auth/sign-in-with-token')
|
||||
.reply(({request}) => {
|
||||
|
||||
// Get the access token
|
||||
|
|
|
@ -79,6 +79,9 @@ export class SearchMockApi
|
|||
|
||||
// Add a link
|
||||
result.link = '/apps/contacts/' + result.id;
|
||||
|
||||
// Add the name as the value
|
||||
result.value = result.name;
|
||||
});
|
||||
|
||||
// Add to the results
|
||||
|
@ -95,6 +98,8 @@ export class SearchMockApi
|
|||
// Normalize the results
|
||||
pagesResults.forEach((result: any) => {
|
||||
|
||||
// Add the page title as the value
|
||||
result.value = result.title;
|
||||
});
|
||||
|
||||
// Add to the results
|
||||
|
@ -113,6 +118,9 @@ export class SearchMockApi
|
|||
|
||||
// Add a link
|
||||
result.link = '/apps/tasks/' + result.id;
|
||||
|
||||
// Add the title as the value
|
||||
result.value = result.title;
|
||||
});
|
||||
|
||||
// Add to the results
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
import { FuseMockApiService } from '@fuse/lib/mock-api';
|
||||
import { feather, heroicons, iconsmind, material } from 'app/mock-api/ui/icons/data';
|
||||
import { feather, heroicons, material } from 'app/mock-api/ui/icons/data';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
|
@ -10,7 +10,6 @@ export class IconsMockApi
|
|||
{
|
||||
private readonly _feather: any = feather;
|
||||
private readonly _heroicons: any = heroicons;
|
||||
private readonly _iconsmind: any = iconsmind;
|
||||
private readonly _material: any = material;
|
||||
|
||||
/**
|
||||
|
@ -76,21 +75,6 @@ export class IconsMockApi
|
|||
}
|
||||
]);
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Iconsmind icons - GET
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
this._fuseMockApiService
|
||||
.onGet('api/ui/icons/iconsmind')
|
||||
.reply(() => [
|
||||
200,
|
||||
{
|
||||
namespace: 'iconsmind',
|
||||
name : 'Iconsmind',
|
||||
grid : 'icon-size-10',
|
||||
list : cloneDeep(this._iconsmind)
|
||||
}
|
||||
]);
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Material solid icons - GET
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
|||
import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, NgForm, Validators } from '@angular/forms';
|
||||
import { finalize } from 'rxjs';
|
||||
import { fuseAnimations } from '@fuse/animations';
|
||||
import { FuseAlertType } from '@fuse/components/alert';
|
||||
|
@ -19,7 +19,7 @@ export class AuthForgotPasswordComponent implements OnInit
|
|||
type : 'success',
|
||||
message: ''
|
||||
};
|
||||
forgotPasswordForm: FormGroup;
|
||||
forgotPasswordForm: UntypedFormGroup;
|
||||
showAlert: boolean = false;
|
||||
|
||||
/**
|
||||
|
@ -27,7 +27,7 @@ export class AuthForgotPasswordComponent implements OnInit
|
|||
*/
|
||||
constructor(
|
||||
private _authService: AuthService,
|
||||
private _formBuilder: FormBuilder
|
||||
private _formBuilder: UntypedFormBuilder
|
||||
)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, NgForm, Validators } from '@angular/forms';
|
||||
import { finalize } from 'rxjs';
|
||||
import { fuseAnimations } from '@fuse/animations';
|
||||
import { FuseValidators } from '@fuse/validators';
|
||||
|
@ -20,7 +20,7 @@ export class AuthResetPasswordComponent implements OnInit
|
|||
type : 'success',
|
||||
message: ''
|
||||
};
|
||||
resetPasswordForm: FormGroup;
|
||||
resetPasswordForm: UntypedFormGroup;
|
||||
showAlert: boolean = false;
|
||||
|
||||
/**
|
||||
|
@ -28,7 +28,7 @@ export class AuthResetPasswordComponent implements OnInit
|
|||
*/
|
||||
constructor(
|
||||
private _authService: AuthService,
|
||||
private _formBuilder: FormBuilder
|
||||
private _formBuilder: UntypedFormBuilder
|
||||
)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, NgForm, Validators } from '@angular/forms';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { fuseAnimations } from '@fuse/animations';
|
||||
import { FuseAlertType } from '@fuse/components/alert';
|
||||
|
@ -19,7 +19,7 @@ export class AuthSignInComponent implements OnInit
|
|||
type : 'success',
|
||||
message: ''
|
||||
};
|
||||
signInForm: FormGroup;
|
||||
signInForm: UntypedFormGroup;
|
||||
showAlert: boolean = false;
|
||||
|
||||
/**
|
||||
|
@ -28,7 +28,7 @@ export class AuthSignInComponent implements OnInit
|
|||
constructor(
|
||||
private _activatedRoute: ActivatedRoute,
|
||||
private _authService: AuthService,
|
||||
private _formBuilder: FormBuilder,
|
||||
private _formBuilder: UntypedFormBuilder,
|
||||
private _router: Router
|
||||
)
|
||||
{
|
||||
|
|
|
@ -30,7 +30,8 @@
|
|||
<!-- Sign Up form -->
|
||||
<form
|
||||
class="mt-8"
|
||||
[formGroup]="signUpForm">
|
||||
[formGroup]="signUpForm"
|
||||
#signUpNgForm="ngForm">
|
||||
|
||||
<!-- Name field -->
|
||||
<mat-form-field class="w-full">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, NgForm, Validators } from '@angular/forms';
|
||||
import { Router } from '@angular/router';
|
||||
import { fuseAnimations } from '@fuse/animations';
|
||||
import { FuseAlertType } from '@fuse/components/alert';
|
||||
|
@ -19,7 +19,7 @@ export class AuthSignUpComponent implements OnInit
|
|||
type : 'success',
|
||||
message: ''
|
||||
};
|
||||
signUpForm: FormGroup;
|
||||
signUpForm: UntypedFormGroup;
|
||||
showAlert: boolean = false;
|
||||
|
||||
/**
|
||||
|
@ -27,7 +27,7 @@ export class AuthSignUpComponent implements OnInit
|
|||
*/
|
||||
constructor(
|
||||
private _authService: AuthService,
|
||||
private _formBuilder: FormBuilder,
|
||||
private _formBuilder: UntypedFormBuilder,
|
||||
private _router: Router
|
||||
)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, NgForm, Validators } from '@angular/forms';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { fuseAnimations } from '@fuse/animations';
|
||||
import { AuthService } from 'app/core/auth/auth.service';
|
||||
|
@ -22,7 +22,7 @@ export class AuthUnlockSessionComponent implements OnInit
|
|||
};
|
||||
name: string;
|
||||
showAlert: boolean = false;
|
||||
unlockSessionForm: FormGroup;
|
||||
unlockSessionForm: UntypedFormGroup;
|
||||
private _email: string;
|
||||
|
||||
/**
|
||||
|
@ -31,7 +31,7 @@ export class AuthUnlockSessionComponent implements OnInit
|
|||
constructor(
|
||||
private _activatedRoute: ActivatedRoute,
|
||||
private _authService: AuthService,
|
||||
private _formBuilder: FormBuilder,
|
||||
private _formBuilder: UntypedFormBuilder,
|
||||
private _router: Router,
|
||||
private _userService: UserService
|
||||
)
|
||||
|
|
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 3.9 MiB |
|
@ -6,8 +6,8 @@ import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@ang
|
|||
|
||||
declare const require: {
|
||||
context(path: string, deep?: boolean, filter?: RegExp): {
|
||||
keys(): string[];
|
||||
<T>(id: string): T;
|
||||
keys(): string[];
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -21,4 +21,4 @@ getTestBed().initTestEnvironment(
|
|||
const context = require.context('./', true, /\.spec\.ts$/);
|
||||
|
||||
// And load the modules.
|
||||
context.keys().map(context);
|
||||
context.keys().forEach(context);
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"experimentalDecorators": true,
|
||||
"moduleResolution": "node",
|
||||
"importHelpers": true,
|
||||
"target": "es2017",
|
||||
"target": "es2020",
|
||||
"module": "es2020",
|
||||
"lib": [
|
||||
"es2020",
|
||||
|
|
Loading…
Reference in New Issue
Block a user