@isaiahiroko/tilmart-ngx-apps-admin 0.2.3 → 0.2.4

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.
@@ -5,7 +5,7 @@ import { RouterModule } from '@angular/router';
5
5
  import { BaseDirective, titleCase, using, notify, SharedModule } from '@thescaffold/ngx-core';
6
6
  import * as i2 from '@thescaffold/ngx-ui';
7
7
  import { ElementsModule, WebgetsModule } from '@thescaffold/ngx-ui';
8
- import { BehaviorSubject, takeUntil, map, firstValueFrom } from 'rxjs';
8
+ import { BehaviorSubject, firstValueFrom, takeUntil, map } from 'rxjs';
9
9
  import * as i1 from '@angular/forms';
10
10
  import * as i3 from '@angular/common';
11
11
 
@@ -58,8 +58,12 @@ class SettingsComponent extends BaseDirective {
58
58
  ],
59
59
  fields: [
60
60
  { key: 'name', label: 'Name', type: 'text', required: true },
61
- { key: 'state', label: 'State', type: 'text', required: true },
62
- { key: 'lga', label: 'LGA', type: 'text' },
61
+ // Populated from `apps/commerce/static-list-item` in `init()` below
62
+ // (StaticLists) — this form has no per-field dependent-options
63
+ // support, so LGA lists every LGA rather than just the picked
64
+ // state's (leave blank on the zone itself for a whole-state zone).
65
+ { key: 'state', label: 'State', type: 'select', required: true, options: [] },
66
+ { key: 'lga', label: 'LGA (blank = whole state)', type: 'select', options: [] },
63
67
  ],
64
68
  data$: new BehaviorSubject(null),
65
69
  page: 1,
@@ -163,11 +167,51 @@ class SettingsComponent extends BaseDirective {
163
167
  this.init = () => {
164
168
  for (const section of this.sections)
165
169
  this.load(section);
170
+ void this.loadZoneOptions();
166
171
  };
167
172
  }
168
173
  get activeSection() {
169
174
  return this.sections.find((s) => s.key === this.active);
170
175
  }
176
+ async loadZoneOptions() {
177
+ const zones = this.sections.find((s) => s.key === 'zones');
178
+ const stateField = zones.fields.find((f) => f.key === 'state');
179
+ const lgaField = zones.fields.find((f) => f.key === 'lga');
180
+ const [statesRes, lgaRows] = await Promise.all([
181
+ firstValueFrom(this.apiService.on('apps/commerce/static-list-item').getMany({
182
+ listKey: 'ng-state',
183
+ perPage: 200,
184
+ })),
185
+ this.fetchAllPages({ listKey: 'ng-lga' }),
186
+ ]);
187
+ stateField.options = (statesRes?.data ?? []).map((r) => ({
188
+ value: r.code,
189
+ label: r.label,
190
+ }));
191
+ lgaField.options = lgaRows.map((r) => ({
192
+ value: r.code,
193
+ label: `${r.label} (${r.parentCode})`,
194
+ }));
195
+ }
196
+ // The CRUD list endpoint caps `perPage` at 200 server-side regardless of
197
+ // what's asked for — 774 LGAs need 4 pages.
198
+ async fetchAllPages(filter) {
199
+ const rows = [];
200
+ let page = 1;
201
+ for (;;) {
202
+ const res = await firstValueFrom(this.apiService.on('apps/commerce/static-list-item').getMany({
203
+ ...filter,
204
+ page,
205
+ perPage: 200,
206
+ }));
207
+ const batch = res?.data ?? [];
208
+ rows.push(...batch);
209
+ if (batch.length < 200)
210
+ break;
211
+ page++;
212
+ }
213
+ return rows;
214
+ }
171
215
  load(section, page = section.page, query = section.query) {
172
216
  section.page = page;
173
217
  section.query = query;
@@ -315,4 +359,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
315
359
  }] });
316
360
 
317
361
  export { SettingsModule };
318
- //# sourceMappingURL=isaiahiroko-tilmart-ngx-apps-admin-settings.module-Cz6xPNwB.mjs.map
362
+ //# sourceMappingURL=isaiahiroko-tilmart-ngx-apps-admin-settings.module-CFVgAQ2f.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isaiahiroko-tilmart-ngx-apps-admin-settings.module-CFVgAQ2f.mjs","sources":["../../../projects/admin/src/lib/pages/settings/settings.component.ts","../../../projects/admin/src/lib/pages/settings/settings.component.html","../../../projects/admin/src/lib/pages/settings/settings.module.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { BaseDirective, notify, titleCase, using } from '@thescaffold/ngx-core';\nimport { BehaviorSubject, firstValueFrom, map, takeUntil } from 'rxjs';\nimport { CrudFieldSpec } from '../_shared/simple-crud.base';\n\ninterface Section {\n key: string;\n title: string;\n singularLabel: string;\n mount: string;\n columns: { key: string; value: string; type?: string; class?: string }[];\n fields: CrudFieldSpec[];\n data$: BehaviorSubject<any>;\n page: number;\n query?: string;\n}\n\n// R1 production-readiness pass — ADM-12 / ORD-05. P7.1's original\n// version stacked these four config resources as read-only lists; ops\n// had no way to add a channel, shipping zone, shipping method or return\n// policy \"without a deploy\" (ADM-12's own words). Same field-by-field\n// form idea as `SimpleCrudDirective`, adapted for four resources sharing\n// one tabbed page rather than one resource per route.\n@Component({\n standalone: false,\n selector: 'x-settings',\n templateUrl: './settings.component.html',\n styleUrl: './settings.component.scss',\n})\nexport class SettingsComponent extends BaseDirective {\n readonly sections: Section[] = [\n {\n key: 'channels',\n title: 'Channels',\n singularLabel: 'channel',\n mount: 'apps/commerce/channel',\n columns: [\n { key: 'name', value: 'Name' },\n { key: 'code', value: 'Code' },\n { key: 'currency', value: 'Currency' },\n ],\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true },\n { key: 'code', label: 'Code', type: 'text', required: true, placeholder: 'e.g. web-ng' },\n { key: 'currency', label: 'Currency', type: 'text', placeholder: 'NGN' },\n {\n key: 'taxMode',\n label: 'Tax mode',\n type: 'select',\n options: [\n { value: 'inclusive', label: 'Inclusive' },\n { value: 'exclusive', label: 'Exclusive' },\n ],\n },\n ],\n data$: new BehaviorSubject<any>(null),\n page: 1,\n },\n {\n key: 'zones',\n title: 'Shipping zones',\n singularLabel: 'shipping zone',\n mount: 'apps/commerce/delivery-zone',\n columns: [\n { key: 'name', value: 'Name' },\n { key: 'state', value: 'State' },\n { key: 'lga', value: 'LGA' },\n ],\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true },\n // Populated from `apps/commerce/static-list-item` in `init()` below\n // (StaticLists) — this form has no per-field dependent-options\n // support, so LGA lists every LGA rather than just the picked\n // state's (leave blank on the zone itself for a whole-state zone).\n { key: 'state', label: 'State', type: 'select', required: true, options: [] },\n { key: 'lga', label: 'LGA (blank = whole state)', type: 'select', options: [] },\n ],\n data$: new BehaviorSubject<any>(null),\n page: 1,\n },\n {\n key: 'methods',\n title: 'Shipping methods',\n singularLabel: 'shipping method',\n mount: 'apps/commerce/delivery-method',\n columns: [\n { key: 'name', value: 'Name' },\n { key: 'flatFee', value: 'Flat fee' },\n { key: 'perKg', value: 'Per kg' },\n {\n key: 'enabled',\n value: 'Enabled',\n type: 'class',\n class: 'badge text-bg-light border',\n },\n ],\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true },\n {\n key: 'type',\n label: 'Type',\n type: 'select',\n options: [\n { value: 'door', label: 'Door delivery' },\n { value: 'express', label: 'Express' },\n { value: 'pickup', label: 'Pickup' },\n { value: 'scheduled', label: 'Scheduled' },\n { value: 'freight', label: 'Freight' },\n ],\n },\n { key: 'estimateDaysMin', label: 'Estimate — min days', type: 'number' },\n { key: 'estimateDaysMax', label: 'Estimate — max days', type: 'number' },\n { key: 'enabled', label: 'Enabled', type: 'boolean' },\n {\n key: 'rateRules',\n label: 'Rate rules (JSON array)',\n type: 'json',\n placeholder: '[{\"zoneId\": null, \"flatFee\": 2000, \"perKg\": 150}]',\n },\n ],\n data$: new BehaviorSubject<any>(null),\n page: 1,\n },\n {\n key: 'returns',\n title: 'Return policies',\n singularLabel: 'return policy',\n mount: 'apps/commerce/return-policy',\n columns: [\n { key: 'windowDays', value: 'Window (days)' },\n { key: 'restockingFeePct', value: 'Restock fee %' },\n { key: 'whoPaysReturn', value: 'Who pays' },\n {\n key: 'enabled',\n value: 'Enabled',\n type: 'class',\n class: 'badge text-bg-light border',\n },\n ],\n fields: [\n { key: 'windowDays', label: 'Return window (days)', type: 'number', required: true },\n {\n key: 'reasonCode',\n label: 'Reason code (blank = default policy)',\n type: 'select',\n options: [\n { value: 'damaged_in_transit', label: 'Damaged in transit' },\n { value: 'wrong_item', label: 'Wrong item' },\n { value: 'not_as_described', label: 'Not as described' },\n { value: 'faulty_on_arrival', label: 'Faulty on arrival' },\n { value: 'changed_mind', label: 'Changed mind' },\n { value: 'missing_parts', label: 'Missing parts' },\n ],\n },\n { key: 'restockingFeePct', label: 'Restocking fee %', type: 'number' },\n {\n key: 'whoPaysReturn',\n label: 'Who pays for return shipping',\n type: 'select',\n options: [\n { value: 'customer', label: 'Customer' },\n { value: 'tilmart', label: 'Tilmart' },\n { value: 'seller', label: 'Seller' },\n ],\n },\n { key: 'allowChangeOfMind', label: 'Allow change-of-mind returns', type: 'boolean' },\n { key: 'enabled', label: 'Enabled', type: 'boolean' },\n ],\n data$: new BehaviorSubject<any>(null),\n page: 1,\n },\n ];\n\n active = this.sections[0].key;\n editing = false;\n saving = false;\n draft: Record<string, any> | null = null;\n\n get activeSection(): Section {\n return this.sections.find((s) => s.key === this.active)!;\n }\n\n override init = () => {\n for (const section of this.sections) this.load(section);\n void this.loadZoneOptions();\n };\n\n private async loadZoneOptions(): Promise<void> {\n const zones = this.sections.find((s) => s.key === 'zones')!;\n const stateField = zones.fields.find((f) => f.key === 'state')!;\n const lgaField = zones.fields.find((f) => f.key === 'lga')!;\n const [statesRes, lgaRows]: any[] = await Promise.all([\n firstValueFrom(\n this.apiService.on('apps/commerce/static-list-item').getMany({\n listKey: 'ng-state',\n perPage: 200,\n } as any),\n ),\n this.fetchAllPages({ listKey: 'ng-lga' }),\n ]);\n stateField.options = (statesRes?.data ?? []).map((r: any) => ({\n value: r.code,\n label: r.label,\n }));\n lgaField.options = lgaRows.map((r: any) => ({\n value: r.code,\n label: `${r.label} (${r.parentCode})`,\n }));\n }\n\n // The CRUD list endpoint caps `perPage` at 200 server-side regardless of\n // what's asked for — 774 LGAs need 4 pages.\n private async fetchAllPages(filter: Record<string, unknown>): Promise<any[]> {\n const rows: any[] = [];\n let page = 1;\n for (;;) {\n const res: any = await firstValueFrom(\n this.apiService.on('apps/commerce/static-list-item').getMany({\n ...filter,\n page,\n perPage: 200,\n } as any),\n );\n const batch = res?.data ?? [];\n rows.push(...batch);\n if (batch.length < 200) break;\n page++;\n }\n return rows;\n }\n\n private load(section: Section, page = section.page, query = section.query): void {\n section.page = page;\n section.query = query;\n const params: any = { page, perPage: 100 };\n if (query) params.query = query;\n this.apiService\n .on(section.mount)\n .getMany(params)\n .pipe(\n takeUntil(this.$),\n map((response: any) => ({\n title: titleCase(section.title),\n columns: section.columns,\n rows: response?.data,\n hasHeaders: true,\n hasTextFilter: true,\n page: response?.meta?.current_page,\n perPage: response?.meta?.per_page,\n total: response?.meta?.total,\n onPage: (p: number) => this.load(section, p, query),\n onSearch: (q: string) => this.load(section, 1, q),\n onRefresh: () => this.load(section, page, query),\n links: {\n secondary: [{ title: 'Edit', fn: (_l: any, item: any) => this.edit(item) }],\n },\n })),\n )\n .subscribe(using((data) => section.data$.next(data)));\n }\n\n selectTab(key: string): void {\n this.active = key;\n this.editing = false;\n this.draft = null;\n }\n\n startCreate(): void {\n this.editing = true;\n const draft: Record<string, any> = {};\n for (const field of this.activeSection.fields) {\n draft[field.key] = field.type === 'boolean' ? false : '';\n }\n this.draft = draft;\n }\n\n edit(item: any): void {\n this.editing = true;\n const draft = { ...item };\n for (const field of this.activeSection.fields) {\n if (field.type === 'json' && draft[field.key] != null && typeof draft[field.key] !== 'string') {\n draft[field.key] = JSON.stringify(draft[field.key], null, 2);\n }\n }\n this.draft = draft;\n }\n\n cancelEdit(): void {\n this.editing = false;\n this.draft = null;\n }\n\n async save(): Promise<void> {\n if (!this.draft) return;\n const section = this.activeSection;\n this.saving = true;\n try {\n const payload: Record<string, any> = {};\n for (const field of section.fields) {\n const raw = this.draft[field.key];\n if (field.type === 'number') {\n payload[field.key] = raw !== null && raw !== undefined && `${raw}` !== '' ? Number(raw) : undefined;\n } else if (field.type === 'boolean') {\n payload[field.key] = !!raw;\n } else if (field.type === 'json') {\n try {\n payload[field.key] = raw && `${raw}`.trim() ? JSON.parse(raw) : undefined;\n } catch {\n payload[field.key] = undefined;\n }\n } else {\n payload[field.key] = raw || undefined;\n }\n }\n\n const source = this.apiService.on(section.mount);\n if (this.draft['id']) {\n await firstValueFrom(source.update(this.draft['id'], payload));\n } else {\n await firstValueFrom(source.create(payload));\n }\n notify(`${titleCase(section.singularLabel)} saved.`, undefined, 'success');\n this.editing = false;\n this.draft = null;\n this.load(section, section.page, section.query);\n } catch {\n notify('Could not save (check required fields).', undefined, 'error');\n } finally {\n this.saving = false;\n }\n }\n\n async remove(): Promise<void> {\n if (!this.draft?.['id']) return;\n const section = this.activeSection;\n try {\n await firstValueFrom(this.apiService.on(section.mount).remove(this.draft['id']));\n notify(`${titleCase(section.singularLabel)} deleted.`, undefined, 'success');\n this.editing = false;\n this.draft = null;\n this.load(section, section.page, section.query);\n } catch {\n notify('Could not delete — it may still be referenced elsewhere.', undefined, 'error');\n }\n }\n}\n","<div class=\"x-page-head\">\n <div class=\"x-page-title\">Settings</div>\n <div class=\"x-page-subtitle\">\n Channels, shipping and returns configuration.\n </div>\n</div>\n\n<nav class=\"x-settings-tabs\">\n @for (s of sections; track s.key) {\n <button\n type=\"button\"\n class=\"x-settings-tab\"\n [class.is-active]=\"active === s.key\"\n (click)=\"selectTab(s.key)\"\n >\n {{ s.title }}\n </button>\n }\n</nav>\n\n@for (s of sections; track s.key) {\n @if (active === s.key) {\n @if (!editing) {\n <div class=\"x-settings-toolbar\">\n <button type=\"button\" class=\"x-settings-btn x-settings-btn-primary\" (click)=\"startCreate()\">\n + New {{ s.singularLabel }}\n </button>\n </div>\n @if (s.data$ | async; as list) {\n <x-webget-collection [data]=\"list\"></x-webget-collection>\n } @else {\n <x-element-loader></x-element-loader>\n }\n } @else if (draft) {\n <div class=\"x-settings-editor\">\n <div class=\"x-settings-editor-head\">\n <div class=\"x-settings-editor-title\">{{ draft['id'] ? 'Edit' : 'New' }} {{ s.singularLabel }}</div>\n <div class=\"x-settings-editor-actions\">\n @if (draft['id']) {\n <button type=\"button\" class=\"x-settings-btn x-settings-danger\" (click)=\"remove()\">Delete</button>\n }\n <button type=\"button\" class=\"x-settings-btn\" (click)=\"cancelEdit()\">Close</button>\n <button type=\"button\" class=\"x-settings-btn x-settings-btn-primary\" [disabled]=\"saving\" (click)=\"save()\">\n {{ saving ? 'Saving…' : 'Save' }}\n </button>\n </div>\n </div>\n\n <div class=\"x-settings-grid\">\n @for (f of s.fields; track f.key) {\n <label class=\"x-settings-f\" [class.x-settings-f-wide]=\"f.type === 'textarea' || f.type === 'json'\">\n {{ f.label }}\n @if (f.required) {\n <span class=\"x-settings-required\">*</span>\n }\n @switch (f.type) {\n @case ('boolean') {\n <input type=\"checkbox\" [(ngModel)]=\"draft[f.key]\" />\n }\n @case ('select') {\n <select [(ngModel)]=\"draft[f.key]\">\n <option value=\"\">— choose —</option>\n @for (opt of f.options; track opt.value) {\n <option [value]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n }\n @case ('json') {\n <textarea rows=\"4\" class=\"x-settings-json\" [(ngModel)]=\"draft[f.key]\" [placeholder]=\"f.placeholder || '{}'\"></textarea>\n }\n @case ('number') {\n <input type=\"number\" [(ngModel)]=\"draft[f.key]\" [placeholder]=\"f.placeholder || ''\" />\n }\n @default {\n <input type=\"text\" [(ngModel)]=\"draft[f.key]\" [placeholder]=\"f.placeholder || ''\" />\n }\n }\n </label>\n }\n </div>\n </div>\n }\n }\n}\n\n<div class=\"x-settings-more\">\n <p>\n <strong>Users &amp; roles</strong> —\n <a routerLink=\"/admin/users\">manage accounts</a>.\n </p>\n <p>\n <strong>Notifications</strong> — transactional and marketing templates\n are seeded per environment (NotificationTemplates); per-customer\n preferences are on the customer record.\n </p>\n <p class=\"x-settings-audit\">\n <strong>Audit log</strong> — every privileged action is recorded\n (ntx-apps-audit); <a routerLink=\"/admin/audit\">open the viewer</a>.\n </p>\n</div>\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SharedModule } from '@thescaffold/ngx-core';\nimport { ElementsModule, WebgetsModule } from '@thescaffold/ngx-ui';\nimport { SettingsComponent } from './settings.component';\n\n@NgModule({\n declarations: [SettingsComponent],\n imports: [\n SharedModule,\n ElementsModule,\n WebgetsModule,\n RouterModule.forChild([{ path: '', component: SettingsComponent }]),\n ],\n})\nexport class SettingsModule {}\n"],"names":["i2","i3","i4","i1"],"mappings":"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"}
@@ -248,7 +248,7 @@ class PagesModule {
248
248
  },
249
249
  {
250
250
  path: 'settings',
251
- loadChildren: () => import('./isaiahiroko-tilmart-ngx-apps-admin-settings.module-Cz6xPNwB.mjs').then((m) => m.SettingsModule),
251
+ loadChildren: () => import('./isaiahiroko-tilmart-ngx-apps-admin-settings.module-CFVgAQ2f.mjs').then((m) => m.SettingsModule),
252
252
  },
253
253
  {
254
254
  // P7.3 — queues + SLA board, cron catalogue.
@@ -438,7 +438,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
438
438
  },
439
439
  {
440
440
  path: 'settings',
441
- loadChildren: () => import('./isaiahiroko-tilmart-ngx-apps-admin-settings.module-Cz6xPNwB.mjs').then((m) => m.SettingsModule),
441
+ loadChildren: () => import('./isaiahiroko-tilmart-ngx-apps-admin-settings.module-CFVgAQ2f.mjs').then((m) => m.SettingsModule),
442
442
  },
443
443
  {
444
444
  // P7.3 — queues + SLA board, cron catalogue.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isaiahiroko/tilmart-ngx-apps-admin",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": "^21.1.3",
6
6
  "@angular/common": "^21.1.3",
@@ -1 +0,0 @@
1
- {"version":3,"file":"isaiahiroko-tilmart-ngx-apps-admin-settings.module-Cz6xPNwB.mjs","sources":["../../../projects/admin/src/lib/pages/settings/settings.component.ts","../../../projects/admin/src/lib/pages/settings/settings.component.html","../../../projects/admin/src/lib/pages/settings/settings.module.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { BaseDirective, notify, titleCase, using } from '@thescaffold/ngx-core';\nimport { BehaviorSubject, firstValueFrom, map, takeUntil } from 'rxjs';\nimport { CrudFieldSpec } from '../_shared/simple-crud.base';\n\ninterface Section {\n key: string;\n title: string;\n singularLabel: string;\n mount: string;\n columns: { key: string; value: string; type?: string; class?: string }[];\n fields: CrudFieldSpec[];\n data$: BehaviorSubject<any>;\n page: number;\n query?: string;\n}\n\n// R1 production-readiness pass — ADM-12 / ORD-05. P7.1's original\n// version stacked these four config resources as read-only lists; ops\n// had no way to add a channel, shipping zone, shipping method or return\n// policy \"without a deploy\" (ADM-12's own words). Same field-by-field\n// form idea as `SimpleCrudDirective`, adapted for four resources sharing\n// one tabbed page rather than one resource per route.\n@Component({\n standalone: false,\n selector: 'x-settings',\n templateUrl: './settings.component.html',\n styleUrl: './settings.component.scss',\n})\nexport class SettingsComponent extends BaseDirective {\n readonly sections: Section[] = [\n {\n key: 'channels',\n title: 'Channels',\n singularLabel: 'channel',\n mount: 'apps/commerce/channel',\n columns: [\n { key: 'name', value: 'Name' },\n { key: 'code', value: 'Code' },\n { key: 'currency', value: 'Currency' },\n ],\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true },\n { key: 'code', label: 'Code', type: 'text', required: true, placeholder: 'e.g. web-ng' },\n { key: 'currency', label: 'Currency', type: 'text', placeholder: 'NGN' },\n {\n key: 'taxMode',\n label: 'Tax mode',\n type: 'select',\n options: [\n { value: 'inclusive', label: 'Inclusive' },\n { value: 'exclusive', label: 'Exclusive' },\n ],\n },\n ],\n data$: new BehaviorSubject<any>(null),\n page: 1,\n },\n {\n key: 'zones',\n title: 'Shipping zones',\n singularLabel: 'shipping zone',\n mount: 'apps/commerce/delivery-zone',\n columns: [\n { key: 'name', value: 'Name' },\n { key: 'state', value: 'State' },\n { key: 'lga', value: 'LGA' },\n ],\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true },\n { key: 'state', label: 'State', type: 'text', required: true },\n { key: 'lga', label: 'LGA', type: 'text' },\n ],\n data$: new BehaviorSubject<any>(null),\n page: 1,\n },\n {\n key: 'methods',\n title: 'Shipping methods',\n singularLabel: 'shipping method',\n mount: 'apps/commerce/delivery-method',\n columns: [\n { key: 'name', value: 'Name' },\n { key: 'flatFee', value: 'Flat fee' },\n { key: 'perKg', value: 'Per kg' },\n {\n key: 'enabled',\n value: 'Enabled',\n type: 'class',\n class: 'badge text-bg-light border',\n },\n ],\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true },\n {\n key: 'type',\n label: 'Type',\n type: 'select',\n options: [\n { value: 'door', label: 'Door delivery' },\n { value: 'express', label: 'Express' },\n { value: 'pickup', label: 'Pickup' },\n { value: 'scheduled', label: 'Scheduled' },\n { value: 'freight', label: 'Freight' },\n ],\n },\n { key: 'estimateDaysMin', label: 'Estimate — min days', type: 'number' },\n { key: 'estimateDaysMax', label: 'Estimate — max days', type: 'number' },\n { key: 'enabled', label: 'Enabled', type: 'boolean' },\n {\n key: 'rateRules',\n label: 'Rate rules (JSON array)',\n type: 'json',\n placeholder: '[{\"zoneId\": null, \"flatFee\": 2000, \"perKg\": 150}]',\n },\n ],\n data$: new BehaviorSubject<any>(null),\n page: 1,\n },\n {\n key: 'returns',\n title: 'Return policies',\n singularLabel: 'return policy',\n mount: 'apps/commerce/return-policy',\n columns: [\n { key: 'windowDays', value: 'Window (days)' },\n { key: 'restockingFeePct', value: 'Restock fee %' },\n { key: 'whoPaysReturn', value: 'Who pays' },\n {\n key: 'enabled',\n value: 'Enabled',\n type: 'class',\n class: 'badge text-bg-light border',\n },\n ],\n fields: [\n { key: 'windowDays', label: 'Return window (days)', type: 'number', required: true },\n {\n key: 'reasonCode',\n label: 'Reason code (blank = default policy)',\n type: 'select',\n options: [\n { value: 'damaged_in_transit', label: 'Damaged in transit' },\n { value: 'wrong_item', label: 'Wrong item' },\n { value: 'not_as_described', label: 'Not as described' },\n { value: 'faulty_on_arrival', label: 'Faulty on arrival' },\n { value: 'changed_mind', label: 'Changed mind' },\n { value: 'missing_parts', label: 'Missing parts' },\n ],\n },\n { key: 'restockingFeePct', label: 'Restocking fee %', type: 'number' },\n {\n key: 'whoPaysReturn',\n label: 'Who pays for return shipping',\n type: 'select',\n options: [\n { value: 'customer', label: 'Customer' },\n { value: 'tilmart', label: 'Tilmart' },\n { value: 'seller', label: 'Seller' },\n ],\n },\n { key: 'allowChangeOfMind', label: 'Allow change-of-mind returns', type: 'boolean' },\n { key: 'enabled', label: 'Enabled', type: 'boolean' },\n ],\n data$: new BehaviorSubject<any>(null),\n page: 1,\n },\n ];\n\n active = this.sections[0].key;\n editing = false;\n saving = false;\n draft: Record<string, any> | null = null;\n\n get activeSection(): Section {\n return this.sections.find((s) => s.key === this.active)!;\n }\n\n override init = () => {\n for (const section of this.sections) this.load(section);\n };\n\n private load(section: Section, page = section.page, query = section.query): void {\n section.page = page;\n section.query = query;\n const params: any = { page, perPage: 100 };\n if (query) params.query = query;\n this.apiService\n .on(section.mount)\n .getMany(params)\n .pipe(\n takeUntil(this.$),\n map((response: any) => ({\n title: titleCase(section.title),\n columns: section.columns,\n rows: response?.data,\n hasHeaders: true,\n hasTextFilter: true,\n page: response?.meta?.current_page,\n perPage: response?.meta?.per_page,\n total: response?.meta?.total,\n onPage: (p: number) => this.load(section, p, query),\n onSearch: (q: string) => this.load(section, 1, q),\n onRefresh: () => this.load(section, page, query),\n links: {\n secondary: [{ title: 'Edit', fn: (_l: any, item: any) => this.edit(item) }],\n },\n })),\n )\n .subscribe(using((data) => section.data$.next(data)));\n }\n\n selectTab(key: string): void {\n this.active = key;\n this.editing = false;\n this.draft = null;\n }\n\n startCreate(): void {\n this.editing = true;\n const draft: Record<string, any> = {};\n for (const field of this.activeSection.fields) {\n draft[field.key] = field.type === 'boolean' ? false : '';\n }\n this.draft = draft;\n }\n\n edit(item: any): void {\n this.editing = true;\n const draft = { ...item };\n for (const field of this.activeSection.fields) {\n if (field.type === 'json' && draft[field.key] != null && typeof draft[field.key] !== 'string') {\n draft[field.key] = JSON.stringify(draft[field.key], null, 2);\n }\n }\n this.draft = draft;\n }\n\n cancelEdit(): void {\n this.editing = false;\n this.draft = null;\n }\n\n async save(): Promise<void> {\n if (!this.draft) return;\n const section = this.activeSection;\n this.saving = true;\n try {\n const payload: Record<string, any> = {};\n for (const field of section.fields) {\n const raw = this.draft[field.key];\n if (field.type === 'number') {\n payload[field.key] = raw !== null && raw !== undefined && `${raw}` !== '' ? Number(raw) : undefined;\n } else if (field.type === 'boolean') {\n payload[field.key] = !!raw;\n } else if (field.type === 'json') {\n try {\n payload[field.key] = raw && `${raw}`.trim() ? JSON.parse(raw) : undefined;\n } catch {\n payload[field.key] = undefined;\n }\n } else {\n payload[field.key] = raw || undefined;\n }\n }\n\n const source = this.apiService.on(section.mount);\n if (this.draft['id']) {\n await firstValueFrom(source.update(this.draft['id'], payload));\n } else {\n await firstValueFrom(source.create(payload));\n }\n notify(`${titleCase(section.singularLabel)} saved.`, undefined, 'success');\n this.editing = false;\n this.draft = null;\n this.load(section, section.page, section.query);\n } catch {\n notify('Could not save (check required fields).', undefined, 'error');\n } finally {\n this.saving = false;\n }\n }\n\n async remove(): Promise<void> {\n if (!this.draft?.['id']) return;\n const section = this.activeSection;\n try {\n await firstValueFrom(this.apiService.on(section.mount).remove(this.draft['id']));\n notify(`${titleCase(section.singularLabel)} deleted.`, undefined, 'success');\n this.editing = false;\n this.draft = null;\n this.load(section, section.page, section.query);\n } catch {\n notify('Could not delete — it may still be referenced elsewhere.', undefined, 'error');\n }\n }\n}\n","<div class=\"x-page-head\">\n <div class=\"x-page-title\">Settings</div>\n <div class=\"x-page-subtitle\">\n Channels, shipping and returns configuration.\n </div>\n</div>\n\n<nav class=\"x-settings-tabs\">\n @for (s of sections; track s.key) {\n <button\n type=\"button\"\n class=\"x-settings-tab\"\n [class.is-active]=\"active === s.key\"\n (click)=\"selectTab(s.key)\"\n >\n {{ s.title }}\n </button>\n }\n</nav>\n\n@for (s of sections; track s.key) {\n @if (active === s.key) {\n @if (!editing) {\n <div class=\"x-settings-toolbar\">\n <button type=\"button\" class=\"x-settings-btn x-settings-btn-primary\" (click)=\"startCreate()\">\n + New {{ s.singularLabel }}\n </button>\n </div>\n @if (s.data$ | async; as list) {\n <x-webget-collection [data]=\"list\"></x-webget-collection>\n } @else {\n <x-element-loader></x-element-loader>\n }\n } @else if (draft) {\n <div class=\"x-settings-editor\">\n <div class=\"x-settings-editor-head\">\n <div class=\"x-settings-editor-title\">{{ draft['id'] ? 'Edit' : 'New' }} {{ s.singularLabel }}</div>\n <div class=\"x-settings-editor-actions\">\n @if (draft['id']) {\n <button type=\"button\" class=\"x-settings-btn x-settings-danger\" (click)=\"remove()\">Delete</button>\n }\n <button type=\"button\" class=\"x-settings-btn\" (click)=\"cancelEdit()\">Close</button>\n <button type=\"button\" class=\"x-settings-btn x-settings-btn-primary\" [disabled]=\"saving\" (click)=\"save()\">\n {{ saving ? 'Saving…' : 'Save' }}\n </button>\n </div>\n </div>\n\n <div class=\"x-settings-grid\">\n @for (f of s.fields; track f.key) {\n <label class=\"x-settings-f\" [class.x-settings-f-wide]=\"f.type === 'textarea' || f.type === 'json'\">\n {{ f.label }}\n @if (f.required) {\n <span class=\"x-settings-required\">*</span>\n }\n @switch (f.type) {\n @case ('boolean') {\n <input type=\"checkbox\" [(ngModel)]=\"draft[f.key]\" />\n }\n @case ('select') {\n <select [(ngModel)]=\"draft[f.key]\">\n <option value=\"\">— choose —</option>\n @for (opt of f.options; track opt.value) {\n <option [value]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n }\n @case ('json') {\n <textarea rows=\"4\" class=\"x-settings-json\" [(ngModel)]=\"draft[f.key]\" [placeholder]=\"f.placeholder || '{}'\"></textarea>\n }\n @case ('number') {\n <input type=\"number\" [(ngModel)]=\"draft[f.key]\" [placeholder]=\"f.placeholder || ''\" />\n }\n @default {\n <input type=\"text\" [(ngModel)]=\"draft[f.key]\" [placeholder]=\"f.placeholder || ''\" />\n }\n }\n </label>\n }\n </div>\n </div>\n }\n }\n}\n\n<div class=\"x-settings-more\">\n <p>\n <strong>Users &amp; roles</strong> —\n <a routerLink=\"/admin/users\">manage accounts</a>.\n </p>\n <p>\n <strong>Notifications</strong> — transactional and marketing templates\n are seeded per environment (NotificationTemplates); per-customer\n preferences are on the customer record.\n </p>\n <p class=\"x-settings-audit\">\n <strong>Audit log</strong> — every privileged action is recorded\n (ntx-apps-audit); <a routerLink=\"/admin/audit\">open the viewer</a>.\n </p>\n</div>\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SharedModule } from '@thescaffold/ngx-core';\nimport { ElementsModule, WebgetsModule } from '@thescaffold/ngx-ui';\nimport { SettingsComponent } from './settings.component';\n\n@NgModule({\n declarations: [SettingsComponent],\n imports: [\n SharedModule,\n ElementsModule,\n WebgetsModule,\n RouterModule.forChild([{ path: '', component: SettingsComponent }]),\n ],\n})\nexport class SettingsModule {}\n"],"names":["i2","i3","i4","i1"],"mappings":"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"}