mirror of https://github.com/abpframework/abp.git
committed by
GitHub
7 changed files with 80 additions and 10 deletions
@ -1,24 +1,37 @@ |
|||
import { ApplicationInfo, EnvironmentService } from '@abp/ng.core'; |
|||
import { EnvironmentService } from '@abp/ng.core'; |
|||
import { RouterLink } from '@angular/router'; |
|||
import { Component, inject } from '@angular/core'; |
|||
import { LOGO_APP_NAME_TOKEN, LOGO_URL_TOKEN } from '@abp/ng.theme.shared'; |
|||
|
|||
@Component({ |
|||
selector: 'abp-logo', |
|||
template: ` |
|||
<a class="navbar-brand" routerLink="/"> |
|||
@if (appInfo.logoUrl) { |
|||
<img [src]="appInfo.logoUrl" [alt]="appInfo.name" width="100%" height="auto" /> |
|||
@if (logoUrl) { |
|||
<img [src]="logoUrl" [alt]="appName" width="100%" height="auto" /> |
|||
} @else { |
|||
{{ appInfo.name }} |
|||
{{ appName }} |
|||
} |
|||
</a> |
|||
`,
|
|||
standalone: true, |
|||
imports: [RouterLink], |
|||
}) |
|||
export class LogoComponent { |
|||
private environment = inject(EnvironmentService); |
|||
|
|||
get appInfo(): ApplicationInfo { |
|||
return this.environment.getEnvironment().application; |
|||
private readonly providedLogoUrl = inject(LOGO_URL_TOKEN, { optional: true }); |
|||
private readonly providedAppName = inject(LOGO_APP_NAME_TOKEN, { optional: true }); |
|||
|
|||
get logoUrl(): string { |
|||
return ( |
|||
this.providedLogoUrl ?? this.environment.getEnvironment().application?.logoUrl |
|||
); |
|||
} |
|||
|
|||
get appName(): string { |
|||
return ( |
|||
this.providedAppName ?? this.environment.getEnvironment().application?.name |
|||
); |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,51 @@ |
|||
import { Environment } from '@abp/ng.core'; |
|||
import { |
|||
EnvironmentProviders, |
|||
makeEnvironmentProviders, |
|||
Provider, |
|||
} from '@angular/core'; |
|||
import { LOGO_APP_NAME_TOKEN, LOGO_URL_TOKEN } from '../tokens/logo.token'; |
|||
|
|||
export enum LogoFeatureKind { |
|||
Options, |
|||
} |
|||
|
|||
export interface LogoFeature<KindT extends LogoFeatureKind> { |
|||
ɵkind: KindT; |
|||
ɵproviders: (Provider | EnvironmentProviders)[]; |
|||
} |
|||
|
|||
function makeLogoFeature<KindT extends LogoFeatureKind>( |
|||
kind: KindT, |
|||
providers: (Provider | EnvironmentProviders)[], |
|||
): LogoFeature<KindT> { |
|||
return { |
|||
ɵkind: kind, |
|||
ɵproviders: providers, |
|||
}; |
|||
} |
|||
|
|||
export function withEnvironmentOptions( |
|||
options = {} as Environment, |
|||
): LogoFeature<LogoFeatureKind.Options> { |
|||
const { name, logoUrl } = options.application || {}; |
|||
|
|||
return makeLogoFeature(LogoFeatureKind.Options, [ |
|||
{ |
|||
provide: LOGO_URL_TOKEN, |
|||
useValue: logoUrl || '', |
|||
}, |
|||
{ |
|||
provide: LOGO_APP_NAME_TOKEN, |
|||
useValue: name || 'ProjectName', |
|||
}, |
|||
]); |
|||
} |
|||
|
|||
export function provideLogo( |
|||
...features: LogoFeature<LogoFeatureKind>[] |
|||
): EnvironmentProviders { |
|||
const providers: (Provider | EnvironmentProviders)[] = []; |
|||
features.forEach(({ ɵproviders }) => providers.push(...ɵproviders)); |
|||
return makeEnvironmentProviders(providers); |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
import { InjectionToken } from '@angular/core'; |
|||
|
|||
export const LOGO_URL_TOKEN = new InjectionToken<string>('LOGO_URL_TOKEN'); |
|||
export const LOGO_APP_NAME_TOKEN = new InjectionToken<string>( |
|||
'LOGO_APP_NAME_TOKEN', |
|||
); |
|||
Loading…
Reference in new issue