@rolatech/angular-property 20.2.9-beta.1 → 20.2.9-beta.3
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/fesm2022/{rolatech-angular-property-property-index.component-CmHOXzaZ.mjs → rolatech-angular-property-property-index.component-Be_i7df_.mjs} +2 -2
- package/fesm2022/{rolatech-angular-property-property-index.component-CmHOXzaZ.mjs.map → rolatech-angular-property-property-index.component-Be_i7df_.mjs.map} +1 -1
- package/fesm2022/{rolatech-angular-property-property-manage-viewings-index.component-uCnGqHvp.mjs → rolatech-angular-property-property-manage-viewings-index.component-B2PH-aQu.mjs} +2 -2
- package/fesm2022/{rolatech-angular-property-property-manage-viewings-index.component-uCnGqHvp.mjs.map → rolatech-angular-property-property-manage-viewings-index.component-B2PH-aQu.mjs.map} +1 -1
- package/fesm2022/{rolatech-angular-property-rolatech-angular-property-DmX6l7jf.mjs → rolatech-angular-property-rolatech-angular-property-GMffi4JO.mjs} +88 -13
- package/fesm2022/rolatech-angular-property-rolatech-angular-property-GMffi4JO.mjs.map +1 -0
- package/fesm2022/rolatech-angular-property.mjs +1 -1
- package/package.json +6 -6
- package/fesm2022/rolatech-angular-property-rolatech-angular-property-DmX6l7jf.mjs.map +0 -1
|
@@ -4,7 +4,7 @@ import { AngularCommonModule } from '@rolatech/angular-common';
|
|
|
4
4
|
import { BaseComponent, RichItemComponent, AngularComponentsModule, RichViewComponent } from '@rolatech/angular-components';
|
|
5
5
|
import { PropertyService, PropertySearchService } from '@rolatech/angular-services';
|
|
6
6
|
import { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';
|
|
7
|
-
import { P as PropertyUtil, a as PropertyViewType, b as PropertyManageItemSkeleton } from './rolatech-angular-property-rolatech-angular-property-
|
|
7
|
+
import { P as PropertyUtil, a as PropertyViewType, b as PropertyManageItemSkeleton } from './rolatech-angular-property-rolatech-angular-property-GMffi4JO.mjs';
|
|
8
8
|
import * as i1$1 from '@angular/common';
|
|
9
9
|
import * as i2 from '@angular/material/paginator';
|
|
10
10
|
import * as i1 from '@angular/router';
|
|
@@ -97,4 +97,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
97
97
|
}] });
|
|
98
98
|
|
|
99
99
|
export { PropertyIndexComponent };
|
|
100
|
-
//# sourceMappingURL=rolatech-angular-property-property-index.component-
|
|
100
|
+
//# sourceMappingURL=rolatech-angular-property-property-index.component-Be_i7df_.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rolatech-angular-property-property-index.component-CmHOXzaZ.mjs","sources":["../../../../packages/angular-property/src/lib/pages/property/property-index/property-index.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-index/property-index.component.html"],"sourcesContent":["import { Component, DestroyRef, effect, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, RichViewComponent, RichItemComponent, BaseComponent } from '@rolatech/angular-components';\nimport { PropertySearchService, PropertyService } from '@rolatech/angular-services';\nimport { Property } from '../../../interfaces';\nimport { defer, distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\nimport { PageEvent } from '@angular/material/paginator';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { PropertyUtil, PropertyViewType } from '../../../property-util';\nimport { PropertyManageItemSkeleton } from '../../../components/property-manage-item-skeleton/property-manage-item-skeleton';\n\n@Component({\n selector: 'rolatech-property-index',\n imports: [AngularCommonModule, AngularComponentsModule, RichViewComponent, RichItemComponent, PropertyManageItemSkeleton],\n templateUrl: './property-index.component.html',\n styleUrl: './property-index.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'rolatech-property-index',\n },\n})\nexport class PropertyIndexComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n propertySearchService = inject(PropertySearchService);\n private util = inject(PropertyUtil);\n properties = signal<Property[]>([]);\n meta: any;\n loading = false;\n length = 100;\n pageSize = 15;\n pageIndex = signal(0);\n pageSizeOptions: number[] = [5, 10, 25, 100];\n viewType = PropertyViewType.GRID;\n\n ngOnInit(): void {\n this.util.viewEvent.subscribe((res) => {\n this.viewType = res;\n });\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n return {\n q: p.get('q') || undefined,\n town: p.get('town') || undefined,\n type: p.get('type') || undefined,\n market: p.get('market') || undefined,\n minBedrooms: p.get('minBedrooms') ? Number(p.get('minBedrooms')) : undefined,\n maxBedrooms: p.get('maxBedrooms') ? Number(p.get('maxBedrooms')) : undefined,\n minPrice: p.get('minPrice') ? Number(p.get('minPrice')) : undefined,\n maxPrice: p.get('maxPrice') ? Number(p.get('maxPrice')) : undefined,\n availableFrom: p.get('availableFrom') || undefined,\n availableTo: p.get('availableTo') || undefined,\n features: p.getAll('features')?.length ? p.getAll('features') : undefined,\n page,\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.propertySearchService.search<any>(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.properties.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.properties.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n search(params: any) {\n this.propertySearchService.search(params).subscribe({\n next: (res) => {\n this.properties.set(res.data);\n this.meta = res.meta;\n this.loading = false;\n this.length = res.meta.pagination.count;\n },\n error: (error) => {\n this.loading = false;\n },\n });\n }\n}\n","<div class=\"min-w-[320px] h-full\">\n @if (loading) {\n <div class=\"bg-[--rt-rasised-background] h-full\">\n <div class=\"flex flex-row flex-wrap\" [ngClass]=\"viewType === 1 ? 'flex-col' : 'flex-row flex-wrap'\">\n @for (row of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; track row) {\n <rolatech-property-manage-item-skeleton [list]=\"viewType === 1\"></rolatech-property-manage-item-skeleton>\n }\n </div>\n </div>\n } @else {\n @if (properties() && properties().length > 0) {\n <rolatech-rich-view [wrap]=\"viewType === 0\" [list]=\"viewType === 1\">\n @for (item of properties(); track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['./', item.id]\"\n [thumbnail]=\"item.media && item.media.length > 0 ? item.media[0].url : ''\"\n [title]=\"item.title\"\n thumbnailRatio=\"full\"\n [price]=\"item.price\"\n thumbnailMode=\"clip\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n } @else {\n <div class=\"flex w-full h-36 items-center justify-center\">\n <div>No data</div>\n </div>\n }\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n }\n</div>\n"],"names":["i1","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rolatech-angular-property-property-index.component-Be_i7df_.mjs","sources":["../../../../packages/angular-property/src/lib/pages/property/property-index/property-index.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-index/property-index.component.html"],"sourcesContent":["import { Component, DestroyRef, effect, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, RichViewComponent, RichItemComponent, BaseComponent } from '@rolatech/angular-components';\nimport { PropertySearchService, PropertyService } from '@rolatech/angular-services';\nimport { Property } from '../../../interfaces';\nimport { defer, distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\nimport { PageEvent } from '@angular/material/paginator';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { PropertyUtil, PropertyViewType } from '../../../property-util';\nimport { PropertyManageItemSkeleton } from '../../../components/property-manage-item-skeleton/property-manage-item-skeleton';\n\n@Component({\n selector: 'rolatech-property-index',\n imports: [AngularCommonModule, AngularComponentsModule, RichViewComponent, RichItemComponent, PropertyManageItemSkeleton],\n templateUrl: './property-index.component.html',\n styleUrl: './property-index.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'rolatech-property-index',\n },\n})\nexport class PropertyIndexComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n propertySearchService = inject(PropertySearchService);\n private util = inject(PropertyUtil);\n properties = signal<Property[]>([]);\n meta: any;\n loading = false;\n length = 100;\n pageSize = 15;\n pageIndex = signal(0);\n pageSizeOptions: number[] = [5, 10, 25, 100];\n viewType = PropertyViewType.GRID;\n\n ngOnInit(): void {\n this.util.viewEvent.subscribe((res) => {\n this.viewType = res;\n });\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n return {\n q: p.get('q') || undefined,\n town: p.get('town') || undefined,\n type: p.get('type') || undefined,\n market: p.get('market') || undefined,\n minBedrooms: p.get('minBedrooms') ? Number(p.get('minBedrooms')) : undefined,\n maxBedrooms: p.get('maxBedrooms') ? Number(p.get('maxBedrooms')) : undefined,\n minPrice: p.get('minPrice') ? Number(p.get('minPrice')) : undefined,\n maxPrice: p.get('maxPrice') ? Number(p.get('maxPrice')) : undefined,\n availableFrom: p.get('availableFrom') || undefined,\n availableTo: p.get('availableTo') || undefined,\n features: p.getAll('features')?.length ? p.getAll('features') : undefined,\n page,\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.propertySearchService.search<any>(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.properties.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.properties.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n search(params: any) {\n this.propertySearchService.search(params).subscribe({\n next: (res) => {\n this.properties.set(res.data);\n this.meta = res.meta;\n this.loading = false;\n this.length = res.meta.pagination.count;\n },\n error: (error) => {\n this.loading = false;\n },\n });\n }\n}\n","<div class=\"min-w-[320px] h-full\">\n @if (loading) {\n <div class=\"bg-[--rt-rasised-background] h-full\">\n <div class=\"flex flex-row flex-wrap\" [ngClass]=\"viewType === 1 ? 'flex-col' : 'flex-row flex-wrap'\">\n @for (row of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; track row) {\n <rolatech-property-manage-item-skeleton [list]=\"viewType === 1\"></rolatech-property-manage-item-skeleton>\n }\n </div>\n </div>\n } @else {\n @if (properties() && properties().length > 0) {\n <rolatech-rich-view [wrap]=\"viewType === 0\" [list]=\"viewType === 1\">\n @for (item of properties(); track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['./', item.id]\"\n [thumbnail]=\"item.media && item.media.length > 0 ? item.media[0].url : ''\"\n [title]=\"item.title\"\n thumbnailRatio=\"full\"\n [price]=\"item.price\"\n thumbnailMode=\"clip\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n } @else {\n <div class=\"flex w-full h-36 items-center justify-center\">\n <div>No data</div>\n </div>\n }\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n }\n</div>\n"],"names":["i1","i3"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { MatButtonModule } from '@angular/material/button';
|
|
|
6
6
|
import * as i1 from '@angular/router';
|
|
7
7
|
import { RouterModule } from '@angular/router';
|
|
8
8
|
import { PropertyService } from '@rolatech/angular-services';
|
|
9
|
-
import { c as PropertyViewingItemComponent } from './rolatech-angular-property-rolatech-angular-property-
|
|
9
|
+
import { c as PropertyViewingItemComponent } from './rolatech-angular-property-rolatech-angular-property-GMffi4JO.mjs';
|
|
10
10
|
import * as i2 from '@angular/material/paginator';
|
|
11
11
|
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
12
12
|
import { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';
|
|
@@ -107,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
107
107
|
}] });
|
|
108
108
|
|
|
109
109
|
export { PropertyManageViewingsIndexComponent };
|
|
110
|
-
//# sourceMappingURL=rolatech-angular-property-property-manage-viewings-index.component-
|
|
110
|
+
//# sourceMappingURL=rolatech-angular-property-property-manage-viewings-index.component-B2PH-aQu.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rolatech-angular-property-property-manage-viewings-index.component-
|
|
1
|
+
{"version":3,"file":"rolatech-angular-property-property-manage-viewings-index.component-B2PH-aQu.mjs","sources":["../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-viewings-index/property-manage-viewings-index.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-viewings-index/property-manage-viewings-index.component.html"],"sourcesContent":["import { Component, inject, OnInit, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n BaseComponent,\n EmptyComponent,\n TabComponent,\n TabsComponent,\n ToolbarComponent,\n ListComponent,\n} from '@rolatech/angular-components';\nimport { MatButtonModule } from '@angular/material/button';\nimport { RouterModule } from '@angular/router';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyViewingItemComponent } from '../../../components/property-viewing-item/property-viewing-item.component';\nimport { PropertyViewing } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\n\n@Component({\n selector: 'rolatech-property-manage-viewings-index',\n imports: [\n CommonModule,\n ToolbarComponent,\n MatButtonModule,\n TabsComponent,\n TabComponent,\n RouterModule,\n EmptyComponent,\n PropertyViewingItemComponent,\n MatPaginatorModule,\n ListComponent,\n ],\n templateUrl: './property-manage-viewings-index.component.html',\n styleUrl: './property-manage-viewings-index.component.scss',\n})\nexport class PropertyManageViewingsIndexComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n select = 0;\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Completed',\n icon: 'category',\n status: 'completed',\n },\n {\n name: 'Cancelled',\n icon: 'category',\n status: 'cancelled',\n },\n ];\n filterOptions: any = {\n type: '',\n status: '',\n };\n loading = false;\n viewings = signal<PropertyViewing[]>([]);\n meta: any;\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n pageIndex = signal(0);\n\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n\n let filter = '';\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filter = `status:${status?.toUpperCase()}`;\n }\n return {\n page,\n filter,\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.propertyService.findViewings(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res: any) => {\n this.viewings.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.viewings.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n}\n","<rolatech-toolbar title=\"Viewings\">\n <div class=\"flex items-center gap-2\"></div>\n</rolatech-toolbar>\n<rolatech-tabs [select]=\"select\">\n @for (item of links; track item) {\n @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n }\n }\n</rolatech-tabs>\n<!-- <div>\n @if (viewings(); as viewings) {\n @for (item of viewings; track $index) {\n <rolatech-property-viewing-item [routerLink]=\"['./', item.id]\" [viewing]=\"item\"></rolatech-property-viewing-item>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n</div> -->\n<rolatech-list>\n @if (viewings(); as viewings) {\n @for (item of viewings; track item) {\n <rolatech-property-viewing-item\n [loading]=\"loading\"\n [routerLink]=\"['./', item.id]\"\n [viewing]=\"item\"\n ></rolatech-property-viewing-item>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n</rolatech-list>\n<mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n>\n</mat-paginator>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAmCM,MAAO,oCAAqC,SAAQ,aAAa,CAAA;AACrE,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IACzC,MAAM,GAAG,CAAC;AACV,IAAA,KAAK,GAAG;AACN,QAAA;AACE,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,IAAI,EAAE,WAAW;AAClB,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,MAAM,EAAE,WAAW;AACpB,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,MAAM,EAAE,WAAW;AACpB,SAAA;KACF;AACD,IAAA,aAAa,GAAQ;AACnB,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,MAAM,EAAE,EAAE;KACX;IACD,OAAO,GAAG,KAAK;AACf,IAAA,QAAQ,GAAG,MAAM,CAAoB,EAAE,oDAAC;AACxC,IAAA,IAAI;AACJ,IAAA,SAAS;IACT,MAAM,GAAG,GAAG;IACZ,QAAQ,GAAG,EAAE;IACb,eAAe,GAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC5C,IAAA,SAAS,GAAG,MAAM,CAAC,CAAC,qDAAC;IAErB,QAAQ,GAAA;AACN,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACpB,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,KAAI;YACR,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;AACtD,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;YAE3C,IAAI,MAAM,GAAG,EAAE;YACf,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;AACpE,gBAAA,MAAM,GAAG,CAAA,OAAA,EAAU,MAAM,EAAE,WAAW,EAAE,EAAE;YAC5C;YACA,OAAO;gBACL,IAAI;gBACJ,MAAM;gBACN,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;gBACnD,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS;aACjC;AACH,QAAA,CAAC,CAAC;;AAEF,QAAA,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACzB,SAAS,CAAC,CAAC,MAAM,KAAI;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,gBAAgB;YACjC,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;AAC/F,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;gBACjB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,gBAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;gBACpB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK;YACzC,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC;YACjB,CAAC;AACF,SAAA,CAAC;;AAGJ,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;IACpD;AACA,IAAA,MAAM,CAAC,CAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;AACvB,YAAA,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE;AACzD,YAAA,mBAAmB,EAAE,OAAO;YAC5B,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC;IACJ;uGAnFW,oCAAoC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApC,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCjD,k0CA6CA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxBI,YAAY,+BACZ,gBAAgB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,aAAa,6HACb,YAAY,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,cAAc,2DACd,4BAA4B,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAC5B,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,aAAa,EAAA,QAAA,EAAA,eAAA,EAAA,CAAA,EAAA,CAAA;;2FAKJ,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAjBhD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yCAAyC,EAAA,OAAA,EAC1C;wBACP,YAAY;wBACZ,gBAAgB;wBAChB,eAAe;wBACf,aAAa;wBACb,YAAY;wBACZ,YAAY;wBACZ,cAAc;wBACd,4BAA4B;wBAC5B,kBAAkB;wBAClB,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,k0CAAA,EAAA;;;;;"}
|
|
@@ -2351,6 +2351,7 @@ function calcDepositPence(monthlyPence) {
|
|
|
2351
2351
|
class PropertyOfferNegotiationFacade {
|
|
2352
2352
|
api = inject(PropertyOfferCounterService);
|
|
2353
2353
|
offerCtx = inject(OfferDetailContext, { optional: true });
|
|
2354
|
+
snack = inject(MatSnackBar);
|
|
2354
2355
|
mode = signal('tenant', ...(ngDevMode ? [{ debugName: "mode" }] : []));
|
|
2355
2356
|
offerId = signal(null, ...(ngDevMode ? [{ debugName: "offerId" }] : []));
|
|
2356
2357
|
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
@@ -2358,6 +2359,7 @@ class PropertyOfferNegotiationFacade {
|
|
|
2358
2359
|
view = signal(null, ...(ngDevMode ? [{ debugName: "view" }] : []));
|
|
2359
2360
|
sending = signal(false, ...(ngDevMode ? [{ debugName: "sending" }] : []));
|
|
2360
2361
|
withdrawing = signal(false, ...(ngDevMode ? [{ debugName: "withdrawing" }] : []));
|
|
2362
|
+
cancelling = signal(false, ...(ngDevMode ? [{ debugName: "cancelling" }] : []));
|
|
2361
2363
|
// latest / previous
|
|
2362
2364
|
offer = computed(() => this.view()?.offer ?? null, ...(ngDevMode ? [{ debugName: "offer" }] : []));
|
|
2363
2365
|
latest = computed(() => this.view()?.latestVersion ?? null, ...(ngDevMode ? [{ debugName: "latest" }] : []));
|
|
@@ -2371,6 +2373,7 @@ class PropertyOfferNegotiationFacade {
|
|
|
2371
2373
|
canWithdraw = computed(() => this.permissions()?.canWithdraw ?? false, ...(ngDevMode ? [{ debugName: "canWithdraw" }] : []));
|
|
2372
2374
|
canAccept = computed(() => this.permissions()?.canAccept ?? false, ...(ngDevMode ? [{ debugName: "canAccept" }] : []));
|
|
2373
2375
|
canReject = computed(() => this.permissions()?.canReject ?? false, ...(ngDevMode ? [{ debugName: "canReject" }] : []));
|
|
2376
|
+
canCancel = computed(() => this.permissions()?.canCancel ?? false, ...(ngDevMode ? [{ debugName: "canCancel" }] : []));
|
|
2374
2377
|
lock = computed(() => this.view()?.editLock ?? null, ...(ngDevMode ? [{ debugName: "lock" }] : []));
|
|
2375
2378
|
withdrawLabel = computed(() => {
|
|
2376
2379
|
// UX: tenant can “Cancel” before negotiation really starts
|
|
@@ -2508,6 +2511,7 @@ class PropertyOfferNegotiationFacade {
|
|
|
2508
2511
|
else {
|
|
2509
2512
|
await firstValueFrom(this.api.withdrawByAgent(id, this.clientId));
|
|
2510
2513
|
}
|
|
2514
|
+
this.success('Offer withdrawn.');
|
|
2511
2515
|
// ✅ success: refresh everything + exit edit mode
|
|
2512
2516
|
await this.load(id, this.mode());
|
|
2513
2517
|
await this.offerCtx?.reloadOffer?.(id);
|
|
@@ -2516,7 +2520,9 @@ class PropertyOfferNegotiationFacade {
|
|
|
2516
2520
|
this.draft.set(this.cloneVersion(this.latest()));
|
|
2517
2521
|
}
|
|
2518
2522
|
catch (e) {
|
|
2519
|
-
|
|
2523
|
+
const msg = e?.message ?? 'Failed to withdraw offer.';
|
|
2524
|
+
this.error.set(msg);
|
|
2525
|
+
this.failure(msg);
|
|
2520
2526
|
// ✅ failure: refresh everything (rule #5)
|
|
2521
2527
|
await this.load(id, this.mode());
|
|
2522
2528
|
await this.offerCtx?.reloadOffer?.(id);
|
|
@@ -2537,12 +2543,15 @@ class PropertyOfferNegotiationFacade {
|
|
|
2537
2543
|
const res = this.mode() === 'tenant'
|
|
2538
2544
|
? await firstValueFrom(this.api.acceptByTenant(id))
|
|
2539
2545
|
: await firstValueFrom(this.api.acceptByAgent(id));
|
|
2546
|
+
this.success('Offer accepted.');
|
|
2540
2547
|
await this.load(id, this.mode());
|
|
2541
2548
|
await this.offerCtx?.reloadOffer?.(id);
|
|
2542
2549
|
await this.offerCtx?.reloadHistory?.(id);
|
|
2543
2550
|
}
|
|
2544
2551
|
catch (e) {
|
|
2545
|
-
|
|
2552
|
+
const msg = e?.message ?? 'Failed to accept offer.';
|
|
2553
|
+
this.error.set(msg);
|
|
2554
|
+
this.failure(msg);
|
|
2546
2555
|
}
|
|
2547
2556
|
finally {
|
|
2548
2557
|
this.loading.set(false);
|
|
@@ -2558,12 +2567,15 @@ class PropertyOfferNegotiationFacade {
|
|
|
2558
2567
|
const res = this.mode() === 'tenant'
|
|
2559
2568
|
? await firstValueFrom(this.api.rejectByTenant(id, reason))
|
|
2560
2569
|
: await firstValueFrom(this.api.rejectByAgent(id, reason));
|
|
2570
|
+
this.success('Offer rejected.');
|
|
2561
2571
|
await this.load(id, this.mode());
|
|
2562
2572
|
await this.offerCtx?.reloadOffer?.(id);
|
|
2563
2573
|
await this.offerCtx?.reloadHistory?.(id);
|
|
2564
2574
|
}
|
|
2565
2575
|
catch (e) {
|
|
2566
|
-
|
|
2576
|
+
const msg = e?.message ?? 'Failed to reject offer.';
|
|
2577
|
+
this.error.set(msg);
|
|
2578
|
+
this.failure(msg);
|
|
2567
2579
|
}
|
|
2568
2580
|
finally {
|
|
2569
2581
|
this.loading.set(false);
|
|
@@ -2577,12 +2589,15 @@ class PropertyOfferNegotiationFacade {
|
|
|
2577
2589
|
this.error.set(null);
|
|
2578
2590
|
try {
|
|
2579
2591
|
await firstValueFrom(this.api.markUnderOffer(id)); // <- implement in API
|
|
2592
|
+
this.success('Offer marked as under offer.');
|
|
2580
2593
|
await this.load(id, this.mode());
|
|
2581
2594
|
await this.offerCtx?.reloadOffer?.(id);
|
|
2582
2595
|
await this.offerCtx?.reloadHistory?.(id);
|
|
2583
2596
|
}
|
|
2584
2597
|
catch (e) {
|
|
2585
|
-
|
|
2598
|
+
const msg = e?.message ?? 'Failed to mark under offer.';
|
|
2599
|
+
this.error.set(msg);
|
|
2600
|
+
this.failure(msg);
|
|
2586
2601
|
}
|
|
2587
2602
|
finally {
|
|
2588
2603
|
this.loading.set(false);
|
|
@@ -2596,12 +2611,15 @@ class PropertyOfferNegotiationFacade {
|
|
|
2596
2611
|
this.error.set(null);
|
|
2597
2612
|
try {
|
|
2598
2613
|
await firstValueFrom(this.api.startReferencing(id)); // <- implement in API
|
|
2614
|
+
this.success('Referencing started.');
|
|
2599
2615
|
await this.load(id, this.mode());
|
|
2600
2616
|
await this.offerCtx?.reloadOffer?.(id);
|
|
2601
2617
|
await this.offerCtx?.reloadHistory?.(id);
|
|
2602
2618
|
}
|
|
2603
2619
|
catch (e) {
|
|
2604
|
-
|
|
2620
|
+
const msg = e?.message ?? 'Failed to start referencing.';
|
|
2621
|
+
this.error.set(msg);
|
|
2622
|
+
this.failure(msg);
|
|
2605
2623
|
}
|
|
2606
2624
|
finally {
|
|
2607
2625
|
this.loading.set(false);
|
|
@@ -2615,12 +2633,15 @@ class PropertyOfferNegotiationFacade {
|
|
|
2615
2633
|
this.error.set(null);
|
|
2616
2634
|
try {
|
|
2617
2635
|
await firstValueFrom(this.api.markReferencesPassed(id)); // <- implement in API
|
|
2636
|
+
this.success('References marked as passed.');
|
|
2618
2637
|
await this.load(id, this.mode());
|
|
2619
2638
|
await this.offerCtx?.reloadOffer?.(id);
|
|
2620
2639
|
await this.offerCtx?.reloadHistory?.(id);
|
|
2621
2640
|
}
|
|
2622
2641
|
catch (e) {
|
|
2623
|
-
|
|
2642
|
+
const msg = e?.message ?? 'Failed to mark references passed.';
|
|
2643
|
+
this.error.set(msg);
|
|
2644
|
+
this.failure(msg);
|
|
2624
2645
|
}
|
|
2625
2646
|
finally {
|
|
2626
2647
|
this.loading.set(false);
|
|
@@ -2638,12 +2659,15 @@ class PropertyOfferNegotiationFacade {
|
|
|
2638
2659
|
this.error.set(null);
|
|
2639
2660
|
try {
|
|
2640
2661
|
await firstValueFrom(this.api.markReferencesFailed(id, { notes: reason }));
|
|
2662
|
+
this.success('References marked as failed.');
|
|
2641
2663
|
await this.load(id, this.mode());
|
|
2642
2664
|
await this.offerCtx?.reloadOffer?.(id);
|
|
2643
2665
|
await this.offerCtx?.reloadHistory?.(id);
|
|
2644
2666
|
}
|
|
2645
2667
|
catch (e) {
|
|
2646
|
-
|
|
2668
|
+
const msg = e?.message ?? 'Failed to mark references failed.';
|
|
2669
|
+
this.error.set(msg);
|
|
2670
|
+
this.failure(msg);
|
|
2647
2671
|
}
|
|
2648
2672
|
finally {
|
|
2649
2673
|
this.loading.set(false);
|
|
@@ -2657,17 +2681,53 @@ class PropertyOfferNegotiationFacade {
|
|
|
2657
2681
|
this.error.set(null);
|
|
2658
2682
|
try {
|
|
2659
2683
|
await firstValueFrom(this.api.markCompleted(id)); // <- implement in API
|
|
2684
|
+
this.success('Offer marked as completed.');
|
|
2660
2685
|
await this.load(id, this.mode());
|
|
2661
2686
|
await this.offerCtx?.reloadOffer?.(id);
|
|
2662
2687
|
await this.offerCtx?.reloadHistory?.(id);
|
|
2663
2688
|
}
|
|
2664
2689
|
catch (e) {
|
|
2665
|
-
|
|
2690
|
+
const msg = e?.message ?? 'Failed to mark completed.';
|
|
2691
|
+
this.error.set(msg);
|
|
2692
|
+
this.failure(msg);
|
|
2666
2693
|
}
|
|
2667
2694
|
finally {
|
|
2668
2695
|
this.loading.set(false);
|
|
2669
2696
|
}
|
|
2670
2697
|
}
|
|
2698
|
+
async cancelOffer() {
|
|
2699
|
+
const id = this.offerId();
|
|
2700
|
+
if (!id)
|
|
2701
|
+
return;
|
|
2702
|
+
this.cancelling.set(true);
|
|
2703
|
+
this.error.set(null);
|
|
2704
|
+
try {
|
|
2705
|
+
if (this.mode() === 'tenant') {
|
|
2706
|
+
await firstValueFrom(this.api.cancelByTenant(id, this.clientId));
|
|
2707
|
+
}
|
|
2708
|
+
else {
|
|
2709
|
+
await firstValueFrom(this.api.cancelByAgent(id, this.clientId));
|
|
2710
|
+
}
|
|
2711
|
+
this.success('Offer cancelled.');
|
|
2712
|
+
await this.load(id, this.mode());
|
|
2713
|
+
await this.offerCtx?.reloadOffer?.(id);
|
|
2714
|
+
await this.offerCtx?.reloadHistory?.(id);
|
|
2715
|
+
this.editMode.set(false);
|
|
2716
|
+
this.draft.set(this.cloneVersion(this.latest()));
|
|
2717
|
+
}
|
|
2718
|
+
catch (e) {
|
|
2719
|
+
const msg = e?.message ?? 'Failed to cancel offer.';
|
|
2720
|
+
this.error.set(msg);
|
|
2721
|
+
this.failure(msg);
|
|
2722
|
+
// keep your “refresh on failure” rule
|
|
2723
|
+
await this.load(id, this.mode());
|
|
2724
|
+
await this.offerCtx?.reloadOffer?.(id);
|
|
2725
|
+
await this.offerCtx?.reloadHistory?.(id);
|
|
2726
|
+
}
|
|
2727
|
+
finally {
|
|
2728
|
+
this.cancelling.set(false);
|
|
2729
|
+
}
|
|
2730
|
+
}
|
|
2671
2731
|
// ---------------- draft setters ----------------
|
|
2672
2732
|
setAmountPounds(v) {
|
|
2673
2733
|
const d = this.draft();
|
|
@@ -2690,6 +2750,18 @@ class PropertyOfferNegotiationFacade {
|
|
|
2690
2750
|
pets: Array.isArray(v.pets) ? [...v.pets] : [],
|
|
2691
2751
|
};
|
|
2692
2752
|
}
|
|
2753
|
+
success(message) {
|
|
2754
|
+
this.snack.open(message, 'Close', {
|
|
2755
|
+
duration: 3000,
|
|
2756
|
+
panelClass: ['snack-success'],
|
|
2757
|
+
});
|
|
2758
|
+
}
|
|
2759
|
+
failure(message) {
|
|
2760
|
+
this.snack.open(message, 'Close', {
|
|
2761
|
+
duration: 4000,
|
|
2762
|
+
panelClass: ['snack-error'],
|
|
2763
|
+
});
|
|
2764
|
+
}
|
|
2693
2765
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PropertyOfferNegotiationFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2694
2766
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PropertyOfferNegotiationFacade });
|
|
2695
2767
|
}
|
|
@@ -2805,6 +2877,9 @@ class OfferNegotiationSection {
|
|
|
2805
2877
|
}
|
|
2806
2878
|
});
|
|
2807
2879
|
}
|
|
2880
|
+
cancelOffer() {
|
|
2881
|
+
this.f.cancelOffer();
|
|
2882
|
+
}
|
|
2808
2883
|
openReferenceFailedDialog() {
|
|
2809
2884
|
const ref = this.dialog.open(RejectDialogComponent, {
|
|
2810
2885
|
width: '420px',
|
|
@@ -2816,11 +2891,11 @@ class OfferNegotiationSection {
|
|
|
2816
2891
|
});
|
|
2817
2892
|
}
|
|
2818
2893
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: OfferNegotiationSection, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2819
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: OfferNegotiationSection, isStandalone: true, selector: "rolatech-offer-negotiation-section", host: { classAttribute: "block" }, ngImport: i0, template: "<section class=\"rounded-2xl border border-[--rt-outline] p-4 bg-[--rt-base-background] space-y-3\">\n <header class=\"flex items-start justify-between gap-3\">\n <div class=\"space-y-1\">\n <div class=\"text-sm font-semibold\">Negotiation</div>\n <div class=\"text-xs opacity-70\">Status: <span class=\"font-medium\">{{ statusLabel() }}</span></div>\n @if (f.lock(); as lk) { @if (lk.locked) {\n <div class=\"text-xs text-amber-600\">Locked by {{ lk.lockedByName ?? lk.lockedById }}</div>\n } }\n </div>\n\n @if (f.error(); as err) {\n <div class=\"text-xs text-red-600 max-w-[420px] text-right\">{{ err }}</div>\n }\n </header>\n\n <!-- Primary negotiation actions -->\n <div class=\"flex flex-wrap items-center gap-2\">\n <!-- <button mat-stroked-button [disabled]=\"!f.canEdit() || f.editMode()\" (click)=\"f.enterEdit()\">Edit</button> -->\n <button mat-stroked-button [disabled]=\"!f.canCounter() || f.editMode()\" (click)=\"f.enterEdit()\">Counter</button>\n\n <!-- <button mat-stroked-button [disabled]=\"!f.editMode()\" (click)=\"f.cancelEdit()\">Cancel edit</button> -->\n\n <!-- <button mat-raised-button [disabled]=\"!f.canCounter() || !f.editMode() || f.sending()\" (click)=\"f.sendCounter()\">\n @if (f.sending()) { Sending\u2026 } @else { Send counter }\n </button> -->\n\n <button mat-stroked-button color=\"warn\" [disabled]=\"!f.canWithdraw() || f.withdrawing()\" (click)=\"f.withdraw()\">\n @if (f.withdrawing()) { Working\u2026 } @else {
|
|
2894
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: OfferNegotiationSection, isStandalone: true, selector: "rolatech-offer-negotiation-section", host: { classAttribute: "block" }, ngImport: i0, template: "<section class=\"rounded-2xl border border-[--rt-outline] p-4 bg-[--rt-base-background] space-y-3\">\n <header class=\"flex items-start justify-between gap-3\">\n <div class=\"space-y-1\">\n <div class=\"text-sm font-semibold\">Negotiation</div>\n <div class=\"text-xs opacity-70\">Status: <span class=\"font-medium\">{{ statusLabel() }}</span></div>\n @if (f.lock(); as lk) { @if (lk.locked) {\n <div class=\"text-xs text-amber-600\">Locked by {{ lk.lockedByName ?? lk.lockedById }}</div>\n } }\n </div>\n\n @if (f.error(); as err) {\n <div class=\"text-xs text-red-600 max-w-[420px] text-right\">{{ err }}</div>\n }\n </header>\n\n <!-- Primary negotiation actions -->\n <div class=\"flex flex-wrap items-center gap-2\">\n <!-- <button mat-stroked-button [disabled]=\"!f.canEdit() || f.editMode()\" (click)=\"f.enterEdit()\">Edit</button> -->\n <button mat-stroked-button [disabled]=\"!f.canCounter() || f.editMode()\" (click)=\"f.enterEdit()\">Counter</button>\n\n <!-- <button mat-stroked-button [disabled]=\"!f.editMode()\" (click)=\"f.cancelEdit()\">Cancel edit</button> -->\n\n <!-- <button mat-raised-button [disabled]=\"!f.canCounter() || !f.editMode() || f.sending()\" (click)=\"f.sendCounter()\">\n @if (f.sending()) { Sending\u2026 } @else { Send counter }\n </button> -->\n\n @if (f.canWithdraw()) {\n <button mat-stroked-button color=\"warn\" [disabled]=\"!f.canWithdraw() || f.withdrawing()\" (click)=\"f.withdraw()\">\n @if (f.withdrawing()) { Working\u2026 } @else { Withdraw }\n </button>\n }\n\n <span class=\"flex-1\"></span>\n\n <!-- Accept/Reject -->\n\n <button mat-flat-button color=\"primary\" [disabled]=\"!f.canAccept() || f.loading()\" (click)=\"f.accept()\">Accept</button>\n\n <button mat-stroked-button color=\"warn\" [disabled]=\"!f.canReject() || f.loading()\" (click)=\"reject()\">Reject</button>\n\n <!-- Cancel (terminal) -->\n <button mat-stroked-button color=\"warn\" [disabled]=\"!f.canCancel() || f.cancelling()\" (click)=\"cancelOffer()\">\n @if (f.cancelling()) { Working\u2026 } @else { Cancel }\n </button>\n </div>\n <!-- Lifecycle actions (agent/admin) -->\n @if (f.showLifecycleActions()) {\n <div class=\"pt-3 border-t border-[--rt-outline]\">\n <div class=\"text-xs font-semibold opacity-70 mb-2\">Next steps</div>\n\n <div class=\"flex flex-wrap items-center gap-2\">\n <button\n mat-stroked-button\n [disabled]=\"!(f.permissions()?.canMarkUnderOffer ?? false) || f.loading()\"\n (click)=\"f.markUnderOffer()\"\n >\n Mark under offer\n </button>\n\n <button\n mat-stroked-button\n [disabled]=\"!(f.permissions()?.canStartReferencing ?? false) || f.loading()\"\n (click)=\"f.startReferencing()\"\n >\n Start referencing\n </button>\n\n <button\n mat-stroked-button\n [disabled]=\"!(f.permissions()?.canMarkReferencesPassed ?? false) || f.loading()\"\n (click)=\"f.markReferencesPassed()\"\n >\n References passed\n </button>\n\n <button\n mat-stroked-button\n color=\"warn\"\n [disabled]=\"!(f.permissions()?.canMarkReferencesFailed ?? false) || f.loading()\"\n (click)=\"openReferenceFailedDialog()\"\n >\n References failed\n </button>\n\n <button\n mat-raised-button\n color=\"primary\"\n [disabled]=\"!(f.permissions()?.canMarkCompleted ?? false) || f.loading()\"\n (click)=\"f.markCompleted()\"\n >\n Mark completed\n </button>\n </div>\n </div>\n }\n</section>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2820
2895
|
}
|
|
2821
2896
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: OfferNegotiationSection, decorators: [{
|
|
2822
2897
|
type: Component,
|
|
2823
|
-
args: [{ selector: 'rolatech-offer-negotiation-section', imports: [MatButtonModule], encapsulation: ViewEncapsulation.None, host: { class: 'block' }, template: "<section class=\"rounded-2xl border border-[--rt-outline] p-4 bg-[--rt-base-background] space-y-3\">\n <header class=\"flex items-start justify-between gap-3\">\n <div class=\"space-y-1\">\n <div class=\"text-sm font-semibold\">Negotiation</div>\n <div class=\"text-xs opacity-70\">Status: <span class=\"font-medium\">{{ statusLabel() }}</span></div>\n @if (f.lock(); as lk) { @if (lk.locked) {\n <div class=\"text-xs text-amber-600\">Locked by {{ lk.lockedByName ?? lk.lockedById }}</div>\n } }\n </div>\n\n @if (f.error(); as err) {\n <div class=\"text-xs text-red-600 max-w-[420px] text-right\">{{ err }}</div>\n }\n </header>\n\n <!-- Primary negotiation actions -->\n <div class=\"flex flex-wrap items-center gap-2\">\n <!-- <button mat-stroked-button [disabled]=\"!f.canEdit() || f.editMode()\" (click)=\"f.enterEdit()\">Edit</button> -->\n <button mat-stroked-button [disabled]=\"!f.canCounter() || f.editMode()\" (click)=\"f.enterEdit()\">Counter</button>\n\n <!-- <button mat-stroked-button [disabled]=\"!f.editMode()\" (click)=\"f.cancelEdit()\">Cancel edit</button> -->\n\n <!-- <button mat-raised-button [disabled]=\"!f.canCounter() || !f.editMode() || f.sending()\" (click)=\"f.sendCounter()\">\n @if (f.sending()) { Sending\u2026 } @else { Send counter }\n </button> -->\n\n <button mat-stroked-button color=\"warn\" [disabled]=\"!f.canWithdraw() || f.withdrawing()\" (click)=\"f.withdraw()\">\n @if (f.withdrawing()) { Working\u2026 } @else {
|
|
2898
|
+
args: [{ selector: 'rolatech-offer-negotiation-section', imports: [MatButtonModule], encapsulation: ViewEncapsulation.None, host: { class: 'block' }, template: "<section class=\"rounded-2xl border border-[--rt-outline] p-4 bg-[--rt-base-background] space-y-3\">\n <header class=\"flex items-start justify-between gap-3\">\n <div class=\"space-y-1\">\n <div class=\"text-sm font-semibold\">Negotiation</div>\n <div class=\"text-xs opacity-70\">Status: <span class=\"font-medium\">{{ statusLabel() }}</span></div>\n @if (f.lock(); as lk) { @if (lk.locked) {\n <div class=\"text-xs text-amber-600\">Locked by {{ lk.lockedByName ?? lk.lockedById }}</div>\n } }\n </div>\n\n @if (f.error(); as err) {\n <div class=\"text-xs text-red-600 max-w-[420px] text-right\">{{ err }}</div>\n }\n </header>\n\n <!-- Primary negotiation actions -->\n <div class=\"flex flex-wrap items-center gap-2\">\n <!-- <button mat-stroked-button [disabled]=\"!f.canEdit() || f.editMode()\" (click)=\"f.enterEdit()\">Edit</button> -->\n <button mat-stroked-button [disabled]=\"!f.canCounter() || f.editMode()\" (click)=\"f.enterEdit()\">Counter</button>\n\n <!-- <button mat-stroked-button [disabled]=\"!f.editMode()\" (click)=\"f.cancelEdit()\">Cancel edit</button> -->\n\n <!-- <button mat-raised-button [disabled]=\"!f.canCounter() || !f.editMode() || f.sending()\" (click)=\"f.sendCounter()\">\n @if (f.sending()) { Sending\u2026 } @else { Send counter }\n </button> -->\n\n @if (f.canWithdraw()) {\n <button mat-stroked-button color=\"warn\" [disabled]=\"!f.canWithdraw() || f.withdrawing()\" (click)=\"f.withdraw()\">\n @if (f.withdrawing()) { Working\u2026 } @else { Withdraw }\n </button>\n }\n\n <span class=\"flex-1\"></span>\n\n <!-- Accept/Reject -->\n\n <button mat-flat-button color=\"primary\" [disabled]=\"!f.canAccept() || f.loading()\" (click)=\"f.accept()\">Accept</button>\n\n <button mat-stroked-button color=\"warn\" [disabled]=\"!f.canReject() || f.loading()\" (click)=\"reject()\">Reject</button>\n\n <!-- Cancel (terminal) -->\n <button mat-stroked-button color=\"warn\" [disabled]=\"!f.canCancel() || f.cancelling()\" (click)=\"cancelOffer()\">\n @if (f.cancelling()) { Working\u2026 } @else { Cancel }\n </button>\n </div>\n <!-- Lifecycle actions (agent/admin) -->\n @if (f.showLifecycleActions()) {\n <div class=\"pt-3 border-t border-[--rt-outline]\">\n <div class=\"text-xs font-semibold opacity-70 mb-2\">Next steps</div>\n\n <div class=\"flex flex-wrap items-center gap-2\">\n <button\n mat-stroked-button\n [disabled]=\"!(f.permissions()?.canMarkUnderOffer ?? false) || f.loading()\"\n (click)=\"f.markUnderOffer()\"\n >\n Mark under offer\n </button>\n\n <button\n mat-stroked-button\n [disabled]=\"!(f.permissions()?.canStartReferencing ?? false) || f.loading()\"\n (click)=\"f.startReferencing()\"\n >\n Start referencing\n </button>\n\n <button\n mat-stroked-button\n [disabled]=\"!(f.permissions()?.canMarkReferencesPassed ?? false) || f.loading()\"\n (click)=\"f.markReferencesPassed()\"\n >\n References passed\n </button>\n\n <button\n mat-stroked-button\n color=\"warn\"\n [disabled]=\"!(f.permissions()?.canMarkReferencesFailed ?? false) || f.loading()\"\n (click)=\"openReferenceFailedDialog()\"\n >\n References failed\n </button>\n\n <button\n mat-raised-button\n color=\"primary\"\n [disabled]=\"!(f.permissions()?.canMarkCompleted ?? false) || f.loading()\"\n (click)=\"f.markCompleted()\"\n >\n Mark completed\n </button>\n </div>\n </div>\n }\n</section>\n" }]
|
|
2824
2899
|
}] });
|
|
2825
2900
|
|
|
2826
2901
|
class PropertyManageOfferDetailComponent extends BaseComponent {
|
|
@@ -6429,7 +6504,7 @@ const propertyRoutes = [
|
|
|
6429
6504
|
children: [
|
|
6430
6505
|
{
|
|
6431
6506
|
path: '',
|
|
6432
|
-
loadComponent: () => import('./rolatech-angular-property-property-index.component-
|
|
6507
|
+
loadComponent: () => import('./rolatech-angular-property-property-index.component-Be_i7df_.mjs').then((x) => x.PropertyIndexComponent),
|
|
6433
6508
|
},
|
|
6434
6509
|
],
|
|
6435
6510
|
},
|
|
@@ -8343,7 +8418,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
8343
8418
|
const propertyManageViewingsRoutes = [
|
|
8344
8419
|
{
|
|
8345
8420
|
path: '',
|
|
8346
|
-
loadComponent: () => import('./rolatech-angular-property-property-manage-viewings-index.component-
|
|
8421
|
+
loadComponent: () => import('./rolatech-angular-property-property-manage-viewings-index.component-B2PH-aQu.mjs').then((x) => x.PropertyManageViewingsIndexComponent),
|
|
8347
8422
|
},
|
|
8348
8423
|
{
|
|
8349
8424
|
path: ':id',
|
|
@@ -9600,4 +9675,4 @@ const propertyManageOverviewRoutes = [
|
|
|
9600
9675
|
*/
|
|
9601
9676
|
|
|
9602
9677
|
export { PropertyOfferTimelineStatus as A, PropertyOfferType as B, PropertyOfferStatus as C, ResidencyStatus as D, EmploymentStatus as E, PropertyApplicantType as F, AdverseCreditStatus as G, BedroomRange as H, PriceRange as I, Market as M, PropertyUtil as P, RentFrequency as R, ViewingTime as V, PropertyViewType as a, PropertyManageItemSkeleton as b, PropertyViewingItemComponent as c, propertyManageOffersRoutes as d, propertyRoutes as e, featureManageRoutes as f, propertyManageRoutes as g, propertyManageViewingsRoutes as h, propertyAgentViewingRoutes as i, propertyAgentOfferRoutes as j, propertyAgentOverviewRoutes as k, lettingManageRoutes as l, propertyManageOverviewRoutes as m, PropertyActionsComponent as n, PropertyItemComponent as o, propertyReviewRoutes as p, PropertyPricingComponent as q, PropertyPriceType as r, PropertyVideoProvider as s, tenantManageRoutes as t, PropertyStatus as u, PropertyType as v, PropertyInventoryStatus as w, PropertyScope as x, PropertyViewingStatus as y, PropertyViewerCategory as z };
|
|
9603
|
-
//# sourceMappingURL=rolatech-angular-property-rolatech-angular-property-
|
|
9678
|
+
//# sourceMappingURL=rolatech-angular-property-rolatech-angular-property-GMffi4JO.mjs.map
|