mirror of https://github.com/abpframework/abp.git
committed by
GitHub
39 changed files with 1021 additions and 947 deletions
@ -1,12 +1,14 @@ |
|||||
<form [formGroup]="form" *ngIf="form" (ngSubmit)="submit()" validateOnSubmit class="abp-md-form"> |
@if (form) { |
||||
<abp-extensible-form [selectedRecord]="selected"></abp-extensible-form> |
<form [formGroup]="form" (ngSubmit)="submit()" validateOnSubmit class="abp-md-form"> |
||||
|
<abp-extensible-form [selectedRecord]="selected"></abp-extensible-form> |
||||
<abp-button |
|
||||
buttonType="submit" |
<abp-button |
||||
iconClass="fa fa-check" |
buttonType="submit" |
||||
buttonClass="btn btn-primary color-white" |
iconClass="fa fa-check" |
||||
[loading]="inProgress" |
buttonClass="btn btn-primary color-white" |
||||
> |
[loading]="inProgress" |
||||
{{ 'AbpIdentity::Save' | abpLocalization }}</abp-button |
> |
||||
> |
{{ 'AbpIdentity::Save' | abpLocalization }}</abp-button |
||||
</form> |
> |
||||
|
</form> |
||||
|
} |
||||
|
|||||
@ -1,145 +1,161 @@ |
|||||
<abp-modal *ngIf="visible" [(visible)]="visible" [busy]="modalBusy" [options]="{ size: 'lg' }"> |
@if (visible) { |
||||
<ng-template #abpHeader> |
<abp-modal [(visible)]="visible" [busy]="modalBusy" [options]="{ size: 'lg' }"> |
||||
<h3>{{ 'AbpFeatureManagement::Features' | abpLocalization }}</h3> |
<ng-template #abpHeader> |
||||
</ng-template> |
<h3>{{ 'AbpFeatureManagement::Features' | abpLocalization }}</h3> |
||||
|
</ng-template> |
||||
|
|
||||
<ng-template #abpBody> |
<ng-template #abpBody> |
||||
<div class="row"> |
<div class="row"> |
||||
<ng-container *ngIf="groups.length"> |
@if (groups.length) { |
||||
<div class="col-md-4"> |
<div class="col-md-4"> |
||||
<ul |
<ul |
||||
ngbNav |
ngbNav |
||||
#nav="ngbNav" |
#nav="ngbNav" |
||||
[(activeId)]="selectedGroupDisplayName" |
[(activeId)]="selectedGroupDisplayName" |
||||
class="nav-pills" |
class="nav-pills" |
||||
orientation="vertical" |
orientation="vertical" |
||||
> |
|
||||
<li |
|
||||
*ngFor="let group of groups; trackBy: track.by('name')" |
|
||||
[ngbNavItem]="group.displayName" |
|
||||
> |
> |
||||
<a ngbNavLink>{{ group.displayName }}</a> |
@for (group of groups; track group.name) { |
||||
<ng-template ngbNavContent> |
<li [ngbNavItem]="group.displayName"> |
||||
<h4>{{ selectedGroupDisplayName }}</h4> |
<a ngbNavLink>{{ group.displayName }}</a> |
||||
<hr class="mt-2 mb-3" /> |
<ng-template ngbNavContent> |
||||
|
<h4>{{ selectedGroupDisplayName }}</h4> |
||||
|
<hr class="mt-2 mb-3" /> |
||||
|
|
||||
<div |
@for (feature of features[group.name]; track feature.id; let i = $index) { |
||||
class="mt-2" |
<div class="mt-2" [ngStyle]="feature.style" (keyup.enter)="save()"> |
||||
*ngFor=" |
@switch (feature.valueType?.name) { |
||||
let feature of features[group.name]; |
@case (valueTypes.ToggleStringValueType) { |
||||
let i = index; |
<div class="form-check"> |
||||
trackBy: track.by('id') |
<input |
||||
" |
class="form-check-input" |
||||
[ngStyle]="feature.style" |
type="checkbox" |
||||
[ngSwitch]="feature.valueType?.name" |
[id]="feature.name" |
||||
(keyup.enter)="save()" |
[(ngModel)]="feature.value" |
||||
> |
(ngModelChange)="onCheckboxClick($event, feature)" |
||||
<ng-container *ngSwitchCase="valueTypes.ToggleStringValueType"> |
/> |
||||
<div class="form-check"> |
|
||||
<input |
|
||||
class="form-check-input" |
|
||||
type="checkbox" |
|
||||
[id]="feature.name" |
|
||||
[(ngModel)]="feature.value" |
|
||||
(ngModelChange)="onCheckboxClick($event, feature)" |
|
||||
/> |
|
||||
|
|
||||
<label class="form-check-label" [htmlFor]="feature.name">{{ |
<label class="form-check-label" [htmlFor]="feature.name">{{ |
||||
feature.displayName |
feature.displayName |
||||
}}</label> |
}}</label> |
||||
<ng-container |
<ng-container |
||||
*ngTemplateOutlet="descTmp; context: { $implicit: feature.description }" |
*ngTemplateOutlet=" |
||||
></ng-container> |
descTmp; |
||||
</div> |
context: { $implicit: feature.description } |
||||
</ng-container> |
" |
||||
<ng-container *ngSwitchCase="valueTypes.FreeTextStringValueType"> |
></ng-container> |
||||
<div class="mb-3 form-group"> |
</div> |
||||
<label [htmlFor]="feature.name" class="form-label">{{ |
} |
||||
feature.displayName |
@case (valueTypes.FreeTextStringValueType) { |
||||
}}</label> |
<div class="mb-3 form-group"> |
||||
<input |
<label [htmlFor]="feature.name" class="form-label">{{ |
||||
class="form-control" |
feature.displayName |
||||
type="text" |
}}</label> |
||||
[id]="feature.name" |
<input |
||||
[(ngModel)]="feature.value" |
class="form-control" |
||||
[abpFeatureManagementFreeText]="feature" |
type="text" |
||||
/> |
[id]="feature.name" |
||||
|
[(ngModel)]="feature.value" |
||||
|
[abpFeatureManagementFreeText]="feature" |
||||
|
/> |
||||
|
|
||||
<ng-container |
<ng-container |
||||
*ngTemplateOutlet="descTmp; context: { $implicit: feature.description }" |
*ngTemplateOutlet=" |
||||
></ng-container> |
descTmp; |
||||
</div> |
context: { $implicit: feature.description } |
||||
</ng-container> |
" |
||||
<ng-container *ngSwitchCase="valueTypes.SelectionStringValueType"> |
></ng-container> |
||||
<ng-container *ngIf="feature.valueType.itemSource?.items?.length"> |
</div> |
||||
<div class="mb-3 form-group"> |
} |
||||
<label [htmlFor]="feature.name" class="form-label">{{ |
@case (valueTypes.SelectionStringValueType) { |
||||
feature.displayName |
@if (feature.valueType.itemSource?.items?.length) { |
||||
}}</label> |
<div class="mb-3 form-group"> |
||||
<select class="form-select" [id]="feature.name" [(ngModel)]="feature.value"> |
<label [htmlFor]="feature.name" class="form-label">{{ |
||||
<option |
feature.displayName |
||||
*ngFor=" |
}}</label> |
||||
let item of feature.valueType.itemSource?.items; |
<select |
||||
trackBy: track.by('value') |
class="form-select" |
||||
" |
[id]="feature.name" |
||||
[ngValue]="item.value" |
[(ngModel)]="feature.value" |
||||
> |
> |
||||
{{ |
@for ( |
||||
item.displayText?.resourceName + '::' + item.displayText?.name |
item of feature.valueType.itemSource?.items; |
||||
| abpLocalization |
track item.value |
||||
}} |
) { |
||||
</option> |
<option [ngValue]="item.value"> |
||||
</select> |
{{ |
||||
<ng-container |
item.displayText?.resourceName + |
||||
*ngTemplateOutlet="descTmp; context: { $implicit: feature.description }" |
'::' + |
||||
></ng-container> |
item.displayText?.name | abpLocalization |
||||
|
}} |
||||
|
</option> |
||||
|
} |
||||
|
</select> |
||||
|
<ng-container |
||||
|
*ngTemplateOutlet=" |
||||
|
descTmp; |
||||
|
context: { $implicit: feature.description } |
||||
|
" |
||||
|
></ng-container> |
||||
|
</div> |
||||
|
} |
||||
|
} |
||||
|
@default { |
||||
|
{{ feature.displayName }} |
||||
|
} |
||||
|
} |
||||
</div> |
</div> |
||||
</ng-container> |
} |
||||
</ng-container> |
</ng-template> |
||||
<ng-container *ngSwitchDefault>{{ feature.displayName }}</ng-container> |
</li> |
||||
</div> |
} |
||||
</ng-template> |
</ul> |
||||
</li> |
</div> |
||||
</ul> |
|
||||
</div> |
|
||||
|
|
||||
<ng-template #descTmp let-description> |
<ng-template #descTmp let-description> |
||||
<small *ngIf="description" class="d-block form-text text-muted">{{ description }}</small> |
@if (description) { |
||||
</ng-template> |
<small class="d-block form-text text-muted">{{ description }}</small> |
||||
|
} |
||||
|
</ng-template> |
||||
|
|
||||
<div class="col-md-8"><div class="py-0" [ngbNavOutlet]="nav"></div></div> |
<div class="col-md-8"><div class="py-0" [ngbNavOutlet]="nav"></div></div> |
||||
</ng-container> |
} |
||||
|
|
||||
<div class="col" *ngIf="!groups.length"> |
@if (!groups.length) { |
||||
{{ 'AbpFeatureManagement::NoFeatureFoundMessage' | abpLocalization }} |
<div class="col"> |
||||
|
{{ 'AbpFeatureManagement::NoFeatureFoundMessage' | abpLocalization }} |
||||
|
</div> |
||||
|
} |
||||
</div> |
</div> |
||||
</div> |
</ng-template> |
||||
</ng-template> |
|
||||
|
|
||||
<ng-template #abpFooter> |
<ng-template #abpFooter> |
||||
<button abpClose type="button" class="btn btn-link"> |
<button abpClose type="button" class="btn btn-link"> |
||||
{{ 'AbpFeatureManagement::Cancel' | abpLocalization }} |
{{ 'AbpFeatureManagement::Cancel' | abpLocalization }} |
||||
</button> |
</button> |
||||
|
|
||||
<abp-button |
@if (groups.length) { |
||||
*ngIf="groups.length" |
<abp-button |
||||
iconClass="fa fa-refresh" |
iconClass="fa fa-refresh" |
||||
buttonClass="btn btn-outline-primary" |
buttonClass="btn btn-outline-primary" |
||||
[disabled]="modalBusy" |
[disabled]="modalBusy" |
||||
(click)="resetToDefault()" |
(click)="resetToDefault()" |
||||
aria-hidden="true" |
aria-hidden="true" |
||||
> |
> |
||||
{{ 'AbpFeatureManagement::ResetToDefault' | abpLocalization }} |
{{ 'AbpFeatureManagement::ResetToDefault' | abpLocalization }} |
||||
</abp-button> |
</abp-button> |
||||
|
} |
||||
|
|
||||
<abp-button |
@if (groups.length) { |
||||
*ngIf="groups.length" |
<abp-button |
||||
iconClass="fa fa-check" |
iconClass="fa fa-check" |
||||
[disabled]="modalBusy" |
[disabled]="modalBusy" |
||||
(click)="save()" |
(click)="save()" |
||||
aria-hidden="true" |
aria-hidden="true" |
||||
> |
> |
||||
{{ 'AbpFeatureManagement::Save' | abpLocalization }} |
{{ 'AbpFeatureManagement::Save' | abpLocalization }} |
||||
</abp-button> |
</abp-button> |
||||
</ng-template> |
} |
||||
</abp-modal> |
</ng-template> |
||||
|
</abp-modal> |
||||
|
} |
||||
|
|||||
@ -1,65 +1,64 @@ |
|||||
<ng-template #loginBtn> |
@if ((currentUser$ | async)?.isAuthenticated) { |
||||
<a role="button" class="nav-link pointer" (click)="navigateToLogin()">{{ |
|
||||
'AbpAccount::Login' | abpLocalization |
|
||||
}}</a> |
|
||||
</ng-template> |
|
||||
<div |
|
||||
*ngIf="(currentUser$ | async)?.isAuthenticated; else loginBtn" |
|
||||
ngbDropdown |
|
||||
class="dropdown" |
|
||||
#currentUserDropdown="ngbDropdown" |
|
||||
display="static" |
|
||||
> |
|
||||
<a |
|
||||
ngbDropdownToggle |
|
||||
class="nav-link" |
|
||||
href="javascript:void(0)" |
|
||||
role="button" |
|
||||
id="dropdownMenuLink" |
|
||||
data-toggle="dropdown" |
|
||||
aria-haspopup="true" |
|
||||
aria-expanded="false" |
|
||||
> |
|
||||
<small *ngIf="(selectedTenant$ | async)?.name as tenantName" |
|
||||
><i>{{ tenantName }}</i |
|
||||
>\</small |
|
||||
> |
|
||||
<strong>{{ (currentUser$ | async)?.userName }}</strong> |
|
||||
</a> |
|
||||
<div |
<div |
||||
class="dropdown-menu dropdown-menu-end border-0 shadow-sm" |
ngbDropdown |
||||
aria-labelledby="dropdownMenuLink" |
class="dropdown" |
||||
[class.d-block]="smallScreen && currentUserDropdown.isOpen()" |
#currentUserDropdown="ngbDropdown" |
||||
|
display="static" |
||||
> |
> |
||||
<ng-container *ngFor="let item of userMenu.items$ | async; trackBy: trackByFn"> |
<a |
||||
<ng-container *abpVisible="!item.visible || item.visible(item)"> |
ngbDropdownToggle |
||||
<li class="nav-item d-flex align-items-center" *abpPermission="item.requiredPolicy"> |
class="nav-link" |
||||
<ng-container |
href="javascript:void(0)" |
||||
*ngIf="item.component; else htmlTemplate" |
role="button" |
||||
[ngComponentOutlet]="item.component" |
id="dropdownMenuLink" |
||||
[ngComponentOutletInjector]="item | toInjector" |
data-toggle="dropdown" |
||||
></ng-container> |
aria-haspopup="true" |
||||
|
aria-expanded="false" |
||||
<ng-template #htmlTemplate> |
> |
||||
<div |
@if ((selectedTenant$ | async)?.name; as tenantName) { |
||||
*ngIf="item.html; else textTemplate" |
<small |
||||
[innerHTML]="item.html" |
><i>{{ tenantName }}</i |
||||
(click)="item.action ? item.action() : null" |
>\</small |
||||
></div> |
> |
||||
</ng-template> |
} |
||||
|
<strong>{{ (currentUser$ | async)?.userName }}</strong> |
||||
<ng-template #textTemplate> |
</a> |
||||
<a |
<div |
||||
*ngIf="item.textTemplate" |
class="dropdown-menu dropdown-menu-end border-0 shadow-sm" |
||||
(click)="item.action ? item.action() : null" |
aria-labelledby="dropdownMenuLink" |
||||
class="dropdown-item pointer" |
[class.d-block]="smallScreen && currentUserDropdown.isOpen()" |
||||
> |
> |
||||
<i *ngIf="item.textTemplate.icon" class="me-1 {{ item.textTemplate.icon }}"></i> |
@for (item of userMenu.items$ | async; track $index) { |
||||
{{ item.textTemplate.text | abpLocalization }}</a |
<ng-container *abpVisible="!item.visible || item.visible(item)"> |
||||
> |
<li class="nav-item d-flex align-items-center" *abpPermission="item.requiredPolicy"> |
||||
</ng-template> |
@if (item.component) { |
||||
</li> |
<ng-container |
||||
</ng-container> |
[ngComponentOutlet]="item.component" |
||||
</ng-container> |
[ngComponentOutletInjector]="item | toInjector" |
||||
|
></ng-container> |
||||
|
} @else { |
||||
|
@if (item.html) { |
||||
|
<div [innerHTML]="item.html" (click)="item.action ? item.action() : null"></div> |
||||
|
} @else { |
||||
|
@if (item.textTemplate) { |
||||
|
<a (click)="item.action ? item.action() : null" class="dropdown-item pointer"> |
||||
|
@if (item.textTemplate.icon) { |
||||
|
<i class="me-1 {{ item.textTemplate.icon }}"></i> |
||||
|
} |
||||
|
{{ item.textTemplate.text | abpLocalization }}</a |
||||
|
> |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</li> |
||||
|
</ng-container> |
||||
|
} |
||||
|
</div> |
||||
</div> |
</div> |
||||
</div> |
} @else { |
||||
|
<ng-template #loginBtn> |
||||
|
<a role="button" class="nav-link pointer" (click)="navigateToLogin()">{{ |
||||
|
'AbpAccount::Login' | abpLocalization |
||||
|
}}</a> |
||||
|
</ng-template> |
||||
|
} |
||||
|
|||||
@ -1,18 +1,16 @@ |
|||||
<ul class="navbar-nav"> |
<ul class="navbar-nav"> |
||||
<ng-container *ngFor="let item of navItems.items$ | async; trackBy: trackByFn"> |
@for (item of navItems.items$ | async; track $index) { |
||||
<ng-container *abpVisible="!item.visible || item.visible(item)"> |
<ng-container *abpVisible="!item.visible || item.visible(item)"> |
||||
<li class="nav-item d-flex align-items-center" *abpPermission="item.requiredPolicy"> |
<li class="nav-item d-flex align-items-center" *abpPermission="item.requiredPolicy"> |
||||
<ng-container |
@if (item.component) { |
||||
|
<ng-container |
||||
*ngIf="item.component; else htmlTemplate" |
[ngComponentOutlet]="item.component" |
||||
[ngComponentOutlet]="item.component" |
[ngComponentOutletInjector]="item | toInjector" |
||||
[ngComponentOutletInjector]="item | toInjector" |
></ng-container> |
||||
></ng-container> |
} @else { |
||||
|
|
||||
<ng-template #htmlTemplate> |
|
||||
<div [innerHTML]="item.html" (click)="item.action ? item.action() : null"></div> |
<div [innerHTML]="item.html" (click)="item.action ? item.action() : null"></div> |
||||
</ng-template> |
} |
||||
</li> |
</li> |
||||
</ng-container> |
</ng-container> |
||||
</ng-container> |
} |
||||
</ul> |
</ul> |
||||
|
|||||
@ -1,24 +1,26 @@ |
|||||
<ng-container *ngFor="let alert of service.alerts$ | async; let i = index"> |
@for (alert of service.alerts$ | async; track i; let i = $index) { |
||||
<div |
<div |
||||
class="alert alert-{{ alert.type }} fade show" |
class="alert alert-{{ alert.type }} fade show" |
||||
[ngClass]="{ 'alert-dismissible fade show': alert.dismissible }" |
[ngClass]="{ 'alert-dismissible fade show': alert.dismissible }" |
||||
role="alert" |
role="alert" |
||||
> |
> |
||||
<h4 |
@if (alert.title) { |
||||
class="alert-heading" |
<h4 |
||||
*ngIf="alert.title" |
class="alert-heading" |
||||
[innerHTML]="alert.title | abpSafeHtml | abpLocalization: alert.titleLocalizationParams" |
[innerHTML]="alert.title | abpSafeHtml | abpLocalization: alert.titleLocalizationParams" |
||||
></h4> |
></h4> |
||||
|
} |
||||
<span |
<span |
||||
[innerHTML]="alert.message | abpSafeHtml | abpLocalization: alert.messageLocalizationParams" |
[innerHTML]="alert.message | abpSafeHtml | abpLocalization: alert.messageLocalizationParams" |
||||
></span> |
></span> |
||||
<button |
@if (alert.dismissible) { |
||||
*ngIf="alert.dismissible" |
<button |
||||
type="button" |
type="button" |
||||
class="btn-close" |
class="btn-close" |
||||
data-dismiss="alert" |
data-dismiss="alert" |
||||
aria-label="Close" |
aria-label="Close" |
||||
(click)="service.remove(i)" |
(click)="service.remove(i)" |
||||
></button> |
></button> |
||||
|
} |
||||
</div> |
</div> |
||||
</ng-container> |
} |
||||
|
|||||
@ -1,42 +1,51 @@ |
|||||
<div class="confirmation" *ngIf="confirmation$ | async as data"> |
@if (confirmation$ | async; as data) { |
||||
<div |
<div class="confirmation"> |
||||
class="confirmation-backdrop" |
<div |
||||
(click)="data.options?.dismissible ? close(dismiss) : null" |
class="confirmation-backdrop" |
||||
></div> |
(click)="data.options?.dismissible ? close(dismiss) : null" |
||||
<div class="confirmation-dialog"> |
></div> |
||||
<div class="icon-container" [ngClass]="data.severity" *ngIf="data.severity || isCustomIconExists(data)"> |
<div class="confirmation-dialog"> |
||||
<div [outerHTML]="data.options.iconTemplate" *ngIf="isIconTemplateExits(data); else iconHolder" ></div> |
@if (data.severity || isCustomIconExists(data)) { |
||||
<ng-template #iconHolder> |
<div class="icon-container" [ngClass]="data.severity"> |
||||
<i class="icon" [ngClass]="getIconClass(data)"></i> |
@if (isIconTemplateExits(data)) { |
||||
</ng-template> |
<div [outerHTML]="data.options.iconTemplate"></div> |
||||
</div> |
} @else { |
||||
<div class="content"> |
<i class="icon" [ngClass]="getIconClass(data)"></i> |
||||
<h1 |
} |
||||
class="title" |
</div> |
||||
*ngIf="data.title" |
} |
||||
[innerHTML]="data.title | abpLocalization: data.options?.titleLocalizationParams" |
<div class="content"> |
||||
></h1> |
@if (data.title) { |
||||
<p |
<h1 |
||||
class="message" |
class="title" |
||||
*ngIf="data.message" |
[innerHTML]="data.title | abpLocalization: data.options?.titleLocalizationParams" |
||||
[innerHTML]="data.message | abpLocalization: data.options?.messageLocalizationParams" |
></h1> |
||||
></p> |
} |
||||
</div> |
@if (data.message) { |
||||
<div class="footer"> |
<p |
||||
<button |
class="message" |
||||
id="cancel" |
[innerHTML]="data.message | abpLocalization: data.options?.messageLocalizationParams" |
||||
class="btn btn-outline-primary me-2" |
></p> |
||||
[innerHTML]="data.options?.cancelText || 'AbpUi::Cancel' | abpLocalization" |
} |
||||
*ngIf="!data?.options?.hideCancelBtn" |
</div> |
||||
(click)="close(reject)" |
<div class="footer"> |
||||
></button> |
@if (!data?.options?.hideCancelBtn) { |
||||
<button |
<button |
||||
id="confirm" |
id="cancel" |
||||
class="btn btn-primary" |
class="btn btn-outline-primary me-2" |
||||
[innerHTML]="data.options?.yesText || 'AbpUi::Yes' | abpLocalization" |
[innerHTML]="data.options?.cancelText || 'AbpUi::Cancel' | abpLocalization" |
||||
*ngIf="!data?.options?.hideYesBtn" |
(click)="close(reject)" |
||||
(click)="close(confirm)" |
></button> |
||||
></button> |
} |
||||
|
@if (!data?.options?.hideYesBtn) { |
||||
|
<button |
||||
|
id="confirm" |
||||
|
class="btn btn-primary" |
||||
|
[innerHTML]="data.options?.yesText || 'AbpUi::Yes' | abpLocalization" |
||||
|
(click)="close(confirm)" |
||||
|
></button> |
||||
|
} |
||||
|
</div> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
} |
||||
|
|||||
@ -1,21 +1,27 @@ |
|||||
<ng-content></ng-content> |
<ng-content></ng-content> |
||||
|
|
||||
<ng-template #modalContent let-modal> |
<ng-template #modalContent let-modal> |
||||
<div *ngIf="abpHeader" id="abp-modal-header" class="modal-header abp-modal-header"> |
@if (abpHeader) { |
||||
<ng-container *ngTemplateOutlet="abpHeader"></ng-container> |
<div id="abp-modal-header" class="modal-header abp-modal-header"> |
||||
|
<ng-container *ngTemplateOutlet="abpHeader"></ng-container> |
||||
<button |
|
||||
id="abp-modal-close-button" |
<button |
||||
type="button" |
id="abp-modal-close-button" |
||||
class="btn-sm btn-close" |
type="button" |
||||
aria-label="Close" |
class="btn-sm btn-close" |
||||
(click)="modal.dismiss()" |
aria-label="Close" |
||||
></button> |
(click)="modal.dismiss()" |
||||
</div> |
></button> |
||||
<div *ngIf="abpBody" id="abp-modal-body" class="modal-body"> |
</div> |
||||
<ng-container *ngTemplateOutlet="abpBody"></ng-container> |
} |
||||
</div> |
@if (abpBody) { |
||||
<div *ngIf="abpFooter" id="abp-modal-footer" class="modal-footer"> |
<div id="abp-modal-body" class="modal-body"> |
||||
<ng-container *ngTemplateOutlet="abpFooter"></ng-container> |
<ng-container *ngTemplateOutlet="abpBody"></ng-container> |
||||
</div> |
</div> |
||||
|
} |
||||
|
@if (abpFooter) { |
||||
|
<div id="abp-modal-footer" class="modal-footer"> |
||||
|
<ng-container *ngTemplateOutlet="abpFooter"></ng-container> |
||||
|
</div> |
||||
|
} |
||||
</ng-template> |
</ng-template> |
||||
|
|||||
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 1.4 KiB |
Loading…
Reference in new issue