@flusys/ng-auth 9.1.0-rc.1 → 9.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/fesm2022/flusys-ng-auth-administration-page.component-DmN4KqiR.mjs +146 -0
- package/fesm2022/flusys-ng-auth-administration-page.component-DmN4KqiR.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-branch-form.component-Df_sMC2G.mjs +743 -0
- package/fesm2022/flusys-ng-auth-branch-form.component-Df_sMC2G.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-branch-list.component-CWat6QWN.mjs +775 -0
- package/fesm2022/flusys-ng-auth-branch-list.component-CWat6QWN.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-company-form.component-BvZ4Pn8j.mjs +198 -0
- package/fesm2022/flusys-ng-auth-company-form.component-BvZ4Pn8j.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-company-list.component-Corh9AIh.mjs +241 -0
- package/fesm2022/flusys-ng-auth-company-list.component-Corh9AIh.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-extension-order.util-2XWSLqii.mjs +6 -0
- package/fesm2022/flusys-ng-auth-extension-order.util-2XWSLqii.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-forgot-password-page.component-BRTVZPX6.mjs +384 -0
- package/fesm2022/flusys-ng-auth-forgot-password-page.component-BRTVZPX6.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-login-page.component-DQl52Qau.mjs +1074 -0
- package/fesm2022/flusys-ng-auth-login-page.component-DQl52Qau.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-profile-page.component-b-8rPEXQ.mjs +1792 -0
- package/fesm2022/flusys-ng-auth-profile-page.component-b-8rPEXQ.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-register-page.component-D99y1jiA.mjs +1513 -0
- package/fesm2022/flusys-ng-auth-register-page.component-D99y1jiA.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-reset-password-page.component-C0tN_AW1.mjs +538 -0
- package/fesm2022/flusys-ng-auth-reset-password-page.component-C0tN_AW1.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-social-callback-page.component-gTD7_LJY.mjs +217 -0
- package/fesm2022/flusys-ng-auth-social-callback-page.component-gTD7_LJY.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-social-config-page.component-DpGmcb9n.mjs +541 -0
- package/fesm2022/flusys-ng-auth-social-config-page.component-DpGmcb9n.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-user-form.component-CM9UYc0q.mjs +1171 -0
- package/fesm2022/flusys-ng-auth-user-form.component-CM9UYc0q.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-user-list.component-Bew7gz-H.mjs +1046 -0
- package/fesm2022/flusys-ng-auth-user-list.component-Bew7gz-H.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth-verify-email-page.component-DB9iKvt3.mjs +545 -0
- package/fesm2022/flusys-ng-auth-verify-email-page.component-DB9iKvt3.mjs.map +1 -0
- package/fesm2022/flusys-ng-auth.mjs +3030 -10735
- package/fesm2022/flusys-ng-auth.mjs.map +1 -1
- package/package.json +5 -5
- package/types/flusys-ng-auth.d.ts +978 -1558
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flusys-ng-auth-branch-form.component-Df_sMC2G.mjs","names":[],"sources":["../../../projects/ng-auth/pages/branch/branch-form.component.ts"],"sourcesContent":["import { Component, computed, effect, inject, signal, untracked } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { form, FormField, required } from '@angular/forms/signals';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n CardComponent,\n CheckboxComponent,\n FButtonDirective,\n InputTextDirective,\n MessageService,\n SelectComponent,\n TreeNode,\n TreeSelectComponent,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport {\n buildBranchTreeNodes,\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport {\n IBranch,\n ICreateBranchRequest,\n IUpdateBranchRequest,\n} from '../../interfaces/branch.interface';\nimport { AuthStateService } from '../../services/auth-state.service';\nimport { BranchApiService } from '../../services/branch-api.service';\nimport { CompanyApiService } from '../../services/company-api.service';\n\nconst BRANCH_FORM_FIELDS = [\n 'id',\n 'companyId',\n 'parentId',\n 'name',\n 'slug',\n 'email',\n 'phone',\n 'address',\n 'isActive',\n 'readOnly',\n];\n\n/** Branch form model interface */\ninterface IBranchFormModel {\n companyId: string;\n parentId: string | null;\n name: string;\n slug: string;\n email: string;\n phone: string;\n address: string;\n isActive: boolean;\n}\n\n/**\n * Branch Form Component\n * Handles creating and editing branches.\n * Defaults to current company context.\n */\n@Component({\n selector: 'lib-branch-form',\n imports: [\n CardComponent,\n CheckboxComponent,\n FButtonDirective,\n InputTextDirective,\n SelectComponent,\n TreeSelectComponent,\n UiIconComponent,\n FormField,\n TranslatePipe,\n ],\n template: `\n <f-card>\n <ng-template #header>\n <div class=\"flex justify-between items-center p-4\">\n <h2 class=\"text-xl font-semibold m-0\">\n {{\n isEditMode()\n ? ('administrative.branch.edit' | translate)\n : ('administrative.branch.new' | translate)\n }}\n </h2>\n </div>\n </ng-template>\n\n <form\n (submit)=\"onSubmit($event)\"\n class=\"grid grid-cols-1 md:grid-cols-2 gap-4\"\n >\n <!-- Company Selection -->\n @if (!isEditMode()) {\n <div class=\"flex flex-col gap-2\">\n <label for=\"companyId\" class=\"font-medium\"\n >{{ 'shared.company' | translate }} *</label\n >\n <f-select\n inputId=\"companyId\"\n [options]=\"companies()\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [formField]=\"branchForm.companyId\"\n [placeholder]=\"'administrative.company.select' | translate\"\n />\n </div>\n }\n\n <div class=\"flex flex-col gap-2\">\n <label for=\"parentId\" class=\"font-medium\">{{\n 'administrative.branch.parent' | translate\n }}</label>\n <f-treeselect\n inputId=\"parentId\"\n [options]=\"parentTreeNodes()\"\n [formField]=\"branchForm.parentId\"\n [placeholder]=\"'administrative.branch.select.parent' | translate\"\n [filterPlaceholder]=\"'shared.search' | translate\"\n [emptyMessage]=\"'administrative.branch.no.branches' | translate\"\n [filter]=\"true\"\n [showClear]=\"true\"\n />\n </div>\n\n <!-- Name -->\n <div class=\"flex flex-col gap-2\">\n <label for=\"name\" class=\"font-medium\"\n >{{ 'administrative.branch.name' | translate }} *</label\n >\n <input\n fInputText\n id=\"name\"\n [formField]=\"branchForm.name\"\n (blur)=\"generateSlug()\"\n [placeholder]=\"'administrative.branch.name.placeholder' | translate\"\n />\n </div>\n\n <!-- Slug -->\n <div class=\"flex flex-col gap-2\">\n <label for=\"slug\" class=\"font-medium\"\n >{{ 'administrative.branch.slug' | translate }} *</label\n >\n <input\n fInputText\n id=\"slug\"\n [formField]=\"branchForm.slug\"\n [placeholder]=\"'administrative.branch.slug.placeholder' | translate\"\n />\n </div>\n\n <!-- Email -->\n <div class=\"flex flex-col gap-2\">\n <label for=\"email\" class=\"font-medium\">{{\n 'administrative.email.label' | translate\n }}</label>\n <input\n fInputText\n id=\"email\"\n type=\"email\"\n [formField]=\"branchForm.email\"\n [placeholder]=\"'administrative.email.placeholder' | translate\"\n />\n </div>\n\n <!-- Phone -->\n <div class=\"flex flex-col gap-2\">\n <label for=\"phone\" class=\"font-medium\">{{\n 'administrative.phone.label' | translate\n }}</label>\n <input\n fInputText\n id=\"phone\"\n [formField]=\"branchForm.phone\"\n [placeholder]=\"'administrative.phone.placeholder' | translate\"\n />\n </div>\n\n <!-- Is Active -->\n <div class=\"flex items-center pt-6\">\n <f-checkbox [formField]=\"branchForm.isActive\" [label]=\"'shared.active' | translate\" />\n </div>\n\n <!-- Address -->\n <div class=\"flex flex-col gap-2 md:col-span-2\">\n <label for=\"address\" class=\"font-medium\">{{\n 'administrative.address.label' | translate\n }}</label>\n <textarea\n id=\"address\"\n fInputText\n [formField]=\"branchForm.address\"\n [placeholder]=\"'administrative.address.placeholder' | translate\"\n rows=\"3\"\n ></textarea>\n </div>\n\n <!-- Actions -->\n <div class=\"flex justify-end gap-4 md:col-span-2 pt-4\">\n <button\n fButton\n type=\"button\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (click)=\"navigateToList()\"\n >\n <span pButtonLabel>{{ 'shared.cancel' | translate }}</span>\n </button>\n <button\n fButton\n type=\"submit\"\n [disabled]=\"!isFormValid() || isLoading()\"\n >\n @if (isLoading()) {\n <ui-icon pButtonIcon name=\"spinner\" [spin]=\"true\"></ui-icon>\n }\n <span pButtonLabel>{{ \n isEditMode()\n ? ('shared.update' | translate)\n : ('shared.create' | translate)\n }}</span>\n </button>\n </div>\n </form>\n </f-card>\n `,\n})\nexport class BranchFormComponent {\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly messageService = inject(MessageService);\n private readonly branchService = inject(BranchApiService);\n private readonly companyService = inject(CompanyApiService);\n private readonly authState = inject(AuthStateService);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n\n private translate(key: string, vars?: Record<string, unknown>): string {\n return this.translateAdapter?.translate(key, vars) ?? key;\n }\n\n // Route params as signals\n private readonly routeParams = toSignal(this.route.paramMap);\n private readonly queryParams = toSignal(this.route.queryParamMap);\n\n /** Loading state */\n readonly isLoading = signal(false);\n\n /** Existing branch data when editing */\n readonly existingBranch = signal<IBranch | null>(null);\n\n /** Whether in edit mode */\n readonly isEditMode = computed(() => !!this.existingBranch());\n\n /** Companies list for dropdown */\n readonly companies = this.companyService.data;\n\n private readonly companyBranches = signal<IBranch[]>([]);\n\n readonly parentTreeNodes = computed<TreeNode<IBranch>[]>(() =>\n buildBranchTreeNodes(this.companyBranches(), this.existingBranch()?.id),\n );\n\n private readonly selectedCompanyId = computed(() => this.formModel().companyId);\n\n // ============================================\n // Form (Signal Forms)\n // ============================================\n\n /** Form model */\n readonly formModel = signal<IBranchFormModel>({\n companyId: '',\n parentId: null,\n name: '',\n slug: '',\n email: '',\n phone: '',\n address: '',\n isActive: true,\n });\n\n /** Form with validation schema */\n readonly branchForm = form(this.formModel, (f) => {\n required(f.companyId, {\n message: this.translate('auth.validation.company.required'),\n });\n required(f.name, { message: this.translate('shared.name.required') });\n required(f.slug, {\n message: this.translate('administrative.branch.slug.required'),\n });\n });\n\n /** Check if form is valid */\n readonly isFormValid = computed(() => {\n const model = this.formModel();\n return (\n model.companyId.trim().length > 0 &&\n model.name.trim().length > 0 &&\n model.slug.trim().length > 0\n );\n });\n\n constructor() {\n // Load companies on initialization\n this.companyService.fetchList('', {\n pagination: { currentPage: 0, pageSize: 100 },\n });\n\n // Effect to handle route-based initialization\n effect(() => {\n const params = this.routeParams();\n const query = this.queryParams();\n if (!params) return;\n\n const id = params.get('id');\n if (id && id !== 'new') {\n this.loadBranch(id);\n } else {\n // Set company from query params or current company\n const queryCompanyId = query?.get('companyId');\n const currentCompanyId = this.authState.company()?.id;\n const companyId = queryCompanyId || currentCompanyId;\n\n const parentId = query?.get('parentId') || null;\n this.formModel.update((m) => ({\n ...m,\n companyId: companyId || m.companyId,\n parentId,\n }));\n }\n });\n\n effect(() => {\n const companyId = this.selectedCompanyId();\n untracked(() => this.loadCompanyBranches(companyId));\n });\n }\n\n private async loadCompanyBranches(companyId: string): Promise<void> {\n this.companyBranches.set([]);\n if (!companyId) return;\n try {\n const response = await this.branchService.getAll({\n filter: { companyId },\n pagination: { currentPage: 0, pageSize: 1000 },\n select: ['id', 'name', 'parentId', 'serial'],\n });\n if (this.selectedCompanyId() !== companyId) return;\n this.companyBranches.set(response?.success ? (response.data ?? []) : []);\n const parentId = this.formModel().parentId;\n if (parentId && !this.companyBranches().some((b) => b.id === parentId)) {\n this.formModel.update((m) => ({ ...m, parentId: null }));\n }\n } catch {\n // Error handled by global interceptor\n }\n }\n\n async loadBranch(id: string): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await this.branchService.findById(id, BRANCH_FORM_FIELDS);\n if (response.success && response.data) {\n this.existingBranch.set(response.data);\n this.formModel.set(this.toFormModel(response.data));\n }\n } catch {\n this.router.navigate(['/administration/branch']);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private toFormModel(branch: IBranch): IBranchFormModel {\n return {\n companyId: branch.companyId,\n parentId: branch.parentId ?? null,\n name: branch.name,\n slug: branch.slug,\n email: branch.email || '',\n phone: branch.phone || '',\n address: branch.address || '',\n isActive: branch.isActive,\n };\n }\n\n generateSlug(): void {\n const model = this.formModel();\n if (!model.slug && model.name) {\n const slug = model.name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n this.formModel.update((m) => ({ ...m, slug }));\n }\n }\n\n async onSubmit(event: Event): Promise<void> {\n event.preventDefault();\n\n if (!this.isFormValid()) {\n this.messageService.add({\n severity: 'error',\n summary: this.translate('shared.validation.error'),\n detail: this.translate('shared.fill.required.fields'),\n });\n return;\n }\n\n this.isLoading.set(true);\n\n try {\n if (this.isEditMode() && this.existingBranch()) {\n await this.updateBranch();\n } else {\n await this.createBranch();\n }\n this.navigateToList();\n } catch {\n // Error handled by global interceptor\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private async updateBranch(): Promise<void> {\n const model = this.formModel();\n const updateData: IUpdateBranchRequest = {\n id: this.existingBranch()!.id,\n name: model.name,\n slug: model.slug,\n ...this.buildOptionalFields(model),\n };\n const response = await this.branchService.update(updateData);\n this.onSaveSuccess(\n response.messageKey\n ? this.translate(\n response.messageKey,\n response.messageVariables as Record<string, unknown>,\n )\n : response.message,\n );\n }\n\n private async createBranch(): Promise<void> {\n const model = this.formModel();\n const createData: ICreateBranchRequest = {\n companyId: model.companyId,\n name: model.name,\n slug: model.slug,\n ...this.buildOptionalFields(model),\n };\n const response = await this.branchService.insert(createData);\n this.onSaveSuccess(\n response.messageKey\n ? this.translate(\n response.messageKey,\n response.messageVariables as Record<string, string | number>,\n )\n : (response.message ?? ''),\n );\n }\n\n private buildOptionalFields(model: IBranchFormModel) {\n return {\n parentId: model.parentId || null,\n email: model.email || undefined,\n phone: model.phone || undefined,\n address: model.address || undefined,\n isActive: model.isActive,\n };\n }\n\n private onSaveSuccess(message: string): void {\n this.messageService.add({\n severity: 'success',\n summary: this.translate('shared.success'),\n detail: message,\n });\n }\n\n private getTargetCompanyId(): string | null {\n return (\n this.existingBranch()?.companyId || this.formModel().companyId || null\n );\n }\n\n protected navigateToList(): void {\n const companyId = this.getTargetCompanyId();\n this.router.navigate(['/administration/branch'], {\n queryParams: companyId ? { companyId } : {},\n });\n }\n}\n"],"mappings":"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"}
|