Newer
Older
import {
ChangeDetectionStrategy,
Component,
Input,
Output,
} from "@angular/core";
import {SharedAbstractPresentational} from "@shared/components/presentationals/shared-abstract/shared-abstract.presentational";
import {ExtraButtonToolbar} from "@shared/models/extra-button-toolbar.model";
import {
BehaviorSubject,
Observable,
} from "rxjs";
import {
isNullOrUndefined,
ObservableUtil,
TRANSLATE,
} from "solidify-frontend";
@Component({
selector: "dlcm-button-toolbar-detail",
templateUrl: "./button-toolbar-detail.presentational.html",
styleUrls: ["./button-toolbar-detail.presentational.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ButtonToolbarDetailPresentational<TResourceModel extends BaseResource> extends SharedAbstractPresentational implements OnInit {
@Input()
readonly keyEditButtonToTranslate: string = TRANSLATE("app.navigation.button.edit");
@Input()
readonly keyDeleteButtonToTranslate: string = TRANSLATE("app.navigation.button.delete");
@Input()
readonly keyBackButtonToTranslate: string = TRANSLATE("app.navigation.button.backToList");
@Input()
readonly keyBackToDetailButtonToTranslate: string = TRANSLATE("app.navigation.button.backToDetail");
@Input()
isEdit: boolean;
@Input()
editAvailable: boolean = true;
@Input()
deleteAvailable: boolean = true;
@Input()
detail: boolean;
@Input()
currentModel: TResourceModel;
@Input()
listOriginalButton?: ExtraButtonToolbar<TResourceModel>[];
@Input()
listExtraButtons?: ExtraButtonToolbar<TResourceModel>[];
private readonly _editBS: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);
@Output("editChange")
readonly editObs: Observable<void> = ObservableUtil.asObservable(this._editBS);
private readonly _deleteBS: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);
@Output("deleteChange")
readonly deleteObs: Observable<void> = ObservableUtil.asObservable(this._deleteBS);
private readonly _backToListBS: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);
@Output("backToListChange")
readonly backToListObs: Observable<void> = ObservableUtil.asObservable(this._backToListBS);
private readonly _backToDetailBS: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);
@Output("backToDetailChange")
readonly backToDetailObs: Observable<void> = ObservableUtil.asObservable(this._backToDetailBS);
private readonly _navigateBS: BehaviorSubject<RoutesEnum> = new BehaviorSubject<RoutesEnum>(undefined);
@Output("navigateChange")
readonly navigateObs: Observable<RoutesEnum> = ObservableUtil.asObservable(this._navigateBS);
constructor() {
super();
}
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
ngOnInit(): void {
super.ngOnInit();
this.listOriginalButton = [
{
color: "accent",
icon: "navigate_before",
labelToTranslate: this.keyBackToDetailButtonToTranslate,
order: 10,
callback: () => this.backToDetail(),
displayCondition: (resource) => this.isEdit,
},
{
color: "accent",
icon: "navigate_before",
labelToTranslate: this.keyBackButtonToTranslate,
order: 20,
callback: () => this.backToList(),
displayCondition: (resource) => !this.isEdit,
},
{
color: "primary",
icon: "edit",
labelToTranslate: this.keyEditButtonToTranslate,
order: 30,
callback: () => this.edit(),
displayCondition: (resource) => !this.isEdit && this.editAvailable,
},
{
color: "accent",
icon: "delete",
labelToTranslate: this.keyDeleteButtonToTranslate,
order: 40,
callback: () => this.delete(),
displayCondition: (resource) => !this.isEdit && this.deleteAvailable,
disableCondition: (resource) => !resource,
},
];
if (!isNullOrUndefined(this.listExtraButtons) && !isEmptyArray(this.listExtraButtons)) {
this.listOriginalButton = [...this.listOriginalButton, ...this.listExtraButtons];
}
this.listOriginalButton.sort((a, b) => {
if (a.order === b.order) {
return 0;
} else if (a.order < b.order) {
return -1;
}
return 1;
});
}
edit(): void {
if (this.editAvailable) {
this._editBS.next();
}
}
delete(): void {
if (this.deleteAvailable && !isNullOrUndefined(this.currentModel)) {
this._deleteBS.next();
}
}
backToList(): void {
this._backToListBS.next();
}
backToDetail(): void {
this._backToDetailBS.next();
}
navigate(route: RoutesEnum): void {
this._navigateBS.next(route);
}