update error handler
This commit is contained in:
+13
@@ -0,0 +1,13 @@
|
||||
<p-dialog
|
||||
header="شارژ لایسنس"
|
||||
[(visible)]="visible"
|
||||
[modal]="true"
|
||||
[style]="{ width: '300px' }"
|
||||
[closable]="true"
|
||||
(onHide)="close()"
|
||||
>
|
||||
<form [formGroup]="form" (submit)="submit()" class="flex flex-col gap-4">
|
||||
<app-input label="تعداد شارژ" [control]="form.controls.count" type="number" />
|
||||
<app-form-footer-actions [submitLabel]="'ذخیره'" [loading]="submitLoading()" (onCancel)="close()" />
|
||||
</form>
|
||||
</p-dialog>
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
import { AbstractFormDialog } from '@/shared/abstractClasses';
|
||||
import { InputComponent } from '@/shared/components';
|
||||
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
|
||||
import { Component, inject, Input } from '@angular/core';
|
||||
import { ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { Dialog } from 'primeng/dialog';
|
||||
import { ILicenseChargeRequest, ILicenseChargeResponse } from '../models';
|
||||
import { PartnersService } from '../services/main.service';
|
||||
|
||||
@Component({
|
||||
selector: 'partner-charge-license-form-dialog',
|
||||
templateUrl: './charge-license-form-dialog.component.html',
|
||||
imports: [Dialog, ReactiveFormsModule, InputComponent, FormFooterActionsComponent],
|
||||
})
|
||||
export class PartnerChargeLicenseFormDialogComponent extends AbstractFormDialog<
|
||||
ILicenseChargeRequest,
|
||||
ILicenseChargeResponse
|
||||
> {
|
||||
@Input({ required: true }) partnerId!: string;
|
||||
|
||||
private readonly service = inject(PartnersService);
|
||||
|
||||
form = this.fb.group({
|
||||
count: [0, [Validators.min(0)]],
|
||||
});
|
||||
|
||||
submitForm(payload: ILicenseChargeRequest) {
|
||||
return this.service.licenseCharge(this.partnerId, payload);
|
||||
}
|
||||
}
|
||||
@@ -5,4 +5,5 @@ const baseUrl = '/api/v1/admin/partners';
|
||||
export const PARTNERS_API_ROUTES = {
|
||||
list: () => `${baseUrl}`,
|
||||
single: (id: string) => `${baseUrl}/${id}`,
|
||||
licenseCharge: (id: string) => `${baseUrl}/${id}/charge-license`,
|
||||
};
|
||||
|
||||
@@ -12,3 +12,11 @@ export interface IPartnerRequest {
|
||||
code: string;
|
||||
license_quota: number;
|
||||
}
|
||||
|
||||
//charge license
|
||||
export interface ILicenseChargeRawResponse {}
|
||||
export interface ILicenseChargeResponse extends ILicenseChargeRawResponse {}
|
||||
|
||||
export interface ILicenseChargeRequest {
|
||||
count: number;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,14 @@ import { HttpClient } from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs';
|
||||
import { PARTNERS_API_ROUTES } from '../constants';
|
||||
import { IPartnerRawResponse, IPartnerRequest, IPartnerResponse } from '../models';
|
||||
import {
|
||||
ILicenseChargeRawResponse,
|
||||
ILicenseChargeRequest,
|
||||
ILicenseChargeResponse,
|
||||
IPartnerRawResponse,
|
||||
IPartnerRequest,
|
||||
IPartnerResponse,
|
||||
} from '../models';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class PartnersService {
|
||||
@@ -14,15 +21,22 @@ export class PartnersService {
|
||||
getAll(): Observable<IPaginatedResponse<IPartnerResponse>> {
|
||||
return this.http.get<IPaginatedResponse<IPartnerRawResponse>>(this.apiRoutes.list());
|
||||
}
|
||||
getSingle(userId: string): Observable<IPartnerResponse> {
|
||||
return this.http.get<IPartnerRawResponse>(this.apiRoutes.single(userId));
|
||||
getSingle(partnerId: string): Observable<IPartnerResponse> {
|
||||
return this.http.get<IPartnerRawResponse>(this.apiRoutes.single(partnerId));
|
||||
}
|
||||
|
||||
create(userData: IPartnerRequest): Observable<IPartnerResponse> {
|
||||
return this.http.post<IPartnerResponse>(this.apiRoutes.list(), userData);
|
||||
}
|
||||
|
||||
update(userId: string, userData: IPartnerRequest): Observable<IPartnerResponse> {
|
||||
return this.http.patch<IPartnerResponse>(this.apiRoutes.single(userId), userData);
|
||||
update(partnerId: string, userData: IPartnerRequest): Observable<IPartnerResponse> {
|
||||
return this.http.patch<IPartnerResponse>(this.apiRoutes.single(partnerId), userData);
|
||||
}
|
||||
|
||||
licenseCharge(
|
||||
partnerId: string,
|
||||
data: ILicenseChargeRequest,
|
||||
): Observable<ILicenseChargeResponse> {
|
||||
return this.http.post<ILicenseChargeRawResponse>(this.apiRoutes.licenseCharge(partnerId), data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<div class="flex flex-col gap-6">
|
||||
<app-card-data cardTitle="اطلاعات شریک تجاری" [editable]="true" [(editMode)]="editMode">
|
||||
<ng-template #moreAction> </ng-template>
|
||||
<ng-template #moreAction>
|
||||
<p-button outlined size="small" (onClick)="openChargeDialog()"> شارژ لایسنس </p-button>
|
||||
{{ visibleChargeFormDialog() }}
|
||||
</ng-template>
|
||||
<div class="flex flex-col gap-4">
|
||||
<div class="grid grid-cols-3 gap-4 items-center">
|
||||
<app-key-value label="عنوان شریک تجاری" [value]="partner()?.name" />
|
||||
@@ -20,4 +23,10 @@
|
||||
[initialValues]="partner() || undefined"
|
||||
(onSubmit)="getData()"
|
||||
/>
|
||||
|
||||
<partner-charge-license-form-dialog
|
||||
[(visible)]="visibleChargeFormDialog"
|
||||
[partnerId]="partnerId()"
|
||||
(onSubmit)="getData()"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,9 @@ import { BreadcrumbService } from '@/core/services';
|
||||
import { AppCardComponent, KeyValueComponent } from '@/shared/components';
|
||||
import { Component, computed, effect, inject, signal } from '@angular/core';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { Button } from 'primeng/button';
|
||||
import { ConsumerAccountListComponent } from '../components/accounts/list.component';
|
||||
import { PartnerChargeLicenseFormDialogComponent } from '../components/charge-license-form-dialog.component';
|
||||
import { GuildFormComponent } from '../components/form.component';
|
||||
import { superAdminPartnersNamedRoutes } from '../constants';
|
||||
import { PartnerStore } from '../store/partner.store';
|
||||
@@ -10,7 +12,14 @@ import { PartnerStore } from '../store/partner.store';
|
||||
@Component({
|
||||
selector: 'app-user',
|
||||
templateUrl: './single.component.html',
|
||||
imports: [AppCardComponent, KeyValueComponent, GuildFormComponent, ConsumerAccountListComponent],
|
||||
imports: [
|
||||
AppCardComponent,
|
||||
KeyValueComponent,
|
||||
GuildFormComponent,
|
||||
ConsumerAccountListComponent,
|
||||
Button,
|
||||
PartnerChargeLicenseFormDialogComponent,
|
||||
],
|
||||
})
|
||||
export class PartnerComponent {
|
||||
private readonly store = inject(PartnerStore);
|
||||
@@ -22,6 +31,7 @@ export class PartnerComponent {
|
||||
|
||||
readonly loading = computed(() => this.store.loading());
|
||||
readonly partner = computed(() => this.store.entity());
|
||||
visibleChargeFormDialog = signal(false);
|
||||
|
||||
constructor() {
|
||||
effect(() => {
|
||||
@@ -46,4 +56,8 @@ export class PartnerComponent {
|
||||
},
|
||||
]);
|
||||
}
|
||||
|
||||
openChargeDialog() {
|
||||
this.visibleChargeFormDialog.set(true);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user