@rolatech/angular-property 20.0.3 → 20.0.4-beta.2
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-CbbxIQ8w.mjs → rolatech-angular-property-property-index.component-BRKSm05T.mjs} +2 -2
- package/fesm2022/{rolatech-angular-property-property-index.component-CbbxIQ8w.mjs.map → rolatech-angular-property-property-index.component-BRKSm05T.mjs.map} +1 -1
- package/fesm2022/{rolatech-angular-property-property-manage-viewings-index.component-Bk02i8QS.mjs → rolatech-angular-property-property-manage-viewings-index.component-0dp0PZdI.mjs} +2 -2
- package/fesm2022/{rolatech-angular-property-property-manage-viewings-index.component-Bk02i8QS.mjs.map → rolatech-angular-property-property-manage-viewings-index.component-0dp0PZdI.mjs.map} +1 -1
- package/fesm2022/{rolatech-angular-property-rolatech-angular-property-nGHNbG8j.mjs → rolatech-angular-property-rolatech-angular-property-0-VRpRtu.mjs} +126 -49
- package/fesm2022/rolatech-angular-property-rolatech-angular-property-0-VRpRtu.mjs.map +1 -0
- package/fesm2022/rolatech-angular-property.mjs +1 -1
- package/package.json +5 -5
- package/fesm2022/rolatech-angular-property-rolatech-angular-property-nGHNbG8j.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ElementRef, input, booleanAttribute, effect, HostBinding, ViewEncapsulation, Component, viewChild, PLATFORM_ID, output, computed, EventEmitter, Injectable, signal, Pipe, model, ViewChild } from '@angular/core';
|
|
2
|
+
import { inject, ElementRef, input, booleanAttribute, effect, HostBinding, ViewEncapsulation, Component, viewChild, PLATFORM_ID, output, computed, EventEmitter, Injectable, signal, Pipe, DestroyRef, model, ViewChild } from '@angular/core';
|
|
3
3
|
import * as i1$4 from '@angular/material/button';
|
|
4
4
|
import { MatButtonModule } from '@angular/material/button';
|
|
5
5
|
import * as i4 from '@angular/material/menu';
|
|
@@ -11,7 +11,7 @@ import { MatTableModule } from '@angular/material/table';
|
|
|
11
11
|
import * as i1$1 from '@angular/router';
|
|
12
12
|
import { RouterLink, RouterModule, Router, ActivatedRoute, RouterLinkActive, RouterOutlet } from '@angular/router';
|
|
13
13
|
import { ThumbnailComponent, ImagePlaceholderComponent, ToolbarComponent, SpinnerComponent, ImagePreviewDialogComponent, BaseComponent, AcceptDialogComponent, RejectDialogComponent, RichLabelComponent, AngularComponentsModule, ConfirmationDialogComponent, TabsComponent, TabComponent, EmptyComponent, ContainerComponent, SearchBar, ListComponent, MediaListComponent, MediaListItemComponent, InputComponent } from '@rolatech/angular-components';
|
|
14
|
-
import { PropertyService, FeatureService, PropertySearchService, DialogService } from '@rolatech/angular-services';
|
|
14
|
+
import { PropertyService, FeatureService, TimeZoneService, PropertySearchService, DialogService } from '@rolatech/angular-services';
|
|
15
15
|
import * as i1 from '@angular/common';
|
|
16
16
|
import { CommonModule, NgClass, isPlatformBrowser, ViewportScroller, KeyValuePipe, Location } from '@angular/common';
|
|
17
17
|
import { FixedPipe, AngularCommonModule, OptionsFormatPipe, APP_CONFIG, DecimalDirective, DurationPipe } from '@rolatech/angular-common';
|
|
@@ -30,7 +30,7 @@ import * as i5 from '@angular/material/select';
|
|
|
30
30
|
import { MatSelectModule } from '@angular/material/select';
|
|
31
31
|
import * as i1$5 from '@angular/material/chips';
|
|
32
32
|
import { MatChipsModule } from '@angular/material/chips';
|
|
33
|
-
import { startWith, map, defer, forkJoin, from, concatMap, take, Observable } from 'rxjs';
|
|
33
|
+
import { startWith, map, defer, distinctUntilChanged, switchMap, finalize, forkJoin, from, concatMap, take, Observable } from 'rxjs';
|
|
34
34
|
import { ENTER, COMMA } from '@angular/cdk/keycodes';
|
|
35
35
|
import * as i4$2 from '@angular/material/autocomplete';
|
|
36
36
|
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
@@ -300,11 +300,11 @@ class PropertyManageItemComponent {
|
|
|
300
300
|
archived() { }
|
|
301
301
|
delete() { }
|
|
302
302
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PropertyManageItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
303
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: PropertyManageItemComponent, isStandalone: true, selector: "rolatech-property-manage-item", inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, thumbnail: { classPropertyName: "thumbnail", publicName: "thumbnail", isSignal: true, isRequired: false, transformFunction: null }, list: { classPropertyName: "list", publicName: "list", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.rolatech-property-manage-item": "this.hasClass" } }, ngImport: i0, template: "<div\n class=\"flex p-3 bg-[--rt-raised-background] hover:bg-[--rt-raised-background] cursor-pointer rounded-md\"\n [ngClass]=\"list() ? 'w-full flex-row' : 'flex-col h-full'\"\n>\n <div>\n @if (property().media) {\n <div class=\"object-cover aspect-video rounded-lg\" [ngClass]=\"list() ? 'w-32 mr-3' : ''\">\n @defer {\n <rolatech-thumbnail
|
|
303
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: PropertyManageItemComponent, isStandalone: true, selector: "rolatech-property-manage-item", inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, thumbnail: { classPropertyName: "thumbnail", publicName: "thumbnail", isSignal: true, isRequired: false, transformFunction: null }, list: { classPropertyName: "list", publicName: "list", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.rolatech-property-manage-item": "this.hasClass" } }, ngImport: i0, template: "<div\n class=\"flex p-3 bg-[--rt-raised-background] hover:bg-[--rt-raised-background] cursor-pointer rounded-md\"\n [ngClass]=\"list() ? 'w-full flex-row' : 'flex-col h-full'\"\n>\n <div>\n @if (property().media) {\n <div class=\"object-cover aspect-video rounded-lg\" [ngClass]=\"list() ? 'w-32 mr-3' : ''\">\n @defer {\n <rolatech-thumbnail\n [src]=\"property().media ? property().media[0].url : property().mediaUrl\"\n size=\"medium\"\n mode=\"full\"\n >\n </rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-[--rt-raised-background] h-full w-full object-cover aspect-video rounded-lg\"></div>\n }\n </div>\n } @else {\n <div class=\"object-cover aspect-video rounded-lg\" [ngClass]=\"list() ? 'w-32 mr-3' : ''\">\n <rolatech-image-placeholder></rolatech-image-placeholder>\n </div>\n }\n </div>\n\n <div class=\"py-2\">\n <div class=\"text-lg font-bold\">\n {{ property().title }}\n </div>\n </div>\n <div class=\"flex-1\"></div>\n <div class=\"\">\u00A3{{ property().price | fixed }}</div>\n</div>\n", styles: ["rolatech-property-manage-item{--rt-property-view-item-margin: 16px;width:calc(100% / var(--rt-property-view-items-per-row) - var(--rt-property-view-item-margin) - .01px)}rolatech-property-manage-item[list]{--rt-property-view-items-per-row: 1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ImagePlaceholderComponent, selector: "rolatech-image-placeholder", inputs: ["ratio"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "pipe", type: FixedPipe, name: "fixed" }], encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [ThumbnailComponent]] });
|
|
304
304
|
}
|
|
305
305
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PropertyManageItemComponent, decorators: [{
|
|
306
306
|
type: Component,
|
|
307
|
-
args: [{ selector: 'rolatech-property-manage-item', imports: [CommonModule, ThumbnailComponent, ImagePlaceholderComponent, MatButtonModule, MatMenuModule, FixedPipe], encapsulation: ViewEncapsulation.None, template: "<div\n class=\"flex p-3 bg-[--rt-raised-background] hover:bg-[--rt-raised-background] cursor-pointer rounded-md\"\n [ngClass]=\"list() ? 'w-full flex-row' : 'flex-col h-full'\"\n>\n <div>\n @if (property().media) {\n <div class=\"object-cover aspect-video rounded-lg\" [ngClass]=\"list() ? 'w-32 mr-3' : ''\">\n @defer {\n <rolatech-thumbnail
|
|
307
|
+
args: [{ selector: 'rolatech-property-manage-item', imports: [CommonModule, ThumbnailComponent, ImagePlaceholderComponent, MatButtonModule, MatMenuModule, FixedPipe], encapsulation: ViewEncapsulation.None, template: "<div\n class=\"flex p-3 bg-[--rt-raised-background] hover:bg-[--rt-raised-background] cursor-pointer rounded-md\"\n [ngClass]=\"list() ? 'w-full flex-row' : 'flex-col h-full'\"\n>\n <div>\n @if (property().media) {\n <div class=\"object-cover aspect-video rounded-lg\" [ngClass]=\"list() ? 'w-32 mr-3' : ''\">\n @defer {\n <rolatech-thumbnail\n [src]=\"property().media ? property().media[0].url : property().mediaUrl\"\n size=\"medium\"\n mode=\"full\"\n >\n </rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-[--rt-raised-background] h-full w-full object-cover aspect-video rounded-lg\"></div>\n }\n </div>\n } @else {\n <div class=\"object-cover aspect-video rounded-lg\" [ngClass]=\"list() ? 'w-32 mr-3' : ''\">\n <rolatech-image-placeholder></rolatech-image-placeholder>\n </div>\n }\n </div>\n\n <div class=\"py-2\">\n <div class=\"text-lg font-bold\">\n {{ property().title }}\n </div>\n </div>\n <div class=\"flex-1\"></div>\n <div class=\"\">\u00A3{{ property().price | fixed }}</div>\n</div>\n", styles: ["rolatech-property-manage-item{--rt-property-view-item-margin: 16px;width:calc(100% / var(--rt-property-view-items-per-row) - var(--rt-property-view-item-margin) - .01px)}rolatech-property-manage-item[list]{--rt-property-view-items-per-row: 1}\n"] }]
|
|
308
308
|
}], ctorParameters: () => [], propDecorators: { hasClass: [{
|
|
309
309
|
type: HostBinding,
|
|
310
310
|
args: ['class.rolatech-property-manage-item']
|
|
@@ -1239,18 +1239,23 @@ class PropertyVideoComponent {
|
|
|
1239
1239
|
sanitizer = inject(DomSanitizer);
|
|
1240
1240
|
video = input.required(...(ngDevMode ? [{ debugName: "video" }] : []));
|
|
1241
1241
|
videoUrl = computed(() => {
|
|
1242
|
+
if (this.video().provider !== PropertyVideoProvider.YOUTUBE)
|
|
1243
|
+
return;
|
|
1242
1244
|
const match = this.video().url.match(/(?:youtu\.be\/|youtube\.com\/watch\?v=)([\w-]+)/);
|
|
1243
1245
|
if (match && match[1]) {
|
|
1244
1246
|
return this.sanitizer.bypassSecurityTrustResourceUrl(`https://www.youtube.com/embed/${match[1]}`);
|
|
1245
1247
|
}
|
|
1246
1248
|
return null; // Not a valid YouTube URL
|
|
1247
1249
|
}, ...(ngDevMode ? [{ debugName: "videoUrl" }] : []));
|
|
1250
|
+
youtube = computed(() => {
|
|
1251
|
+
return this.video().provider === PropertyVideoProvider.YOUTUBE;
|
|
1252
|
+
}, ...(ngDevMode ? [{ debugName: "youtube" }] : []));
|
|
1248
1253
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PropertyVideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1249
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
1254
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: PropertyVideoComponent, isStandalone: true, selector: "rolatech-property-video", inputs: { video: { classPropertyName: "video", publicName: "video", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"\">\n <div class=\"text-2xl font-bold py-4\" i18n>Videos</div>\n {{ youtube() }}\n @if (youtube()) {\n <iframe [src]=\"videoUrl()\" frameborder=\"0\" allowfullscreen class=\"w-full aspect-video\"></iframe>\n } @else {\n <video controls #videoContainer [src]=\"video().url\" class=\"w-full aspect-video\" [poster]=\"video().thumbnail\">\n <!-- <source [src]=\"video().url\" type=\"video/mp4\" /> -->\n </video>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
1250
1255
|
}
|
|
1251
1256
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PropertyVideoComponent, decorators: [{
|
|
1252
1257
|
type: Component,
|
|
1253
|
-
args: [{ selector: 'rolatech-property-video', imports: [CommonModule], template: "<div class=\"\">\n <div class=\"text-2xl font-bold py-4\" i18n>Videos</div>\n <iframe [src]=\"videoUrl()\" frameborder=\"0\" allowfullscreen class=\"w-full aspect-video\"></iframe>\n</div>\n" }]
|
|
1258
|
+
args: [{ selector: 'rolatech-property-video', imports: [CommonModule], template: "<div class=\"\">\n <div class=\"text-2xl font-bold py-4\" i18n>Videos</div>\n {{ youtube() }}\n @if (youtube()) {\n <iframe [src]=\"videoUrl()\" frameborder=\"0\" allowfullscreen class=\"w-full aspect-video\"></iframe>\n } @else {\n <video controls #videoContainer [src]=\"video().url\" class=\"w-full aspect-video\" [poster]=\"video().thumbnail\">\n <!-- <source [src]=\"video().url\" type=\"video/mp4\" /> -->\n </video>\n }\n</div>\n" }]
|
|
1254
1259
|
}] });
|
|
1255
1260
|
|
|
1256
1261
|
class PropertyActionContactComponent {
|
|
@@ -1435,6 +1440,7 @@ class PropertyDetailsComponent extends BaseComponent {
|
|
|
1435
1440
|
authService = inject(AuthService);
|
|
1436
1441
|
authUserService = inject(AuthUserService);
|
|
1437
1442
|
propertyService = inject(PropertyService);
|
|
1443
|
+
timezoneService = inject(TimeZoneService);
|
|
1438
1444
|
authenticated = this.authService.authenticated;
|
|
1439
1445
|
property;
|
|
1440
1446
|
fullname = '';
|
|
@@ -1447,11 +1453,20 @@ class PropertyDetailsComponent extends BaseComponent {
|
|
|
1447
1453
|
features = [];
|
|
1448
1454
|
highlights = [];
|
|
1449
1455
|
epc;
|
|
1456
|
+
timezone = signal('', ...(ngDevMode ? [{ debugName: "timezone" }] : []));
|
|
1450
1457
|
selectedVariant;
|
|
1451
1458
|
variantOption = signal(undefined, ...(ngDevMode ? [{ debugName: "variantOption" }] : []));
|
|
1452
1459
|
variantOptionChanged = computed(() => {
|
|
1453
1460
|
return this.variantOption();
|
|
1454
1461
|
}, ...(ngDevMode ? [{ debugName: "variantOptionChanged" }] : []));
|
|
1462
|
+
get videos() {
|
|
1463
|
+
if (this.timezone() === 'Asia/Shanghai') {
|
|
1464
|
+
return this.property.videos.filter(v => v.provider === PropertyVideoProvider.COS);
|
|
1465
|
+
}
|
|
1466
|
+
else {
|
|
1467
|
+
return this.property.videos.filter(v => v.provider === PropertyVideoProvider.YOUTUBE);
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1455
1470
|
// results: any[] = [];
|
|
1456
1471
|
constructor() {
|
|
1457
1472
|
super();
|
|
@@ -1466,6 +1481,13 @@ class PropertyDetailsComponent extends BaseComponent {
|
|
|
1466
1481
|
this.findFeatures();
|
|
1467
1482
|
this.findHighlights();
|
|
1468
1483
|
this.getEpc();
|
|
1484
|
+
// this.timezoneService.getTimeZoneFromApi().subscribe({
|
|
1485
|
+
// next: res => {
|
|
1486
|
+
// this.timezone.set(res)
|
|
1487
|
+
// }
|
|
1488
|
+
// })
|
|
1489
|
+
const timezone = this.timezoneService.getBrowserTimeZone() ?? '';
|
|
1490
|
+
this.timezone.set(timezone);
|
|
1469
1491
|
}
|
|
1470
1492
|
getProperty() {
|
|
1471
1493
|
this.propertyService.get(this.id).subscribe({
|
|
@@ -1478,7 +1500,9 @@ class PropertyDetailsComponent extends BaseComponent {
|
|
|
1478
1500
|
// this.results.push([item.option.id, item.value.id]);
|
|
1479
1501
|
// });
|
|
1480
1502
|
}
|
|
1481
|
-
|
|
1503
|
+
if (this.property.agentId) {
|
|
1504
|
+
this.findUserBaseInfo(this.property.agentId);
|
|
1505
|
+
}
|
|
1482
1506
|
this.titleService.setTitle(`${this.property.title}`);
|
|
1483
1507
|
},
|
|
1484
1508
|
});
|
|
@@ -1600,7 +1624,7 @@ class PropertyDetailsComponent extends BaseComponent {
|
|
|
1600
1624
|
// const updatedCriteria = matchingVariant ? updateCriteriaFromVariant(matchingVariant) : [];
|
|
1601
1625
|
}
|
|
1602
1626
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PropertyDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1603
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: PropertyDetailsComponent, isStandalone: true, selector: "rolatech-property-details", usesInheritance: true, ngImport: i0, template: "@if (property) {\n <rolatech-container>\n <div class=\"flex flex-col w-full\">\n <div class=\"py-3\">\n <rolatech-property-media [media]=\"property.media\"></rolatech-property-media>\n </div>\n <div class=\"flex flex-col md:flex-row gap-3 w-full\">\n <div class=\"w-full md:w-2/3\">\n <rolatech-property-info [property]=\"property\" (wish)=\"onWish($event)\" [inWishList]=\"inWishList\">\n </rolatech-property-info>\n <!-- <rolatech-property-agent-renderer\n [name]=\"fullname\"\n [avatar]=\"user?.avatar\"\n [username]=\"username\"\n ></rolatech-property-agent-renderer> -->\n <mat-divider></mat-divider>\n\n @if (features.length > 0) {\n <rolatech-property-features [features]=\"features\"></rolatech-property-features>\n }\n @if (highlights.length > 0) {\n <rolatech-property-highlights [highlights]=\"highlights\"></rolatech-property-highlights>\n }\n <!-- <rolatech-property-epc [epc]=\"epc\"></rolatech-property-epc> -->\n <rolatech-property-location [location]=\"property.location\"></rolatech-property-location>\n @if (
|
|
1627
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: PropertyDetailsComponent, isStandalone: true, selector: "rolatech-property-details", usesInheritance: true, ngImport: i0, template: "@if (property) {\n <rolatech-container>\n <div class=\"flex flex-col w-full\">\n <div class=\"py-3\">\n <rolatech-property-media [media]=\"property.media\"></rolatech-property-media>\n </div>\n <div class=\"flex flex-col md:flex-row gap-3 w-full\">\n <div class=\"w-full md:w-2/3\">\n <rolatech-property-info [property]=\"property\" (wish)=\"onWish($event)\" [inWishList]=\"inWishList\">\n </rolatech-property-info>\n <!-- <rolatech-property-agent-renderer\n [name]=\"fullname\"\n [avatar]=\"user?.avatar\"\n [username]=\"username\"\n ></rolatech-property-agent-renderer> -->\n <mat-divider></mat-divider>\n\n @if (features.length > 0) {\n <rolatech-property-features [features]=\"features\"></rolatech-property-features>\n }\n @if (highlights.length > 0) {\n <rolatech-property-highlights [highlights]=\"highlights\"></rolatech-property-highlights>\n }\n <!-- <rolatech-property-epc [epc]=\"epc\"></rolatech-property-epc> -->\n <rolatech-property-location [location]=\"property.location\"></rolatech-property-location>\n @if (videos) {\n @for (item of videos; track $index) {\n <rolatech-property-video [video]=\"item\"></rolatech-property-video>\n }\n }\n @if (epc && epc.currentScore) {\n <rolatech-property-epc [epc]=\"epc\"></rolatech-property-epc>\n }\n <div class=\"flex flex-col\">\n <div class=\"text-2xl font-bold pt-3\" i18n>Sections</div>\n @for (section of property.sections; track $index) {\n <rolatech-property-section [section]=\"section\"></rolatech-property-section>\n }\n <rolatech-comments [itemId]=\"property.id\"></rolatech-comments>\n </div>\n </div>\n <div class=\"w-full md:w-1/3\">\n <rolatech-property-agent-renderer\n [name]=\"fullname\"\n [avatar]=\"user?.avatar\"\n [username]=\"username\"\n ></rolatech-property-agent-renderer>\n <rolatech-property-pricing (wish)=\"onWish($event)\" [property]=\"property\"></rolatech-property-pricing>\n <rolatech-property-actions\n [property]=\"property\"\n (offer)=\"onOffer($event)\"\n (deposit)=\"onOffer($event)\"\n (requestViewing)=\"onRequestViewing($event)\"\n >\n @if (user) {\n <rolatech-property-action-contact [email]=\"user.email\" [phone]=\"user.phone\"></rolatech-property-action-contact>\n }\n </rolatech-property-actions>\n </div>\n </div>\n </div>\n </rolatech-container>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: ContainerComponent, selector: "rolatech-container" }, { kind: "component", type: PropertyInfoComponent, selector: "rolatech-property-info", inputs: ["property", "inWishList"], outputs: ["wish"] }, { kind: "component", type: PropertyMediaComponent, selector: "rolatech-property-media", inputs: ["media", "min"] }, { kind: "component", type: PropertyPricingComponent, selector: "rolatech-property-pricing", inputs: ["property", "price"] }, { kind: "component", type: PropertySectionComponent, selector: "rolatech-property-section", inputs: ["section", "user", "username"] }, { kind: "component", type: PropertyActionsComponent, selector: "rolatech-property-actions", inputs: ["property"], outputs: ["requestViewing", "offer", "deposit"] }, { kind: "component", type: CommentsComponent, selector: "rolatech-comments", inputs: ["itemId"] }, { kind: "component", type: PropertyAgentRenderer, selector: "rolatech-property-agent-renderer", inputs: ["name", "avatar", "username", "subtitle"] }, { kind: "component", type: PropertyLocationComponent, selector: "rolatech-property-location", inputs: ["location"] }, { kind: "component", type: PropertyFeaturesComponent, selector: "rolatech-property-features", inputs: ["features"] }, { kind: "component", type: PropertyVideoComponent, selector: "rolatech-property-video", inputs: ["video"] }, { kind: "component", type: PropertyActionContactComponent, selector: "rolatech-property-action-contact", inputs: ["email", "phone"], outputs: ["callAgent", "emailAgent"] }, { kind: "component", type: PropertyHighlights, selector: "rolatech-property-highlights", inputs: ["highlights"] }, { kind: "component", type: PropertyEpc, selector: "rolatech-property-epc", inputs: ["epc"] }] });
|
|
1604
1628
|
}
|
|
1605
1629
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PropertyDetailsComponent, decorators: [{
|
|
1606
1630
|
type: Component,
|
|
@@ -1621,7 +1645,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImpor
|
|
|
1621
1645
|
PropertyActionContactComponent,
|
|
1622
1646
|
PropertyHighlights,
|
|
1623
1647
|
PropertyEpc,
|
|
1624
|
-
], template: "@if (property) {\n <rolatech-container>\n <div class=\"flex flex-col w-full\">\n <div class=\"py-3\">\n <rolatech-property-media [media]=\"property.media\"></rolatech-property-media>\n </div>\n <div class=\"flex flex-col md:flex-row gap-3 w-full\">\n <div class=\"w-full md:w-2/3\">\n <rolatech-property-info [property]=\"property\" (wish)=\"onWish($event)\" [inWishList]=\"inWishList\">\n </rolatech-property-info>\n <!-- <rolatech-property-agent-renderer\n [name]=\"fullname\"\n [avatar]=\"user?.avatar\"\n [username]=\"username\"\n ></rolatech-property-agent-renderer> -->\n <mat-divider></mat-divider>\n\n @if (features.length > 0) {\n <rolatech-property-features [features]=\"features\"></rolatech-property-features>\n }\n @if (highlights.length > 0) {\n <rolatech-property-highlights [highlights]=\"highlights\"></rolatech-property-highlights>\n }\n <!-- <rolatech-property-epc [epc]=\"epc\"></rolatech-property-epc> -->\n <rolatech-property-location [location]=\"property.location\"></rolatech-property-location>\n @if (
|
|
1648
|
+
], template: "@if (property) {\n <rolatech-container>\n <div class=\"flex flex-col w-full\">\n <div class=\"py-3\">\n <rolatech-property-media [media]=\"property.media\"></rolatech-property-media>\n </div>\n <div class=\"flex flex-col md:flex-row gap-3 w-full\">\n <div class=\"w-full md:w-2/3\">\n <rolatech-property-info [property]=\"property\" (wish)=\"onWish($event)\" [inWishList]=\"inWishList\">\n </rolatech-property-info>\n <!-- <rolatech-property-agent-renderer\n [name]=\"fullname\"\n [avatar]=\"user?.avatar\"\n [username]=\"username\"\n ></rolatech-property-agent-renderer> -->\n <mat-divider></mat-divider>\n\n @if (features.length > 0) {\n <rolatech-property-features [features]=\"features\"></rolatech-property-features>\n }\n @if (highlights.length > 0) {\n <rolatech-property-highlights [highlights]=\"highlights\"></rolatech-property-highlights>\n }\n <!-- <rolatech-property-epc [epc]=\"epc\"></rolatech-property-epc> -->\n <rolatech-property-location [location]=\"property.location\"></rolatech-property-location>\n @if (videos) {\n @for (item of videos; track $index) {\n <rolatech-property-video [video]=\"item\"></rolatech-property-video>\n }\n }\n @if (epc && epc.currentScore) {\n <rolatech-property-epc [epc]=\"epc\"></rolatech-property-epc>\n }\n <div class=\"flex flex-col\">\n <div class=\"text-2xl font-bold pt-3\" i18n>Sections</div>\n @for (section of property.sections; track $index) {\n <rolatech-property-section [section]=\"section\"></rolatech-property-section>\n }\n <rolatech-comments [itemId]=\"property.id\"></rolatech-comments>\n </div>\n </div>\n <div class=\"w-full md:w-1/3\">\n <rolatech-property-agent-renderer\n [name]=\"fullname\"\n [avatar]=\"user?.avatar\"\n [username]=\"username\"\n ></rolatech-property-agent-renderer>\n <rolatech-property-pricing (wish)=\"onWish($event)\" [property]=\"property\"></rolatech-property-pricing>\n <rolatech-property-actions\n [property]=\"property\"\n (offer)=\"onOffer($event)\"\n (deposit)=\"onOffer($event)\"\n (requestViewing)=\"onRequestViewing($event)\"\n >\n @if (user) {\n <rolatech-property-action-contact [email]=\"user.email\" [phone]=\"user.phone\"></rolatech-property-action-contact>\n }\n </rolatech-property-actions>\n </div>\n </div>\n </div>\n </rolatech-container>\n}\n" }]
|
|
1625
1649
|
}], ctorParameters: () => [] });
|
|
1626
1650
|
|
|
1627
1651
|
const MY_FORMATS$5 = {
|
|
@@ -2431,7 +2455,7 @@ const propertyRoutes = [
|
|
|
2431
2455
|
children: [
|
|
2432
2456
|
{
|
|
2433
2457
|
path: '',
|
|
2434
|
-
loadComponent: () => import('./rolatech-angular-property-property-index.component-
|
|
2458
|
+
loadComponent: () => import('./rolatech-angular-property-property-index.component-BRKSm05T.mjs').then((x) => x.PropertyIndexComponent),
|
|
2435
2459
|
},
|
|
2436
2460
|
],
|
|
2437
2461
|
},
|
|
@@ -2476,58 +2500,104 @@ const propertyRoutes = [
|
|
|
2476
2500
|
},
|
|
2477
2501
|
];
|
|
2478
2502
|
|
|
2479
|
-
class PropertyManageFilterComponent {
|
|
2480
|
-
towns = ['London'];
|
|
2481
|
-
filter = false;
|
|
2482
|
-
searchOptions = {
|
|
2483
|
-
town: '',
|
|
2484
|
-
startDate: '',
|
|
2485
|
-
endDate: '',
|
|
2486
|
-
};
|
|
2487
|
-
reset() { }
|
|
2488
|
-
search() { }
|
|
2489
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PropertyManageFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2490
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: PropertyManageFilterComponent, isStandalone: true, selector: "rolatech-property-manage-filter", ngImport: i0, template: "<div class=\"p-3\">\n <div class=\"bg-[--rt-raised-background] p-3 flex items-center justify-between rounded-md\">\n <div class=\"flex items-center\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-select #select=\"matSelect\" placeholder=\"Town\" i18n-placeholder [(ngModel)]=\"searchOptions.town\">\n @for (town of towns; track town) {\n <mat-option [value]=\"town\">\n {{ town }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <!-- <mat-form-field>\n <input />\n </mat-form-field> -->\n </div>\n <div class=\"flex gap-3\">\n <a mat-stroked-button class=\"w-[128px]\" (click)=\"reset()\" i18n>Reset</a>\n <a mat-flat-button class=\"w-full\" (click)=\"search()\" i18n>Search</a>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$4.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"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
2491
|
-
}
|
|
2492
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PropertyManageFilterComponent, decorators: [{
|
|
2493
|
-
type: Component,
|
|
2494
|
-
args: [{ selector: 'rolatech-property-manage-filter', imports: [CommonModule, MatButtonModule, MatFormFieldModule, MatSelectModule, MatOptionModule, FormsModule], template: "<div class=\"p-3\">\n <div class=\"bg-[--rt-raised-background] p-3 flex items-center justify-between rounded-md\">\n <div class=\"flex items-center\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-select #select=\"matSelect\" placeholder=\"Town\" i18n-placeholder [(ngModel)]=\"searchOptions.town\">\n @for (town of towns; track town) {\n <mat-option [value]=\"town\">\n {{ town }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <!-- <mat-form-field>\n <input />\n </mat-form-field> -->\n </div>\n <div class=\"flex gap-3\">\n <a mat-stroked-button class=\"w-[128px]\" (click)=\"reset()\" i18n>Reset</a>\n <a mat-flat-button class=\"w-full\" (click)=\"search()\" i18n>Search</a>\n </div>\n </div>\n</div>\n" }]
|
|
2495
|
-
}] });
|
|
2496
|
-
|
|
2497
2503
|
class PropertyManageIndexComponent {
|
|
2498
2504
|
hasClass = true;
|
|
2499
2505
|
paginator = viewChild(MatPaginator, ...(ngDevMode ? [{ debugName: "paginator" }] : []));
|
|
2500
2506
|
dialog = inject(MatDialog);
|
|
2501
2507
|
snackBar = inject(MatSnackBar);
|
|
2508
|
+
router = inject(Router);
|
|
2509
|
+
destroyRef = inject(DestroyRef);
|
|
2510
|
+
route = inject(ActivatedRoute);
|
|
2511
|
+
gridView = true;
|
|
2512
|
+
util = inject(PropertyUtil);
|
|
2502
2513
|
propertyService = inject(PropertyService);
|
|
2503
2514
|
propertySearchService = inject(PropertySearchService);
|
|
2504
|
-
isLoading = false;
|
|
2505
2515
|
isSearch = false;
|
|
2506
|
-
properties = [];
|
|
2516
|
+
// properties: Property[] = [];
|
|
2517
|
+
properties = signal([], ...(ngDevMode ? [{ debugName: "properties" }] : []));
|
|
2507
2518
|
exporting = false;
|
|
2508
2519
|
pageEvent;
|
|
2509
2520
|
length = 100;
|
|
2510
2521
|
pageSize = 15;
|
|
2511
2522
|
pageSizeOptions = [5, 10, 25, 100];
|
|
2523
|
+
open = signal(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
|
|
2524
|
+
pageIndex = signal(0, ...(ngDevMode ? [{ debugName: "pageIndex" }] : []));
|
|
2525
|
+
meta;
|
|
2526
|
+
loading = false;
|
|
2512
2527
|
ngOnInit() {
|
|
2513
|
-
this.findProperties();
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2528
|
+
// this.findProperties();
|
|
2529
|
+
const sub = this.route.queryParamMap.pipe(map((p) => {
|
|
2530
|
+
const page = p.get('page') ? Number(p.get('page')) : 1;
|
|
2531
|
+
this.pageIndex.set(Math.max(page - 1, 0));
|
|
2532
|
+
return {
|
|
2533
|
+
q: p.get('q') || undefined,
|
|
2534
|
+
city: p.get('city') || undefined,
|
|
2535
|
+
minBedrooms: p.get('minBedrooms') ? Number(p.get('minBedrooms')) : undefined,
|
|
2536
|
+
maxPricePence: p.get('maxPricePence') ? Number(p.get('maxPricePence')) : undefined,
|
|
2537
|
+
availableFrom: p.get('availableFrom') || undefined,
|
|
2538
|
+
availableTo: p.get('availableTo') || undefined,
|
|
2539
|
+
features: p.getAll('features')?.length ? p.getAll('features') : undefined,
|
|
2540
|
+
page,
|
|
2541
|
+
limit: p.get('limit') ? Number(p.get('limit')) : 15,
|
|
2542
|
+
sort: p.get('sort') || undefined,
|
|
2543
|
+
};
|
|
2544
|
+
}),
|
|
2545
|
+
// Cheap deep compare via JSON to avoid spam calls when nothing changed
|
|
2546
|
+
map((o) => JSON.stringify(o)), distinctUntilChanged(), map((s) => JSON.parse(s)), switchMap((params) => {
|
|
2547
|
+
this.loading = true;
|
|
2548
|
+
return this.propertySearchService.search(params).pipe(finalize(() => this.loading = false));
|
|
2549
|
+
})).subscribe({
|
|
2525
2550
|
next: (res) => {
|
|
2526
|
-
this.properties
|
|
2551
|
+
this.properties.set(res.data);
|
|
2552
|
+
this.meta = res.meta;
|
|
2553
|
+
this.length = res.meta.pagination.count;
|
|
2554
|
+
},
|
|
2555
|
+
error: () => {
|
|
2556
|
+
this.properties.set([]);
|
|
2557
|
+
this.length = 0;
|
|
2558
|
+
}
|
|
2559
|
+
});
|
|
2560
|
+
// // auto-unsubscribe on destroy
|
|
2561
|
+
this.destroyRef.onDestroy(() => sub.unsubscribe());
|
|
2562
|
+
}
|
|
2563
|
+
toggleSearch() {
|
|
2564
|
+
this.open.update(v => !v);
|
|
2565
|
+
}
|
|
2566
|
+
toggleView() {
|
|
2567
|
+
if (this.gridView) {
|
|
2568
|
+
this.gridView = false;
|
|
2569
|
+
this.util.viewEvent.emit(PropertyViewType.LIST);
|
|
2570
|
+
}
|
|
2571
|
+
else {
|
|
2572
|
+
this.gridView = true;
|
|
2573
|
+
this.util.viewEvent.emit(PropertyViewType.GRID);
|
|
2574
|
+
}
|
|
2575
|
+
}
|
|
2576
|
+
searchByText(event) {
|
|
2577
|
+
this.router.navigate([], {
|
|
2578
|
+
queryParams: { q: event, page: 1, limit: 15 },
|
|
2579
|
+
queryParamsHandling: 'merge', // keep other params like sort, etc.
|
|
2580
|
+
});
|
|
2581
|
+
}
|
|
2582
|
+
search(params) {
|
|
2583
|
+
this.propertySearchService.search(params).subscribe({
|
|
2584
|
+
next: res => {
|
|
2585
|
+
this.properties.set(res.data);
|
|
2586
|
+
this.meta = res.meta;
|
|
2587
|
+
this.loading = false;
|
|
2527
2588
|
this.length = res.meta.pagination.count;
|
|
2589
|
+
// this.pageIndex.set(Math.max(page - 1, 0));
|
|
2528
2590
|
},
|
|
2591
|
+
error: error => {
|
|
2592
|
+
this.loading = false;
|
|
2593
|
+
}
|
|
2529
2594
|
});
|
|
2530
2595
|
}
|
|
2596
|
+
onCloseSearch() {
|
|
2597
|
+
// this.open.set(false);
|
|
2598
|
+
// this.router.navigate([], { queryParams: {}, queryParamsHandling: 'merge' });
|
|
2599
|
+
this.router.navigate(["/properties"]);
|
|
2600
|
+
}
|
|
2531
2601
|
export() {
|
|
2532
2602
|
this.exporting = true;
|
|
2533
2603
|
this.propertyService.export().subscribe({
|
|
@@ -2548,8 +2618,15 @@ class PropertyManageIndexComponent {
|
|
|
2548
2618
|
}
|
|
2549
2619
|
});
|
|
2550
2620
|
}
|
|
2621
|
+
onPage(e) {
|
|
2622
|
+
this.router.navigate([], {
|
|
2623
|
+
queryParams: { page: e.pageIndex + 1, limit: e.pageSize },
|
|
2624
|
+
queryParamsHandling: 'merge',
|
|
2625
|
+
replaceUrl: true, // optional: avoid stacking history on every page click
|
|
2626
|
+
});
|
|
2627
|
+
}
|
|
2551
2628
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PropertyManageIndexComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2552
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: PropertyManageIndexComponent, isStandalone: true, selector: "rolatech-property-manage-index", host: { properties: { "class.rolatech-property-manage-index": "this.hasClass" } }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, isSignal: true }], ngImport: i0, template: "<rolatech-toolbar title=\"Properties\">\n <div class=\"flex items-center gap-2\">\n <button mat-flat-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n <span i18n>Add property</span>\n </button>\n <!-- <button mat-flat-button (click)=\"export()\" [disabled]=\"exporting\">\n <mat-icon>download</mat-icon>\n <span i18n>Export</span>\n </button> -->\n <button mat-flat-button (click)=\"export()\" [disabled]=\"exporting\" aria-label=\"Export CSV\">\n @if (!exporting) {\n Export CSV\n } @else {\n Exporting\u2026\n }\n </button>\n </div>\n</rolatech-toolbar>\n@if (
|
|
2629
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: PropertyManageIndexComponent, isStandalone: true, selector: "rolatech-property-manage-index", host: { properties: { "class.rolatech-property-manage-index": "this.hasClass" } }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, isSignal: true }], ngImport: i0, template: "<rolatech-toolbar title=\"Properties\">\n <div class=\"flex items-center gap-2\">\n <button mat-icon-button (click)=\"toggleSearch()\">\n <mat-icon>search</mat-icon>\n </button>\n <!-- <button mat-icon-button (click)=\"toggleView()\">\n <mat-icon>{{ gridView ? 'view_list' : 'grid_on' }}</mat-icon>\n </button> -->\n <button mat-flat-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n <span i18n>Add property</span>\n </button>\n <!-- <button mat-flat-button (click)=\"export()\" [disabled]=\"exporting\">\n <mat-icon>download</mat-icon>\n <span i18n>Export</span>\n </button> -->\n <button mat-flat-button (click)=\"export()\" [disabled]=\"exporting\" aria-label=\"Export CSV\">\n @if (!exporting) {\n Export CSV\n } @else {\n Exporting\u2026\n }\n </button>\n </div>\n</rolatech-toolbar>\n<div class=\"p-2\">\n <rolatech-search-bar\n [(show)]=\"open\"\n #searchBar\n (search)=\"searchByText($event)\"\n (close)=\"onCloseSearch()\"\n ></rolatech-search-bar>\n</div>\n@if (loading) {\n <div class=\"flex justify-center items-center\">\n <rolatech-spinner></rolatech-spinner>\n </div>\n} @else {\n <div class=\"bg-[--rt-rasised-background] h-full\">\n <!-- <rolatech-property-manage-filter></rolatech-property-manage-filter> -->\n <div class=\"flex flex-wrap p-3 gap-3\">\n @for (item of properties(); track $index) {\n <rolatech-property-manage-item\n [property]=\"item\"\n routerLink=\"./{{ item.id }}/manage/info\"\n ></rolatech-property-manage-item>\n }\n </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", styles: ["mat-form-field{width:100%}table{width:100%}td.mat-column-actions{text-align:right;max-width:64px;font-size:.8rem;padding:0 8px}.mat-mdc-header-cell.actions{text-align:right;max-width:64px;width:64px}.mat-mdc-cell:nth-last-child(2),.mat-mdc-header-cell:nth-last-child(2),.mat-mdc-footer-cell:nth-last-child(2){text-align:right;max-width:180px;width:180px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{text-align:right;padding-right:8px!important}rolatech-property-manage-index{display:flex;flex-direction:column;--rt-property-view-items-per-row: 1}@media (min-width: 600px){rolatech-property-manage-index{--rt-property-view-items-per-row: 2}}@media (min-width: 768px){rolatech-property-manage-index{--rt-property-view-items-per-row: 3}}@media (min-width: 1280px){rolatech-property-manage-index{--rt-property-view-items-per-row: 3}}@media (min-width: 1536px){rolatech-property-manage-index{--rt-property-view-items-per-row: 4}}@media (min-width: 1920px){rolatech-property-manage-index{--rt-property-view-items-per-row: 5}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$4.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"] }, { kind: "component", type: i1$4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i3$2.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: SpinnerComponent, selector: "rolatech-spinner", inputs: ["title"] }, { kind: "component", type: PropertyManageItemComponent, selector: "rolatech-property-manage-item", inputs: ["property", "thumbnail", "list"] }, { kind: "component", type: SearchBar, selector: "rolatech-search-bar", inputs: ["show"], outputs: ["showChange", "search", "close"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2553
2630
|
}
|
|
2554
2631
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: PropertyManageIndexComponent, decorators: [{
|
|
2555
2632
|
type: Component,
|
|
@@ -2563,8 +2640,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImpor
|
|
|
2563
2640
|
ToolbarComponent,
|
|
2564
2641
|
SpinnerComponent,
|
|
2565
2642
|
PropertyManageItemComponent,
|
|
2566
|
-
|
|
2567
|
-
], encapsulation: ViewEncapsulation.None, template: "<rolatech-toolbar title=\"Properties\">\n <div class=\"flex items-center gap-2\">\n <button mat-flat-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n <span i18n>Add property</span>\n </button>\n <!-- <button mat-flat-button (click)=\"export()\" [disabled]=\"exporting\">\n <mat-icon>download</mat-icon>\n <span i18n>Export</span>\n </button> -->\n <button mat-flat-button (click)=\"export()\" [disabled]=\"exporting\" aria-label=\"Export CSV\">\n @if (!exporting) {\n Export CSV\n } @else {\n Exporting\u2026\n }\n </button>\n </div>\n</rolatech-toolbar>\n@if (
|
|
2643
|
+
SearchBar
|
|
2644
|
+
], encapsulation: ViewEncapsulation.None, template: "<rolatech-toolbar title=\"Properties\">\n <div class=\"flex items-center gap-2\">\n <button mat-icon-button (click)=\"toggleSearch()\">\n <mat-icon>search</mat-icon>\n </button>\n <!-- <button mat-icon-button (click)=\"toggleView()\">\n <mat-icon>{{ gridView ? 'view_list' : 'grid_on' }}</mat-icon>\n </button> -->\n <button mat-flat-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n <span i18n>Add property</span>\n </button>\n <!-- <button mat-flat-button (click)=\"export()\" [disabled]=\"exporting\">\n <mat-icon>download</mat-icon>\n <span i18n>Export</span>\n </button> -->\n <button mat-flat-button (click)=\"export()\" [disabled]=\"exporting\" aria-label=\"Export CSV\">\n @if (!exporting) {\n Export CSV\n } @else {\n Exporting\u2026\n }\n </button>\n </div>\n</rolatech-toolbar>\n<div class=\"p-2\">\n <rolatech-search-bar\n [(show)]=\"open\"\n #searchBar\n (search)=\"searchByText($event)\"\n (close)=\"onCloseSearch()\"\n ></rolatech-search-bar>\n</div>\n@if (loading) {\n <div class=\"flex justify-center items-center\">\n <rolatech-spinner></rolatech-spinner>\n </div>\n} @else {\n <div class=\"bg-[--rt-rasised-background] h-full\">\n <!-- <rolatech-property-manage-filter></rolatech-property-manage-filter> -->\n <div class=\"flex flex-wrap p-3 gap-3\">\n @for (item of properties(); track $index) {\n <rolatech-property-manage-item\n [property]=\"item\"\n routerLink=\"./{{ item.id }}/manage/info\"\n ></rolatech-property-manage-item>\n }\n </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", styles: ["mat-form-field{width:100%}table{width:100%}td.mat-column-actions{text-align:right;max-width:64px;font-size:.8rem;padding:0 8px}.mat-mdc-header-cell.actions{text-align:right;max-width:64px;width:64px}.mat-mdc-cell:nth-last-child(2),.mat-mdc-header-cell:nth-last-child(2),.mat-mdc-footer-cell:nth-last-child(2){text-align:right;max-width:180px;width:180px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{text-align:right;padding-right:8px!important}rolatech-property-manage-index{display:flex;flex-direction:column;--rt-property-view-items-per-row: 1}@media (min-width: 600px){rolatech-property-manage-index{--rt-property-view-items-per-row: 2}}@media (min-width: 768px){rolatech-property-manage-index{--rt-property-view-items-per-row: 3}}@media (min-width: 1280px){rolatech-property-manage-index{--rt-property-view-items-per-row: 3}}@media (min-width: 1536px){rolatech-property-manage-index{--rt-property-view-items-per-row: 4}}@media (min-width: 1920px){rolatech-property-manage-index{--rt-property-view-items-per-row: 5}}\n"] }]
|
|
2568
2645
|
}], propDecorators: { hasClass: [{
|
|
2569
2646
|
type: HostBinding,
|
|
2570
2647
|
args: ['class.rolatech-property-manage-index']
|
|
@@ -4108,7 +4185,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImpor
|
|
|
4108
4185
|
const propertyManageViewingsRoutes = [
|
|
4109
4186
|
{
|
|
4110
4187
|
path: '',
|
|
4111
|
-
loadComponent: () => import('./rolatech-angular-property-property-manage-viewings-index.component-
|
|
4188
|
+
loadComponent: () => import('./rolatech-angular-property-property-manage-viewings-index.component-0dp0PZdI.mjs').then((x) => x.PropertyManageViewingsIndexComponent),
|
|
4112
4189
|
},
|
|
4113
4190
|
{
|
|
4114
4191
|
path: ':id',
|
|
@@ -4722,4 +4799,4 @@ const tenantManageRoutes = [
|
|
|
4722
4799
|
*/
|
|
4723
4800
|
|
|
4724
4801
|
export { AdverseCreditStatus as A, EmploymentStatus as E, PropertyUtil as P, ResidencyStatus as R, ViewingTime as V, PropertyViewType as a, PropertyViewingItemComponent as b, propertyManageOffersRoutes as c, propertyRoutes as d, propertyManageRoutes as e, featureManageRoutes as f, propertyManageViewingsRoutes as g, PropertyActionsComponent as h, PropertyItemComponent as i, PropertyPricingComponent as j, PropertyPriceType as k, lettingManageRoutes as l, PropertyVideoProvider as m, PropertyStatus as n, PropertyType as o, propertyReviewRoutes as p, PropertyInventoryStatus as q, PropertyScope as r, PropertyViewingStatus as s, tenantManageRoutes as t, PropertyViewerCategory as u, PropertyOfferTimelineStatus as v, PropertyOfferType as w, PropertyOfferStatus as x, PropertyApplicantType as y };
|
|
4725
|
-
//# sourceMappingURL=rolatech-angular-property-rolatech-angular-property-
|
|
4802
|
+
//# sourceMappingURL=rolatech-angular-property-rolatech-angular-property-0-VRpRtu.mjs.map
|