diff --git a/src/app.routes.ts b/src/app.routes.ts index 0d79161..bcf3af3 100644 --- a/src/app.routes.ts +++ b/src/app.routes.ts @@ -1,3 +1,6 @@ +import { CONSUMER_ROUTES } from '@/domains/consumer/routes'; +import { PARTNER_ROUTES } from '@/domains/partner/routes'; +import { PROVIDER_ROUTES } from '@/domains/provider/routes'; import { SUPER_ADMIN_ROUTES } from '@/domains/superAdmin/routes'; import { AuthComponent } from '@/modules/auth/pages/auth.component'; import { Routes } from '@angular/router'; @@ -12,6 +15,9 @@ export const appRoutes: Routes = [ component: AppLayout, children: [ SUPER_ADMIN_ROUTES, + CONSUMER_ROUTES, + PROVIDER_ROUTES, + PARTNER_ROUTES, { path: 'ng', component: Dashboard }, { path: 'uikit', loadChildren: () => import('./app/pages/uikit/uikit.routes') }, { path: 'documentation', component: Documentation }, diff --git a/src/app/core/constants/index.ts b/src/app/core/constants/index.ts index 118f2a2..cc8d483 100644 --- a/src/app/core/constants/index.ts +++ b/src/app/core/constants/index.ts @@ -1,2 +1 @@ export * from './defaultData.const'; -export * from './menuItems.const'; diff --git a/src/app/core/models/user.model.ts b/src/app/core/models/user.model.ts index b8d2c3c..35a4920 100644 --- a/src/app/core/models/user.model.ts +++ b/src/app/core/models/user.model.ts @@ -1,9 +1,8 @@ export enum UserRole { ADMIN = 'admin', - PARTNER = 'partner', - POS = 'pos', PROVIDER = 'provider', - SUPERADMIN = 'superadmin', + PARTNER = 'partner', + CONSUMER = 'consumer', } export type TRoles = keyof typeof UserRole; diff --git a/src/app/core/services/auth.service.ts b/src/app/core/services/auth.service.ts index 74b4768..6b64042 100644 --- a/src/app/core/services/auth.service.ts +++ b/src/app/core/services/auth.service.ts @@ -11,7 +11,6 @@ import { LOCAL_STORAGE_KEYS } from '../../../assets/constants'; import { IAuthAccountResponse, IAuthResponse, - ISignupRequestPayload, IUserLoginInfo, LoginCredentials, Maybe, @@ -27,24 +26,6 @@ export class AuthService { this.initializeAuth(); } - readonly modulesLoginRoutes = { - // ADMIN: ADMIN_API_ROUTES.login(), - // SCHOOL: SCHOOLS_API_ROUTES.login(), - // TEACHER: TEACHERS_API_ROUTES.login(), - } as Record; - - readonly modulesSignupRoutes = { - // TEACHER: TEACHERS_API_ROUTES.signup(), - } as Record; - - readonly modulesGetInfoRoutes = { - // SCHOOL: SCHOOLS_API_ROUTES.me(), - } as Record; - - readonly modulesChangeInfoRoutes = { - // SCHOOL: SCHOOLS_API_ROUTES.editLoginInfo(), - } as Record; - private readonly http = inject(HttpClient); private readonly router = inject(Router); private captchaService = inject(CaptchaService); @@ -113,35 +94,6 @@ export class AuthService { ); } - signup(credentials: ISignupRequestPayload, role: TRoles): Observable { - this.isLoading.set(true); - this.isLoadingSubject.next(true); - // const baseHeaders = this.captchaService.buildCaptchaHeaders({}, captcha); - - return this.http - .post( - this.modulesSignupRoutes[role], - credentials, - // { - // headers: baseHeaders, - // }, - ) - .pipe( - tap((response) => { - this.handleAuthSuccess(response); - return response; - }), - catchError((error) => { - console.error('Signup error:', error); - this.isLoadingSubject.next(false); - throw error; - }), - finalize(() => { - this.isLoading.set(false); - }), - ); - } - logout(): void { localStorage.removeItem(LOCAL_STORAGE_KEYS.AUTH_TOKEN); localStorage.removeItem(LOCAL_STORAGE_KEYS.USER_DATA); @@ -190,9 +142,6 @@ export class AuthService { return throwError(() => new Error('متاسفانه مشکلی پیش آمده')); } - changeInfo(credentials: IUserLoginInfo, role: TRoles): Observable { - return this.http.post(this.modulesChangeInfoRoutes[role], credentials); - } // prepareUserInfoBasedOnRole(role: TRoles, info: ISchoolMeResponse): Partial { // if (role === 'SCHOOL') { diff --git a/src/app/domains/consumer/constants/index.ts b/src/app/domains/consumer/constants/index.ts new file mode 100644 index 0000000..0e07b28 --- /dev/null +++ b/src/app/domains/consumer/constants/index.ts @@ -0,0 +1 @@ +export * from './menuItems.const'; diff --git a/src/app/domains/consumer/constants/menuItems.const.ts b/src/app/domains/consumer/constants/menuItems.const.ts new file mode 100644 index 0000000..835f8be --- /dev/null +++ b/src/app/domains/consumer/constants/menuItems.const.ts @@ -0,0 +1,12 @@ +import { MenuItem } from 'primeng/api'; +export const CONSUMER_MENU_ITEMS = [ + { + items: [ + { + label: 'داشبورد', + icon: 'pi pi-fw pi-home', + routerLink: ['/'], + }, + ], + }, +] as MenuItem[]; diff --git a/src/app/domains/consumer/layouts/layout.component.html b/src/app/domains/consumer/layouts/layout.component.html new file mode 100644 index 0000000..0680b43 --- /dev/null +++ b/src/app/domains/consumer/layouts/layout.component.html @@ -0,0 +1 @@ + diff --git a/src/app/domains/consumer/layouts/layout.component.ts b/src/app/domains/consumer/layouts/layout.component.ts new file mode 100644 index 0000000..12cb0bb --- /dev/null +++ b/src/app/domains/consumer/layouts/layout.component.ts @@ -0,0 +1,17 @@ +import { LayoutService } from '@/layout/service/layout.service'; +import { Component, inject } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; +import { CONSUMER_MENU_ITEMS } from '../constants'; + +@Component({ + selector: 'consumer-layout', + templateUrl: './layout.component.html', + imports: [RouterOutlet], +}) +export class LayoutComponent { + private readonly layoutService = inject(LayoutService); + + ngOnInit() { + this.layoutService.setMenuItems(CONSUMER_MENU_ITEMS); + } +} diff --git a/src/app/domains/consumer/modules/dashboard/views/index.component.html b/src/app/domains/consumer/modules/dashboard/views/index.component.html new file mode 100644 index 0000000..bcac5c5 --- /dev/null +++ b/src/app/domains/consumer/modules/dashboard/views/index.component.html @@ -0,0 +1,3 @@ +
+ به پنل کسب و کار خوش آمدید +
diff --git a/src/app/domains/consumer/modules/dashboard/views/index.component.ts b/src/app/domains/consumer/modules/dashboard/views/index.component.ts new file mode 100644 index 0000000..3456d67 --- /dev/null +++ b/src/app/domains/consumer/modules/dashboard/views/index.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'consumer-dashboard', + templateUrl: './index.component.html', +}) +export class DashboardComponent { + constructor() {} +} diff --git a/src/app/domains/consumer/routes.ts b/src/app/domains/consumer/routes.ts new file mode 100644 index 0000000..9d4be79 --- /dev/null +++ b/src/app/domains/consumer/routes.ts @@ -0,0 +1,13 @@ +import { Route } from '@angular/router'; + +export const CONSUMER_ROUTES = { + path: 'consumer', + loadComponent: () => import('./layouts/layout.component').then((m) => m.LayoutComponent), + children: [ + { + path: '', + loadComponent: () => + import('./modules/dashboard/views/index.component').then((m) => m.DashboardComponent), + }, + ], +} as Route; diff --git a/src/app/domains/partner/constants/index.ts b/src/app/domains/partner/constants/index.ts new file mode 100644 index 0000000..0e07b28 --- /dev/null +++ b/src/app/domains/partner/constants/index.ts @@ -0,0 +1 @@ +export * from './menuItems.const'; diff --git a/src/app/domains/partner/constants/menuItems.const.ts b/src/app/domains/partner/constants/menuItems.const.ts new file mode 100644 index 0000000..3f875c7 --- /dev/null +++ b/src/app/domains/partner/constants/menuItems.const.ts @@ -0,0 +1,12 @@ +import { MenuItem } from 'primeng/api'; +export const PARTNER_MENU_ITEMS = [ + { + items: [ + { + label: 'داشبورد', + icon: 'pi pi-fw pi-home', + routerLink: ['/'], + }, + ], + }, +] as MenuItem[]; diff --git a/src/app/domains/partner/layouts/layout.component.html b/src/app/domains/partner/layouts/layout.component.html new file mode 100644 index 0000000..0680b43 --- /dev/null +++ b/src/app/domains/partner/layouts/layout.component.html @@ -0,0 +1 @@ + diff --git a/src/app/domains/partner/layouts/layout.component.ts b/src/app/domains/partner/layouts/layout.component.ts new file mode 100644 index 0000000..f64bf3a --- /dev/null +++ b/src/app/domains/partner/layouts/layout.component.ts @@ -0,0 +1,17 @@ +import { LayoutService } from '@/layout/service/layout.service'; +import { Component, inject } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; +import { PARTNER_MENU_ITEMS } from '../constants'; + +@Component({ + selector: 'partner-layout', + templateUrl: './layout.component.html', + imports: [RouterOutlet], +}) +export class LayoutComponent { + private readonly layoutService = inject(LayoutService); + + ngOnInit() { + this.layoutService.setMenuItems(PARTNER_MENU_ITEMS); + } +} diff --git a/src/app/domains/partner/modules/dashboard/views/index.component.html b/src/app/domains/partner/modules/dashboard/views/index.component.html new file mode 100644 index 0000000..bcac5c5 --- /dev/null +++ b/src/app/domains/partner/modules/dashboard/views/index.component.html @@ -0,0 +1,3 @@ +
+ به پنل کسب و کار خوش آمدید +
diff --git a/src/app/domains/partner/modules/dashboard/views/index.component.ts b/src/app/domains/partner/modules/dashboard/views/index.component.ts new file mode 100644 index 0000000..4ad28f7 --- /dev/null +++ b/src/app/domains/partner/modules/dashboard/views/index.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'partner-dashboard', + templateUrl: './index.component.html', +}) +export class DashboardComponent { + constructor() {} +} diff --git a/src/app/domains/partner/routes.ts b/src/app/domains/partner/routes.ts new file mode 100644 index 0000000..94a6969 --- /dev/null +++ b/src/app/domains/partner/routes.ts @@ -0,0 +1,13 @@ +import { Route } from '@angular/router'; + +export const PARTNER_ROUTES = { + path: 'partner', + component: undefined, + children: [ + { + path: '', + loadComponent: () => + import('./modules/dashboard/views/index.component').then((m) => m.DashboardComponent), + }, + ], +} as Route; diff --git a/src/app/domains/provider/constants/index.ts b/src/app/domains/provider/constants/index.ts new file mode 100644 index 0000000..0e07b28 --- /dev/null +++ b/src/app/domains/provider/constants/index.ts @@ -0,0 +1 @@ +export * from './menuItems.const'; diff --git a/src/app/domains/provider/constants/menuItems.const.ts b/src/app/domains/provider/constants/menuItems.const.ts new file mode 100644 index 0000000..a87a052 --- /dev/null +++ b/src/app/domains/provider/constants/menuItems.const.ts @@ -0,0 +1,12 @@ +import { MenuItem } from 'primeng/api'; +export const PROVIDER_MENU_ITEMS = [ + { + items: [ + { + label: 'داشبورد', + icon: 'pi pi-fw pi-home', + routerLink: ['/'], + }, + ], + }, +] as MenuItem[]; diff --git a/src/app/domains/provider/layouts/layout.component.html b/src/app/domains/provider/layouts/layout.component.html new file mode 100644 index 0000000..0680b43 --- /dev/null +++ b/src/app/domains/provider/layouts/layout.component.html @@ -0,0 +1 @@ + diff --git a/src/app/domains/provider/layouts/layout.component.ts b/src/app/domains/provider/layouts/layout.component.ts new file mode 100644 index 0000000..dd8d099 --- /dev/null +++ b/src/app/domains/provider/layouts/layout.component.ts @@ -0,0 +1,17 @@ +import { LayoutService } from '@/layout/service/layout.service'; +import { Component, inject } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; +import { PROVIDER_MENU_ITEMS } from '../constants'; + +@Component({ + selector: 'provider-layout', + templateUrl: './layout.component.html', + imports: [RouterOutlet], +}) +export class LayoutComponent { + private readonly layoutService = inject(LayoutService); + + ngOnInit() { + this.layoutService.setMenuItems(PROVIDER_MENU_ITEMS); + } +} diff --git a/src/app/domains/provider/modules/dashboard/views/index.component.html b/src/app/domains/provider/modules/dashboard/views/index.component.html new file mode 100644 index 0000000..60337af --- /dev/null +++ b/src/app/domains/provider/modules/dashboard/views/index.component.html @@ -0,0 +1,3 @@ +
+ به پنل ارایه‌دهنده خوش آمدید +
diff --git a/src/app/domains/provider/modules/dashboard/views/index.component.ts b/src/app/domains/provider/modules/dashboard/views/index.component.ts new file mode 100644 index 0000000..9e1bb81 --- /dev/null +++ b/src/app/domains/provider/modules/dashboard/views/index.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'provider-dashboard', + templateUrl: './index.component.html', +}) +export class DashboardComponent { + constructor() {} +} diff --git a/src/app/domains/provider/routes.ts b/src/app/domains/provider/routes.ts new file mode 100644 index 0000000..798aa0b --- /dev/null +++ b/src/app/domains/provider/routes.ts @@ -0,0 +1,13 @@ +import { Route } from '@angular/router'; + +export const PROVIDER_ROUTES = { + path: 'provider', + loadComponent: () => import('./layouts/layout.component').then((m) => m.LayoutComponent), + children: [ + { + path: '', + loadComponent: () => + import('./modules/dashboard/views/index.component').then((m) => m.DashboardComponent), + }, + ], +} as Route; diff --git a/src/app/domains/superAdmin/constants/index.ts b/src/app/domains/superAdmin/constants/index.ts new file mode 100644 index 0000000..0e07b28 --- /dev/null +++ b/src/app/domains/superAdmin/constants/index.ts @@ -0,0 +1 @@ +export * from './menuItems.const'; diff --git a/src/app/core/constants/menuItems.const.ts b/src/app/domains/superAdmin/constants/menuItems.const.ts similarity index 84% rename from src/app/core/constants/menuItems.const.ts rename to src/app/domains/superAdmin/constants/menuItems.const.ts index 36b4f72..bb647f4 100644 --- a/src/app/core/constants/menuItems.const.ts +++ b/src/app/domains/superAdmin/constants/menuItems.const.ts @@ -1,11 +1,11 @@ import { MenuItem } from 'primeng/api'; -export const MENU_ITEMS = [ +export const SUPER_ADMIN_MENU_ITEMS = [ { items: [ { label: 'داشبورد', icon: 'pi pi-fw pi-home', - routerLink: ['/dashboard'], + routerLink: ['/'], }, ], }, @@ -14,6 +14,16 @@ export const MENU_ITEMS = [ label: 'مدیریت اطلاعات مرجع', icon: 'pi pi-fw pi-cog', items: [ + { + label: 'اصناف', + icon: 'pi pi-fw pi-building', + routerLink: ['/super_admin/guilds'], + }, + { + label: 'لایسنس‌ها', + icon: 'pi pi-fw pi-credit-card', + routerLink: ['/super_admin/licenses'], + }, { label: 'برندهای دستگاه', icon: 'pi pi-fw pi-list', @@ -28,7 +38,7 @@ export const MENU_ITEMS = [ }, { - label: 'مدیریت سیستم', + label: 'مدیریت کاربران', icon: 'pi pi-fw pi-cog', items: [ { @@ -37,10 +47,11 @@ export const MENU_ITEMS = [ routerLink: ['/super_admin/users'], }, { - label: 'اصناف', - icon: 'pi pi-fw pi-building', - routerLink: ['/super_admin/guilds'], + label: 'مشتریان', + icon: 'pi pi-fw pi-user', + routerLink: ['/super_admin/consumers'], }, + { label: 'شرکای تجاری', icon: 'pi pi-fw pi-credit-card', @@ -51,11 +62,6 @@ export const MENU_ITEMS = [ icon: 'pi pi-fw pi-credit-card', routerLink: ['/super_admin/providers'], }, - { - label: 'لایسنس‌ها', - icon: 'pi pi-fw pi-credit-card', - routerLink: ['/super_admin/licenses'], - }, ], }, ] as MenuItem[]; diff --git a/src/app/domains/superAdmin/layouts/layout.component.html b/src/app/domains/superAdmin/layouts/layout.component.html new file mode 100644 index 0000000..0680b43 --- /dev/null +++ b/src/app/domains/superAdmin/layouts/layout.component.html @@ -0,0 +1 @@ + diff --git a/src/app/domains/superAdmin/layouts/layout.component.ts b/src/app/domains/superAdmin/layouts/layout.component.ts new file mode 100644 index 0000000..1939a80 --- /dev/null +++ b/src/app/domains/superAdmin/layouts/layout.component.ts @@ -0,0 +1,17 @@ +import { LayoutService } from '@/layout/service/layout.service'; +import { Component, inject } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; +import { SUPER_ADMIN_MENU_ITEMS } from '../constants'; + +@Component({ + selector: 'superAdmin-layout', + templateUrl: './layout.component.html', + imports: [RouterOutlet], +}) +export class LayoutComponent { + private readonly layoutService = inject(LayoutService); + + ngOnInit() { + this.layoutService.setMenuItems(SUPER_ADMIN_MENU_ITEMS); + } +} diff --git a/src/app/domains/superAdmin/users/components/accounts/form.component.html b/src/app/domains/superAdmin/modules/consumers/components/accounts/form.component.html similarity index 100% rename from src/app/domains/superAdmin/users/components/accounts/form.component.html rename to src/app/domains/superAdmin/modules/consumers/components/accounts/form.component.html diff --git a/src/app/domains/superAdmin/modules/consumers/components/accounts/form.component.ts b/src/app/domains/superAdmin/modules/consumers/components/accounts/form.component.ts new file mode 100644 index 0000000..c38e6ea --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/components/accounts/form.component.ts @@ -0,0 +1,80 @@ +import { MustMatch, password } from '@/core/validators'; +// import { CatalogRolesComponent } from '@/shared/catalog/roles'; +import { AbstractFormDialog } from '@/shared/abstractClasses'; +import { EnumSelectComponent } from '@/shared/apiEnum/select.component'; +import { InputComponent } from '@/shared/components'; +import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; +import { UikitFieldComponent } from '@/uikit'; +import { Component, inject, Input } from '@angular/core'; +import { ReactiveFormsModule, Validators } from '@angular/forms'; +import { Dialog } from 'primeng/dialog'; +import { Password } from 'primeng/password'; +import { IConsumerAccountRequest, IConsumerAccountResponse } from '../../models'; +import { AdminConsumerAccountsService } from '../../services/accounts.service'; + +@Component({ + selector: 'superAdmin-consumer-account-form', + templateUrl: './form.component.html', + imports: [ + ReactiveFormsModule, + Dialog, + InputComponent, + FormFooterActionsComponent, + UikitFieldComponent, + Password, + EnumSelectComponent, + ], +}) +export class ConsumerAccountFormComponent extends AbstractFormDialog< + IConsumerAccountRequest, + IConsumerAccountResponse +> { + private readonly service = inject(AdminConsumerAccountsService); + + @Input({ required: true }) consumerId!: string; + @Input() accountId!: string; + + initForm = () => { + if (this.editMode) { + return this.fb.group( + { + username: [this.initialValues?.username || '', [Validators.required]], + password: ['', [password()]], + confirmPassword: [''], + }, + { + validators: [MustMatch('password', 'confirmPassword')], + }, + ); + } + return this.fb.group( + { + username: [this.initialValues?.username || '', [Validators.required]], + // @ts-ignore + type: [this.initialValues?.type, [Validators.required]], + + password: ['', [Validators.required, password()]], + confirmPassword: ['', [Validators.required]], + }, + { + validators: [MustMatch('password', 'confirmPassword')], + }, + ) as any; + }; + + form = this.initForm(); + + override ngOnChanges(): void { + this.form = this.initForm(); + } + + submitForm() { + const formValue = this.form.value as IConsumerAccountRequest; + // @ts-ignore + const { confirmPassword, ...rest } = formValue; + if (this.editMode) { + return this.service.update(this.consumerId, this.accountId, rest); + } + return this.service.create(this.consumerId, rest); + } +} diff --git a/src/app/domains/superAdmin/modules/consumers/components/accounts/list.component.html b/src/app/domains/superAdmin/modules/consumers/components/accounts/list.component.html new file mode 100644 index 0000000..323355e --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/components/accounts/list.component.html @@ -0,0 +1,22 @@ + + + diff --git a/src/app/domains/superAdmin/modules/consumers/components/accounts/list.component.ts b/src/app/domains/superAdmin/modules/consumers/components/accounts/list.component.ts new file mode 100644 index 0000000..8b30fd3 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/components/accounts/list.component.ts @@ -0,0 +1,50 @@ +// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; +import { AbstractList } from '@/shared/abstractClasses/abstract-list'; +import { + IColumn, + PageDataListComponent, +} from '@/shared/components/pageDataList/page-data-list.component'; +import { Component, inject, Input } from '@angular/core'; +import { IConsumerAccountResponse } from '../../models'; +import { AdminConsumerAccountsService } from '../../services/accounts.service'; +import { ConsumerAccountFormComponent } from './form.component'; + +@Component({ + selector: 'superAdmin-consumer-account-list', + templateUrl: './list.component.html', + imports: [PageDataListComponent, ConsumerAccountFormComponent], +}) +export class ConsumerAccountListComponent extends AbstractList { + @Input({ required: true }) consumerId!: string; + @Input() fullHeight?: boolean; + @Input() header: IColumn[] = [ + { field: 'id', header: 'شناسه' }, + { + field: 'username', + header: 'نام کاربری', + type: 'nested', + nestedPath: 'account.username', + }, + { field: 'role', header: 'نوع حساب' }, + { + field: 'status', + header: 'وضعیت', + type: 'nested', + nestedPath: 'account.status', + }, + { + field: 'created_at', + header: 'تاریخ ایجاد', + type: 'date', + }, + ]; + private readonly service = inject(AdminConsumerAccountsService); + + override setColumns(): void { + this.columns = this.header; + } + + override getDataRequest() { + return this.service.getAll(this.consumerId); + } +} diff --git a/src/app/domains/superAdmin/users/components/businessActivities/form.component.html b/src/app/domains/superAdmin/modules/consumers/components/businessActivities/form.component.html similarity index 100% rename from src/app/domains/superAdmin/users/components/businessActivities/form.component.html rename to src/app/domains/superAdmin/modules/consumers/components/businessActivities/form.component.html diff --git a/src/app/domains/superAdmin/users/components/businessActivities/form.component.ts b/src/app/domains/superAdmin/modules/consumers/components/businessActivities/form.component.ts similarity index 74% rename from src/app/domains/superAdmin/users/components/businessActivities/form.component.ts rename to src/app/domains/superAdmin/modules/consumers/components/businessActivities/form.component.ts index b90ea08..800ffb1 100644 --- a/src/app/domains/superAdmin/users/components/businessActivities/form.component.ts +++ b/src/app/domains/superAdmin/modules/consumers/components/businessActivities/form.component.ts @@ -7,10 +7,10 @@ import { Component, inject, Input } from '@angular/core'; import { ReactiveFormsModule, Validators } from '@angular/forms'; import { Dialog } from 'primeng/dialog'; import { IBusinessActivityRequest, IBusinessActivityResponse } from '../../models'; -import { AdminUserBusinessActivitiesService } from '../../services/businessActivities.service'; +import { AdminConsumerBusinessActivitiesService } from '../../services/businessActivities.service'; @Component({ - selector: 'superAdmin-user-businessActivities-form', + selector: 'superAdmin-consumer-businessActivities-form', templateUrl: './form.component.html', imports: [ ReactiveFormsModule, @@ -20,13 +20,13 @@ import { AdminUserBusinessActivitiesService } from '../../services/businessActiv CatalogGuildSelectComponent, ], }) -export class UserBusinessActivitiesFormComponent extends AbstractFormDialog< +export class ConsumerBusinessActivitiesFormComponent extends AbstractFormDialog< IBusinessActivityRequest, IBusinessActivityResponse > { - private readonly service = inject(AdminUserBusinessActivitiesService); + private readonly service = inject(AdminConsumerBusinessActivitiesService); - @Input() userId!: string; + @Input({ required: true }) consumerId!: string; @Input() businessActivityId!: string; initForm = () => { @@ -50,8 +50,8 @@ export class UserBusinessActivitiesFormComponent extends AbstractFormDialog< submitForm() { const formValue = this.form.value as IBusinessActivityRequest; if (this.editMode) { - return this.service.update(this.userId, this.businessActivityId, formValue); + return this.service.update(this.consumerId, this.businessActivityId, formValue); } - return this.service.create(this.userId, formValue); + return this.service.create(this.consumerId, formValue); } } diff --git a/src/app/domains/superAdmin/guilds/components/layout.component.html b/src/app/domains/superAdmin/modules/consumers/components/businessActivities/layout.component.html similarity index 100% rename from src/app/domains/superAdmin/guilds/components/layout.component.html rename to src/app/domains/superAdmin/modules/consumers/components/businessActivities/layout.component.html diff --git a/src/app/domains/superAdmin/users/components/businessActivities/layout.component.ts b/src/app/domains/superAdmin/modules/consumers/components/businessActivities/layout.component.ts similarity index 81% rename from src/app/domains/superAdmin/users/components/businessActivities/layout.component.ts rename to src/app/domains/superAdmin/modules/consumers/components/businessActivities/layout.component.ts index 2c38a98..f9f7448 100644 --- a/src/app/domains/superAdmin/users/components/businessActivities/layout.component.ts +++ b/src/app/domains/superAdmin/modules/consumers/components/businessActivities/layout.component.ts @@ -17,14 +17,11 @@ export class SuperAdminUserBusinessActivityLayoutComponent { readonly businessActivity = computed(() => this.store.entity()); readonly pageParams = computed(() => pageParamsUtils(this.route)); - readonly userId = computed(() => this.pageParams()['userId']!); - readonly user = computed(() => this.pageParams()['userId']!); + readonly consumerId = computed(() => this.pageParams()['consumerId']!); readonly businessId = computed(() => this.pageParams()['businessActivityId']!); getData() { - console.log(this.pageParams()); - - this.store.getData(this.userId(), this.businessId()); + this.store.getData(this.consumerId(), this.businessId()); } ngOnInit() { diff --git a/src/app/domains/superAdmin/users/components/businessActivities/list.component.html b/src/app/domains/superAdmin/modules/consumers/components/businessActivities/list.component.html similarity index 91% rename from src/app/domains/superAdmin/users/components/businessActivities/list.component.html rename to src/app/domains/superAdmin/modules/consumers/components/businessActivities/list.component.html index 3b2fd37..91d6d3c 100644 --- a/src/app/domains/superAdmin/users/components/businessActivities/list.component.html +++ b/src/app/domains/superAdmin/modules/consumers/components/businessActivities/list.component.html @@ -15,10 +15,10 @@ (onDetails)="toSinglePage($event)" > - { - @Input() userId!: string; +export class ConsumerBusinessActivitiesComponent extends AbstractList { + @Input({ required: true }) consumerId!: string; @Input() fullHeight?: boolean; @Input() header: IColumn[] = [ { field: 'id', header: 'شناسه' }, @@ -30,7 +30,7 @@ export class UserBusinessActivitiesComponent extends AbstractList { private readonly service = inject(AdminComplexesService); - @Input() userId!: string; + @Input({ required: true }) consumerId!: string; @Input() businessActivityId!: string; @Input() complexId!: string; @@ -44,8 +44,13 @@ export class UserComplexFormComponent extends AbstractFormDialog< submitForm() { const formValue = this.form.value as IComplexRequest; if (this.editMode) { - return this.service.update(this.userId, this.businessActivityId, this.complexId, formValue); + return this.service.update( + this.consumerId, + this.businessActivityId, + this.complexId, + formValue, + ); } - return this.service.create(this.userId, this.businessActivityId, formValue); + return this.service.create(this.consumerId, this.businessActivityId, formValue); } } diff --git a/src/app/domains/superAdmin/partners/components/layout.component.html b/src/app/domains/superAdmin/modules/consumers/components/complexes/layout.component.html similarity index 100% rename from src/app/domains/superAdmin/partners/components/layout.component.html rename to src/app/domains/superAdmin/modules/consumers/components/complexes/layout.component.html diff --git a/src/app/domains/superAdmin/users/components/complexes/layout.component.ts b/src/app/domains/superAdmin/modules/consumers/components/complexes/layout.component.ts similarity index 77% rename from src/app/domains/superAdmin/users/components/complexes/layout.component.ts rename to src/app/domains/superAdmin/modules/consumers/components/complexes/layout.component.ts index d1cc956..911dd3f 100644 --- a/src/app/domains/superAdmin/users/components/complexes/layout.component.ts +++ b/src/app/domains/superAdmin/modules/consumers/components/complexes/layout.component.ts @@ -5,23 +5,23 @@ import { ActivatedRoute, RouterOutlet } from '@angular/router'; import { ComplexStore } from '../../store/complex.store'; @Component({ - selector: 'superAdmin-user-complex-layout', + selector: 'superAdmin-consumer-complex-layout', templateUrl: './layout.component.html', imports: [PageLoadingComponent, RouterOutlet], }) -export class SuperAdminUserComplexLayoutComponent { +export class SuperAdminConsumerComplexLayoutComponent { private readonly store = inject(ComplexStore); private readonly route = inject(ActivatedRoute); readonly loading = computed(() => this.store.loading()); readonly pageParams = computed(() => pageParamsUtils(this.route)); - readonly userId = computed(() => this.pageParams()['userId']!); + readonly consumerId = computed(() => this.pageParams()['consumerId']!); readonly businessId = computed(() => this.pageParams()['businessActivityId']!); readonly complexId = computed(() => this.pageParams()['complexId']!); getData() { - this.store.getData(this.userId(), this.businessId(), this.complexId()); + this.store.getData(this.consumerId(), this.businessId(), this.complexId()); } ngOnInit() { diff --git a/src/app/domains/superAdmin/users/components/complexes/list.component.html b/src/app/domains/superAdmin/modules/consumers/components/complexes/list.component.html similarity index 92% rename from src/app/domains/superAdmin/users/components/complexes/list.component.html rename to src/app/domains/superAdmin/modules/consumers/components/complexes/list.component.html index 26724fb..b1a1dfa 100644 --- a/src/app/domains/superAdmin/users/components/complexes/list.component.html +++ b/src/app/domains/superAdmin/modules/consumers/components/complexes/list.component.html @@ -15,10 +15,10 @@ (onDetails)="toSinglePage($event)" > - { - @Input() userId!: string; +export class ConsumerComplexesComponent extends AbstractList { + @Input() consumerId!: string; @Input() businessId!: string; @Input() fullHeight?: boolean; @Input() header: IColumn[] = [ @@ -38,13 +38,13 @@ export class UserComplexesComponent extends AbstractList { } override getDataRequest() { - return this.service.getAll(this.userId, this.businessId); + return this.service.getAll(this.consumerId, this.businessId); } toSinglePage(item: IComplexResponse) { this.router.navigateByUrl( - superAdminUserComplexesNamedRoutes.complex.meta.pagePath!( - this.userId, + superAdminConsumerComplexesNamedRoutes.complex.meta.pagePath!( + this.consumerId, this.businessId, item.id, ), diff --git a/src/app/domains/superAdmin/modules/consumers/components/form.component.html b/src/app/domains/superAdmin/modules/consumers/components/form.component.html new file mode 100644 index 0000000..fdcdfaa --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/components/form.component.html @@ -0,0 +1,48 @@ + +
+ + + + @if (!editMode) { + اطلاعات ورود + + + + + + رمز باید حداقل ۸ کاراکتر بوده و شامل حداقل یک حرف بزرگ، یک حرف کوچک، یک عدد و یک کاراکتر ویژه باشد. + + + + + + + } + + +
diff --git a/src/app/domains/superAdmin/modules/consumers/components/form.component.ts b/src/app/domains/superAdmin/modules/consumers/components/form.component.ts new file mode 100644 index 0000000..ee823c8 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/components/form.component.ts @@ -0,0 +1,101 @@ +import { mobileValidator, MustMatch } from '@/core/validators'; +import { AbstractFormDialog } from '@/shared/abstractClasses'; +import { InputComponent } from '@/shared/components'; +import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; +import { UikitFieldComponent } from '@/uikit'; +import { Component, computed, inject, Input } from '@angular/core'; +import { ReactiveFormsModule, Validators } from '@angular/forms'; +import { Dialog } from 'primeng/dialog'; +import { Divider } from 'primeng/divider'; +import { Password } from 'primeng/password'; +import { IConsumerRequest, IConsumerResponse } from '../models'; +import { ConsumersService } from '../services/main.service'; + +@Component({ + selector: 'superAdmin-consumer-form', + templateUrl: './form.component.html', + imports: [ + ReactiveFormsModule, + Dialog, + InputComponent, + FormFooterActionsComponent, + Divider, + UikitFieldComponent, + Password, + ], +}) +export class ConsumerUserFormComponent extends AbstractFormDialog< + IConsumerRequest, + IConsumerResponse +> { + @Input() consumerId?: string; + private service = inject(ConsumersService); + + preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} مشتری`); + + initForm = () => { + const form = this.fb.group({ + first_name: [this.initialValues?.first_name || '', [Validators.required]], + last_name: [this.initialValues?.last_name || '', [Validators.required]], + mobile_number: [ + this.initialValues?.mobile_number || '', + [Validators.required, mobileValidator()], + ], + username: [''], + password: [''], + confirmPassword: [''], + }); + if (!this.editMode) { + form.addControl( + 'username', + this.fb.control('', { + nonNullable: true, + validators: [Validators.required], + }), + ); + form.addControl( + 'password', + this.fb.control('', { + nonNullable: true, + validators: [Validators.required], + }), + ); + form.addControl( + 'confirmPassword', + this.fb.control('', { + nonNullable: true, + validators: [Validators.required], + }), + ); + form.addValidators([MustMatch('password', 'confirmPassword')]); + } else { + // @ts-ignore + form.removeControl('username'); + // @ts-ignore + form.removeControl('password'); + // @ts-ignore + form.removeControl('confirmPassword'); + form.removeValidators([MustMatch('password', 'confirmPassword')]); + } + + return form; + }; + + form = this.initForm(); + + override ngOnChanges() { + this.form.patchValue(this.initialValues ?? {}); + if (this.editMode && !this.consumerId) { + throw 'missing some arguments'; + } + } + + override submitForm(payload: IConsumerRequest) { + if (this.editMode) { + return this.service.update(this.consumerId!, payload); + } + // @ts-ignore + const { confirmPassword, ...rest } = payload; + return this.service.create(rest); + } +} diff --git a/src/app/domains/superAdmin/users/components/businessActivities/layout.component.html b/src/app/domains/superAdmin/modules/consumers/components/layout.component.html similarity index 100% rename from src/app/domains/superAdmin/users/components/businessActivities/layout.component.html rename to src/app/domains/superAdmin/modules/consumers/components/layout.component.html diff --git a/src/app/domains/superAdmin/modules/consumers/components/layout.component.ts b/src/app/domains/superAdmin/modules/consumers/components/layout.component.ts new file mode 100644 index 0000000..8665c4b --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/components/layout.component.ts @@ -0,0 +1,27 @@ +import { PageLoadingComponent } from '@/shared/components/page-loading.component'; +import { Component, computed, inject, signal } from '@angular/core'; +import { ActivatedRoute, RouterOutlet } from '@angular/router'; +import { ConsumerStore } from '../store/consumer.store'; + +@Component({ + selector: 'superAdmin-consumer-layout', + templateUrl: './layout.component.html', + imports: [PageLoadingComponent, RouterOutlet], +}) +export class ConsumerLayoutComponent { + private readonly store = inject(ConsumerStore); + private readonly route = inject(ActivatedRoute); + + readonly consumerId = signal(this.route.snapshot.paramMap.get('consumerId')!); + + readonly loading = computed(() => this.store.loading()); + readonly consumer = computed(() => this.store.entity()); + + getData() { + this.store.getData(this.consumerId()); + } + + ngOnInit() { + this.getData(); + } +} diff --git a/src/app/domains/superAdmin/users/components/poses/form.component.html b/src/app/domains/superAdmin/modules/consumers/components/poses/form.component.html similarity index 100% rename from src/app/domains/superAdmin/users/components/poses/form.component.html rename to src/app/domains/superAdmin/modules/consumers/components/poses/form.component.html diff --git a/src/app/domains/superAdmin/users/components/poses/form.component.ts b/src/app/domains/superAdmin/modules/consumers/components/poses/form.component.ts similarity index 93% rename from src/app/domains/superAdmin/users/components/poses/form.component.ts rename to src/app/domains/superAdmin/modules/consumers/components/poses/form.component.ts index 04c2ddf..be7ccb0 100644 --- a/src/app/domains/superAdmin/users/components/poses/form.component.ts +++ b/src/app/domains/superAdmin/modules/consumers/components/poses/form.component.ts @@ -12,7 +12,7 @@ import { IPosRequest, IPosResponse } from '../../models'; import { AdminPosesService } from '../../services/poses.service'; @Component({ - selector: 'superAdmin-user-pos-form', + selector: 'superAdmin-consumer-pos-form', templateUrl: './form.component.html', imports: [ ReactiveFormsModule, @@ -24,17 +24,15 @@ import { AdminPosesService } from '../../services/poses.service'; EnumSelectComponent, ], }) -export class UserPosFormComponent extends AbstractFormDialog { +export class ConsumerPosFormComponent extends AbstractFormDialog { private readonly service = inject(AdminPosesService); - @Input({ required: true }) userId!: string; + @Input({ required: true }) consumerId!: string; @Input({ required: true }) businessActivityId!: string; @Input({ required: true }) complexId!: string; @Input() posId!: string; initForm = () => { - console.log('posId', this.posId); - const form = this.fb.group({ name: [this.initialValues?.name || '', [Validators.required]], serial: [this.initialValues?.serial || '', [Validators.required]], diff --git a/src/app/domains/superAdmin/users/components/complexes/layout.component.html b/src/app/domains/superAdmin/modules/consumers/components/poses/layout.component.html similarity index 100% rename from src/app/domains/superAdmin/users/components/complexes/layout.component.html rename to src/app/domains/superAdmin/modules/consumers/components/poses/layout.component.html diff --git a/src/app/domains/superAdmin/users/components/poses/layout.component.ts b/src/app/domains/superAdmin/modules/consumers/components/poses/layout.component.ts similarity index 86% rename from src/app/domains/superAdmin/users/components/poses/layout.component.ts rename to src/app/domains/superAdmin/modules/consumers/components/poses/layout.component.ts index 0b92588..8a13e4a 100644 --- a/src/app/domains/superAdmin/users/components/poses/layout.component.ts +++ b/src/app/domains/superAdmin/modules/consumers/components/poses/layout.component.ts @@ -5,18 +5,17 @@ import { ActivatedRoute, RouterOutlet } from '@angular/router'; import { PosStore } from '../../store/pos.store'; @Component({ - selector: 'superAdmin-user-pos-layout', + selector: 'superAdmin-consumer-pos-layout', templateUrl: './layout.component.html', imports: [PageLoadingComponent, RouterOutlet], }) -export class SuperAdminUserPosLayoutComponent { +export class SuperAdminConsumerPosLayoutComponent { private readonly store = inject(PosStore); private readonly route = inject(ActivatedRoute); readonly loading = computed(() => this.store.loading()); readonly pageParams = computed(() => pageParamsUtils(this.route)); - readonly userId = computed(() => this.pageParams()['userId']!); readonly businessId = computed(() => this.pageParams()['businessActivityId']!); readonly complexId = computed(() => this.pageParams()['complexId']!); readonly posId = computed(() => this.pageParams()['posId']!); diff --git a/src/app/domains/superAdmin/users/components/poses/list.component.html b/src/app/domains/superAdmin/modules/consumers/components/poses/list.component.html similarity index 93% rename from src/app/domains/superAdmin/users/components/poses/list.component.html rename to src/app/domains/superAdmin/modules/consumers/components/poses/list.component.html index ffd89d7..1b0cd3f 100644 --- a/src/app/domains/superAdmin/users/components/poses/list.component.html +++ b/src/app/domains/superAdmin/modules/consumers/components/poses/list.component.html @@ -15,10 +15,10 @@ (onDetails)="toSinglePage($event)" > - { - @Input() userId!: string; - @Input() businessId!: string; - @Input() complexId!: string; +export class ConsumerPosesComponent extends AbstractList { + @Input({ required: true }) consumerId!: string; + @Input({ required: true }) businessId!: string; + @Input({ required: true }) complexId!: string; @Input() fullHeight?: boolean; @Input() header: IColumn[] = [ { field: 'id', header: 'شناسه' }, @@ -49,8 +49,8 @@ export class UserPosesComponent extends AbstractList { toSinglePage(item: IPosResponse) { this.router.navigateByUrl( - superAdminUserPosesNamedRoutes.pos.meta.pagePath!( - this.userId, + superAdminConsumerPosesNamedRoutes.pos.meta.pagePath!( + this.consumerId, this.businessId, this.complexId, item.id, diff --git a/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/accounts.ts b/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/accounts.ts new file mode 100644 index 0000000..21bb7fd --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/accounts.ts @@ -0,0 +1,6 @@ +const baseUrl = (consumerId: string) => `/api/v1/admin/consumers/${consumerId}/accounts`; + +export const CONSUMER_ACCOUNTS_API_ROUTES = { + list: (consumerId: string) => `${baseUrl(consumerId)}`, + single: (consumerId: string, accountId: string) => `${baseUrl(consumerId)}/${accountId}`, +}; diff --git a/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/businessActivities.ts b/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/businessActivities.ts new file mode 100644 index 0000000..cf5d3ff --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/businessActivities.ts @@ -0,0 +1,7 @@ +const baseUrl = (consumerId: string) => `/api/v1/admin/consumers/${consumerId}/business_activities`; + +export const BUSINESS_ACTIVITIES_API_ROUTES = { + list: (consumerId: string) => `${baseUrl(consumerId)}`, + single: (consumerId: string, business_activity_id: string) => + `${baseUrl(consumerId)}/${business_activity_id}`, +}; diff --git a/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/businessActivityComplexes.ts b/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/businessActivityComplexes.ts new file mode 100644 index 0000000..da03bcf --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/businessActivityComplexes.ts @@ -0,0 +1,9 @@ +const baseUrl = (consumerId: string, business_activity_id: string) => + `/api/v1/admin/consumers/${consumerId}/business_activities/${business_activity_id}/complexes`; + +export const BUSINESS_ACTIVITY_COMPLEXES_API_ROUTES = { + list: (consumerId: string, business_activity_id: string) => + `${baseUrl(consumerId, business_activity_id)}`, + single: (consumerId: string, business_activity_id: string, complex_id: string) => + `${baseUrl(consumerId, business_activity_id)}/${complex_id}`, +}; diff --git a/src/app/domains/superAdmin/users/constants/apiRoutes/complexPoses.ts b/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/complexPoses.ts similarity index 100% rename from src/app/domains/superAdmin/users/constants/apiRoutes/complexPoses.ts rename to src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/complexPoses.ts diff --git a/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/index.ts b/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/index.ts new file mode 100644 index 0000000..dafc0e6 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/constants/apiRoutes/index.ts @@ -0,0 +1,8 @@ +export * from './accounts'; + +const baseUrl = '/api/v1/admin/consumers'; + +export const CONSUMERS_API_ROUTES = { + list: () => `${baseUrl}`, + single: (id: string) => `${baseUrl}/${id}`, +}; diff --git a/src/app/domains/superAdmin/deviceBrands/constants/index.ts b/src/app/domains/superAdmin/modules/consumers/constants/index.ts similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/constants/index.ts rename to src/app/domains/superAdmin/modules/consumers/constants/index.ts diff --git a/src/app/domains/superAdmin/modules/consumers/constants/routes/accounts.ts b/src/app/domains/superAdmin/modules/consumers/constants/routes/accounts.ts new file mode 100644 index 0000000..dfc5d67 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/constants/routes/accounts.ts @@ -0,0 +1,29 @@ +import { NamedRoutes } from '@/core'; +import { Routes } from '@angular/router'; + +export type TAccountsRouteNames = 'accounts' | 'account'; + +export const superAdminConsumerAccountsNamedRoutes: NamedRoutes = { + accounts: { + path: 'accounts', + loadComponent: () => + import('../../views/accounts/list.component').then((m) => m.ConsumerAccountsComponent), + // @ts-ignore + meta: { + title: 'حساب‌های کاربری', + pagePath: (consumerId: string) => `/super_admin/consumers/${consumerId}/accounts`, + }, + }, + account: { + path: 'accounts/:accountId', + meta: { + title: 'حساب‌ کاربری', + pagePath: (consumerId: string, accountId: string) => + `/super_admin/consumers/${consumerId}/accounts/${accountId}`, + }, + }, +}; + +export const SUPER_ADMIN_CONSUMER_ACCOUNTS_ROUTES: Routes = [ + superAdminConsumerAccountsNamedRoutes.accounts, +]; diff --git a/src/app/domains/superAdmin/users/constants/routes/businessActivities.ts b/src/app/domains/superAdmin/modules/consumers/constants/routes/businessActivities.ts similarity index 57% rename from src/app/domains/superAdmin/users/constants/routes/businessActivities.ts rename to src/app/domains/superAdmin/modules/consumers/constants/routes/businessActivities.ts index 899deeb..24f4e42 100644 --- a/src/app/domains/superAdmin/users/constants/routes/businessActivities.ts +++ b/src/app/domains/superAdmin/modules/consumers/constants/routes/businessActivities.ts @@ -1,10 +1,10 @@ import { NamedRoutes } from '@/core'; import { Routes } from '@angular/router'; -import { SUPER_ADMIN_USER_COMPLEXES_ROUTES } from './complexes'; +import { SUPER_ADMIN_CONSUMER_COMPLEXES_ROUTES } from './complexes'; export type TBusinessActivitiesRouteNames = 'businessActivities' | 'businessActivity'; -export const superAdminUserBusinessActivitiesNamedRoutes: NamedRoutes = +export const superAdminConsumerBusinessActivitiesNamedRoutes: NamedRoutes = { businessActivities: { path: 'business_activities', @@ -15,7 +15,8 @@ export const superAdminUserBusinessActivitiesNamedRoutes: NamedRoutes `/super_admin/users/${userId}/business_activities`, + pagePath: (consumerId: string) => + `/super_admin/consumers/${consumerId}/business_activities`, }, }, businessActivity: { @@ -27,16 +28,16 @@ export const superAdminUserBusinessActivitiesNamedRoutes: NamedRoutes - `/super_admin/users/${userId}/business_activities/${businessId}`, + pagePath: (consumerId: string, businessId: string) => + `/super_admin/consumers/${consumerId}/business_activities/${businessId}`, }, }, }; -export const SUPER_ADMIN_USER_BUSINESS_ACTIVITIES_ROUTES: Routes = [ - superAdminUserBusinessActivitiesNamedRoutes.businessActivities, +export const SUPER_ADMIN_CONSUMER_BUSINESS_ACTIVITIES_ROUTES: Routes = [ + superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities, { - path: superAdminUserBusinessActivitiesNamedRoutes.businessActivity.path, + path: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivity.path, loadComponent: () => import('../../components/businessActivities/layout.component').then( (m) => m.SuperAdminUserBusinessActivityLayoutComponent, @@ -44,9 +45,10 @@ export const SUPER_ADMIN_USER_BUSINESS_ACTIVITIES_ROUTES: Routes = [ children: [ { path: '', - loadComponent: superAdminUserBusinessActivitiesNamedRoutes.businessActivity.loadComponent, + loadComponent: + superAdminConsumerBusinessActivitiesNamedRoutes.businessActivity.loadComponent, }, - ...SUPER_ADMIN_USER_COMPLEXES_ROUTES, + ...SUPER_ADMIN_CONSUMER_COMPLEXES_ROUTES, ], }, ]; diff --git a/src/app/domains/superAdmin/modules/consumers/constants/routes/complexes.ts b/src/app/domains/superAdmin/modules/consumers/constants/routes/complexes.ts new file mode 100644 index 0000000..b1f02da --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/constants/routes/complexes.ts @@ -0,0 +1,52 @@ +import { NamedRoutes } from '@/core'; +import { Routes } from '@angular/router'; +import { SUPER_ADMIN_CONSUMER_POSES_ROUTES } from './poses'; + +export type TComplexesRouteNames = 'complexes' | 'complex'; + +const baseUrl = (consumerId: string, businessId: string) => + `/super_admin/consumers/${consumerId}/business_activities/${businessId}/complexes`; + +export const superAdminConsumerComplexesNamedRoutes: NamedRoutes = { + complexes: { + path: 'complexes', + loadComponent: () => + import('../../views/complexes/list.component').then( + (m) => m.SuperAdminUserComplexesComponent, + ), + meta: { + title: 'فروشگاه‌ها', + pagePath: (consumerId: string, businessId: string) => baseUrl(consumerId, businessId), + }, + }, + complex: { + path: 'complexes/:complexId', + loadComponent: () => + import('../../views/complexes/single.component').then( + (m) => m.SuperAdminUserComplexComponent, + ), + meta: { + title: 'فروشگاه', + pagePath: (consumerId: string, businessId: string, complexId: string) => + `${baseUrl(consumerId, businessId)}/${complexId}`, + }, + }, +}; + +export const SUPER_ADMIN_CONSUMER_COMPLEXES_ROUTES: Routes = [ + superAdminConsumerComplexesNamedRoutes.complexes, + { + path: superAdminConsumerComplexesNamedRoutes.complex.path, + loadComponent: () => + import('../../components/complexes/layout.component').then( + (m) => m.SuperAdminConsumerComplexLayoutComponent, + ), + children: [ + { + path: '', + loadComponent: superAdminConsumerComplexesNamedRoutes.complex.loadComponent, + }, + ...SUPER_ADMIN_CONSUMER_POSES_ROUTES, + ], + }, +]; diff --git a/src/app/domains/superAdmin/modules/consumers/constants/routes/index.ts b/src/app/domains/superAdmin/modules/consumers/constants/routes/index.ts new file mode 100644 index 0000000..017da27 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/constants/routes/index.ts @@ -0,0 +1,44 @@ +import { NamedRoutes } from '@/core'; +import { Routes } from '@angular/router'; +import { SUPER_ADMIN_CONSUMER_ACCOUNTS_ROUTES } from './accounts'; +import { SUPER_ADMIN_CONSUMER_BUSINESS_ACTIVITIES_ROUTES } from './businessActivities'; + +export type TConsumersRouteNames = 'consumers' | 'consumer'; + +export const superAdminConsumersNamedRoutes: NamedRoutes = { + consumers: { + path: 'consumers', + loadComponent: () => import('../../views/list.component').then((m) => m.ConsumersComponent), + meta: { + title: 'مشتریان', + pagePath: () => '/super_admin/consumers', + }, + }, + consumer: { + path: 'consumers/:consumerId', + loadComponent: () => import('../../views/single.component').then((m) => m.ConsumerComponent), + meta: { + title: 'مشتری', + pagePath: (guildId: string) => `/super_admin/consumers/${guildId}`, + }, + }, +}; + +export const CONSUMERS_ROUTES: Routes = [ + superAdminConsumersNamedRoutes.consumers, + { + path: 'consumers/:consumerId', + loadComponent: () => + import('../../components/layout.component').then((m) => m.ConsumerLayoutComponent), + + children: [ + { + path: '', + loadComponent: () => + import('../../views/single.component').then((m) => m.ConsumerComponent), + }, + ...SUPER_ADMIN_CONSUMER_ACCOUNTS_ROUTES, + ...SUPER_ADMIN_CONSUMER_BUSINESS_ACTIVITIES_ROUTES, + ], + }, +]; diff --git a/src/app/domains/superAdmin/modules/consumers/constants/routes/poses.ts b/src/app/domains/superAdmin/modules/consumers/constants/routes/poses.ts new file mode 100644 index 0000000..c658e7d --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/constants/routes/poses.ts @@ -0,0 +1,49 @@ +import { NamedRoutes } from '@/core'; +import { Routes } from '@angular/router'; + +export type TPosesRouteNames = 'poses' | 'pos'; + +const baseUrl = (consumerId: string, businessId: string, complexId: string) => + `/super_admin/consumers/${consumerId}/business_activities/${businessId}/complexes/${complexId}/poses`; + +export const superAdminConsumerPosesNamedRoutes: NamedRoutes = { + poses: { + path: 'poses', + loadComponent: () => + import('../../views/poses/list.component').then((m) => m.SuperAdminUserPosesComponent), + // @ts-ignore + meta: { + title: 'پایانه‌های فروش', + pagePath: (consumerId: string, businessId: string, complexId: string) => + baseUrl(consumerId, businessId, complexId), + }, + }, + pos: { + path: 'poses/:posId', + loadComponent: () => + import('../../views/poses/single.component').then((m) => m.SuperAdminUserPosComponent), + // @ts-ignore + meta: { + title: 'پایانه‌ی فروش', + pagePath: (consumerId: string, businessId: string, complexId: string, posId: string) => + `${baseUrl(consumerId, businessId, complexId)}/${posId}`, + }, + }, +}; + +export const SUPER_ADMIN_CONSUMER_POSES_ROUTES: Routes = [ + superAdminConsumerPosesNamedRoutes.poses, + { + path: superAdminConsumerPosesNamedRoutes.pos.path, + loadComponent: () => + import('../../components/poses/layout.component').then( + (m) => m.SuperAdminConsumerPosLayoutComponent, + ), + children: [ + { + path: '', + loadComponent: superAdminConsumerPosesNamedRoutes.pos.loadComponent, + }, + ], + }, +]; diff --git a/src/app/domains/superAdmin/modules/consumers/models/accounts_io.d.ts b/src/app/domains/superAdmin/modules/consumers/models/accounts_io.d.ts new file mode 100644 index 0000000..f95fd73 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/models/accounts_io.d.ts @@ -0,0 +1,13 @@ +import { TAccountType } from '@/core/constants/accountTypes.const'; + +export interface IConsumerAccountRawResponse { + username: string; + id: string; +} +export interface IConsumerAccountResponse extends IConsumerAccountRawResponse {} + +export interface IConsumerAccountRequest { + username: string; + password?: string; + type: TAccountType; +} diff --git a/src/app/domains/superAdmin/users/models/businessActivities_io.d.ts b/src/app/domains/superAdmin/modules/consumers/models/businessActivities_io.d.ts similarity index 100% rename from src/app/domains/superAdmin/users/models/businessActivities_io.d.ts rename to src/app/domains/superAdmin/modules/consumers/models/businessActivities_io.d.ts diff --git a/src/app/domains/superAdmin/users/models/complexes_io.d.ts b/src/app/domains/superAdmin/modules/consumers/models/complexes_io.d.ts similarity index 100% rename from src/app/domains/superAdmin/users/models/complexes_io.d.ts rename to src/app/domains/superAdmin/modules/consumers/models/complexes_io.d.ts diff --git a/src/app/domains/superAdmin/users/models/index.ts b/src/app/domains/superAdmin/modules/consumers/models/index.ts similarity index 100% rename from src/app/domains/superAdmin/users/models/index.ts rename to src/app/domains/superAdmin/modules/consumers/models/index.ts diff --git a/src/app/domains/superAdmin/modules/consumers/models/io.d.ts b/src/app/domains/superAdmin/modules/consumers/models/io.d.ts new file mode 100644 index 0000000..6ac7b6c --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/models/io.d.ts @@ -0,0 +1,17 @@ +export interface IConsumerRawResponse { + id: string; + first_name: string; + last_name: string; + mobile_number: string; + status: string; + fullname: string; +} +export interface IConsumerResponse extends IConsumerRawResponse {} + +export interface IConsumerRequest { + first_name: string; + last_name: string; + mobile_number: string; + username: string; + password: string; +} diff --git a/src/app/domains/superAdmin/users/models/poses_io.d.ts b/src/app/domains/superAdmin/modules/consumers/models/poses_io.d.ts similarity index 100% rename from src/app/domains/superAdmin/users/models/poses_io.d.ts rename to src/app/domains/superAdmin/modules/consumers/models/poses_io.d.ts diff --git a/src/app/domains/superAdmin/modules/consumers/services/accounts.service.ts b/src/app/domains/superAdmin/modules/consumers/services/accounts.service.ts new file mode 100644 index 0000000..16f5b69 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/services/accounts.service.ts @@ -0,0 +1,41 @@ +import { IPaginatedResponse } from '@/core/models/service.model'; +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { CONSUMER_ACCOUNTS_API_ROUTES } from '../constants'; +import { + IConsumerAccountRawResponse, + IConsumerAccountRequest, + IConsumerAccountResponse, +} from '../models'; + +@Injectable({ providedIn: 'root' }) +export class AdminConsumerAccountsService { + constructor(private http: HttpClient) {} + + private apiRoutes = CONSUMER_ACCOUNTS_API_ROUTES; + + getAll(consumerId: string): Observable> { + return this.http.get>( + this.apiRoutes.list(consumerId), + ); + } + getSingle(consumerId: string, accountId: string): Observable { + return this.http.get(this.apiRoutes.single(consumerId, accountId)); + } + + create(consumerId: string, data: IConsumerAccountRequest): Observable { + return this.http.post(this.apiRoutes.list(consumerId), data); + } + + update( + consumerId: string, + accountId: string, + data: IConsumerAccountRequest, + ): Observable { + return this.http.patch( + this.apiRoutes.single(consumerId, accountId), + data, + ); + } +} diff --git a/src/app/domains/superAdmin/users/services/businessActivities.service.ts b/src/app/domains/superAdmin/modules/consumers/services/businessActivities.service.ts similarity index 62% rename from src/app/domains/superAdmin/users/services/businessActivities.service.ts rename to src/app/domains/superAdmin/modules/consumers/services/businessActivities.service.ts index 4fb9223..414abc9 100644 --- a/src/app/domains/superAdmin/users/services/businessActivities.service.ts +++ b/src/app/domains/superAdmin/modules/consumers/services/businessActivities.service.ts @@ -10,35 +10,36 @@ import { } from '../models'; @Injectable({ providedIn: 'root' }) -export class AdminUserBusinessActivitiesService { +export class AdminConsumerBusinessActivitiesService { constructor(private http: HttpClient) {} private apiRoutes = BUSINESS_ACTIVITIES_API_ROUTES; - getAll(userId: string): Observable> { + getAll(consumerId: string): Observable> { return this.http.get>( - this.apiRoutes.list(userId), + this.apiRoutes.list(consumerId), ); } - getSingle(userId: string, businessActivityId: string): Observable { - console.log(userId, businessActivityId); - + getSingle(consumerId: string, businessActivityId: string): Observable { return this.http.get( - this.apiRoutes.single(userId, businessActivityId), + this.apiRoutes.single(consumerId, businessActivityId), ); } - create(userId: string, data: IBusinessActivityRequest): Observable { - return this.http.post(this.apiRoutes.list(userId), data); + create( + consumerId: string, + data: IBusinessActivityRequest, + ): Observable { + return this.http.post(this.apiRoutes.list(consumerId), data); } update( - userId: string, + consumerId: string, businessActivityId: string, data: IBusinessActivityRequest, ): Observable { return this.http.patch( - this.apiRoutes.single(userId, businessActivityId), + this.apiRoutes.single(consumerId, businessActivityId), data, ); } diff --git a/src/app/domains/superAdmin/users/services/complexes.service.ts b/src/app/domains/superAdmin/modules/consumers/services/complexes.service.ts similarity index 78% rename from src/app/domains/superAdmin/users/services/complexes.service.ts rename to src/app/domains/superAdmin/modules/consumers/services/complexes.service.ts index 8558956..e855011 100644 --- a/src/app/domains/superAdmin/users/services/complexes.service.ts +++ b/src/app/domains/superAdmin/modules/consumers/services/complexes.service.ts @@ -12,42 +12,42 @@ export class AdminComplexesService { private apiRoutes = BUSINESS_ACTIVITY_COMPLEXES_API_ROUTES; getAll( - userId: string, + consumerId: string, businessActivityId: string, ): Observable> { return this.http.get>( - this.apiRoutes.list(userId, businessActivityId), + this.apiRoutes.list(consumerId, businessActivityId), ); } getSingle( - userId: string, + consumerId: string, businessActivityId: string, complexId: string, ): Observable { return this.http.get( - this.apiRoutes.single(userId, businessActivityId, complexId), + this.apiRoutes.single(consumerId, businessActivityId, complexId), ); } create( - userId: string, + consumerId: string, businessActivityId: string, data: IComplexRequest, ): Observable { return this.http.post( - this.apiRoutes.list(userId, businessActivityId), + this.apiRoutes.list(consumerId, businessActivityId), data, ); } update( - userId: string, + consumerId: string, businessActivityId: string, complexId: string, data: IComplexRequest, ): Observable { return this.http.patch( - this.apiRoutes.single(userId, businessActivityId, complexId), + this.apiRoutes.single(consumerId, businessActivityId, complexId), data, ); } diff --git a/src/app/domains/superAdmin/modules/consumers/services/main.service.ts b/src/app/domains/superAdmin/modules/consumers/services/main.service.ts new file mode 100644 index 0000000..8fe9cd6 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/services/main.service.ts @@ -0,0 +1,28 @@ +import { IPaginatedResponse } from '@/core/models/service.model'; +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { CONSUMERS_API_ROUTES } from '../constants'; +import { IConsumerRawResponse, IConsumerRequest, IConsumerResponse } from '../models'; + +@Injectable({ providedIn: 'root' }) +export class ConsumersService { + constructor(private http: HttpClient) {} + + private apiRoutes = CONSUMERS_API_ROUTES; + + getAll(): Observable> { + return this.http.get>(this.apiRoutes.list()); + } + getSingle(consumerId: string): Observable { + return this.http.get(this.apiRoutes.single(consumerId)); + } + + create(userData: IConsumerRequest): Observable { + return this.http.post(this.apiRoutes.list(), userData); + } + + update(consumerId: string, userData: IConsumerRequest): Observable { + return this.http.patch(this.apiRoutes.single(consumerId), userData); + } +} diff --git a/src/app/domains/superAdmin/modules/consumers/services/posAccounts.service.ts b/src/app/domains/superAdmin/modules/consumers/services/posAccounts.service.ts new file mode 100644 index 0000000..a08e9d7 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/services/posAccounts.service.ts @@ -0,0 +1,38 @@ +// import { IPaginatedResponse } from '@/core/models/service.model'; +// import { HttpClient } from '@angular/common/http'; +// import { Injectable } from '@angular/core'; +// import { Observable } from 'rxjs'; +// import { POS_ACCOUNTS_API_ROUTES } from '../constants'; +// import { IAccountRawResponse, IAccountRequest, IAccountResponse } from '../../users/models'; + +// @Injectable({ providedIn: 'root' }) +// export class AdminPosesService { +// constructor(private http: HttpClient) {} + +// private apiRoutes = POS_ACCOUNTS_API_ROUTES; + +// getAll(complexId: string, posId: string): Observable> { +// return this.http.get>( +// this.apiRoutes.list(complexId, posId), +// ); +// } +// getSingle(complexId: string, posId: string, accountId: string): Observable { +// return this.http.get(this.apiRoutes.single(complexId, posId, accountId)); +// } + +// create(complexId: string, posId: string, data: IAccountRequest): Observable { +// return this.http.post(this.apiRoutes.list(complexId, posId), data); +// } + +// update( +// complexId: string, +// posId: string, +// accountId: string, +// data: IAccountRequest, +// ): Observable { +// return this.http.patch( +// this.apiRoutes.single(complexId, posId, accountId), +// data, +// ); +// } +// } diff --git a/src/app/domains/superAdmin/users/services/poses.service.ts b/src/app/domains/superAdmin/modules/consumers/services/poses.service.ts similarity index 94% rename from src/app/domains/superAdmin/users/services/poses.service.ts rename to src/app/domains/superAdmin/modules/consumers/services/poses.service.ts index 73ebf80..2e0ee8d 100644 --- a/src/app/domains/superAdmin/users/services/poses.service.ts +++ b/src/app/domains/superAdmin/modules/consumers/services/poses.service.ts @@ -2,7 +2,7 @@ import { IPaginatedResponse } from '@/core/models/service.model'; import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { COMPLEX_POSES_API_ROUTES } from '../constants'; +import { COMPLEX_POSES_API_ROUTES } from '../constants/apiRoutes/complexPoses'; import { IPosRawResponse, IPosRequest, IPosResponse } from '../models'; @Injectable({ providedIn: 'root' }) diff --git a/src/app/domains/superAdmin/users/store/businessActivity.store.ts b/src/app/domains/superAdmin/modules/consumers/store/businessActivity.store.ts similarity index 81% rename from src/app/domains/superAdmin/users/store/businessActivity.store.ts rename to src/app/domains/superAdmin/modules/consumers/store/businessActivity.store.ts index 6adba15..554efa5 100644 --- a/src/app/domains/superAdmin/users/store/businessActivity.store.ts +++ b/src/app/domains/superAdmin/modules/consumers/store/businessActivity.store.ts @@ -2,7 +2,7 @@ import { EntityState, EntityStore } from '@/core/state'; import { inject, Injectable } from '@angular/core'; import { catchError, finalize, throwError } from 'rxjs'; import { IBusinessActivityResponse } from '../models'; -import { AdminUserBusinessActivitiesService } from '../services/businessActivities.service'; +import { AdminConsumerBusinessActivitiesService } from '../services/businessActivities.service'; interface BusinessActivityState extends EntityState {} @@ -13,7 +13,7 @@ export class BusinessActivityStore extends EntityStore< IBusinessActivityResponse, BusinessActivityState > { - private readonly service = inject(AdminUserBusinessActivitiesService); + private readonly service = inject(AdminConsumerBusinessActivitiesService); constructor() { super({ loading: false, @@ -24,10 +24,10 @@ export class BusinessActivityStore extends EntityStore< }); } - getData(userId: string, business_id: string) { + getData(consumerId: string, business_id: string) { this.patchState({ loading: true }); this.service - .getSingle(userId, business_id) + .getSingle(consumerId, business_id) .pipe( finalize(() => { this.patchState({ loading: false }); diff --git a/src/app/domains/superAdmin/users/store/complex.store.ts b/src/app/domains/superAdmin/modules/consumers/store/complex.store.ts similarity index 90% rename from src/app/domains/superAdmin/users/store/complex.store.ts rename to src/app/domains/superAdmin/modules/consumers/store/complex.store.ts index 9b17951..351545e 100644 --- a/src/app/domains/superAdmin/users/store/complex.store.ts +++ b/src/app/domains/superAdmin/modules/consumers/store/complex.store.ts @@ -21,10 +21,10 @@ export class ComplexStore extends EntityStore { }); } - getData(userId: string, businessId: string, complexId: string) { + getData(consumerId: string, businessId: string, complexId: string) { this.patchState({ loading: true }); this.service - .getSingle(userId, businessId, complexId) + .getSingle(consumerId, businessId, complexId) .pipe( finalize(() => { this.patchState({ loading: false }); diff --git a/src/app/domains/superAdmin/modules/consumers/store/consumer.store.ts b/src/app/domains/superAdmin/modules/consumers/store/consumer.store.ts new file mode 100644 index 0000000..8b89c42 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/store/consumer.store.ts @@ -0,0 +1,43 @@ +import { EntityState, EntityStore } from '@/core/state'; +import { inject, Injectable } from '@angular/core'; +import { catchError, finalize, throwError } from 'rxjs'; +import { IConsumerResponse } from '../models'; +import { ConsumersService } from '../services/main.service'; + +interface ConsumerState extends EntityState {} + +@Injectable({ + providedIn: 'root', +}) +export class ConsumerStore extends EntityStore { + private readonly service = inject(ConsumersService); + constructor() { + super({ + loading: false, + error: null, + entity: null, + initialized: false, + isRefreshing: false, + }); + } + + getData(partnerId: string) { + this.patchState({ loading: true }); + this.service + .getSingle(partnerId) + .pipe( + finalize(() => { + this.patchState({ loading: false }); + }), + catchError(() => { + this.patchState({ + error: '', + }); + return throwError(''); + }), + ) + .subscribe((entity) => { + this.patchState({ entity }); + }); + } +} diff --git a/src/app/domains/superAdmin/users/store/pos.store.ts b/src/app/domains/superAdmin/modules/consumers/store/pos.store.ts similarity index 100% rename from src/app/domains/superAdmin/users/store/pos.store.ts rename to src/app/domains/superAdmin/modules/consumers/store/pos.store.ts diff --git a/src/app/domains/superAdmin/deviceBrands/views/index.ts b/src/app/domains/superAdmin/modules/consumers/views/accounts/index.ts similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/views/index.ts rename to src/app/domains/superAdmin/modules/consumers/views/accounts/index.ts diff --git a/src/app/domains/superAdmin/modules/consumers/views/accounts/list.component.html b/src/app/domains/superAdmin/modules/consumers/views/accounts/list.component.html new file mode 100644 index 0000000..a39769b --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/accounts/list.component.html @@ -0,0 +1 @@ + diff --git a/src/app/domains/superAdmin/modules/consumers/views/accounts/list.component.ts b/src/app/domains/superAdmin/modules/consumers/views/accounts/list.component.ts new file mode 100644 index 0000000..15d05d7 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/accounts/list.component.ts @@ -0,0 +1,41 @@ +// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; +import { BreadcrumbService } from '@/core/services'; +import { Component, inject, signal } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { ConsumerAccountListComponent } from '../../components/accounts/list.component'; +import { superAdminConsumersNamedRoutes } from '../../constants'; +import { superAdminConsumerAccountsNamedRoutes } from '../../constants/routes/accounts'; +import { ConsumerStore } from '../../store/consumer.store'; + +@Component({ + selector: 'superAdmin-consumer-accounts', + templateUrl: './list.component.html', + imports: [ConsumerAccountListComponent], +}) +export class ConsumerAccountsComponent { + private readonly route = inject(ActivatedRoute); + private readonly breadcrumbService = inject(BreadcrumbService); + private readonly store = inject(ConsumerStore); + + consumerId = signal(this.route.snapshot.params['consumerId']); + + ngOnInit() { + this.setBreadcrumb(); + } + + setBreadcrumb() { + this.breadcrumbService.setItems([ + { + ...superAdminConsumersNamedRoutes.consumers.meta, + routerLink: superAdminConsumersNamedRoutes.consumers.meta.pagePath!(), + }, + { + title: this.store.entity()?.fullname, + routerLink: superAdminConsumersNamedRoutes.consumer.meta.pagePath!(this.consumerId()), + }, + { + title: superAdminConsumerAccountsNamedRoutes.accounts.meta.title, + }, + ]); + } +} diff --git a/src/app/domains/superAdmin/devices/views/index.ts b/src/app/domains/superAdmin/modules/consumers/views/businessActivities/index.ts similarity index 100% rename from src/app/domains/superAdmin/devices/views/index.ts rename to src/app/domains/superAdmin/modules/consumers/views/businessActivities/index.ts diff --git a/src/app/domains/superAdmin/modules/consumers/views/businessActivities/list.component.html b/src/app/domains/superAdmin/modules/consumers/views/businessActivities/list.component.html new file mode 100644 index 0000000..b387db5 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/businessActivities/list.component.html @@ -0,0 +1 @@ + diff --git a/src/app/domains/superAdmin/modules/consumers/views/businessActivities/list.component.ts b/src/app/domains/superAdmin/modules/consumers/views/businessActivities/list.component.ts new file mode 100644 index 0000000..d2479d5 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/businessActivities/list.component.ts @@ -0,0 +1,43 @@ +// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; +import { BreadcrumbService } from '@/core/services'; +import pageParamsUtils from '@/utils/page-params.utils'; +import { Component, computed, inject, signal } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { ConsumerBusinessActivitiesComponent } from '../../components/businessActivities/list.component'; +import { superAdminConsumersNamedRoutes } from '../../constants'; +import { superAdminConsumerBusinessActivitiesNamedRoutes } from '../../constants/routes/businessActivities'; +import { ConsumerStore } from '../../store/consumer.store'; + +@Component({ + selector: 'superAdmin-user-businessActivities', + templateUrl: './list.component.html', + imports: [ConsumerBusinessActivitiesComponent], +}) +export class SuperAdminUserBusinessActivitiesComponent { + private readonly route = inject(ActivatedRoute); + private readonly breadcrumbService = inject(BreadcrumbService); + private readonly consumerStore = inject(ConsumerStore); + + pageParams = computed(() => pageParamsUtils(this.route)); + consumerId = signal(this.pageParams()['consumerId']); + + ngOnInit() { + this.setBreadcrumb(); + } + + setBreadcrumb() { + this.breadcrumbService.setItems([ + { + ...superAdminConsumersNamedRoutes.consumers.meta, + routerLink: superAdminConsumersNamedRoutes.consumers.meta.pagePath!(), + }, + { + title: this.consumerStore.entity()?.fullname, + routerLink: superAdminConsumersNamedRoutes.consumer.meta.pagePath!(this.consumerId()), + }, + { + title: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta.title, + }, + ]); + } +} diff --git a/src/app/domains/superAdmin/users/views/businessActivities/single.component.html b/src/app/domains/superAdmin/modules/consumers/views/businessActivities/single.component.html similarity index 78% rename from src/app/domains/superAdmin/users/views/businessActivities/single.component.html rename to src/app/domains/superAdmin/modules/consumers/views/businessActivities/single.component.html index 039e3d2..b987988 100644 --- a/src/app/domains/superAdmin/users/views/businessActivities/single.component.html +++ b/src/app/domains/superAdmin/modules/consumers/views/businessActivities/single.component.html @@ -8,12 +8,12 @@ - + - pageParamsUtils(this.route)); - readonly userId = signal(this.pageParams()['userId']!); + readonly consumerId = signal(this.pageParams()['consumerId']!); readonly businessId = signal(this.pageParams()['businessActivityId']!); editMode = signal(false); @@ -38,36 +39,34 @@ export class SuperAdminUserBusinessActivityComponent { constructor() { effect(() => { if (this.businessActivity()?.id) { - console.log(this.businessActivity()?.id); this.setBreadcrumb(); } }); } getData() { - this.store.getData(this.userId(), this.businessId()); + this.store.getData(this.consumerId(), this.businessId()); } setBreadcrumb() { this.breadcrumbService.setItems([ { - ...usersNamedRoutes.users.meta, - routerLink: usersNamedRoutes.users.meta.pagePath!(), + ...superAdminConsumersNamedRoutes.consumers.meta, + routerLink: superAdminConsumersNamedRoutes.consumers.meta.pagePath!(), }, { - title: this.userStore.entity()?.fullname, - routerLink: usersNamedRoutes.user.meta.pagePath!(this.userId()), + title: this.consumerStore.entity()?.fullname, + routerLink: superAdminConsumersNamedRoutes.consumers.meta.pagePath!(this.consumerId()), }, { - ...superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta, - routerLink: superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta.pagePath!( - this.userId(), - ), + ...superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta, + routerLink: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta + .pagePath!(this.consumerId()), }, { title: this.businessActivity()?.name, - routerLink: superAdminUserBusinessActivitiesNamedRoutes.businessActivity.meta.pagePath!( - this.userId(), + routerLink: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivity.meta.pagePath!( + this.consumerId(), this.businessId(), ), }, diff --git a/src/app/domains/superAdmin/users/views/accounts/index.ts b/src/app/domains/superAdmin/modules/consumers/views/complexes/index.ts similarity index 100% rename from src/app/domains/superAdmin/users/views/accounts/index.ts rename to src/app/domains/superAdmin/modules/consumers/views/complexes/index.ts diff --git a/src/app/domains/superAdmin/modules/consumers/views/complexes/list.component.html b/src/app/domains/superAdmin/modules/consumers/views/complexes/list.component.html new file mode 100644 index 0000000..7754d42 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/complexes/list.component.html @@ -0,0 +1 @@ + diff --git a/src/app/domains/superAdmin/modules/consumers/views/complexes/list.component.ts b/src/app/domains/superAdmin/modules/consumers/views/complexes/list.component.ts new file mode 100644 index 0000000..32112e7 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/complexes/list.component.ts @@ -0,0 +1,63 @@ +// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; +import { BreadcrumbService } from '@/core/services'; +import pageParamsUtils from '@/utils/page-params.utils'; +import { Component, computed, inject, signal } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { ConsumerComplexesComponent } from '../../components/complexes/list.component'; +import { superAdminConsumersNamedRoutes } from '../../constants'; +import { superAdminConsumerBusinessActivitiesNamedRoutes } from '../../constants/routes/businessActivities'; +import { superAdminConsumerComplexesNamedRoutes } from '../../constants/routes/complexes'; +import { BusinessActivityStore } from '../../store/businessActivity.store'; +import { ConsumerStore } from '../../store/consumer.store'; + +@Component({ + selector: 'superAdmin-user-complexes', + templateUrl: './list.component.html', + imports: [ConsumerComplexesComponent], +}) +export class SuperAdminUserComplexesComponent { + private readonly route = inject(ActivatedRoute); + private readonly breadcrumbService = inject(BreadcrumbService); + private readonly consumerStore = inject(ConsumerStore); + private readonly businessStore = inject(BusinessActivityStore); + + pageParams = computed(() => pageParamsUtils(this.route)); + consumerId = signal(this.pageParams()['consumerId']); + businessId = signal(this.pageParams()['businessActivityId']); + + ngAfterViewInit() { + this.setBreadcrumb(); + } + + setBreadcrumb() { + this.breadcrumbService.setItems([ + { + ...superAdminConsumersNamedRoutes.consumers.meta, + routerLink: superAdminConsumersNamedRoutes.consumers.meta.pagePath!(), + }, + { + title: this.consumerStore.entity()?.fullname, + routerLink: superAdminConsumersNamedRoutes.consumer.meta.pagePath!(this.consumerId()), + }, + { + title: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta.title, + routerLink: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta + .pagePath!(this.consumerId()), + }, + { + title: this.businessStore.entity()?.name, + routerLink: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivity.meta.pagePath!( + this.consumerId(), + this.businessId(), + ), + }, + { + title: superAdminConsumerComplexesNamedRoutes.complexes.meta.title, + routerLink: superAdminConsumerComplexesNamedRoutes.complexes.meta.pagePath!( + this.consumerId(), + this.businessId(), + ), + }, + ]); + } +} diff --git a/src/app/domains/superAdmin/users/views/complexes/single.component.html b/src/app/domains/superAdmin/modules/consumers/views/complexes/single.component.html similarity index 78% rename from src/app/domains/superAdmin/users/views/complexes/single.component.html rename to src/app/domains/superAdmin/modules/consumers/views/complexes/single.component.html index 93cb804..c3c9790 100644 --- a/src/app/domains/superAdmin/users/views/complexes/single.component.html +++ b/src/app/domains/superAdmin/modules/consumers/views/complexes/single.component.html @@ -9,12 +9,12 @@ - + - pageParamsUtils(this.route)); + + readonly consumerId = signal(this.pageParams()['consumerId']!); + readonly businessId = signal(this.pageParams()['businessActivityId']!); + readonly complexId = signal(this.pageParams()['complexId']!); + + editMode = signal(false); + + readonly loading = computed(() => this.store.loading()); + readonly complex = computed(() => this.store.entity()); + + constructor() { + effect(() => { + if (this.complex()?.id) { + this.setBreadcrumb(); + } + }); + } + + getData() { + this.store.getData(this.consumerId(), this.businessId(), this.complexId()); + } + + setBreadcrumb() { + this.breadcrumbService.setItems([ + { + ...superAdminConsumersNamedRoutes.consumers.meta, + routerLink: superAdminConsumersNamedRoutes.consumers.meta.pagePath!(), + }, + { + title: this.consumerStore.entity()?.fullname, + routerLink: superAdminConsumersNamedRoutes.consumer.meta.pagePath!(this.consumerId()), + }, + { + ...superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta, + routerLink: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta + .pagePath!(this.consumerId()), + }, + { + title: this.businessStore.entity()?.name, + routerLink: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivity.meta.pagePath!( + this.consumerId(), + this.businessId(), + ), + }, + { + ...superAdminConsumerComplexesNamedRoutes.complexes.meta, + routerLink: superAdminConsumerComplexesNamedRoutes.complexes.meta.pagePath!( + this.consumerId(), + this.businessId(), + ), + }, + { + title: this.complex()?.name, + routerLink: superAdminConsumerComplexesNamedRoutes.complex.meta.pagePath!( + this.consumerId(), + this.businessId(), + this.complexId(), + ), + }, + ]); + } +} diff --git a/src/app/domains/superAdmin/guilds/views/index.ts b/src/app/domains/superAdmin/modules/consumers/views/index.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/views/index.ts rename to src/app/domains/superAdmin/modules/consumers/views/index.ts diff --git a/src/app/domains/superAdmin/modules/consumers/views/list.component.html b/src/app/domains/superAdmin/modules/consumers/views/list.component.html new file mode 100644 index 0000000..b9afbe1 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/list.component.html @@ -0,0 +1,23 @@ + + diff --git a/src/app/domains/superAdmin/modules/consumers/views/list.component.ts b/src/app/domains/superAdmin/modules/consumers/views/list.component.ts new file mode 100644 index 0000000..bafb47a --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/list.component.ts @@ -0,0 +1,41 @@ +// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; +import { AbstractList } from '@/shared/abstractClasses/abstract-list'; +import { PageDataListComponent } from '@/shared/components/pageDataList/page-data-list.component'; +import { Component, inject } from '@angular/core'; +import { Router } from '@angular/router'; +import { ConsumerUserFormComponent } from '../components/form.component'; +import { superAdminConsumersNamedRoutes } from '../constants'; +import { IConsumerResponse } from '../models'; +import { ConsumersService } from '../services/main.service'; + +@Component({ + selector: 'superAdmin-consumers', + templateUrl: './list.component.html', + imports: [PageDataListComponent, ConsumerUserFormComponent], +}) +export class ConsumersComponent extends AbstractList { + private readonly service = inject(ConsumersService); + private readonly router = inject(Router); + + override setColumns(): void { + this.columns = [ + { field: 'id', header: 'شناسه' }, + { field: 'fullname', header: 'نام' }, + { field: 'mobile_number', header: 'شماره موبایل' }, + { field: 'status', header: 'وضعیت' }, + { + field: 'created_at', + header: 'تاریخ ایجاد', + type: 'date', + }, + ]; + } + + override getDataRequest() { + return this.service.getAll(); + } + + toSinglePage(consumer: IConsumerResponse) { + this.router.navigateByUrl(superAdminConsumersNamedRoutes.consumer.meta.pagePath!(consumer.id)); + } +} diff --git a/src/app/domains/superAdmin/users/views/businessActivities/index.ts b/src/app/domains/superAdmin/modules/consumers/views/poses/index.ts similarity index 100% rename from src/app/domains/superAdmin/users/views/businessActivities/index.ts rename to src/app/domains/superAdmin/modules/consumers/views/poses/index.ts diff --git a/src/app/domains/superAdmin/modules/consumers/views/poses/list.component.html b/src/app/domains/superAdmin/modules/consumers/views/poses/list.component.html new file mode 100644 index 0000000..55cdbf7 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/poses/list.component.html @@ -0,0 +1 @@ + diff --git a/src/app/domains/superAdmin/modules/consumers/views/poses/list.component.ts b/src/app/domains/superAdmin/modules/consumers/views/poses/list.component.ts new file mode 100644 index 0000000..b8f594d --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/poses/list.component.ts @@ -0,0 +1,85 @@ +// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; +import { BreadcrumbService } from '@/core/services'; +import pageParamsUtils from '@/utils/page-params.utils'; +import { Component, computed, inject, signal } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { ConsumerPosesComponent } from '../../components/poses/list.component'; +import { superAdminConsumersNamedRoutes } from '../../constants'; +import { superAdminConsumerBusinessActivitiesNamedRoutes } from '../../constants/routes/businessActivities'; +import { superAdminConsumerComplexesNamedRoutes } from '../../constants/routes/complexes'; +import { superAdminConsumerPosesNamedRoutes } from '../../constants/routes/poses'; +import { BusinessActivityStore } from '../../store/businessActivity.store'; +import { ComplexStore } from '../../store/complex.store'; +import { ConsumerStore } from '../../store/consumer.store'; + +@Component({ + selector: 'superAdmin-user-poses', + templateUrl: './list.component.html', + imports: [ConsumerPosesComponent], +}) +export class SuperAdminUserPosesComponent { + private readonly route = inject(ActivatedRoute); + private readonly breadcrumbService = inject(BreadcrumbService); + private readonly consumerStore = inject(ConsumerStore); + private readonly businessStore = inject(BusinessActivityStore); + private readonly complexStore = inject(ComplexStore); + + pageParams = computed(() => pageParamsUtils(this.route)); + consumerId = signal(this.pageParams()['consumerId']); + businessId = signal(this.pageParams()['businessActivityId']); + complexId = signal(this.pageParams()['complexId']); + + ngOnInit() { + this.setBreadcrumb(); + } + + setBreadcrumb() { + this.breadcrumbService.setItems([ + { + ...superAdminConsumersNamedRoutes.consumers.meta, + routerLink: superAdminConsumersNamedRoutes.consumers.meta.pagePath!(), + }, + { + title: this.consumerStore.entity()?.fullname, + routerLink: superAdminConsumersNamedRoutes.consumer.meta.pagePath!(this.consumerId()), + }, + { + title: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta.title, + routerLink: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta + .pagePath!(this.consumerId()), + }, + { + title: this.businessStore.entity()?.name, + routerLink: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivity.meta.pagePath!( + this.consumerId(), + this.businessId(), + ), + }, + + { + title: superAdminConsumerComplexesNamedRoutes.complexes.meta.title, + routerLink: superAdminConsumerComplexesNamedRoutes.complexes.meta.pagePath!( + this.consumerId(), + this.businessId(), + ), + }, + { + title: this.complexStore.entity()?.name, + routerLink: superAdminConsumerComplexesNamedRoutes.complex.meta.pagePath!( + this.consumerId(), + this.businessId(), + this.complexId(), + ), + }, + + { + title: superAdminConsumerPosesNamedRoutes.poses.meta.title, + routerLink: superAdminConsumerPosesNamedRoutes.poses.meta.pagePath!( + this.consumerId(), + this.businessId(), + this.complexId(), + ), + }, + ]); + } +} diff --git a/src/app/domains/superAdmin/users/views/poses/single.component.html b/src/app/domains/superAdmin/modules/consumers/views/poses/single.component.html similarity index 89% rename from src/app/domains/superAdmin/users/views/poses/single.component.html rename to src/app/domains/superAdmin/modules/consumers/views/poses/single.component.html index a79a1d4..3a919b6 100644 --- a/src/app/domains/superAdmin/users/views/poses/single.component.html +++ b/src/app/domains/superAdmin/modules/consumers/views/poses/single.component.html @@ -7,10 +7,10 @@ - pageParamsUtils(this.route)); - readonly userId = signal(this.pageParams()['userId']!); + readonly consumerId = signal(this.pageParams()['consumerId']!); readonly businessId = signal(this.pageParams()['businessActivityId']!); readonly complexId = signal(this.pageParams()['complexId']!); readonly posId = signal(this.pageParams()['posId']!); @@ -52,47 +52,46 @@ export class SuperAdminUserPosComponent { setBreadcrumb() { this.breadcrumbService.setItems([ { - ...usersNamedRoutes.users.meta, - routerLink: usersNamedRoutes.users.meta.pagePath!(), + ...superAdminConsumersNamedRoutes.consumers.meta, + routerLink: superAdminConsumersNamedRoutes.consumers.meta.pagePath!(), }, { - title: this.userStore.entity()?.fullname, - routerLink: usersNamedRoutes.user.meta.pagePath!(this.userId()), + title: this.consumerStore.entity()?.fullname, + routerLink: superAdminConsumersNamedRoutes.consumer.meta.pagePath!(this.consumerId()), }, { - title: superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta.title, - routerLink: superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta.pagePath!( - this.userId(), - ), + title: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta.title, + routerLink: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivities.meta + .pagePath!(this.consumerId()), }, { title: this.businessStore.entity()?.name, - routerLink: superAdminUserBusinessActivitiesNamedRoutes.businessActivity.meta.pagePath!( - this.userId(), + routerLink: superAdminConsumerBusinessActivitiesNamedRoutes.businessActivity.meta.pagePath!( + this.consumerId(), this.businessId(), ), }, { - title: superAdminUserComplexesNamedRoutes.complexes.meta.title, - routerLink: superAdminUserComplexesNamedRoutes.complexes.meta.pagePath!( - this.userId(), + title: superAdminConsumerComplexesNamedRoutes.complexes.meta.title, + routerLink: superAdminConsumerComplexesNamedRoutes.complexes.meta.pagePath!( + this.consumerId(), this.businessId(), ), }, { title: this.complexStore.entity()?.name, - routerLink: superAdminUserComplexesNamedRoutes.complex.meta.pagePath!( - this.userId(), + routerLink: superAdminConsumerComplexesNamedRoutes.complex.meta.pagePath!( + this.consumerId(), this.businessId(), this.complexId(), ), }, { - title: superAdminUserPosesNamedRoutes.poses.meta.title, - routerLink: superAdminUserPosesNamedRoutes.poses.meta.pagePath!( - this.userId(), + title: superAdminConsumerPosesNamedRoutes.poses.meta.title, + routerLink: superAdminConsumerPosesNamedRoutes.poses.meta.pagePath!( + this.consumerId(), this.businessId(), this.complexId(), ), @@ -100,8 +99,8 @@ export class SuperAdminUserPosComponent { { title: this.pos()?.name, - routerLink: superAdminUserPosesNamedRoutes.pos.meta.pagePath!( - this.userId(), + routerLink: superAdminConsumerPosesNamedRoutes.pos.meta.pagePath!( + this.consumerId(), this.businessId(), this.complexId(), this.posId(), diff --git a/src/app/domains/superAdmin/modules/consumers/views/single.component.html b/src/app/domains/superAdmin/modules/consumers/views/single.component.html new file mode 100644 index 0000000..e25308a --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/single.component.html @@ -0,0 +1,23 @@ +
+ + +
+
+ + + +
+
+
+ + + + + +
diff --git a/src/app/domains/superAdmin/modules/consumers/views/single.component.ts b/src/app/domains/superAdmin/modules/consumers/views/single.component.ts new file mode 100644 index 0000000..3ee2bb9 --- /dev/null +++ b/src/app/domains/superAdmin/modules/consumers/views/single.component.ts @@ -0,0 +1,57 @@ +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 { ConsumerAccountListComponent } from '../components/accounts/list.component'; +import { ConsumerBusinessActivitiesComponent } from '../components/businessActivities/list.component'; +import { ConsumerUserFormComponent } from '../components/form.component'; +import { superAdminConsumersNamedRoutes } from '../constants'; +import { ConsumerStore } from '../store/consumer.store'; + +@Component({ + selector: 'consumer-user', + templateUrl: './single.component.html', + imports: [ + AppCardComponent, + KeyValueComponent, + ConsumerUserFormComponent, + ConsumerAccountListComponent, + ConsumerBusinessActivitiesComponent, + ], +}) +export class ConsumerComponent { + private readonly store = inject(ConsumerStore); + private readonly route = inject(ActivatedRoute); + private readonly breadcrumbService = inject(BreadcrumbService); + + readonly consumerId = signal(this.route.snapshot.paramMap.get('consumerId')!); + editMode = signal(false); + + readonly loading = computed(() => this.store.loading()); + readonly consumer = computed(() => this.store.entity()); + + constructor() { + effect(() => { + if (this.consumer()?.id) { + this.setBreadcrumb(); + } + }); + } + + getData() { + this.store.getData(this.consumerId()); + } + + setBreadcrumb() { + this.breadcrumbService.setItems([ + { + ...superAdminConsumersNamedRoutes.consumers.meta, + routerLink: superAdminConsumersNamedRoutes.consumers.meta.pagePath!(), + }, + { + title: this.consumer()?.fullname, + routerLink: superAdminConsumersNamedRoutes.consumer.meta.pagePath!(this.consumerId()), + }, + ]); + } +} diff --git a/src/app/domains/superAdmin/deviceBrands/components/form.component.html b/src/app/domains/superAdmin/modules/deviceBrands/components/form.component.html similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/components/form.component.html rename to src/app/domains/superAdmin/modules/deviceBrands/components/form.component.html diff --git a/src/app/domains/superAdmin/deviceBrands/components/form.component.ts b/src/app/domains/superAdmin/modules/deviceBrands/components/form.component.ts similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/components/form.component.ts rename to src/app/domains/superAdmin/modules/deviceBrands/components/form.component.ts diff --git a/src/app/domains/superAdmin/deviceBrands/constants/apiRoutes/index.ts b/src/app/domains/superAdmin/modules/deviceBrands/constants/apiRoutes/index.ts similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/constants/apiRoutes/index.ts rename to src/app/domains/superAdmin/modules/deviceBrands/constants/apiRoutes/index.ts diff --git a/src/app/domains/superAdmin/devices/constants/index.ts b/src/app/domains/superAdmin/modules/deviceBrands/constants/index.ts similarity index 100% rename from src/app/domains/superAdmin/devices/constants/index.ts rename to src/app/domains/superAdmin/modules/deviceBrands/constants/index.ts diff --git a/src/app/domains/superAdmin/deviceBrands/constants/routes/index.ts b/src/app/domains/superAdmin/modules/deviceBrands/constants/routes/index.ts similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/constants/routes/index.ts rename to src/app/domains/superAdmin/modules/deviceBrands/constants/routes/index.ts diff --git a/src/app/domains/superAdmin/deviceBrands/models/index.ts b/src/app/domains/superAdmin/modules/deviceBrands/models/index.ts similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/models/index.ts rename to src/app/domains/superAdmin/modules/deviceBrands/models/index.ts diff --git a/src/app/domains/superAdmin/deviceBrands/models/io.d.ts b/src/app/domains/superAdmin/modules/deviceBrands/models/io.d.ts similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/models/io.d.ts rename to src/app/domains/superAdmin/modules/deviceBrands/models/io.d.ts diff --git a/src/app/domains/superAdmin/deviceBrands/services/main.service.ts b/src/app/domains/superAdmin/modules/deviceBrands/services/main.service.ts similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/services/main.service.ts rename to src/app/domains/superAdmin/modules/deviceBrands/services/main.service.ts diff --git a/src/app/domains/superAdmin/users/views/complexes/index.ts b/src/app/domains/superAdmin/modules/deviceBrands/views/index.ts similarity index 100% rename from src/app/domains/superAdmin/users/views/complexes/index.ts rename to src/app/domains/superAdmin/modules/deviceBrands/views/index.ts diff --git a/src/app/domains/superAdmin/deviceBrands/views/list.component.html b/src/app/domains/superAdmin/modules/deviceBrands/views/list.component.html similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/views/list.component.html rename to src/app/domains/superAdmin/modules/deviceBrands/views/list.component.html diff --git a/src/app/domains/superAdmin/deviceBrands/views/list.component.ts b/src/app/domains/superAdmin/modules/deviceBrands/views/list.component.ts similarity index 100% rename from src/app/domains/superAdmin/deviceBrands/views/list.component.ts rename to src/app/domains/superAdmin/modules/deviceBrands/views/list.component.ts diff --git a/src/app/domains/superAdmin/devices/components/form.component.html b/src/app/domains/superAdmin/modules/devices/components/form.component.html similarity index 100% rename from src/app/domains/superAdmin/devices/components/form.component.html rename to src/app/domains/superAdmin/modules/devices/components/form.component.html diff --git a/src/app/domains/superAdmin/devices/components/form.component.ts b/src/app/domains/superAdmin/modules/devices/components/form.component.ts similarity index 100% rename from src/app/domains/superAdmin/devices/components/form.component.ts rename to src/app/domains/superAdmin/modules/devices/components/form.component.ts diff --git a/src/app/domains/superAdmin/devices/constants/apiRoutes/index.ts b/src/app/domains/superAdmin/modules/devices/constants/apiRoutes/index.ts similarity index 100% rename from src/app/domains/superAdmin/devices/constants/apiRoutes/index.ts rename to src/app/domains/superAdmin/modules/devices/constants/apiRoutes/index.ts diff --git a/src/app/domains/superAdmin/guilds/constants/index.ts b/src/app/domains/superAdmin/modules/devices/constants/index.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/constants/index.ts rename to src/app/domains/superAdmin/modules/devices/constants/index.ts diff --git a/src/app/domains/superAdmin/devices/constants/routes/index.ts b/src/app/domains/superAdmin/modules/devices/constants/routes/index.ts similarity index 100% rename from src/app/domains/superAdmin/devices/constants/routes/index.ts rename to src/app/domains/superAdmin/modules/devices/constants/routes/index.ts diff --git a/src/app/domains/superAdmin/devices/models/index.ts b/src/app/domains/superAdmin/modules/devices/models/index.ts similarity index 100% rename from src/app/domains/superAdmin/devices/models/index.ts rename to src/app/domains/superAdmin/modules/devices/models/index.ts diff --git a/src/app/domains/superAdmin/devices/models/io.d.ts b/src/app/domains/superAdmin/modules/devices/models/io.d.ts similarity index 100% rename from src/app/domains/superAdmin/devices/models/io.d.ts rename to src/app/domains/superAdmin/modules/devices/models/io.d.ts diff --git a/src/app/domains/superAdmin/devices/services/main.service.ts b/src/app/domains/superAdmin/modules/devices/services/main.service.ts similarity index 100% rename from src/app/domains/superAdmin/devices/services/main.service.ts rename to src/app/domains/superAdmin/modules/devices/services/main.service.ts diff --git a/src/app/domains/superAdmin/users/views/poses/index.ts b/src/app/domains/superAdmin/modules/devices/views/index.ts similarity index 100% rename from src/app/domains/superAdmin/users/views/poses/index.ts rename to src/app/domains/superAdmin/modules/devices/views/index.ts diff --git a/src/app/domains/superAdmin/devices/views/list.component.html b/src/app/domains/superAdmin/modules/devices/views/list.component.html similarity index 100% rename from src/app/domains/superAdmin/devices/views/list.component.html rename to src/app/domains/superAdmin/modules/devices/views/list.component.html diff --git a/src/app/domains/superAdmin/devices/views/list.component.ts b/src/app/domains/superAdmin/modules/devices/views/list.component.ts similarity index 100% rename from src/app/domains/superAdmin/devices/views/list.component.ts rename to src/app/domains/superAdmin/modules/devices/views/list.component.ts diff --git a/src/app/domains/superAdmin/guilds/components/categories/form.component.html b/src/app/domains/superAdmin/modules/guilds/components/categories/form.component.html similarity index 100% rename from src/app/domains/superAdmin/guilds/components/categories/form.component.html rename to src/app/domains/superAdmin/modules/guilds/components/categories/form.component.html diff --git a/src/app/domains/superAdmin/guilds/components/categories/form.component.ts b/src/app/domains/superAdmin/modules/guilds/components/categories/form.component.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/components/categories/form.component.ts rename to src/app/domains/superAdmin/modules/guilds/components/categories/form.component.ts diff --git a/src/app/domains/superAdmin/guilds/components/categories/list.component.html b/src/app/domains/superAdmin/modules/guilds/components/categories/list.component.html similarity index 100% rename from src/app/domains/superAdmin/guilds/components/categories/list.component.html rename to src/app/domains/superAdmin/modules/guilds/components/categories/list.component.html diff --git a/src/app/domains/superAdmin/guilds/components/categories/list.component.ts b/src/app/domains/superAdmin/modules/guilds/components/categories/list.component.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/components/categories/list.component.ts rename to src/app/domains/superAdmin/modules/guilds/components/categories/list.component.ts diff --git a/src/app/domains/superAdmin/guilds/components/categories/select.component.html b/src/app/domains/superAdmin/modules/guilds/components/categories/select.component.html similarity index 100% rename from src/app/domains/superAdmin/guilds/components/categories/select.component.html rename to src/app/domains/superAdmin/modules/guilds/components/categories/select.component.html diff --git a/src/app/domains/superAdmin/guilds/components/categories/select.component.ts b/src/app/domains/superAdmin/modules/guilds/components/categories/select.component.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/components/categories/select.component.ts rename to src/app/domains/superAdmin/modules/guilds/components/categories/select.component.ts diff --git a/src/app/domains/superAdmin/guilds/components/form.component.html b/src/app/domains/superAdmin/modules/guilds/components/form.component.html similarity index 100% rename from src/app/domains/superAdmin/guilds/components/form.component.html rename to src/app/domains/superAdmin/modules/guilds/components/form.component.html diff --git a/src/app/domains/superAdmin/guilds/components/form.component.ts b/src/app/domains/superAdmin/modules/guilds/components/form.component.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/components/form.component.ts rename to src/app/domains/superAdmin/modules/guilds/components/form.component.ts diff --git a/src/app/domains/superAdmin/guilds/components/goods/form.component.html b/src/app/domains/superAdmin/modules/guilds/components/goods/form.component.html similarity index 87% rename from src/app/domains/superAdmin/guilds/components/goods/form.component.html rename to src/app/domains/superAdmin/modules/guilds/components/goods/form.component.html index 89eae19..79f3957 100644 --- a/src/app/domains/superAdmin/guilds/components/goods/form.component.html +++ b/src/app/domains/superAdmin/modules/guilds/components/goods/form.component.html @@ -1,4 +1,4 @@ - +
diff --git a/src/app/domains/superAdmin/guilds/components/goods/form.component.ts b/src/app/domains/superAdmin/modules/guilds/components/goods/form.component.ts similarity index 89% rename from src/app/domains/superAdmin/guilds/components/goods/form.component.ts rename to src/app/domains/superAdmin/modules/guilds/components/goods/form.component.ts index 913d0b2..260dcf5 100644 --- a/src/app/domains/superAdmin/guilds/components/goods/form.component.ts +++ b/src/app/domains/superAdmin/modules/guilds/components/goods/form.component.ts @@ -22,11 +22,11 @@ import { GuildCategoriesSelectComponent } from '../categories/select.component'; GuildCategoriesSelectComponent, ], }) -export class GuildGoodCategoryFormComponent extends AbstractFormDialog< +export class GuildGoodFormComponent extends AbstractFormDialog< IGuildGoodRequest, IGuildGoodsResponse > { - @Input() guildId!: string; + @Input({ required: true }) guildId!: string; @Input() categoryId?: string; private service = inject(GuildGoodsService); @@ -40,6 +40,10 @@ export class GuildGoodCategoryFormComponent extends AbstractFormDialog< description: [this.initialValues?.description || ''], }); + get preparedTitle() { + return `${this.editMode ? 'ویرایش' : 'ایجاد'} کالا`; + } + override submitForm(payload: IGuildGoodRequest) { if (this.editMode) { return this.service.update(this.guildId, this.categoryId!, payload); diff --git a/src/app/domains/superAdmin/guilds/components/goods/list.component.html b/src/app/domains/superAdmin/modules/guilds/components/goods/list.component.html similarity index 96% rename from src/app/domains/superAdmin/guilds/components/goods/list.component.html rename to src/app/domains/superAdmin/modules/guilds/components/goods/list.component.html index 0012777..beb11ae 100644 --- a/src/app/domains/superAdmin/guilds/components/goods/list.component.html +++ b/src/app/domains/superAdmin/modules/guilds/components/goods/list.component.html @@ -7,7 +7,6 @@ emptyPlaceholderDescription="برای افزودن کالای جدید، روی دکمهٔ بالا کلیک کنید." [items]="items()" [loading]="loading()" - [showDetails]="true" [showAdd]="true" [showEdit]="true" [fullHeight]="fullHeight" diff --git a/src/app/domains/superAdmin/guilds/components/goods/list.component.ts b/src/app/domains/superAdmin/modules/guilds/components/goods/list.component.ts similarity index 87% rename from src/app/domains/superAdmin/guilds/components/goods/list.component.ts rename to src/app/domains/superAdmin/modules/guilds/components/goods/list.component.ts index 6ec125a..ba71422 100644 --- a/src/app/domains/superAdmin/guilds/components/goods/list.component.ts +++ b/src/app/domains/superAdmin/modules/guilds/components/goods/list.component.ts @@ -7,12 +7,12 @@ import { import { Component, inject, Input } from '@angular/core'; import { IGuildGoodsResponse } from '../../models'; import { GuildGoodsService } from '../../services/goods.service'; -import { GuildGoodCategoryFormComponent } from './form.component'; +import { GuildGoodFormComponent } from './form.component'; @Component({ selector: 'admin-guild-goods-list', templateUrl: './list.component.html', - imports: [PageDataListComponent, GuildGoodCategoryFormComponent], + imports: [PageDataListComponent, GuildGoodFormComponent], }) export class GuildGoodsListComponent extends AbstractList { @Input() guildId!: string; @@ -21,7 +21,7 @@ export class GuildGoodsListComponent extends AbstractList { { field: 'id', header: 'شناسه' }, { field: 'name', header: 'عنوان' }, { field: 'sku', header: 'شناسه‌ی عمومی' }, - { field: 'category', header: 'دسته‌بندی', type: 'nested', nestedPath: 'name' }, + { field: 'category', header: 'دسته‌بندی', type: 'nested', nestedPath: 'category.name' }, { field: 'created_at', header: 'تاریخ ایجاد', diff --git a/src/app/domains/superAdmin/users/components/layout.component.html b/src/app/domains/superAdmin/modules/guilds/components/layout.component.html similarity index 100% rename from src/app/domains/superAdmin/users/components/layout.component.html rename to src/app/domains/superAdmin/modules/guilds/components/layout.component.html diff --git a/src/app/domains/superAdmin/guilds/components/layout.component.ts b/src/app/domains/superAdmin/modules/guilds/components/layout.component.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/components/layout.component.ts rename to src/app/domains/superAdmin/modules/guilds/components/layout.component.ts diff --git a/src/app/domains/superAdmin/guilds/constants/apiRoutes/goodCategories.ts b/src/app/domains/superAdmin/modules/guilds/constants/apiRoutes/goodCategories.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/constants/apiRoutes/goodCategories.ts rename to src/app/domains/superAdmin/modules/guilds/constants/apiRoutes/goodCategories.ts diff --git a/src/app/domains/superAdmin/guilds/constants/apiRoutes/goods.ts b/src/app/domains/superAdmin/modules/guilds/constants/apiRoutes/goods.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/constants/apiRoutes/goods.ts rename to src/app/domains/superAdmin/modules/guilds/constants/apiRoutes/goods.ts diff --git a/src/app/domains/superAdmin/guilds/constants/apiRoutes/index.ts b/src/app/domains/superAdmin/modules/guilds/constants/apiRoutes/index.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/constants/apiRoutes/index.ts rename to src/app/domains/superAdmin/modules/guilds/constants/apiRoutes/index.ts diff --git a/src/app/domains/superAdmin/licenses/constants/index.ts b/src/app/domains/superAdmin/modules/guilds/constants/index.ts similarity index 100% rename from src/app/domains/superAdmin/licenses/constants/index.ts rename to src/app/domains/superAdmin/modules/guilds/constants/index.ts diff --git a/src/app/domains/superAdmin/guilds/constants/routes/goodCategories.ts b/src/app/domains/superAdmin/modules/guilds/constants/routes/goodCategories.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/constants/routes/goodCategories.ts rename to src/app/domains/superAdmin/modules/guilds/constants/routes/goodCategories.ts diff --git a/src/app/domains/superAdmin/guilds/constants/routes/goods.ts b/src/app/domains/superAdmin/modules/guilds/constants/routes/goods.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/constants/routes/goods.ts rename to src/app/domains/superAdmin/modules/guilds/constants/routes/goods.ts diff --git a/src/app/domains/superAdmin/guilds/constants/routes/index.ts b/src/app/domains/superAdmin/modules/guilds/constants/routes/index.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/constants/routes/index.ts rename to src/app/domains/superAdmin/modules/guilds/constants/routes/index.ts diff --git a/src/app/domains/superAdmin/guilds/models/goods_io.d.ts b/src/app/domains/superAdmin/modules/guilds/models/goods_io.d.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/models/goods_io.d.ts rename to src/app/domains/superAdmin/modules/guilds/models/goods_io.d.ts diff --git a/src/app/domains/superAdmin/guilds/models/index.ts b/src/app/domains/superAdmin/modules/guilds/models/index.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/models/index.ts rename to src/app/domains/superAdmin/modules/guilds/models/index.ts diff --git a/src/app/domains/superAdmin/guilds/models/io.d.ts b/src/app/domains/superAdmin/modules/guilds/models/io.d.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/models/io.d.ts rename to src/app/domains/superAdmin/modules/guilds/models/io.d.ts diff --git a/src/app/domains/superAdmin/guilds/services/goodCategories.service.ts b/src/app/domains/superAdmin/modules/guilds/services/goodCategories.service.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/services/goodCategories.service.ts rename to src/app/domains/superAdmin/modules/guilds/services/goodCategories.service.ts diff --git a/src/app/domains/superAdmin/guilds/services/goods.service.ts b/src/app/domains/superAdmin/modules/guilds/services/goods.service.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/services/goods.service.ts rename to src/app/domains/superAdmin/modules/guilds/services/goods.service.ts diff --git a/src/app/domains/superAdmin/guilds/services/main.service.ts b/src/app/domains/superAdmin/modules/guilds/services/main.service.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/services/main.service.ts rename to src/app/domains/superAdmin/modules/guilds/services/main.service.ts diff --git a/src/app/domains/superAdmin/guilds/store/guild.store.ts b/src/app/domains/superAdmin/modules/guilds/store/guild.store.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/store/guild.store.ts rename to src/app/domains/superAdmin/modules/guilds/store/guild.store.ts diff --git a/src/app/domains/superAdmin/guilds/views/categories/list.component.html b/src/app/domains/superAdmin/modules/guilds/views/categories/list.component.html similarity index 100% rename from src/app/domains/superAdmin/guilds/views/categories/list.component.html rename to src/app/domains/superAdmin/modules/guilds/views/categories/list.component.html diff --git a/src/app/domains/superAdmin/guilds/views/categories/list.component.ts b/src/app/domains/superAdmin/modules/guilds/views/categories/list.component.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/views/categories/list.component.ts rename to src/app/domains/superAdmin/modules/guilds/views/categories/list.component.ts diff --git a/src/app/domains/superAdmin/guilds/views/goods/list.component.html b/src/app/domains/superAdmin/modules/guilds/views/goods/list.component.html similarity index 100% rename from src/app/domains/superAdmin/guilds/views/goods/list.component.html rename to src/app/domains/superAdmin/modules/guilds/views/goods/list.component.html diff --git a/src/app/domains/superAdmin/guilds/views/goods/list.component.ts b/src/app/domains/superAdmin/modules/guilds/views/goods/list.component.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/views/goods/list.component.ts rename to src/app/domains/superAdmin/modules/guilds/views/goods/list.component.ts diff --git a/src/app/domains/superAdmin/licenses/views/index.ts b/src/app/domains/superAdmin/modules/guilds/views/index.ts similarity index 100% rename from src/app/domains/superAdmin/licenses/views/index.ts rename to src/app/domains/superAdmin/modules/guilds/views/index.ts diff --git a/src/app/domains/superAdmin/guilds/views/list.component.html b/src/app/domains/superAdmin/modules/guilds/views/list.component.html similarity index 100% rename from src/app/domains/superAdmin/guilds/views/list.component.html rename to src/app/domains/superAdmin/modules/guilds/views/list.component.html diff --git a/src/app/domains/superAdmin/guilds/views/list.component.ts b/src/app/domains/superAdmin/modules/guilds/views/list.component.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/views/list.component.ts rename to src/app/domains/superAdmin/modules/guilds/views/list.component.ts diff --git a/src/app/domains/superAdmin/guilds/views/single.component.html b/src/app/domains/superAdmin/modules/guilds/views/single.component.html similarity index 100% rename from src/app/domains/superAdmin/guilds/views/single.component.html rename to src/app/domains/superAdmin/modules/guilds/views/single.component.html diff --git a/src/app/domains/superAdmin/guilds/views/single.component.ts b/src/app/domains/superAdmin/modules/guilds/views/single.component.ts similarity index 100% rename from src/app/domains/superAdmin/guilds/views/single.component.ts rename to src/app/domains/superAdmin/modules/guilds/views/single.component.ts diff --git a/src/app/domains/superAdmin/licenses/components/form.component.html b/src/app/domains/superAdmin/modules/licenses/components/form.component.html similarity index 100% rename from src/app/domains/superAdmin/licenses/components/form.component.html rename to src/app/domains/superAdmin/modules/licenses/components/form.component.html diff --git a/src/app/domains/superAdmin/licenses/components/form.component.ts b/src/app/domains/superAdmin/modules/licenses/components/form.component.ts similarity index 100% rename from src/app/domains/superAdmin/licenses/components/form.component.ts rename to src/app/domains/superAdmin/modules/licenses/components/form.component.ts diff --git a/src/app/domains/superAdmin/licenses/constants/apiRoutes/index.ts b/src/app/domains/superAdmin/modules/licenses/constants/apiRoutes/index.ts similarity index 100% rename from src/app/domains/superAdmin/licenses/constants/apiRoutes/index.ts rename to src/app/domains/superAdmin/modules/licenses/constants/apiRoutes/index.ts diff --git a/src/app/domains/superAdmin/partners/constants/index.ts b/src/app/domains/superAdmin/modules/licenses/constants/index.ts similarity index 100% rename from src/app/domains/superAdmin/partners/constants/index.ts rename to src/app/domains/superAdmin/modules/licenses/constants/index.ts diff --git a/src/app/domains/superAdmin/licenses/constants/routes/index.ts b/src/app/domains/superAdmin/modules/licenses/constants/routes/index.ts similarity index 100% rename from src/app/domains/superAdmin/licenses/constants/routes/index.ts rename to src/app/domains/superAdmin/modules/licenses/constants/routes/index.ts diff --git a/src/app/domains/superAdmin/licenses/models/index.ts b/src/app/domains/superAdmin/modules/licenses/models/index.ts similarity index 100% rename from src/app/domains/superAdmin/licenses/models/index.ts rename to src/app/domains/superAdmin/modules/licenses/models/index.ts diff --git a/src/app/domains/superAdmin/licenses/models/io.d.ts b/src/app/domains/superAdmin/modules/licenses/models/io.d.ts similarity index 100% rename from src/app/domains/superAdmin/licenses/models/io.d.ts rename to src/app/domains/superAdmin/modules/licenses/models/io.d.ts diff --git a/src/app/domains/superAdmin/licenses/services/main.service.ts b/src/app/domains/superAdmin/modules/licenses/services/main.service.ts similarity index 100% rename from src/app/domains/superAdmin/licenses/services/main.service.ts rename to src/app/domains/superAdmin/modules/licenses/services/main.service.ts diff --git a/src/app/domains/superAdmin/partners/views/index.ts b/src/app/domains/superAdmin/modules/licenses/views/index.ts similarity index 100% rename from src/app/domains/superAdmin/partners/views/index.ts rename to src/app/domains/superAdmin/modules/licenses/views/index.ts diff --git a/src/app/domains/superAdmin/licenses/views/list.component.html b/src/app/domains/superAdmin/modules/licenses/views/list.component.html similarity index 100% rename from src/app/domains/superAdmin/licenses/views/list.component.html rename to src/app/domains/superAdmin/modules/licenses/views/list.component.html diff --git a/src/app/domains/superAdmin/licenses/views/list.component.ts b/src/app/domains/superAdmin/modules/licenses/views/list.component.ts similarity index 100% rename from src/app/domains/superAdmin/licenses/views/list.component.ts rename to src/app/domains/superAdmin/modules/licenses/views/list.component.ts diff --git a/src/app/domains/superAdmin/licenses/views/single.component.html b/src/app/domains/superAdmin/modules/licenses/views/single.component.html similarity index 100% rename from src/app/domains/superAdmin/licenses/views/single.component.html rename to src/app/domains/superAdmin/modules/licenses/views/single.component.html diff --git a/src/app/domains/superAdmin/licenses/views/single.component.ts b/src/app/domains/superAdmin/modules/licenses/views/single.component.ts similarity index 100% rename from src/app/domains/superAdmin/licenses/views/single.component.ts rename to src/app/domains/superAdmin/modules/licenses/views/single.component.ts diff --git a/src/app/domains/superAdmin/modules/partners/components/accounts/form.component.html b/src/app/domains/superAdmin/modules/partners/components/accounts/form.component.html new file mode 100644 index 0000000..babb102 --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/components/accounts/form.component.html @@ -0,0 +1,42 @@ + + + + + + + + رمز باید حداقل ۸ کاراکتر بوده و شامل حداقل یک حرف بزرگ، یک حرف کوچک، یک عدد و یک کاراکتر ویژه باشد. + + + + + + + + + diff --git a/src/app/domains/superAdmin/modules/partners/components/accounts/form.component.ts b/src/app/domains/superAdmin/modules/partners/components/accounts/form.component.ts new file mode 100644 index 0000000..47f1ab5 --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/components/accounts/form.component.ts @@ -0,0 +1,66 @@ +import { MustMatch, password } from '@/core/validators'; +// import { CatalogRolesComponent } from '@/shared/catalog/roles'; +import { AbstractFormDialog } from '@/shared/abstractClasses'; +import { EnumSelectComponent } from '@/shared/apiEnum/select.component'; +import { InputComponent } from '@/shared/components'; +import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; +import { UikitFieldComponent } from '@/uikit'; +import { Component, inject, Input } from '@angular/core'; +import { ReactiveFormsModule, Validators } from '@angular/forms'; +import { Dialog } from 'primeng/dialog'; +import { Password } from 'primeng/password'; +import { IPartnerAccountRequest, IPartnerAccountResponse } from '../../models'; +import { AdminPartnerAccountsService } from '../../services/accounts.service'; + +@Component({ + selector: 'superAdmin-partner-account-form', + templateUrl: './form.component.html', + imports: [ + ReactiveFormsModule, + Dialog, + InputComponent, + FormFooterActionsComponent, + UikitFieldComponent, + Password, + EnumSelectComponent, + ], +}) +export class PartnerAccountFormComponent extends AbstractFormDialog< + IPartnerAccountRequest, + IPartnerAccountResponse +> { + private readonly service = inject(AdminPartnerAccountsService); + + @Input({ required: true }) partnerId!: string; + @Input() accountId!: string; + + initForm = () => { + return this.fb.group( + { + username: [this.initialValues?.username || '', [Validators.required]], + type: ['', [Validators.required]], + password: ['', [Validators.required, password()]], + confirmPassword: ['', [Validators.required]], + }, + { + validators: [MustMatch('password', 'confirmPassword')], + }, + ); + }; + + form = this.initForm(); + + override ngOnChanges(): void { + this.form = this.initForm(); + } + + submitForm() { + const formValue = this.form.value as IPartnerAccountRequest; + // @ts-ignore + const { confirmPassword, ...rest } = formValue; + if (this.editMode) { + return this.service.update(this.partnerId, this.accountId, rest); + } + return this.service.create(this.partnerId, rest); + } +} diff --git a/src/app/domains/superAdmin/modules/partners/components/accounts/list.component.html b/src/app/domains/superAdmin/modules/partners/components/accounts/list.component.html new file mode 100644 index 0000000..acc8b77 --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/components/accounts/list.component.html @@ -0,0 +1,22 @@ + + + diff --git a/src/app/domains/superAdmin/modules/partners/components/accounts/list.component.ts b/src/app/domains/superAdmin/modules/partners/components/accounts/list.component.ts new file mode 100644 index 0000000..cd0d396 --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/components/accounts/list.component.ts @@ -0,0 +1,50 @@ +// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; +import { AbstractList } from '@/shared/abstractClasses/abstract-list'; +import { + IColumn, + PageDataListComponent, +} from '@/shared/components/pageDataList/page-data-list.component'; +import { Component, inject, Input } from '@angular/core'; +import { IPartnerAccountResponse } from '../../models'; +import { AdminPartnerAccountsService } from '../../services/accounts.service'; +import { PartnerAccountFormComponent } from './form.component'; + +@Component({ + selector: 'superAdmin-partner-account-list', + templateUrl: './list.component.html', + imports: [PageDataListComponent, PartnerAccountFormComponent], +}) +export class ConsumerAccountListComponent extends AbstractList { + @Input({ required: true }) partnerId!: string; + @Input() fullHeight?: boolean; + @Input() header: IColumn[] = [ + { field: 'id', header: 'شناسه' }, + { + field: 'username', + header: 'نام کاربری', + type: 'nested', + nestedPath: 'account.username', + }, + { field: 'role', header: 'نوع حساب' }, + { + field: 'status', + header: 'وضعیت', + type: 'nested', + nestedPath: 'account.status', + }, + { + field: 'created_at', + header: 'تاریخ ایجاد', + type: 'date', + }, + ]; + private readonly service = inject(AdminPartnerAccountsService); + + override setColumns(): void { + this.columns = this.header; + } + + override getDataRequest() { + return this.service.getAll(this.partnerId); + } +} diff --git a/src/app/domains/superAdmin/modules/partners/components/form.component.html b/src/app/domains/superAdmin/modules/partners/components/form.component.html new file mode 100644 index 0000000..b0b353b --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/components/form.component.html @@ -0,0 +1,55 @@ + +
+ + + + @if (!editMode) { + اطلاعات ورود + + + + + + رمز باید حداقل ۸ کاراکتر بوده و شامل حداقل یک حرف بزرگ، یک حرف کوچک، یک عدد و یک کاراکتر ویژه باشد. + + + + + + + } + + + +
diff --git a/src/app/domains/superAdmin/modules/partners/components/form.component.ts b/src/app/domains/superAdmin/modules/partners/components/form.component.ts new file mode 100644 index 0000000..1f2929e --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/components/form.component.ts @@ -0,0 +1,97 @@ +import { MustMatch } from '@/core/validators'; +import { AbstractFormDialog } from '@/shared/abstractClasses'; +import { InputComponent } from '@/shared/components'; +import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; +import { UikitFieldComponent } from '@/uikit'; +import { Component, computed, inject, Input } from '@angular/core'; +import { ReactiveFormsModule, Validators } from '@angular/forms'; +import { Dialog } from 'primeng/dialog'; +import { Divider } from 'primeng/divider'; +import { Password } from 'primeng/password'; +import { IPartnerRequest, IPartnerResponse } from '../models'; +import { PartnersService } from '../services/main.service'; + +@Component({ + selector: 'partner-form', + templateUrl: './form.component.html', + imports: [ + ReactiveFormsModule, + Dialog, + InputComponent, + FormFooterActionsComponent, + Divider, + UikitFieldComponent, + Password, + ], +}) +export class GuildFormComponent extends AbstractFormDialog { + @Input() partnerId?: string; + private service = inject(PartnersService); + + private initForm() { + const form = this.fb.group({ + name: [this.initialValues?.name, [Validators.required]], + code: [this.initialValues?.code, [Validators.required]], + license_quota: [this.initialValues?.license_quota || 0, [Validators.required]], + username: [''], + password: [''], + confirmPassword: [''], + }); + + if (!this.editMode) { + form.addControl( + 'username', + this.fb.control('', { + nonNullable: true, + validators: [Validators.required], + }), + ); + form.addControl( + 'password', + this.fb.control('', { + nonNullable: true, + validators: [Validators.required], + }), + ); + form.addControl( + 'confirmPassword', + this.fb.control('', { + nonNullable: true, + validators: [Validators.required], + }), + ); + form.addValidators([MustMatch('password', 'confirmPassword')]); + } else { + // @ts-ignore + form.removeControl('username'); + // @ts-ignore + form.removeControl('password'); + // @ts-ignore + form.removeControl('confirmPassword'); + form.removeValidators([MustMatch('password', 'confirmPassword')]); + } + + return form; + } + + form = this.initForm(); + + preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} شریک تجاری`); + + override ngOnChanges() { + this.form.patchValue(this.initialValues ?? {}); + if (this.editMode && !this.partnerId) { + throw 'missing some arguments'; + } + this.initForm(); + } + + override submitForm(payload: IPartnerRequest) { + if (this.editMode) { + return this.service.update(this.partnerId!, payload); + } + // @ts-ignore + const { confirmPassword, ...rest } = payload; + return this.service.create(rest); + } +} diff --git a/src/app/domains/superAdmin/users/components/poses/layout.component.html b/src/app/domains/superAdmin/modules/partners/components/layout.component.html similarity index 100% rename from src/app/domains/superAdmin/users/components/poses/layout.component.html rename to src/app/domains/superAdmin/modules/partners/components/layout.component.html diff --git a/src/app/domains/superAdmin/partners/views/single.component.ts b/src/app/domains/superAdmin/modules/partners/components/layout.component.ts similarity index 56% rename from src/app/domains/superAdmin/partners/views/single.component.ts rename to src/app/domains/superAdmin/modules/partners/components/layout.component.ts index 70f0a5c..433f637 100644 --- a/src/app/domains/superAdmin/partners/views/single.component.ts +++ b/src/app/domains/superAdmin/modules/partners/components/layout.component.ts @@ -1,20 +1,18 @@ -import { AppCardComponent, KeyValueComponent } from '@/shared/components'; +import { PageLoadingComponent } from '@/shared/components/page-loading.component'; import { Component, computed, inject, signal } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { GuildFormComponent } from '../components/form.component'; +import { ActivatedRoute, RouterOutlet } from '@angular/router'; import { PartnerStore } from '../store/partner.store'; @Component({ - selector: 'app-user', - templateUrl: './single.component.html', - imports: [AppCardComponent, KeyValueComponent, GuildFormComponent], + selector: 'superAdmin-guild-layout', + templateUrl: './layout.component.html', + imports: [PageLoadingComponent, RouterOutlet], }) -export class PartnerComponent { +export class GuildLayoutComponent { private readonly store = inject(PartnerStore); private readonly route = inject(ActivatedRoute); readonly partnerId = signal(this.route.snapshot.paramMap.get('partnerId')!); - editMode = signal(false); readonly loading = computed(() => this.store.loading()); readonly partner = computed(() => this.store.entity()); @@ -22,4 +20,8 @@ export class PartnerComponent { getData() { this.store.getData(this.partnerId()); } + + ngOnInit() { + this.getData(); + } } diff --git a/src/app/domains/superAdmin/modules/partners/constants/apiRoutes/accounts.ts b/src/app/domains/superAdmin/modules/partners/constants/apiRoutes/accounts.ts new file mode 100644 index 0000000..01357fd --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/constants/apiRoutes/accounts.ts @@ -0,0 +1,6 @@ +const baseUrl = (partnerId: string) => `/api/v1/admin/partners/${partnerId}/accounts`; + +export const PARTNER_ACCOUNTS_API_ROUTES = { + list: (partnerId: string) => `${baseUrl(partnerId)}`, + single: (partnerId: string, accountId: string) => `${baseUrl(partnerId)}/${accountId}`, +}; diff --git a/src/app/domains/superAdmin/partners/constants/apiRoutes/index.ts b/src/app/domains/superAdmin/modules/partners/constants/apiRoutes/index.ts similarity index 84% rename from src/app/domains/superAdmin/partners/constants/apiRoutes/index.ts rename to src/app/domains/superAdmin/modules/partners/constants/apiRoutes/index.ts index ef2a53c..8deaa22 100644 --- a/src/app/domains/superAdmin/partners/constants/apiRoutes/index.ts +++ b/src/app/domains/superAdmin/modules/partners/constants/apiRoutes/index.ts @@ -1,3 +1,5 @@ +export * from './accounts'; + const baseUrl = '/api/v1/admin/partners'; export const PARTNERS_API_ROUTES = { diff --git a/src/app/domains/superAdmin/providers/constants/index.ts b/src/app/domains/superAdmin/modules/partners/constants/index.ts similarity index 100% rename from src/app/domains/superAdmin/providers/constants/index.ts rename to src/app/domains/superAdmin/modules/partners/constants/index.ts diff --git a/src/app/domains/superAdmin/partners/constants/routes/index.ts b/src/app/domains/superAdmin/modules/partners/constants/routes/index.ts similarity index 84% rename from src/app/domains/superAdmin/partners/constants/routes/index.ts rename to src/app/domains/superAdmin/modules/partners/constants/routes/index.ts index de3de6d..092654a 100644 --- a/src/app/domains/superAdmin/partners/constants/routes/index.ts +++ b/src/app/domains/superAdmin/modules/partners/constants/routes/index.ts @@ -3,7 +3,7 @@ import { Routes } from '@angular/router'; export type TPartnersRouteNames = 'partners' | 'partner'; -export const partnersNamedRoutes: NamedRoutes = { +export const superAdminPartnersNamedRoutes: NamedRoutes = { partners: { path: 'partners', loadComponent: () => import('../../views/list.component').then((m) => m.PartnersComponent), @@ -22,8 +22,8 @@ export const partnersNamedRoutes: NamedRoutes = { }, }; -export const PARTNERS_ROUTES: Routes = [ - partnersNamedRoutes.partners, +export const SUPER_ADMIN_PARTNERS_ROUTES: Routes = [ + superAdminPartnersNamedRoutes.partners, { path: 'partners/:partnerId', loadComponent: () => diff --git a/src/app/domains/superAdmin/modules/partners/models/accounts_io.d.ts b/src/app/domains/superAdmin/modules/partners/models/accounts_io.d.ts new file mode 100644 index 0000000..ecefbf1 --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/models/accounts_io.d.ts @@ -0,0 +1,13 @@ +import { TAccountType } from '@/core/constants/accountTypes.const'; + +export interface IPartnerAccountRawResponse { + username: string; + id: string; +} +export interface IPartnerAccountResponse extends IPartnerAccountRawResponse {} + +export interface IPartnerAccountRequest { + username: string; + password?: string; + type: TAccountType; +} diff --git a/src/app/domains/superAdmin/modules/partners/models/index.ts b/src/app/domains/superAdmin/modules/partners/models/index.ts new file mode 100644 index 0000000..388437e --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/models/index.ts @@ -0,0 +1,2 @@ +export * from './accounts_io'; +export * from './io'; diff --git a/src/app/domains/superAdmin/partners/models/io.d.ts b/src/app/domains/superAdmin/modules/partners/models/io.d.ts similarity index 100% rename from src/app/domains/superAdmin/partners/models/io.d.ts rename to src/app/domains/superAdmin/modules/partners/models/io.d.ts diff --git a/src/app/domains/superAdmin/modules/partners/services/accounts.service.ts b/src/app/domains/superAdmin/modules/partners/services/accounts.service.ts new file mode 100644 index 0000000..15bed9e --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/services/accounts.service.ts @@ -0,0 +1,41 @@ +import { IPaginatedResponse } from '@/core/models/service.model'; +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { PARTNER_ACCOUNTS_API_ROUTES } from '../constants'; +import { + IPartnerAccountRawResponse, + IPartnerAccountRequest, + IPartnerAccountResponse, +} from '../models'; + +@Injectable({ providedIn: 'root' }) +export class AdminPartnerAccountsService { + constructor(private http: HttpClient) {} + + private apiRoutes = PARTNER_ACCOUNTS_API_ROUTES; + + getAll(partnerId: string): Observable> { + return this.http.get>( + this.apiRoutes.list(partnerId), + ); + } + getSingle(partnerId: string, accountId: string): Observable { + return this.http.get(this.apiRoutes.single(partnerId, accountId)); + } + + create(partnerId: string, data: IPartnerAccountRequest): Observable { + return this.http.post(this.apiRoutes.list(partnerId), data); + } + + update( + partnerId: string, + accountId: string, + data: IPartnerAccountRequest, + ): Observable { + return this.http.patch( + this.apiRoutes.single(partnerId, accountId), + data, + ); + } +} diff --git a/src/app/domains/superAdmin/partners/services/main.service.ts b/src/app/domains/superAdmin/modules/partners/services/main.service.ts similarity index 100% rename from src/app/domains/superAdmin/partners/services/main.service.ts rename to src/app/domains/superAdmin/modules/partners/services/main.service.ts diff --git a/src/app/domains/superAdmin/partners/shared/select.component.html b/src/app/domains/superAdmin/modules/partners/shared/select.component.html similarity index 100% rename from src/app/domains/superAdmin/partners/shared/select.component.html rename to src/app/domains/superAdmin/modules/partners/shared/select.component.html diff --git a/src/app/domains/superAdmin/partners/shared/select.component.ts b/src/app/domains/superAdmin/modules/partners/shared/select.component.ts similarity index 100% rename from src/app/domains/superAdmin/partners/shared/select.component.ts rename to src/app/domains/superAdmin/modules/partners/shared/select.component.ts diff --git a/src/app/domains/superAdmin/partners/store/partner.store.ts b/src/app/domains/superAdmin/modules/partners/store/partner.store.ts similarity index 100% rename from src/app/domains/superAdmin/partners/store/partner.store.ts rename to src/app/domains/superAdmin/modules/partners/store/partner.store.ts diff --git a/src/app/domains/superAdmin/modules/partners/views/accounts/index.ts b/src/app/domains/superAdmin/modules/partners/views/accounts/index.ts new file mode 100644 index 0000000..576a89e --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/views/accounts/index.ts @@ -0,0 +1 @@ +export * from './list.component'; diff --git a/src/app/domains/superAdmin/modules/partners/views/accounts/list.component.html b/src/app/domains/superAdmin/modules/partners/views/accounts/list.component.html new file mode 100644 index 0000000..bc7e56b --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/views/accounts/list.component.html @@ -0,0 +1 @@ + diff --git a/src/app/domains/superAdmin/modules/partners/views/accounts/list.component.ts b/src/app/domains/superAdmin/modules/partners/views/accounts/list.component.ts new file mode 100644 index 0000000..df20770 --- /dev/null +++ b/src/app/domains/superAdmin/modules/partners/views/accounts/list.component.ts @@ -0,0 +1,41 @@ +// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; +import { BreadcrumbService } from '@/core/services'; +import { Component, inject, signal } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { superAdminConsumerAccountsNamedRoutes } from '../../../consumers/constants/routes/accounts'; +import { ConsumerAccountListComponent } from '../../components/accounts/list.component'; +import { superAdminPartnersNamedRoutes } from '../../constants'; +import { PartnerStore } from '../../store/partner.store'; + +@Component({ + selector: 'superAdmin-partner-accounts', + templateUrl: './list.component.html', + imports: [ConsumerAccountListComponent], +}) +export class ConsumerAccountsComponent { + private readonly route = inject(ActivatedRoute); + private readonly breadcrumbService = inject(BreadcrumbService); + private readonly store = inject(PartnerStore); + + partnerId = signal(this.route.snapshot.params['partnerId']); + + ngOnInit() { + this.setBreadcrumb(); + } + + setBreadcrumb() { + this.breadcrumbService.setItems([ + { + ...superAdminPartnersNamedRoutes.partners.meta, + routerLink: superAdminPartnersNamedRoutes.partners.meta.pagePath!(), + }, + { + title: this.store.entity()?.name, + routerLink: superAdminPartnersNamedRoutes.partner.meta.pagePath!(this.partnerId()), + }, + { + title: superAdminConsumerAccountsNamedRoutes.accounts.meta.title, + }, + ]); + } +} diff --git a/src/app/domains/superAdmin/users/views/index.ts b/src/app/domains/superAdmin/modules/partners/views/index.ts similarity index 100% rename from src/app/domains/superAdmin/users/views/index.ts rename to src/app/domains/superAdmin/modules/partners/views/index.ts diff --git a/src/app/domains/superAdmin/partners/views/list.component.html b/src/app/domains/superAdmin/modules/partners/views/list.component.html similarity index 100% rename from src/app/domains/superAdmin/partners/views/list.component.html rename to src/app/domains/superAdmin/modules/partners/views/list.component.html diff --git a/src/app/domains/superAdmin/partners/views/list.component.ts b/src/app/domains/superAdmin/modules/partners/views/list.component.ts similarity index 89% rename from src/app/domains/superAdmin/partners/views/list.component.ts rename to src/app/domains/superAdmin/modules/partners/views/list.component.ts index 2012b34..9fa61aa 100644 --- a/src/app/domains/superAdmin/partners/views/list.component.ts +++ b/src/app/domains/superAdmin/modules/partners/views/list.component.ts @@ -4,7 +4,7 @@ import { PageDataListComponent } from '@/shared/components/pageDataList/page-dat import { Component, inject } from '@angular/core'; import { Router } from '@angular/router'; import { GuildFormComponent } from '../components/form.component'; -import { partnersNamedRoutes } from '../constants'; +import { superAdminPartnersNamedRoutes } from '../constants'; import { IPartnerResponse } from '../models'; import { PartnersService } from '../services/main.service'; @@ -36,6 +36,6 @@ export class PartnersComponent extends AbstractList { } toSinglePage(partner: IPartnerResponse) { - this.router.navigateByUrl(partnersNamedRoutes.partner.meta.pagePath!(partner.id)); + this.router.navigateByUrl(superAdminPartnersNamedRoutes.partner.meta.pagePath!(partner.id)); } } diff --git a/src/app/domains/superAdmin/partners/views/single.component.html b/src/app/domains/superAdmin/modules/partners/views/single.component.html similarity index 93% rename from src/app/domains/superAdmin/partners/views/single.component.html rename to src/app/domains/superAdmin/modules/partners/views/single.component.html index 89b3f4f..c9601ff 100644 --- a/src/app/domains/superAdmin/partners/views/single.component.html +++ b/src/app/domains/superAdmin/modules/partners/views/single.component.html @@ -11,6 +11,8 @@ + + (this.route.snapshot.paramMap.get('partnerId')!); + editMode = signal(false); readonly loading = computed(() => this.store.loading()); readonly partner = computed(() => this.store.entity()); @@ -32,15 +35,11 @@ export class GuildLayoutComponent { this.store.getData(this.partnerId()); } - ngOnInit() { - this.getData(); - } - setBreadcrumb() { this.breadcrumbService.setItems([ { - ...partnersNamedRoutes.partners.meta, - routerLink: partnersNamedRoutes.partners.meta.pagePath!(), + ...superAdminPartnersNamedRoutes.partners.meta, + routerLink: superAdminPartnersNamedRoutes.partners.meta.pagePath!(), }, { title: this.partner()?.name, diff --git a/src/app/domains/superAdmin/modules/providers/components/form.component.html b/src/app/domains/superAdmin/modules/providers/components/form.component.html new file mode 100644 index 0000000..d8891d1 --- /dev/null +++ b/src/app/domains/superAdmin/modules/providers/components/form.component.html @@ -0,0 +1,49 @@ + +
+ + + + @if (!editMode) { + اطلاعات ورود + + + + + + رمز باید حداقل ۸ کاراکتر بوده و شامل حداقل یک حرف بزرگ، یک حرف کوچک، یک عدد و یک کاراکتر ویژه باشد. + + + + + + + } + + + +
diff --git a/src/app/domains/superAdmin/modules/providers/components/form.component.ts b/src/app/domains/superAdmin/modules/providers/components/form.component.ts new file mode 100644 index 0000000..1e72cbe --- /dev/null +++ b/src/app/domains/superAdmin/modules/providers/components/form.component.ts @@ -0,0 +1,96 @@ +import { MustMatch } from '@/core/validators'; +import { AbstractFormDialog } from '@/shared/abstractClasses'; +import { InputComponent } from '@/shared/components'; +import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; +import { UikitFieldComponent } from '@/uikit'; +import { Component, computed, inject, Input } from '@angular/core'; +import { ReactiveFormsModule, Validators } from '@angular/forms'; +import { Dialog } from 'primeng/dialog'; +import { Divider } from 'primeng/divider'; +import { Password } from 'primeng/password'; +import { IProviderRequest, IProviderResponse } from '../models'; +import { ProvidersService } from '../services/main.service'; + +@Component({ + selector: 'provider-form', + templateUrl: './form.component.html', + imports: [ + ReactiveFormsModule, + Dialog, + InputComponent, + FormFooterActionsComponent, + Divider, + UikitFieldComponent, + Password, + ], +}) +export class ProviderFormComponent extends AbstractFormDialog { + @Input() providerId?: string; + private service = inject(ProvidersService); + + private initForm() { + const form = this.fb.group({ + name: [this.initialValues?.name, [Validators.required]], + code: [this.initialValues?.code, [Validators.required]], + username: [''], + password: [''], + confirmPassword: [''], + }); + + if (!this.editMode) { + form.addControl( + 'username', + this.fb.control('', { + nonNullable: true, + validators: [Validators.required], + }), + ); + form.addControl( + 'password', + this.fb.control('', { + nonNullable: true, + validators: [Validators.required], + }), + ); + form.addControl( + 'confirmPassword', + this.fb.control('', { + nonNullable: true, + validators: [Validators.required], + }), + ); + form.addValidators([MustMatch('password', 'confirmPassword')]); + } else { + // @ts-ignore + form.removeControl('username'); + // @ts-ignore + form.removeControl('password'); + // @ts-ignore + form.removeControl('confirmPassword'); + form.removeValidators([MustMatch('password', 'confirmPassword')]); + } + + return form; + } + + form = this.initForm(); + + preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} ارایه‌دهنده`); + + override ngOnChanges() { + this.form.patchValue(this.initialValues ?? {}); + if (this.editMode && !this.providerId) { + throw 'missing some arguments'; + } + this.initForm(); + } + + override submitForm(payload: IProviderRequest) { + if (this.editMode) { + return this.service.update(this.providerId!, payload); + } + // @ts-ignore + const { confirmPassword, ...rest } = payload; + return this.service.create(rest); + } +} diff --git a/src/app/domains/superAdmin/providers/constants/apiRoutes/index.ts b/src/app/domains/superAdmin/modules/providers/constants/apiRoutes/index.ts similarity index 100% rename from src/app/domains/superAdmin/providers/constants/apiRoutes/index.ts rename to src/app/domains/superAdmin/modules/providers/constants/apiRoutes/index.ts diff --git a/src/app/domains/superAdmin/users/constants/index.ts b/src/app/domains/superAdmin/modules/providers/constants/index.ts similarity index 100% rename from src/app/domains/superAdmin/users/constants/index.ts rename to src/app/domains/superAdmin/modules/providers/constants/index.ts diff --git a/src/app/domains/superAdmin/providers/constants/routes/index.ts b/src/app/domains/superAdmin/modules/providers/constants/routes/index.ts similarity index 95% rename from src/app/domains/superAdmin/providers/constants/routes/index.ts rename to src/app/domains/superAdmin/modules/providers/constants/routes/index.ts index 89f86d1..3d9c5d0 100644 --- a/src/app/domains/superAdmin/providers/constants/routes/index.ts +++ b/src/app/domains/superAdmin/modules/providers/constants/routes/index.ts @@ -6,7 +6,7 @@ export type TProvidersRouteNames = 'providers' | 'provider'; export const providersNamedRoutes: NamedRoutes = { providers: { path: 'providers', - loadComponent: () => import('../../views/list.component').then((m) => m.PartnersComponent), + loadComponent: () => import('../../views/list.component').then((m) => m.ProvidersComponent), meta: { title: 'ارایه‌دهندگان', pagePath: () => '/super_admin/providers', diff --git a/src/app/domains/superAdmin/partners/models/index.ts b/src/app/domains/superAdmin/modules/providers/models/index.ts similarity index 100% rename from src/app/domains/superAdmin/partners/models/index.ts rename to src/app/domains/superAdmin/modules/providers/models/index.ts diff --git a/src/app/domains/superAdmin/providers/models/io.d.ts b/src/app/domains/superAdmin/modules/providers/models/io.d.ts similarity index 74% rename from src/app/domains/superAdmin/providers/models/io.d.ts rename to src/app/domains/superAdmin/modules/providers/models/io.d.ts index f848479..b0bc970 100644 --- a/src/app/domains/superAdmin/providers/models/io.d.ts +++ b/src/app/domains/superAdmin/modules/providers/models/io.d.ts @@ -1,9 +1,13 @@ export interface IProviderRawResponse { id: string; name: string; + code: string; + status: string; } export interface IProviderResponse extends IProviderRawResponse {} export interface IProviderRequest { name: string; + code: string; + status: string; } diff --git a/src/app/domains/superAdmin/providers/services/main.service.ts b/src/app/domains/superAdmin/modules/providers/services/main.service.ts similarity index 100% rename from src/app/domains/superAdmin/providers/services/main.service.ts rename to src/app/domains/superAdmin/modules/providers/services/main.service.ts diff --git a/src/app/domains/superAdmin/providers/shared/select.component.html b/src/app/domains/superAdmin/modules/providers/shared/select.component.html similarity index 100% rename from src/app/domains/superAdmin/providers/shared/select.component.html rename to src/app/domains/superAdmin/modules/providers/shared/select.component.html diff --git a/src/app/domains/superAdmin/providers/shared/select.component.ts b/src/app/domains/superAdmin/modules/providers/shared/select.component.ts similarity index 91% rename from src/app/domains/superAdmin/providers/shared/select.component.ts rename to src/app/domains/superAdmin/modules/providers/shared/select.component.ts index 9e26b7a..09d422c 100644 --- a/src/app/domains/superAdmin/providers/shared/select.component.ts +++ b/src/app/domains/superAdmin/modules/providers/shared/select.component.ts @@ -5,14 +5,14 @@ import { Component, inject, Input } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { Button } from 'primeng/button'; import { Select } from 'primeng/select'; -import { GuildFormComponent } from '../components/form.component'; +import { ProviderFormComponent } from '../components/form.component'; import { IProviderResponse } from '../models'; import { ProvidersService } from '../services/main.service'; @Component({ selector: 'app-provider-select', templateUrl: './select.component.html', - imports: [UikitFieldComponent, Select, Button, ReactiveFormsModule, GuildFormComponent], + imports: [UikitFieldComponent, Select, Button, ReactiveFormsModule, ProviderFormComponent], }) export class InventoryBankAccountSelectComponent extends AbstractSelectComponent< IProviderResponse, diff --git a/src/app/domains/superAdmin/providers/views/index.ts b/src/app/domains/superAdmin/modules/providers/views/index.ts similarity index 100% rename from src/app/domains/superAdmin/providers/views/index.ts rename to src/app/domains/superAdmin/modules/providers/views/index.ts diff --git a/src/app/domains/superAdmin/providers/views/list.component.html b/src/app/domains/superAdmin/modules/providers/views/list.component.html similarity index 100% rename from src/app/domains/superAdmin/providers/views/list.component.html rename to src/app/domains/superAdmin/modules/providers/views/list.component.html diff --git a/src/app/domains/superAdmin/providers/views/list.component.ts b/src/app/domains/superAdmin/modules/providers/views/list.component.ts similarity index 77% rename from src/app/domains/superAdmin/providers/views/list.component.ts rename to src/app/domains/superAdmin/modules/providers/views/list.component.ts index 0ba9bb8..e7996a4 100644 --- a/src/app/domains/superAdmin/providers/views/list.component.ts +++ b/src/app/domains/superAdmin/modules/providers/views/list.component.ts @@ -2,16 +2,16 @@ import { AbstractList } from '@/shared/abstractClasses/abstract-list'; import { PageDataListComponent } from '@/shared/components/pageDataList/page-data-list.component'; import { Component, inject } from '@angular/core'; -import { GuildFormComponent } from '../components/form.component'; +import { ProviderFormComponent } from '../components/form.component'; import { IProviderResponse } from '../models'; import { ProvidersService } from '../services/main.service'; @Component({ - selector: 'app-users', + selector: 'superAdmin-providers', templateUrl: './list.component.html', - imports: [PageDataListComponent, GuildFormComponent], + imports: [PageDataListComponent, ProviderFormComponent], }) -export class PartnersComponent extends AbstractList { +export class ProvidersComponent extends AbstractList { private readonly service = inject(ProvidersService); override setColumns(): void { diff --git a/src/app/domains/superAdmin/providers/views/single.component.html b/src/app/domains/superAdmin/modules/providers/views/single.component.html similarity index 100% rename from src/app/domains/superAdmin/providers/views/single.component.html rename to src/app/domains/superAdmin/modules/providers/views/single.component.html diff --git a/src/app/domains/superAdmin/providers/views/single.component.ts b/src/app/domains/superAdmin/modules/providers/views/single.component.ts similarity index 100% rename from src/app/domains/superAdmin/providers/views/single.component.ts rename to src/app/domains/superAdmin/modules/providers/views/single.component.ts diff --git a/src/app/domains/superAdmin/modules/users/components/accounts/form.component.html b/src/app/domains/superAdmin/modules/users/components/accounts/form.component.html new file mode 100644 index 0000000..babb102 --- /dev/null +++ b/src/app/domains/superAdmin/modules/users/components/accounts/form.component.html @@ -0,0 +1,42 @@ + +
+ + + + + + رمز باید حداقل ۸ کاراکتر بوده و شامل حداقل یک حرف بزرگ، یک حرف کوچک، یک عدد و یک کاراکتر ویژه باشد. + + + + + + + + +
diff --git a/src/app/domains/superAdmin/users/components/accounts/form.component.ts b/src/app/domains/superAdmin/modules/users/components/accounts/form.component.ts similarity index 100% rename from src/app/domains/superAdmin/users/components/accounts/form.component.ts rename to src/app/domains/superAdmin/modules/users/components/accounts/form.component.ts diff --git a/src/app/domains/superAdmin/users/components/accounts/list.component.html b/src/app/domains/superAdmin/modules/users/components/accounts/list.component.html similarity index 100% rename from src/app/domains/superAdmin/users/components/accounts/list.component.html rename to src/app/domains/superAdmin/modules/users/components/accounts/list.component.html diff --git a/src/app/domains/superAdmin/users/components/accounts/list.component.ts b/src/app/domains/superAdmin/modules/users/components/accounts/list.component.ts similarity index 96% rename from src/app/domains/superAdmin/users/components/accounts/list.component.ts rename to src/app/domains/superAdmin/modules/users/components/accounts/list.component.ts index d35ae4b..6d1d578 100644 --- a/src/app/domains/superAdmin/users/components/accounts/list.component.ts +++ b/src/app/domains/superAdmin/modules/users/components/accounts/list.component.ts @@ -20,6 +20,7 @@ export class UsersComponent extends AbstractList { @Input() header: IColumn[] = [ { field: 'id', header: 'شناسه' }, { field: 'username', header: 'نام کاربری' }, + { field: 'type', header: 'نوع حساب' }, { field: 'created_at', header: 'تاریخ ایجاد', diff --git a/src/app/domains/superAdmin/users/components/form.component.html b/src/app/domains/superAdmin/modules/users/components/form.component.html similarity index 100% rename from src/app/domains/superAdmin/users/components/form.component.html rename to src/app/domains/superAdmin/modules/users/components/form.component.html diff --git a/src/app/domains/superAdmin/users/components/form.component.ts b/src/app/domains/superAdmin/modules/users/components/form.component.ts similarity index 88% rename from src/app/domains/superAdmin/users/components/form.component.ts rename to src/app/domains/superAdmin/modules/users/components/form.component.ts index 1c7091e..1a2ee26 100644 --- a/src/app/domains/superAdmin/users/components/form.component.ts +++ b/src/app/domains/superAdmin/modules/users/components/form.component.ts @@ -1,29 +1,18 @@ import { mobileValidator } from '@/core/validators'; // import { CatalogRolesComponent } from '@/shared/catalog/roles'; import { AbstractFormDialog } from '@/shared/abstractClasses'; -import { EnumSelectComponent } from '@/shared/apiEnum/select.component'; import { InputComponent } from '@/shared/components'; import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; -import { UikitFieldComponent } from '@/uikit'; import { Component, inject, Input } from '@angular/core'; import { ReactiveFormsModule, Validators } from '@angular/forms'; import { Dialog } from 'primeng/dialog'; -import { Password } from 'primeng/password'; import { IUserRequest, IUserResponse } from '../models'; import { UsersService } from '../services/main.service'; @Component({ selector: 'superAdmin-user-form', templateUrl: './form.component.html', - imports: [ - ReactiveFormsModule, - Dialog, - InputComponent, - FormFooterActionsComponent, - UikitFieldComponent, - Password, - EnumSelectComponent, - ], + imports: [ReactiveFormsModule, Dialog, InputComponent, FormFooterActionsComponent], }) export class UserAccountFormComponent extends AbstractFormDialog { private readonly service = inject(UsersService); diff --git a/src/app/domains/superAdmin/modules/users/components/layout.component.html b/src/app/domains/superAdmin/modules/users/components/layout.component.html new file mode 100644 index 0000000..5416fe1 --- /dev/null +++ b/src/app/domains/superAdmin/modules/users/components/layout.component.html @@ -0,0 +1,5 @@ +@if (loading()) { + +} @else { + +} diff --git a/src/app/domains/superAdmin/users/components/layout.component.ts b/src/app/domains/superAdmin/modules/users/components/layout.component.ts similarity index 100% rename from src/app/domains/superAdmin/users/components/layout.component.ts rename to src/app/domains/superAdmin/modules/users/components/layout.component.ts diff --git a/src/app/domains/superAdmin/users/constants/apiRoutes/accounts.ts b/src/app/domains/superAdmin/modules/users/constants/apiRoutes/accounts.ts similarity index 100% rename from src/app/domains/superAdmin/users/constants/apiRoutes/accounts.ts rename to src/app/domains/superAdmin/modules/users/constants/apiRoutes/accounts.ts diff --git a/src/app/domains/superAdmin/users/constants/apiRoutes/index.ts b/src/app/domains/superAdmin/modules/users/constants/apiRoutes/index.ts similarity index 56% rename from src/app/domains/superAdmin/users/constants/apiRoutes/index.ts rename to src/app/domains/superAdmin/modules/users/constants/apiRoutes/index.ts index 1cf294a..46d5de5 100644 --- a/src/app/domains/superAdmin/users/constants/apiRoutes/index.ts +++ b/src/app/domains/superAdmin/modules/users/constants/apiRoutes/index.ts @@ -1,8 +1,4 @@ export * from './accounts'; -export * from './businessActivities'; -export * from './businessActivityComplexes'; -export * from './complexPoses'; -export * from './posAccounts'; const baseUrl = '/api/v1/admin/users'; diff --git a/src/app/domains/superAdmin/modules/users/constants/index.ts b/src/app/domains/superAdmin/modules/users/constants/index.ts new file mode 100644 index 0000000..ee61bd7 --- /dev/null +++ b/src/app/domains/superAdmin/modules/users/constants/index.ts @@ -0,0 +1,2 @@ +export * from './apiRoutes'; +export * from './routes'; diff --git a/src/app/domains/superAdmin/modules/users/constants/routes/accounts.ts b/src/app/domains/superAdmin/modules/users/constants/routes/accounts.ts new file mode 100644 index 0000000..f806792 --- /dev/null +++ b/src/app/domains/superAdmin/modules/users/constants/routes/accounts.ts @@ -0,0 +1,47 @@ +import { NamedRoutes } from '@/core'; +import { Routes } from '@angular/router'; + +export type TAccountsRouteNames = 'accounts' | 'account'; + +export const superAdminUserAccountsNamedRoutes: NamedRoutes = { + accounts: { + path: 'accounts', + loadComponent: () => + import('../../views/accounts/list.component').then((m) => m.UserAccountsComponent), + // @ts-ignore + meta: { + title: 'فعالیت‌های اقتصادی', + pagePath: (userId: string) => `/super_admin/users/${userId}/accounts`, + }, + }, + account: { + path: 'accounts/:accountId', + // loadComponent: () => + // import('../../views/accounts/single.component').then( + // (m) => m., + // ), + // @ts-ignore + meta: { + title: 'فعالیت اقتصادی', + pagePath: (userId: string, businessId: string) => + `/super_admin/users/${userId}/accounts/${businessId}`, + }, + }, +}; + +export const SUPER_ADMIN_USER_ACCOUNTS_ROUTES: Routes = [ + superAdminUserAccountsNamedRoutes.accounts, + // { + // path: superAdminUserAccountsNamedRoutes.account.path, + // loadComponent: () => + // import('../../components/accounts/layout.component').then( + // (m) => m.SuperAdminUserBusinessActivityLayoutComponent, + // ), + // children: [ + // { + // path: '', + // loadComponent: superAdminUserAccountsNamedRoutes.account.loadComponent, + // }, + // ], + // }, +]; diff --git a/src/app/domains/superAdmin/users/constants/routes/index.ts b/src/app/domains/superAdmin/modules/users/constants/routes/index.ts similarity index 78% rename from src/app/domains/superAdmin/users/constants/routes/index.ts rename to src/app/domains/superAdmin/modules/users/constants/routes/index.ts index 627a636..6617df2 100644 --- a/src/app/domains/superAdmin/users/constants/routes/index.ts +++ b/src/app/domains/superAdmin/modules/users/constants/routes/index.ts @@ -1,6 +1,7 @@ import { NamedRoutes } from '@/core'; import { Routes } from '@angular/router'; -import { SUPER_ADMIN_USER_BUSINESS_ACTIVITIES_ROUTES } from './businessActivities'; +import { SUPER_ADMIN_CONSUMER_BUSINESS_ACTIVITIES_ROUTES } from '../../../consumers/constants/routes/businessActivities'; +import { SUPER_ADMIN_USER_ACCOUNTS_ROUTES } from './accounts'; export type TUsersRouteNames = 'users' | 'user'; @@ -34,7 +35,8 @@ export const USERS_ROUTES: Routes = [ path: '', loadComponent: usersNamedRoutes.user.loadComponent, }, - ...SUPER_ADMIN_USER_BUSINESS_ACTIVITIES_ROUTES, + ...SUPER_ADMIN_USER_ACCOUNTS_ROUTES, + ...SUPER_ADMIN_CONSUMER_BUSINESS_ACTIVITIES_ROUTES, ], }, ]; diff --git a/src/app/domains/superAdmin/users/models/accounts_io.d.ts b/src/app/domains/superAdmin/modules/users/models/accounts_io.d.ts similarity index 100% rename from src/app/domains/superAdmin/users/models/accounts_io.d.ts rename to src/app/domains/superAdmin/modules/users/models/accounts_io.d.ts diff --git a/src/app/domains/superAdmin/modules/users/models/index.ts b/src/app/domains/superAdmin/modules/users/models/index.ts new file mode 100644 index 0000000..388437e --- /dev/null +++ b/src/app/domains/superAdmin/modules/users/models/index.ts @@ -0,0 +1,2 @@ +export * from './accounts_io'; +export * from './io'; diff --git a/src/app/domains/superAdmin/users/models/io.d.ts b/src/app/domains/superAdmin/modules/users/models/io.d.ts similarity index 100% rename from src/app/domains/superAdmin/users/models/io.d.ts rename to src/app/domains/superAdmin/modules/users/models/io.d.ts diff --git a/src/app/domains/superAdmin/users/services/accounts.service.ts b/src/app/domains/superAdmin/modules/users/services/accounts.service.ts similarity index 100% rename from src/app/domains/superAdmin/users/services/accounts.service.ts rename to src/app/domains/superAdmin/modules/users/services/accounts.service.ts diff --git a/src/app/domains/superAdmin/users/services/main.service.ts b/src/app/domains/superAdmin/modules/users/services/main.service.ts similarity index 100% rename from src/app/domains/superAdmin/users/services/main.service.ts rename to src/app/domains/superAdmin/modules/users/services/main.service.ts diff --git a/src/app/domains/superAdmin/users/store/user.store.ts b/src/app/domains/superAdmin/modules/users/store/user.store.ts similarity index 100% rename from src/app/domains/superAdmin/users/store/user.store.ts rename to src/app/domains/superAdmin/modules/users/store/user.store.ts diff --git a/src/app/domains/superAdmin/modules/users/views/accounts/index.ts b/src/app/domains/superAdmin/modules/users/views/accounts/index.ts new file mode 100644 index 0000000..576a89e --- /dev/null +++ b/src/app/domains/superAdmin/modules/users/views/accounts/index.ts @@ -0,0 +1 @@ +export * from './list.component'; diff --git a/src/app/domains/superAdmin/users/views/accounts/list.component.html b/src/app/domains/superAdmin/modules/users/views/accounts/list.component.html similarity index 100% rename from src/app/domains/superAdmin/users/views/accounts/list.component.html rename to src/app/domains/superAdmin/modules/users/views/accounts/list.component.html diff --git a/src/app/domains/superAdmin/users/views/accounts/list.component.ts b/src/app/domains/superAdmin/modules/users/views/accounts/list.component.ts similarity index 100% rename from src/app/domains/superAdmin/users/views/accounts/list.component.ts rename to src/app/domains/superAdmin/modules/users/views/accounts/list.component.ts diff --git a/src/app/domains/superAdmin/modules/users/views/index.ts b/src/app/domains/superAdmin/modules/users/views/index.ts new file mode 100644 index 0000000..95918ec --- /dev/null +++ b/src/app/domains/superAdmin/modules/users/views/index.ts @@ -0,0 +1,3 @@ +export * from './accounts'; +export * from './list.component'; +export * from './single.component'; diff --git a/src/app/domains/superAdmin/users/views/list.component.html b/src/app/domains/superAdmin/modules/users/views/list.component.html similarity index 100% rename from src/app/domains/superAdmin/users/views/list.component.html rename to src/app/domains/superAdmin/modules/users/views/list.component.html diff --git a/src/app/domains/superAdmin/users/views/list.component.ts b/src/app/domains/superAdmin/modules/users/views/list.component.ts similarity index 100% rename from src/app/domains/superAdmin/users/views/list.component.ts rename to src/app/domains/superAdmin/modules/users/views/list.component.ts diff --git a/src/app/domains/superAdmin/users/views/single.component.html b/src/app/domains/superAdmin/modules/users/views/single.component.html similarity index 90% rename from src/app/domains/superAdmin/users/views/single.component.html rename to src/app/domains/superAdmin/modules/users/views/single.component.html index 8bbcf81..44706c9 100644 --- a/src/app/domains/superAdmin/users/views/single.component.html +++ b/src/app/domains/superAdmin/modules/users/views/single.component.html @@ -8,7 +8,6 @@ - + به پنل مدیریت خوش آمدید + diff --git a/src/app/domains/superAdmin/modules/views/index.component.ts b/src/app/domains/superAdmin/modules/views/index.component.ts new file mode 100644 index 0000000..3456d67 --- /dev/null +++ b/src/app/domains/superAdmin/modules/views/index.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'consumer-dashboard', + templateUrl: './index.component.html', +}) +export class DashboardComponent { + constructor() {} +} diff --git a/src/app/domains/superAdmin/partners/components/form.component.html b/src/app/domains/superAdmin/partners/components/form.component.html deleted file mode 100644 index 18e95f1..0000000 --- a/src/app/domains/superAdmin/partners/components/form.component.html +++ /dev/null @@ -1,22 +0,0 @@ - -
- - - - - -
diff --git a/src/app/domains/superAdmin/partners/components/form.component.ts b/src/app/domains/superAdmin/partners/components/form.component.ts deleted file mode 100644 index 16b7660..0000000 --- a/src/app/domains/superAdmin/partners/components/form.component.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { AbstractFormDialog } from '@/shared/abstractClasses'; -import { InputComponent } from '@/shared/components'; -import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; -import { Component, computed, inject, Input } from '@angular/core'; -import { ReactiveFormsModule, Validators } from '@angular/forms'; -import { Dialog } from 'primeng/dialog'; -import { IPartnerRequest, IPartnerResponse } from '../models'; -import { PartnersService } from '../services/main.service'; - -@Component({ - selector: 'partner-form', - templateUrl: './form.component.html', - imports: [ReactiveFormsModule, Dialog, InputComponent, FormFooterActionsComponent], -}) -export class GuildFormComponent extends AbstractFormDialog { - @Input() partnerId?: string; - private service = inject(PartnersService); - - form = this.fb.group({ - name: this.fb.control(this.initialValues?.name || '', { - nonNullable: true, - validators: [Validators.required], - }), - code: this.fb.control(this.initialValues?.code || '', { - nonNullable: true, - validators: [Validators.required], - }), - license_quota: this.fb.control(this.initialValues?.license_quota || 0, { - nonNullable: true, - validators: [Validators.required], - }), - }); - - preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} شریک تجاری`); - - override ngOnChanges() { - this.form.patchValue(this.initialValues ?? {}); - if (this.editMode && !this.partnerId) { - throw 'missing some arguments'; - } - } - - override submitForm(payload: IPartnerRequest) { - if (this.editMode) { - return this.service.update(this.partnerId!, payload); - } - return this.service.create(payload); - } -} diff --git a/src/app/domains/superAdmin/providers/components/form.component.html b/src/app/domains/superAdmin/providers/components/form.component.html deleted file mode 100644 index ad9ed30..0000000 --- a/src/app/domains/superAdmin/providers/components/form.component.html +++ /dev/null @@ -1,13 +0,0 @@ - -
- - - -
diff --git a/src/app/domains/superAdmin/providers/components/form.component.ts b/src/app/domains/superAdmin/providers/components/form.component.ts deleted file mode 100644 index ebe3ddd..0000000 --- a/src/app/domains/superAdmin/providers/components/form.component.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { AbstractFormDialog } from '@/shared/abstractClasses'; -import { InputComponent } from '@/shared/components'; -import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component'; -import { Component, computed, inject, Input } from '@angular/core'; -import { ReactiveFormsModule, Validators } from '@angular/forms'; -import { Dialog } from 'primeng/dialog'; -import { IProviderRequest, IProviderResponse } from '../models'; -import { ProvidersService } from '../services/main.service'; - -@Component({ - selector: 'provider-form', - templateUrl: './form.component.html', - imports: [ReactiveFormsModule, Dialog, InputComponent, FormFooterActionsComponent], -}) -export class GuildFormComponent extends AbstractFormDialog { - @Input() providerId?: string; - private service = inject(ProvidersService); - - form = this.fb.group({ - name: this.fb.control(this.initialValues?.name || '', { - nonNullable: true, - validators: [Validators.required], - }), - }); - - preparedTitle = computed(() => `${this.editMode ? 'ویرایش' : 'ایجاد'} ارایه‌دهنده`); - - override ngOnChanges() { - this.form.patchValue(this.initialValues ?? {}); - if (this.editMode && !this.providerId) { - throw 'missing some arguments'; - } - } - - override submitForm(payload: IProviderRequest) { - if (this.editMode) { - return this.service.update(this.providerId!, payload); - } - return this.service.create(payload); - } -} diff --git a/src/app/domains/superAdmin/providers/models/index.ts b/src/app/domains/superAdmin/providers/models/index.ts deleted file mode 100644 index 61a518a..0000000 --- a/src/app/domains/superAdmin/providers/models/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './io'; diff --git a/src/app/domains/superAdmin/routes.ts b/src/app/domains/superAdmin/routes.ts index 9f202e8..26df706 100644 --- a/src/app/domains/superAdmin/routes.ts +++ b/src/app/domains/superAdmin/routes.ts @@ -1,22 +1,29 @@ import { Route } from '@angular/router'; -import { DEVICE_BRANDS_ROUTES } from './deviceBrands/constants'; -import { DEVICES_ROUTES } from './devices/constants'; -import { GUILDS_ROUTES } from './guilds/constants'; -import { LICENSES_ROUTES } from './licenses/constants'; -import { PARTNERS_ROUTES } from './partners/constants'; -import { PROVIDERS_ROUTES } from './providers/constants'; -import { USERS_ROUTES } from './users/constants'; +import { CONSUMERS_ROUTES } from './modules/consumers/constants'; +import { DEVICE_BRANDS_ROUTES } from './modules/deviceBrands/constants'; +import { DEVICES_ROUTES } from './modules/devices/constants'; +import { GUILDS_ROUTES } from './modules/guilds/constants'; +import { LICENSES_ROUTES } from './modules/licenses/constants'; +import { SUPER_ADMIN_PARTNERS_ROUTES } from './modules/partners/constants'; +import { PROVIDERS_ROUTES } from './modules/providers/constants'; +import { USERS_ROUTES } from './modules/users/constants'; export const SUPER_ADMIN_ROUTES = { path: 'super_admin', - component: undefined, + loadComponent: () => import('./layouts/layout.component').then((m) => m.LayoutComponent), children: [ + { + path: '', + loadComponent: () => + import('./modules/views/index.component').then((m) => m.DashboardComponent), + }, ...USERS_ROUTES, ...GUILDS_ROUTES, - ...PARTNERS_ROUTES, + ...SUPER_ADMIN_PARTNERS_ROUTES, ...PROVIDERS_ROUTES, ...LICENSES_ROUTES, ...DEVICE_BRANDS_ROUTES, ...DEVICES_ROUTES, + ...CONSUMERS_ROUTES, ], } as Route; diff --git a/src/app/domains/superAdmin/users/constants/apiRoutes/businessActivities.ts b/src/app/domains/superAdmin/users/constants/apiRoutes/businessActivities.ts deleted file mode 100644 index 6eacfd0..0000000 --- a/src/app/domains/superAdmin/users/constants/apiRoutes/businessActivities.ts +++ /dev/null @@ -1,7 +0,0 @@ -const baseUrl = (userId: string) => `/api/v1/admin/users/${userId}/business_activities`; - -export const BUSINESS_ACTIVITIES_API_ROUTES = { - list: (userId: string) => `${baseUrl(userId)}`, - single: (userId: string, business_activity_id: string) => - `${baseUrl(userId)}/${business_activity_id}`, -}; diff --git a/src/app/domains/superAdmin/users/constants/apiRoutes/businessActivityComplexes.ts b/src/app/domains/superAdmin/users/constants/apiRoutes/businessActivityComplexes.ts deleted file mode 100644 index e4a5fec..0000000 --- a/src/app/domains/superAdmin/users/constants/apiRoutes/businessActivityComplexes.ts +++ /dev/null @@ -1,9 +0,0 @@ -const baseUrl = (userId: string, business_activity_id: string) => - `/api/v1/admin/users/${userId}/business_activities/${business_activity_id}/complexes`; - -export const BUSINESS_ACTIVITY_COMPLEXES_API_ROUTES = { - list: (userId: string, business_activity_id: string) => - `${baseUrl(userId, business_activity_id)}`, - single: (userId: string, business_activity_id: string, complex_id: string) => - `${baseUrl(userId, business_activity_id)}/${complex_id}`, -}; diff --git a/src/app/domains/superAdmin/users/constants/apiRoutes/posAccounts.ts b/src/app/domains/superAdmin/users/constants/apiRoutes/posAccounts.ts deleted file mode 100644 index 8d83b06..0000000 --- a/src/app/domains/superAdmin/users/constants/apiRoutes/posAccounts.ts +++ /dev/null @@ -1,8 +0,0 @@ -const baseUrl = (complexId: string, posId: string) => - `/api/v1/admin/complexes/${complexId}/poses/${posId}/accounts`; - -export const POS_ACCOUNTS_API_ROUTES = { - list: (complexId: string, posId: string) => `${baseUrl(complexId, posId)}`, - single: (complexId: string, posId: string, accountId: string) => - `${baseUrl(complexId, posId)}/${accountId}`, -}; diff --git a/src/app/domains/superAdmin/users/constants/routes/accounts.ts b/src/app/domains/superAdmin/users/constants/routes/accounts.ts deleted file mode 100644 index 899deeb..0000000 --- a/src/app/domains/superAdmin/users/constants/routes/accounts.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { NamedRoutes } from '@/core'; -import { Routes } from '@angular/router'; -import { SUPER_ADMIN_USER_COMPLEXES_ROUTES } from './complexes'; - -export type TBusinessActivitiesRouteNames = 'businessActivities' | 'businessActivity'; - -export const superAdminUserBusinessActivitiesNamedRoutes: NamedRoutes = - { - businessActivities: { - path: 'business_activities', - loadComponent: () => - import('../../views/businessActivities/list.component').then( - (m) => m.SuperAdminUserBusinessActivitiesComponent, - ), - // @ts-ignore - meta: { - title: 'فعالیت‌های اقتصادی', - pagePath: (userId: string) => `/super_admin/users/${userId}/business_activities`, - }, - }, - businessActivity: { - path: 'business_activities/:businessActivityId', - loadComponent: () => - import('../../views/businessActivities/single.component').then( - (m) => m.SuperAdminUserBusinessActivityComponent, - ), - // @ts-ignore - meta: { - title: 'فعالیت اقتصادی', - pagePath: (userId: string, businessId: string) => - `/super_admin/users/${userId}/business_activities/${businessId}`, - }, - }, - }; - -export const SUPER_ADMIN_USER_BUSINESS_ACTIVITIES_ROUTES: Routes = [ - superAdminUserBusinessActivitiesNamedRoutes.businessActivities, - { - path: superAdminUserBusinessActivitiesNamedRoutes.businessActivity.path, - loadComponent: () => - import('../../components/businessActivities/layout.component').then( - (m) => m.SuperAdminUserBusinessActivityLayoutComponent, - ), - children: [ - { - path: '', - loadComponent: superAdminUserBusinessActivitiesNamedRoutes.businessActivity.loadComponent, - }, - ...SUPER_ADMIN_USER_COMPLEXES_ROUTES, - ], - }, -]; diff --git a/src/app/domains/superAdmin/users/constants/routes/complexes.ts b/src/app/domains/superAdmin/users/constants/routes/complexes.ts deleted file mode 100644 index b34cf85..0000000 --- a/src/app/domains/superAdmin/users/constants/routes/complexes.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { NamedRoutes } from '@/core'; -import { Routes } from '@angular/router'; -import { SUPER_ADMIN_USER_POSES_ROUTES } from './poses'; - -export type TComplexesRouteNames = 'complexes' | 'complex'; - -const baseUrl = (userId: string, businessId: string) => - `/super_admin/users/${userId}/business_activities/${businessId}/complexes`; - -export const superAdminUserComplexesNamedRoutes: NamedRoutes = { - complexes: { - path: 'complexes', - loadComponent: () => - import('../../views/complexes/list.component').then( - (m) => m.SuperAdminUserComplexesComponent, - ), - // @ts-ignore - meta: { - title: 'فروشگاه‌ها', - pagePath: (userId: string, businessId: string) => baseUrl(userId, businessId), - }, - }, - complex: { - path: 'complexes/:complexId', - loadComponent: () => - import('../../views/complexes/single.component').then( - (m) => m.SuperAdminUserComplexComponent, - ), - // @ts-ignore - meta: { - title: 'فروشگاه', - pagePath: (userId: string, businessId: string, complexId: string) => - `${baseUrl(userId, businessId)}/${complexId}`, - }, - }, -}; - -export const SUPER_ADMIN_USER_COMPLEXES_ROUTES: Routes = [ - superAdminUserComplexesNamedRoutes.complexes, - { - path: superAdminUserComplexesNamedRoutes.complex.path, - loadComponent: () => - import('../../components/complexes/layout.component').then( - (m) => m.SuperAdminUserComplexLayoutComponent, - ), - children: [ - { - path: '', - loadComponent: superAdminUserComplexesNamedRoutes.complex.loadComponent, - }, - ...SUPER_ADMIN_USER_POSES_ROUTES, - ], - }, -]; diff --git a/src/app/domains/superAdmin/users/constants/routes/poses.ts b/src/app/domains/superAdmin/users/constants/routes/poses.ts deleted file mode 100644 index ee2e5e6..0000000 --- a/src/app/domains/superAdmin/users/constants/routes/poses.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { NamedRoutes } from '@/core'; -import { Routes } from '@angular/router'; - -export type TPosesRouteNames = 'poses' | 'pos'; - -const baseUrl = (userId: string, businessId: string, complexId: string) => - `/super_admin/users/${userId}/business_activities/${businessId}/complexes/${complexId}/poses`; - -export const superAdminUserPosesNamedRoutes: NamedRoutes = { - poses: { - path: 'poses', - loadComponent: () => - import('../../views/poses/list.component').then((m) => m.SuperAdminUserPosesComponent), - // @ts-ignore - meta: { - title: 'پایانه‌های فروش', - pagePath: (userId: string, businessId: string, complexId: string) => - baseUrl(userId, businessId, complexId), - }, - }, - pos: { - path: 'poses/:posId', - loadComponent: () => - import('../../views/poses/single.component').then((m) => m.SuperAdminUserPosComponent), - // @ts-ignore - meta: { - title: 'پایانه‌ی فروش', - pagePath: (userId: string, businessId: string, complexId: string, posId: string) => - `${baseUrl(userId, businessId, complexId)}/${posId}`, - }, - }, -}; - -export const SUPER_ADMIN_USER_POSES_ROUTES: Routes = [ - superAdminUserPosesNamedRoutes.poses, - { - path: superAdminUserPosesNamedRoutes.pos.path, - loadComponent: () => - import('../../components/poses/layout.component').then( - (m) => m.SuperAdminUserPosLayoutComponent, - ), - children: [ - { - path: '', - loadComponent: superAdminUserPosesNamedRoutes.pos.loadComponent, - }, - ], - }, -]; diff --git a/src/app/domains/superAdmin/users/services/posAccounts.service.ts b/src/app/domains/superAdmin/users/services/posAccounts.service.ts deleted file mode 100644 index c71b9c7..0000000 --- a/src/app/domains/superAdmin/users/services/posAccounts.service.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { IPaginatedResponse } from '@/core/models/service.model'; -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; -import { POS_ACCOUNTS_API_ROUTES } from '../constants'; -import { IAccountRawResponse, IAccountRequest, IAccountResponse } from '../models'; - -@Injectable({ providedIn: 'root' }) -export class AdminPosesService { - constructor(private http: HttpClient) {} - - private apiRoutes = POS_ACCOUNTS_API_ROUTES; - - getAll(complexId: string, posId: string): Observable> { - return this.http.get>( - this.apiRoutes.list(complexId, posId), - ); - } - getSingle(complexId: string, posId: string, accountId: string): Observable { - return this.http.get(this.apiRoutes.single(complexId, posId, accountId)); - } - - create(complexId: string, posId: string, data: IAccountRequest): Observable { - return this.http.post(this.apiRoutes.list(complexId, posId), data); - } - - update( - complexId: string, - posId: string, - accountId: string, - data: IAccountRequest, - ): Observable { - return this.http.patch( - this.apiRoutes.single(complexId, posId, accountId), - data, - ); - } -} diff --git a/src/app/domains/superAdmin/users/views/businessActivities/list.component.html b/src/app/domains/superAdmin/users/views/businessActivities/list.component.html deleted file mode 100644 index b0e6dbc..0000000 --- a/src/app/domains/superAdmin/users/views/businessActivities/list.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/domains/superAdmin/users/views/businessActivities/list.component.ts b/src/app/domains/superAdmin/users/views/businessActivities/list.component.ts deleted file mode 100644 index c5ce944..0000000 --- a/src/app/domains/superAdmin/users/views/businessActivities/list.component.ts +++ /dev/null @@ -1,43 +0,0 @@ -// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; -import { BreadcrumbService } from '@/core/services'; -import pageParamsUtils from '@/utils/page-params.utils'; -import { Component, computed, inject, signal } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { UserBusinessActivitiesComponent } from '../../components/businessActivities/list.component'; -import { usersNamedRoutes } from '../../constants'; -import { superAdminUserBusinessActivitiesNamedRoutes } from '../../constants/routes/businessActivities'; -import { UserStore } from '../../store/user.store'; - -@Component({ - selector: 'superAdmin-user-businessActivities', - templateUrl: './list.component.html', - imports: [UserBusinessActivitiesComponent], -}) -export class SuperAdminUserBusinessActivitiesComponent { - private readonly route = inject(ActivatedRoute); - private readonly breadcrumbService = inject(BreadcrumbService); - private readonly userStore = inject(UserStore); - - pageParams = computed(() => pageParamsUtils(this.route)); - userId = signal(this.pageParams()['userId']); - - ngOnInit() { - this.setBreadcrumb(); - } - - setBreadcrumb() { - this.breadcrumbService.setItems([ - { - ...usersNamedRoutes.users.meta, - routerLink: usersNamedRoutes.users.meta.pagePath!(), - }, - { - title: this.userStore.entity()?.fullname, - routerLink: usersNamedRoutes.user.meta.pagePath!(this.userId()), - }, - { - title: superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta.title, - }, - ]); - } -} diff --git a/src/app/domains/superAdmin/users/views/complexes/list.component.html b/src/app/domains/superAdmin/users/views/complexes/list.component.html deleted file mode 100644 index 19502c0..0000000 --- a/src/app/domains/superAdmin/users/views/complexes/list.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/domains/superAdmin/users/views/complexes/list.component.ts b/src/app/domains/superAdmin/users/views/complexes/list.component.ts deleted file mode 100644 index f5b8fc1..0000000 --- a/src/app/domains/superAdmin/users/views/complexes/list.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; -import { BreadcrumbService } from '@/core/services'; -import pageParamsUtils from '@/utils/page-params.utils'; -import { Component, computed, inject, signal } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { UserComplexesComponent } from '../../components/complexes/list.component'; -import { usersNamedRoutes } from '../../constants'; -import { superAdminUserBusinessActivitiesNamedRoutes } from '../../constants/routes/businessActivities'; -import { superAdminUserComplexesNamedRoutes } from '../../constants/routes/complexes'; -import { BusinessActivityStore } from '../../store/businessActivity.store'; -import { UserStore } from '../../store/user.store'; - -@Component({ - selector: 'superAdmin-user-complexes', - templateUrl: './list.component.html', - imports: [UserComplexesComponent], -}) -export class SuperAdminUserComplexesComponent { - private readonly route = inject(ActivatedRoute); - private readonly breadcrumbService = inject(BreadcrumbService); - private readonly userStore = inject(UserStore); - private readonly businessStore = inject(BusinessActivityStore); - - pageParams = computed(() => pageParamsUtils(this.route)); - userId = signal(this.pageParams()['userId']); - businessId = signal(this.pageParams()['businessActivityId']); - - ngAfterViewInit() { - this.setBreadcrumb(); - } - - setBreadcrumb() { - this.breadcrumbService.setItems([ - { - ...usersNamedRoutes.users.meta, - routerLink: usersNamedRoutes.users.meta.pagePath!(), - }, - { - title: this.userStore.entity()?.fullname, - routerLink: usersNamedRoutes.user.meta.pagePath!(this.userId()), - }, - { - title: superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta.title, - routerLink: superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta.pagePath!( - this.userId(), - ), - }, - { - title: this.businessStore.entity()?.name, - routerLink: superAdminUserBusinessActivitiesNamedRoutes.businessActivity.meta.pagePath!( - this.userId(), - this.businessId(), - ), - }, - { - title: superAdminUserComplexesNamedRoutes.complexes.meta.title, - routerLink: superAdminUserComplexesNamedRoutes.complexes.meta.pagePath!( - this.userId(), - this.businessId(), - ), - }, - ]); - } -} diff --git a/src/app/domains/superAdmin/users/views/complexes/single.component.ts b/src/app/domains/superAdmin/users/views/complexes/single.component.ts deleted file mode 100644 index 51530c0..0000000 --- a/src/app/domains/superAdmin/users/views/complexes/single.component.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { BreadcrumbService } from '@/core/services'; -import { AppCardComponent, KeyValueComponent } from '@/shared/components'; -import pageParamsUtils from '@/utils/page-params.utils'; -import { Component, computed, effect, inject, signal } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { UserComplexFormComponent } from '../../components/complexes/form.component'; -import { UserPosesComponent } from '../../components/poses/list.component'; -import { usersNamedRoutes } from '../../constants'; -import { superAdminUserBusinessActivitiesNamedRoutes } from '../../constants/routes/businessActivities'; -import { superAdminUserComplexesNamedRoutes } from '../../constants/routes/complexes'; -import { BusinessActivityStore } from '../../store/businessActivity.store'; -import { ComplexStore } from '../../store/complex.store'; -import { UserStore } from '../../store/user.store'; - -@Component({ - selector: 'superAdmin-user-complex', - templateUrl: './single.component.html', - imports: [AppCardComponent, KeyValueComponent, UserComplexFormComponent, UserPosesComponent], -}) -export class SuperAdminUserComplexComponent { - private readonly route = inject(ActivatedRoute); - private readonly breadcrumbService = inject(BreadcrumbService); - private readonly store = inject(ComplexStore); - private readonly userStore = inject(UserStore); - private readonly businessStore = inject(BusinessActivityStore); - - pageParams = computed(() => pageParamsUtils(this.route)); - - readonly userId = signal(this.pageParams()['userId']!); - readonly businessId = signal(this.pageParams()['businessActivityId']!); - readonly complexId = signal(this.pageParams()['complexId']!); - - editMode = signal(false); - - readonly loading = computed(() => this.store.loading()); - readonly complex = computed(() => this.store.entity()); - - constructor() { - effect(() => { - if (this.complex()?.id) { - this.setBreadcrumb(); - } - }); - } - - getData() { - this.store.getData(this.userId(), this.businessId(), this.complexId()); - } - - setBreadcrumb() { - this.breadcrumbService.setItems([ - { - ...usersNamedRoutes.users.meta, - routerLink: usersNamedRoutes.users.meta.pagePath!(), - }, - { - title: this.userStore.entity()?.fullname, - routerLink: usersNamedRoutes.user.meta.pagePath!(this.userId()), - }, - { - ...superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta, - routerLink: superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta.pagePath!( - this.userId(), - ), - }, - { - title: this.businessStore.entity()?.name, - routerLink: superAdminUserBusinessActivitiesNamedRoutes.businessActivity.meta.pagePath!( - this.userId(), - this.businessId(), - ), - }, - { - ...superAdminUserComplexesNamedRoutes.complexes.meta, - routerLink: superAdminUserComplexesNamedRoutes.complexes.meta.pagePath!( - this.userId(), - this.businessId(), - ), - }, - { - title: this.complex()?.name, - routerLink: superAdminUserComplexesNamedRoutes.complex.meta.pagePath!( - this.userId(), - this.businessId(), - this.complexId(), - ), - }, - ]); - } -} diff --git a/src/app/domains/superAdmin/users/views/poses/list.component.html b/src/app/domains/superAdmin/users/views/poses/list.component.html deleted file mode 100644 index 8303f40..0000000 --- a/src/app/domains/superAdmin/users/views/poses/list.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/domains/superAdmin/users/views/poses/list.component.ts b/src/app/domains/superAdmin/users/views/poses/list.component.ts deleted file mode 100644 index 42c4597..0000000 --- a/src/app/domains/superAdmin/users/views/poses/list.component.ts +++ /dev/null @@ -1,86 +0,0 @@ -// import { CatalogRoleTagComponent } from '@/shared/catalog/roles'; -import { BreadcrumbService } from '@/core/services'; -import pageParamsUtils from '@/utils/page-params.utils'; -import { Component, computed, inject, signal } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { UserPosesComponent } from '../../components/poses/list.component'; -import { usersNamedRoutes } from '../../constants'; -import { superAdminUserBusinessActivitiesNamedRoutes } from '../../constants/routes/businessActivities'; -import { superAdminUserComplexesNamedRoutes } from '../../constants/routes/complexes'; -import { superAdminUserPosesNamedRoutes } from '../../constants/routes/poses'; -import { BusinessActivityStore } from '../../store/businessActivity.store'; -import { ComplexStore } from '../../store/complex.store'; -import { UserStore } from '../../store/user.store'; - -@Component({ - selector: 'superAdmin-user-poses', - templateUrl: './list.component.html', - imports: [UserPosesComponent], -}) -export class SuperAdminUserPosesComponent { - private readonly route = inject(ActivatedRoute); - private readonly breadcrumbService = inject(BreadcrumbService); - private readonly userStore = inject(UserStore); - private readonly businessStore = inject(BusinessActivityStore); - private readonly complexStore = inject(ComplexStore); - - pageParams = computed(() => pageParamsUtils(this.route)); - userId = signal(this.pageParams()['userId']); - businessId = signal(this.pageParams()['businessActivityId']); - complexId = signal(this.pageParams()['complexId']); - - ngOnInit() { - this.setBreadcrumb(); - } - - setBreadcrumb() { - this.breadcrumbService.setItems([ - { - ...usersNamedRoutes.users.meta, - routerLink: usersNamedRoutes.users.meta.pagePath!(), - }, - { - title: this.userStore.entity()?.fullname, - routerLink: usersNamedRoutes.user.meta.pagePath!(this.userId()), - }, - { - title: superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta.title, - routerLink: superAdminUserBusinessActivitiesNamedRoutes.businessActivities.meta.pagePath!( - this.userId(), - ), - }, - { - title: this.businessStore.entity()?.name, - routerLink: superAdminUserBusinessActivitiesNamedRoutes.businessActivity.meta.pagePath!( - this.userId(), - this.businessId(), - ), - }, - - { - title: superAdminUserComplexesNamedRoutes.complexes.meta.title, - routerLink: superAdminUserComplexesNamedRoutes.complexes.meta.pagePath!( - this.userId(), - this.businessId(), - ), - }, - { - title: this.complexStore.entity()?.name, - routerLink: superAdminUserComplexesNamedRoutes.complex.meta.pagePath!( - this.userId(), - this.businessId(), - this.complexId(), - ), - }, - - { - title: superAdminUserPosesNamedRoutes.poses.meta.title, - routerLink: superAdminUserPosesNamedRoutes.poses.meta.pagePath!( - this.userId(), - this.businessId(), - this.complexId(), - ), - }, - ]); - } -} diff --git a/src/app/layout/component/app.layout.component.ts b/src/app/layout/component/app.layout.component.ts index 7444c3e..ec3872f 100644 --- a/src/app/layout/component/app.layout.component.ts +++ b/src/app/layout/component/app.layout.component.ts @@ -1,4 +1,4 @@ -import { BreadcrumbService } from '@/core/services'; +import { AuthService, BreadcrumbService } from '@/core/services'; import { BreadcrumbComponent } from '@/shared/components'; import { CommonModule } from '@angular/common'; import { @@ -11,7 +11,7 @@ import { TemplateRef, ViewChild, } from '@angular/core'; -import { NavigationEnd, Router, RouterModule } from '@angular/router'; +import { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router'; import { ProgressSpinner } from 'primeng/progressspinner'; import { filter, Subscription } from 'rxjs'; import { LayoutService } from '../service/layout.service'; @@ -46,6 +46,8 @@ export class AppLayout { @ContentChild('content', { static: true }) content?: TemplateRef | null; private breadcrumbService = inject(BreadcrumbService); + private authService = inject(AuthService); + private route = inject(ActivatedRoute); constructor( public layoutService: LayoutService, @@ -141,6 +143,28 @@ export class AppLayout { return this.layoutService.menuItems().length > 0; }); + ngOnInit() { + if (window.location.pathname === '/') { + if (!this.authService.currentAccount()) { + this.router.navigateByUrl('auth'); + } + switch (this.authService.currentAccount()?.type) { + case 'ADMIN': + this.router.navigateByUrl('super_admin'); + break; + case 'CONSUMER': + this.router.navigateByUrl('consumer'); + break; + case 'PARTNER': + this.router.navigateByUrl('partner'); + break; + case 'PROVIDER': + this.router.navigateByUrl('provider'); + break; + } + } + } + ngOnDestroy() { if (this.overlayMenuOpenSubscription) { this.overlayMenuOpenSubscription.unsubscribe(); diff --git a/src/app/layout/service/layout.service.ts b/src/app/layout/service/layout.service.ts index cf25a34..e526eed 100644 --- a/src/app/layout/service/layout.service.ts +++ b/src/app/layout/service/layout.service.ts @@ -1,4 +1,3 @@ -import { MENU_ITEMS } from '@/core/constants'; import { computed, effect, Injectable, signal } from '@angular/core'; import { MenuItem } from 'primeng/api'; import { Subject } from 'rxjs'; @@ -58,7 +57,7 @@ export class LayoutService { private resetSource = new Subject(); - public menuItems = signal(MENU_ITEMS); + public menuItems = signal([]); menuSource$ = this.menuSource.asObservable(); diff --git a/src/app/modules/auth/pages/auth.component.ts b/src/app/modules/auth/pages/auth.component.ts index 3f0067c..05cb330 100644 --- a/src/app/modules/auth/pages/auth.component.ts +++ b/src/app/modules/auth/pages/auth.component.ts @@ -60,18 +60,18 @@ export class AuthComponent { if (!redirectUrl) { switch (this.selectedRole()) { - case 'SUPERADMIN': - redirectUrl = '/super_admin'; - break; case 'ADMIN': redirectUrl = '/super_admin'; break; - case 'POS': - redirectUrl = '/pos'; + case 'PROVIDER': + redirectUrl = '/provider'; break; case 'PARTNER': redirectUrl = '/partner'; break; + case 'CONSUMER': + redirectUrl = '/consumer'; + break; } } this.router.navigateByUrl(redirectUrl); diff --git a/src/app/modules/auth/pages/login/login.component.ts b/src/app/modules/auth/pages/login/login.component.ts index 84a372a..7e61bbc 100644 --- a/src/app/modules/auth/pages/login/login.component.ts +++ b/src/app/modules/auth/pages/login/login.component.ts @@ -62,7 +62,6 @@ export class LoginComponent { // role: [this.defaultRole, [Validators.required]], }); - selectedRole = signal('SUPERADMIN'); ngOnInit() { // this.captchaService.requestNewCaptcha(); } diff --git a/src/app/modules/auth/pages/modifyLoginInfo/modify-login-info.component.ts b/src/app/modules/auth/pages/modifyLoginInfo/modify-login-info.component.ts index 0cd1624..d176969 100644 --- a/src/app/modules/auth/pages/modifyLoginInfo/modify-login-info.component.ts +++ b/src/app/modules/auth/pages/modifyLoginInfo/modify-login-info.component.ts @@ -1,100 +1,100 @@ -import { AuthService } from '@/core'; -import { IUserLoginInfo, TRoles } from '@/core/models'; -import { ToastService } from '@/core/services/toast.service'; -import { MustMatch } from '@/core/validators'; -import { password } from '@/core/validators/password.validator'; -import { UikitFieldComponent } from '@/uikit/uikit-field.component'; -import { CommonModule } from '@angular/common'; -import { Component, EventEmitter, inject, Input, Output, signal } from '@angular/core'; -import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; -import { Router } from '@angular/router'; -import { Button } from 'primeng/button'; -import { ImageModule } from 'primeng/image'; -import { InputGroupModule } from 'primeng/inputgroup'; -import { InputGroupAddonModule } from 'primeng/inputgroupaddon'; -import { InputText } from 'primeng/inputtext'; -import { Message } from 'primeng/message'; -import { Password } from 'primeng/password'; -import { ProgressSpinnerModule } from 'primeng/progressspinner'; -import { RadioButtonModule } from 'primeng/radiobutton'; +// import { AuthService } from '@/core'; +// import { IUserLoginInfo, TRoles } from '@/core/models'; +// import { ToastService } from '@/core/services/toast.service'; +// import { MustMatch } from '@/core/validators'; +// import { password } from '@/core/validators/password.validator'; +// import { UikitFieldComponent } from '@/uikit/uikit-field.component'; +// import { CommonModule } from '@angular/common'; +// import { Component, EventEmitter, inject, Input, Output, signal } from '@angular/core'; +// import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; +// import { Router } from '@angular/router'; +// import { Button } from 'primeng/button'; +// import { ImageModule } from 'primeng/image'; +// import { InputGroupModule } from 'primeng/inputgroup'; +// import { InputGroupAddonModule } from 'primeng/inputgroupaddon'; +// import { InputText } from 'primeng/inputtext'; +// import { Message } from 'primeng/message'; +// import { Password } from 'primeng/password'; +// import { ProgressSpinnerModule } from 'primeng/progressspinner'; +// import { RadioButtonModule } from 'primeng/radiobutton'; -@Component({ - selector: 'app-modify-login-info', - templateUrl: './modify-login-info.component.html', - imports: [ - CommonModule, - ReactiveFormsModule, - Button, - Password, - InputText, - ImageModule, - ProgressSpinnerModule, - RadioButtonModule, - InputGroupModule, - InputGroupAddonModule, - UikitFieldComponent, - Message, - ], -}) -export class ModifyLoginInfoComponent { - @Input() userLoginInfo!: Partial; - @Input() role!: TRoles; +// @Component({ +// selector: 'app-modify-login-info', +// templateUrl: './modify-login-info.component.html', +// imports: [ +// CommonModule, +// ReactiveFormsModule, +// Button, +// Password, +// InputText, +// ImageModule, +// ProgressSpinnerModule, +// RadioButtonModule, +// InputGroupModule, +// InputGroupAddonModule, +// UikitFieldComponent, +// Message, +// ], +// }) +// export class ModifyLoginInfoComponent { +// @Input() userLoginInfo!: Partial; +// @Input() role!: TRoles; - @Output() onSubmit = new EventEmitter(); - @Output() toLogin = new EventEmitter(); +// @Output() onSubmit = new EventEmitter(); +// @Output() toLogin = new EventEmitter(); - private readonly authService = inject(AuthService); - private readonly toastService = inject(ToastService); - private readonly router = inject(Router); - private readonly fb = inject(FormBuilder); +// private readonly authService = inject(AuthService); +// private readonly toastService = inject(ToastService); +// private readonly router = inject(Router); +// private readonly fb = inject(FormBuilder); - readonly isLoading = signal(false); - readonly errorMessage = signal(''); - readonly hidePassword = signal(true); +// readonly isLoading = signal(false); +// readonly errorMessage = signal(''); +// readonly hidePassword = signal(true); - readonly infoForm = this.fb.group( - { - username: [this.userLoginInfo?.username, [Validators.required]], - password: ['', [Validators.required, password()]], - confirmPassword: ['', [Validators.required]], - mobile: [this.userLoginInfo?.mobile, [Validators.required]], - email: [this.userLoginInfo?.email, [Validators.required, Validators.email]], - }, - { - validators: [MustMatch('password', 'confirmPassword')], - }, - ); +// readonly infoForm = this.fb.group( +// { +// username: [this.userLoginInfo?.username, [Validators.required]], +// password: ['', [Validators.required, password()]], +// confirmPassword: ['', [Validators.required]], +// mobile: [this.userLoginInfo?.mobile, [Validators.required]], +// email: [this.userLoginInfo?.email, [Validators.required, Validators.email]], +// }, +// { +// validators: [MustMatch('password', 'confirmPassword')], +// }, +// ); - ngOnInit() { - this.authService.getInfo(this.role).subscribe({ - next: (info) => { - this.infoForm.patchValue(info); - }, - error: () => { - this.toLogin.emit(); - }, - }); - } +// ngOnInit() { +// this.authService.getInfo(this.role).subscribe({ +// next: (info) => { +// this.infoForm.patchValue(info); +// }, +// error: () => { +// this.toLogin.emit(); +// }, +// }); +// } - submit(): void { - this.infoForm.markAllAsTouched(); - if (this.infoForm.invalid) return; - const credentials: IUserLoginInfo = this.infoForm.value as IUserLoginInfo; - this.isLoading.set(true); - this.authService.changeInfo(credentials, this.role).subscribe({ - next: () => { - this.toastService.success({ - text: 'اطلاعات با موفقیت به‌روزرسانی شد', - }); - this.errorMessage.set(''); - this.onSubmit?.emit(); - this.isLoading.set(false); - // this.router.navigateByUrl(this.redirectUrl.replace(/\/[^/]*$/, '')); - }, - error: (error) => { - this.isLoading.set(false); - // this.errorMessage.set('نام کاربری یا رمز عبور اشتباه است'); - }, - }); - } -} +// submit(): void { +// this.infoForm.markAllAsTouched(); +// if (this.infoForm.invalid) return; +// const credentials: IUserLoginInfo = this.infoForm.value as IUserLoginInfo; +// this.isLoading.set(true); +// this.authService.changeInfo(credentials, this.role).subscribe({ +// next: () => { +// this.toastService.success({ +// text: 'اطلاعات با موفقیت به‌روزرسانی شد', +// }); +// this.errorMessage.set(''); +// this.onSubmit?.emit(); +// this.isLoading.set(false); +// // this.router.navigateByUrl(this.redirectUrl.replace(/\/[^/]*$/, '')); +// }, +// error: (error) => { +// this.isLoading.set(false); +// // this.errorMessage.set('نام کاربری یا رمز عبور اشتباه است'); +// }, +// }); +// } +// } diff --git a/src/app/modules/auth/pages/signup/signup.component.ts b/src/app/modules/auth/pages/signup/signup.component.ts index 890b8df..5eb1e3f 100644 --- a/src/app/modules/auth/pages/signup/signup.component.ts +++ b/src/app/modules/auth/pages/signup/signup.component.ts @@ -1,94 +1,94 @@ -import { AuthService } from '@/core'; -import { ISignupRequestPayload, IUserLoginInfo, Maybe, TRoles } from '@/core/models'; -import { ToastService } from '@/core/services/toast.service'; -import { mobileValidator, MustMatch } from '@/core/validators'; -import { password } from '@/core/validators/password.validator'; -// import { GenderSelectComponent } from '@/shared/catalog'; -import { InputComponent } from '@/shared/components'; -import { UikitFieldComponent } from '@/uikit/uikit-field.component'; -import { CommonModule } from '@angular/common'; -import { Component, EventEmitter, inject, Input, Output, signal } from '@angular/core'; -import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; -import { Router } from '@angular/router'; -import { Button } from 'primeng/button'; -import { ImageModule } from 'primeng/image'; -import { InputGroupModule } from 'primeng/inputgroup'; -import { InputGroupAddonModule } from 'primeng/inputgroupaddon'; -import { Password } from 'primeng/password'; -import { ProgressSpinnerModule } from 'primeng/progressspinner'; -import { RadioButtonModule } from 'primeng/radiobutton'; +// import { AuthService } from '@/core'; +// import { ISignupRequestPayload, IUserLoginInfo, Maybe, TRoles } from '@/core/models'; +// import { ToastService } from '@/core/services/toast.service'; +// import { mobileValidator, MustMatch } from '@/core/validators'; +// import { password } from '@/core/validators/password.validator'; +// // import { GenderSelectComponent } from '@/shared/catalog'; +// import { InputComponent } from '@/shared/components'; +// import { UikitFieldComponent } from '@/uikit/uikit-field.component'; +// import { CommonModule } from '@angular/common'; +// import { Component, EventEmitter, inject, Input, Output, signal } from '@angular/core'; +// import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; +// import { Router } from '@angular/router'; +// import { Button } from 'primeng/button'; +// import { ImageModule } from 'primeng/image'; +// import { InputGroupModule } from 'primeng/inputgroup'; +// import { InputGroupAddonModule } from 'primeng/inputgroupaddon'; +// import { Password } from 'primeng/password'; +// import { ProgressSpinnerModule } from 'primeng/progressspinner'; +// import { RadioButtonModule } from 'primeng/radiobutton'; -@Component({ - selector: 'auth-signup', - templateUrl: './signup.component.html', - imports: [ - CommonModule, - ReactiveFormsModule, - Button, - Password, - ImageModule, - ProgressSpinnerModule, - RadioButtonModule, - InputGroupModule, - InputGroupAddonModule, - UikitFieldComponent, - InputComponent, - // GenderSelectComponent, - ], -}) -export class SignupComponent { - @Input() userLoginInfo!: Partial; - @Input() role!: TRoles; +// @Component({ +// selector: 'auth-signup', +// templateUrl: './signup.component.html', +// imports: [ +// CommonModule, +// ReactiveFormsModule, +// Button, +// Password, +// ImageModule, +// ProgressSpinnerModule, +// RadioButtonModule, +// InputGroupModule, +// InputGroupAddonModule, +// UikitFieldComponent, +// InputComponent, +// // GenderSelectComponent, +// ], +// }) +// export class SignupComponent { +// @Input() userLoginInfo!: Partial; +// @Input() role!: TRoles; - @Output() onSubmit = new EventEmitter(); - @Output() toLogin = new EventEmitter(); +// @Output() onSubmit = new EventEmitter(); +// @Output() toLogin = new EventEmitter(); - constructor( - private readonly authService: AuthService, - private readonly toastService: ToastService, - private readonly router: Router, - ) {} +// constructor( +// private readonly authService: AuthService, +// private readonly toastService: ToastService, +// private readonly router: Router, +// ) {} - private readonly fb = inject(FormBuilder); +// private readonly fb = inject(FormBuilder); - readonly isLoading = signal(false); - readonly errorMessage = signal(''); - readonly hidePassword = signal(true); +// readonly isLoading = signal(false); +// readonly errorMessage = signal(''); +// readonly hidePassword = signal(true); - readonly form = this.fb.group( - { - firstName: ['', [Validators.required]], - lastName: ['', [Validators.required]], - gender: [null as Maybe, [Validators.required]], - mobile: ['', [Validators.required, mobileValidator()]], - email: ['', [Validators.required, Validators.email]], - username: ['', [Validators.required]], - password: ['', [Validators.required, password()]], - confirmPassword: ['', [Validators.required]], - }, - { - validators: [MustMatch('password', 'confirmPassword')], - }, - ); +// readonly form = this.fb.group( +// { +// firstName: ['', [Validators.required]], +// lastName: ['', [Validators.required]], +// gender: [null as Maybe, [Validators.required]], +// mobile: ['', [Validators.required, mobileValidator()]], +// email: ['', [Validators.required, Validators.email]], +// username: ['', [Validators.required]], +// password: ['', [Validators.required, password()]], +// confirmPassword: ['', [Validators.required]], +// }, +// { +// validators: [MustMatch('password', 'confirmPassword')], +// }, +// ); - submit(): void { - this.form.markAllAsTouched(); +// submit(): void { +// this.form.markAllAsTouched(); - if (this.form.invalid) return; - const credentials = this.form.value as ISignupRequestPayload; - this.isLoading.set(true); - this.authService.signup(credentials, this.role).subscribe({ - next: () => { - this.toastService.success({ - text: 'ثبت نام با موفقیت انجام شد. لطفا وارد شوید.', - }); - this.errorMessage.set(''); - this.onSubmit?.emit(); - this.isLoading.set(false); - }, - error: (error) => { - this.isLoading.set(false); - }, - }); - } -} +// if (this.form.invalid) return; +// const credentials = this.form.value as ISignupRequestPayload; +// this.isLoading.set(true); +// this.authService.signup(credentials, this.role).subscribe({ +// next: () => { +// this.toastService.success({ +// text: 'ثبت نام با موفقیت انجام شد. لطفا وارد شوید.', +// }); +// this.errorMessage.set(''); +// this.onSubmit?.emit(); +// this.isLoading.set(false); +// }, +// error: (error) => { +// this.isLoading.set(false); +// }, +// }); +// } +// } diff --git a/src/app/shared/abstractClasses/abstract-select.component.ts b/src/app/shared/abstractClasses/abstract-select.component.ts index 3103806..8241d9b 100644 --- a/src/app/shared/abstractClasses/abstract-select.component.ts +++ b/src/app/shared/abstractClasses/abstract-select.component.ts @@ -4,7 +4,7 @@ import { FormControl } from '@angular/forms'; import { Observable } from 'rxjs'; export interface ISelectItem { - id: number; + id: string; name: string; } diff --git a/src/app/shared/catalog/accountTypes/components/select.component.ts b/src/app/shared/catalog/accountTypes/components/select.component.ts new file mode 100644 index 0000000..2062c05 --- /dev/null +++ b/src/app/shared/catalog/accountTypes/components/select.component.ts @@ -0,0 +1,44 @@ +import ISummary from '@/core/models/summary'; +import { AbstractSelectComponent, ISelectItem } from '@/shared/abstractClasses'; +import { UikitFieldComponent } from '@/uikit'; +import { Component, inject, Input } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { Select } from 'primeng/select'; +import { Observable } from 'rxjs'; +import { AccountType, AccountTypeTranslates } from 'src/assets/constants'; +import { CatalogsService } from '../../service'; + +@Component({ + selector: 'catalog-accountTypes-select', + templateUrl: '../../template.html', + imports: [UikitFieldComponent, Select, ReactiveFormsModule], +}) +export class CatalogAccountTypeSelectComponent extends AbstractSelectComponent< + ISummary, + ISelectItem[] +> { + @Input() override showClear: boolean = false; + @Input() label: string = ''; + private readonly service = inject(CatalogsService); + + get preparedLabel() { + return this.label || 'انتخاب نوع حساب'; + } + + ngOnInit() { + this.getData(); + } + + getDataService() { + return new Observable((observer) => { + const accountTypes = [] as ISelectItem[]; + Object.entries(AccountType).forEach(([key, value]) => { + accountTypes.push({ + id: value, + name: AccountTypeTranslates[value], + }); + }); + observer.next(accountTypes); + }); + } +} diff --git a/src/app/shared/catalog/accountTypes/index.ts b/src/app/shared/catalog/accountTypes/index.ts new file mode 100644 index 0000000..0ac8688 --- /dev/null +++ b/src/app/shared/catalog/accountTypes/index.ts @@ -0,0 +1 @@ +export * from './components/select.component'; diff --git a/src/app/shared/catalog/roleTypes/components/select.component.ts b/src/app/shared/catalog/roleTypes/components/select.component.ts new file mode 100644 index 0000000..f07469c --- /dev/null +++ b/src/app/shared/catalog/roleTypes/components/select.component.ts @@ -0,0 +1,91 @@ +import ISummary from '@/core/models/summary'; +import { AbstractSelectComponent, ISelectItem } from '@/shared/abstractClasses'; +import { UikitFieldComponent } from '@/uikit'; +import { Component, Input } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { Select } from 'primeng/select'; +import { Observable } from 'rxjs'; +import { + BusinessRole, + businessRoleTranslate, + ComplexRole, + complexRoleTranslate, + PartnerRole, + partnerRoleTranslate, + POSRole, + posRoleTranslate, + ProviderRole, + providerRoleTranslate, +} from 'src/assets/constants'; + +@Component({ + selector: 'catalog-roleTypes-select', + templateUrl: '../../template.html', + imports: [UikitFieldComponent, Select, ReactiveFormsModule], +}) +export class CatalogRoleTypeSelectComponent extends AbstractSelectComponent< + ISummary, + ISelectItem[] +> { + @Input() override showClear: boolean = false; + @Input() label: string = ''; + @Input({ required: true }) type!: 'PARTNER' | 'PROVIDER' | 'BUSINESS' | 'COMPLEX' | 'POS'; + + get preparedLabel() { + return this.label || 'انتخاب سطح دسترسی'; + } + + ngOnInit() { + this.getData(); + } + + getDataService() { + return new Observable((observer) => { + const roleTypes = [] as ISelectItem[]; + switch (this.type) { + case 'PARTNER': + Object.values(PartnerRole).forEach((value) => { + roleTypes.push({ + id: value, + name: partnerRoleTranslate[value], + }); + }); + break; + case 'PROVIDER': + Object.values(ProviderRole).forEach((value) => { + roleTypes.push({ + id: value, + name: providerRoleTranslate[value], + }); + }); + break; + case 'BUSINESS': + Object.values(BusinessRole).forEach((value) => { + roleTypes.push({ + id: value, + name: businessRoleTranslate[value], + }); + }); + break; + case 'COMPLEX': + Object.values(ComplexRole).forEach((value) => { + roleTypes.push({ + id: value, + name: complexRoleTranslate[value], + }); + }); + break; + case 'POS': + Object.values(POSRole).forEach((value) => { + roleTypes.push({ + id: value, + name: posRoleTranslate[value], + }); + }); + break; + } + + observer.next(roleTypes); + }); + } +} diff --git a/src/app/shared/catalog/roleTypes/index.ts b/src/app/shared/catalog/roleTypes/index.ts new file mode 100644 index 0000000..0ac8688 --- /dev/null +++ b/src/app/shared/catalog/roleTypes/index.ts @@ -0,0 +1 @@ +export * from './components/select.component'; diff --git a/src/app/shared/components/pageDataList/page-data-list.component.ts b/src/app/shared/components/pageDataList/page-data-list.component.ts index 881aeb8..c126315 100644 --- a/src/app/shared/components/pageDataList/page-data-list.component.ts +++ b/src/app/shared/components/pageDataList/page-data-list.component.ts @@ -34,9 +34,9 @@ export interface IColumn { @Component({ selector: 'app-page-data-list', templateUrl: './page-data-list.component.html', - // host: { - // class: 'inline-block w-full', - // }, + host: { + class: 'block w-full', + }, imports: [ CommonModule, TableActionRowComponent, @@ -56,11 +56,11 @@ export class PageDataListComponent { private renderer: Renderer2, ) {} - @Input() pageTitle!: string; + @Input({ required: true }) pageTitle!: string; @Input() addNewCtaLabel?: string; - @Input() columns!: IColumn[]; - @Input() items!: I[]; - @Input() loading!: boolean; + @Input({ required: true }) columns!: IColumn[]; + @Input({ required: true }) items!: I[]; + @Input({ required: true }) loading!: boolean; @Input() emptyPlaceholderTitle: string = 'موردی برای نمایش وجود ندارد'; @Input() emptyPlaceholderDescription?: string = ''; @Input() emptyPlaceholderCtaLabel?: string; @@ -73,7 +73,7 @@ export class PageDataListComponent { @Input() showAdd: boolean = false; @Input() isFiltered: boolean = false; @Input() fullHeight?: boolean = false; - @Input() height: string = '500px'; + @Input() height: string = ''; @ContentChild('filter', { static: true }) filter!: TemplateRef | null; @ContentChild('caption', { static: true }) caption!: TemplateRef | null; @@ -87,11 +87,12 @@ export class PageDataListComponent { filterDrawerVisible = signal(false); ngOnInit() { - this.renderer.setStyle( - this.host.nativeElement, - 'height', - this.fullHeight ? '100cqmin' : this.height, - ); + if (this.height) + this.renderer.setStyle( + this.host.nativeElement, + 'height', + this.fullHeight ? '100cqmin' : this.height, + ); // if (this.fullHeight) { // } } diff --git a/src/app/shared/components/passwordInput/password-input.component.html b/src/app/shared/components/passwordInput/password-input.component.html new file mode 100644 index 0000000..865b9a6 --- /dev/null +++ b/src/app/shared/components/passwordInput/password-input.component.html @@ -0,0 +1,28 @@ + + + + رمز باید حداقل ۸ کاراکتر بوده و شامل حداقل یک حرف بزرگ، یک حرف کوچک، یک عدد و یک کاراکتر ویژه باشد. + + + + + + diff --git a/src/app/shared/components/passwordInput/password-input.component.ts b/src/app/shared/components/passwordInput/password-input.component.ts new file mode 100644 index 0000000..b6967cb --- /dev/null +++ b/src/app/shared/components/passwordInput/password-input.component.ts @@ -0,0 +1,15 @@ +import { UikitFieldComponent } from '@/uikit'; +import { Component, Input } from '@angular/core'; +import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { Password } from 'primeng/password'; + +@Component({ + selector: 'shared-password-input', + templateUrl: './password-input.component.html', + imports: [UikitFieldComponent, Password, ReactiveFormsModule], +}) +export class SharedPasswordInputComponent { + @Input({ required: true }) passwordControl = new FormControl(''); + @Input({ required: true }) confirmPasswordControl = new FormControl(''); + @Input({ required: true }) formGroup!: FormGroup; +} diff --git a/src/assets/constants/accountTypes.const.ts b/src/assets/constants/accountTypes.const.ts new file mode 100644 index 0000000..ae5dedc --- /dev/null +++ b/src/assets/constants/accountTypes.const.ts @@ -0,0 +1,17 @@ +export const AccountType = { + PARTNER: 'PARTNER', + CONSUMER: 'CONSUMER', + SUPER_ADMIN: 'SUPER_ADMIN', + ADMIN: 'ADMIN', + PROVIDER: 'PROVIDER', +} as const; + +export type AccountType = (typeof AccountType)[keyof typeof AccountType]; + +export const AccountTypeTranslates = { + PARTNER: 'شریک تجاری', + CONSUMER: 'مصرف کننده', + SUPER_ADMIN: 'مدیر کل سیستم', + ADMIN: 'مدیر', + PROVIDER: 'ارایه‌دهنده', +} as Record; diff --git a/src/assets/constants/index.ts b/src/assets/constants/index.ts index 7f05347..f6608b2 100644 --- a/src/assets/constants/index.ts +++ b/src/assets/constants/index.ts @@ -1,2 +1,4 @@ +export * from './accountTypes.const'; export * from './localStorageKeys.const'; +export * from './roleTypes.const'; export * from './userRoles.const'; diff --git a/src/assets/constants/roleTypes.const.ts b/src/assets/constants/roleTypes.const.ts new file mode 100644 index 0000000..6a9fc98 --- /dev/null +++ b/src/assets/constants/roleTypes.const.ts @@ -0,0 +1,59 @@ +export const PartnerRole = { + ADMIN: 'ADMIN', + OPERATOR: 'OPERATOR', +} as const; + +export type PartnerRole = (typeof PartnerRole)[keyof typeof PartnerRole]; + +export const partnerRoleTranslate = { + ADMIN: 'مدیر', + OPERATOR: 'اپراتور', +} as Record; + +export const ProviderRole = { + ADMIN: 'ADMIN', + OPERATOR: 'OPERATOR', +} as const; + +export type ProviderRole = (typeof ProviderRole)[keyof typeof ProviderRole]; + +export const providerRoleTranslate = { + ADMIN: 'مدیر', + OPERATOR: 'اپراتور', +} as Record; + +export const ComplexRole = { + ADMIN: 'ADMIN', + OPERATOR: 'OPERATOR', +} as const; + +export type ComplexRole = (typeof ComplexRole)[keyof typeof ComplexRole]; + +export const complexRoleTranslate = { + ADMIN: 'مدیر', + OPERATOR: 'اپراتور', +} as Record; + +export const BusinessRole = { + ADMIN: 'ADMIN', + OPERATOR: 'OPERATOR', +} as const; + +export type BusinessRole = (typeof BusinessRole)[keyof typeof BusinessRole]; + +export const businessRoleTranslate = { + ADMIN: 'مدیر', + OPERATOR: 'اپراتور', +} as Record; + +export const POSRole = { + ADMIN: 'ADMIN', + OPERATOR: 'OPERATOR', +} as const; + +export type POSRole = (typeof POSRole)[keyof typeof POSRole]; + +export const posRoleTranslate = { + ADMIN: 'مدیر', + OPERATOR: 'اپراتور', +} as Record;