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 { RouterLink } from '@angular/router'; |
||||
import { Component, inject } from '@angular/core'; |
import { Component, inject } from '@angular/core'; |
||||
|
import { LOGO_APP_NAME_TOKEN, LOGO_URL_TOKEN } from '@abp/ng.theme.shared'; |
||||
|
|
||||
@Component({ |
@Component({ |
||||
selector: 'abp-logo', |
selector: 'abp-logo', |
||||
template: ` |
template: ` |
||||
<a class="navbar-brand" routerLink="/"> |
<a class="navbar-brand" routerLink="/"> |
||||
@if (appInfo.logoUrl) { |
@if (logoUrl) { |
||||
<img [src]="appInfo.logoUrl" [alt]="appInfo.name" width="100%" height="auto" /> |
<img [src]="logoUrl" [alt]="appName" width="100%" height="auto" /> |
||||
} @else { |
} @else { |
||||
{{ appInfo.name }} |
{{ appName }} |
||||
} |
} |
||||
</a> |
</a> |
||||
`,
|
`,
|
||||
|
standalone: true, |
||||
imports: [RouterLink], |
imports: [RouterLink], |
||||
}) |
}) |
||||
export class LogoComponent { |
export class LogoComponent { |
||||
private environment = inject(EnvironmentService); |
private environment = inject(EnvironmentService); |
||||
|
|
||||
get appInfo(): ApplicationInfo { |
private readonly providedLogoUrl = inject(LOGO_URL_TOKEN, { optional: true }); |
||||
return this.environment.getEnvironment().application; |
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