@rolatech/angular-property 20.3.2-beta.2 → 20.3.2-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{rolatech-angular-property-property-index.component-2BXmI0uJ.mjs → rolatech-angular-property-property-index.component-B2kgOaBK.mjs} +2 -2
- package/fesm2022/{rolatech-angular-property-property-index.component-2BXmI0uJ.mjs.map → rolatech-angular-property-property-index.component-B2kgOaBK.mjs.map} +1 -1
- package/fesm2022/{rolatech-angular-property-property-manage-viewings-index.component-Cws6ElRk.mjs → rolatech-angular-property-property-manage-viewings-index.component-C22Z-C7z.mjs} +2 -2
- package/fesm2022/{rolatech-angular-property-property-manage-viewings-index.component-Cws6ElRk.mjs.map → rolatech-angular-property-property-manage-viewings-index.component-C22Z-C7z.mjs.map} +1 -1
- package/fesm2022/{rolatech-angular-property-rolatech-angular-property-CKEFhpfX.mjs → rolatech-angular-property-rolatech-angular-property-DdE64dzT.mjs} +15 -7
- package/fesm2022/rolatech-angular-property-rolatech-angular-property-DdE64dzT.mjs.map +1 -0
- package/fesm2022/rolatech-angular-property.mjs +1 -1
- package/package.json +6 -6
- package/themes/_default.scss +1 -1
- package/types/rolatech-angular-property.d.ts +1 -1
- package/fesm2022/rolatech-angular-property-rolatech-angular-property-CKEFhpfX.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rolatech-angular-property-rolatech-angular-property-CKEFhpfX.mjs","sources":["../../../../packages/angular-property/src/lib/interfaces/property.ts","../../../../packages/angular-property/src/lib/components/property-manage-item/property-manage-item.component.ts","../../../../packages/angular-property/src/lib/components/property-manage-item/property-manage-item.component.html","../../../../packages/angular-property/src/lib/components/property-manage-item-skeleton/property-manage-item-skeleton.ts","../../../../packages/angular-property/src/lib/components/property-manage-item-skeleton/property-manage-item-skeleton.html","../../../../packages/angular-property/src/lib/pages/property-review/property-review-index/property-review-index.component.ts","../../../../packages/angular-property/src/lib/pages/property-review/property-review-index/property-review-index.component.html","../../../../packages/angular-property/src/lib/components/property-media/property-media.component.ts","../../../../packages/angular-property/src/lib/components/property-media/property-media.component.html","../../../../packages/angular-property/src/lib/components/property-features/property-features.component.ts","../../../../packages/angular-property/src/lib/components/property-features/property-features.component.html","../../../../packages/angular-property/src/lib/components/property-location/load-google-maps.ts","../../../../packages/angular-property/src/lib/components/property-location/property-location.component.ts","../../../../packages/angular-property/src/lib/components/property-location/property-location.component.html","../../../../packages/angular-property/src/lib/components/property-owner-renderer/property-owner-renderer.component.ts","../../../../packages/angular-property/src/lib/components/property-owner-renderer/property-owner-renderer.component.html","../../../../packages/angular-property/src/lib/components/property-agent-update/property-agent-update.ts","../../../../packages/angular-property/src/lib/components/property-agent-update/property-agent-update.html","../../../../packages/angular-property/src/lib/pages/property-review/property-review-detail/property-review-detail.component.ts","../../../../packages/angular-property/src/lib/pages/property-review/property-review-detail/property-review-detail.component.html","../../../../packages/angular-property/src/lib/pages/property-review/property-review.routes.ts","../../../../packages/angular-property/src/lib/components/feature-manage-item/feature-manage-item.component.ts","../../../../packages/angular-property/src/lib/components/feature-manage-item/feature-manage-item.component.html","../../../../packages/angular-property/src/lib/components/feature-manage-item-add/feature-manage-item-add.component.ts","../../../../packages/angular-property/src/lib/components/feature-manage-item-add/feature-manage-item-add.component.html","../../../../packages/angular-property/src/lib/pages/feature-manage/feature-manage-index/feature-manage-index.component.ts","../../../../packages/angular-property/src/lib/pages/feature-manage/feature-manage-index/feature-manage-index.component.html","../../../../packages/angular-property/src/lib/pages/feature-manage/feature-manage-detail/feature-manage-detail.component.ts","../../../../packages/angular-property/src/lib/pages/feature-manage/feature-manage-detail/feature-manage-detail.component.html","../../../../packages/angular-property/src/lib/pages/feature-manage/feature-manage.routes.ts","../../../../packages/angular-property/src/lib/components/property-offer-item/property-offer-item.component.ts","../../../../packages/angular-property/src/lib/components/property-offer-item/property-offer-item.component.html","../../../../packages/angular-property/src/lib/components/offer-item-skeleton/offer-item-skeleton.ts","../../../../packages/angular-property/src/lib/components/offer-item-skeleton/offer-item-skeleton.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-offer-index/property-manage-offer-index.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-offer-index/property-manage-offer-index.component.html","../../../../packages/angular-property/src/lib/components/offer-edit/offer-edit.ts","../../../../packages/angular-property/src/lib/components/offer-edit/offer-edit.html","../../../../packages/angular-property/src/lib/offer-data-access/offer-detail.context.ts","../../../../packages/angular-property/src/lib/components/offer-rental-terms-card/offer-rental-terms-card.ts","../../../../packages/angular-property/src/lib/components/offer-rental-terms-card/offer-rental-terms-card.html","../../../../packages/angular-property/src/lib/components/offer-tenant-expanded/offer-tenant-expanded.ts","../../../../packages/angular-property/src/lib/components/offer-tenant-expanded/offer-tenant-expanded.html","../../../../packages/angular-property/src/lib/components/offer-tenant-card/offer-tenant-card.ts","../../../../packages/angular-property/src/lib/components/offer-tenant-card/offer-tenant-card.html","../../../../packages/angular-property/src/lib/components/offer-tenants-accordion/offer-tenants-accordion.ts","../../../../packages/angular-property/src/lib/components/offer-tenants-accordion/offer-tenants-accordion.html","../../../../packages/angular-property/src/lib/components/offer-item-card/offer-item-card.ts","../../../../packages/angular-property/src/lib/components/offer-item-card/offer-item-card.html","../../../../packages/angular-property/src/lib/components/offer-sale-details-card/offer-sale-details-card.ts","../../../../packages/angular-property/src/lib/components/offer-sale-details-card/offer-sale-details-card.html","../../../../packages/angular-property/src/lib/offer-data-access/offer-manage.facade.ts","../../../../packages/angular-property/src/lib/components/offer-reference-provider/offer-reference-provider.ts","../../../../packages/angular-property/src/lib/components/offer-reference-provider/offer-reference-provider.html","../../../../packages/angular-property/src/lib/components/offer-history-expanded/offer-history-expanded.ts","../../../../packages/angular-property/src/lib/components/offer-history-expanded/offer-history-expanded.html","../../../../packages/angular-property/src/lib/components/offer-history-card/offer-history-card.ts","../../../../packages/angular-property/src/lib/components/offer-history-card/offer-history-card.html","../../../../packages/angular-property/src/lib/components/offer-history-accordion/offer-history-accordion.ts","../../../../packages/angular-property/src/lib/components/offer-history-accordion/offer-history-accordion.html","../../../../packages/angular-property/src/lib/components/offer-counter-dialog/offer-counter-dialog.ts","../../../../packages/angular-property/src/lib/components/offer-counter-dialog/offer-counter-dialog.html","../../../../packages/angular-property/src/lib/offer-data-access/offer-internal-note.facade.ts","../../../../packages/angular-property/src/lib/components/offer-internal-note-card/offer-internal-note-card.ts","../../../../packages/angular-property/src/lib/components/offer-internal-note-card/offer-internal-note-card.html","../../../../packages/angular-property/src/lib/offer-data-access/offer-counter.facade.ts","../../../../packages/angular-property/src/lib/offer-data-access/property-offer-negotiation.facade.ts","../../../../packages/angular-property/src/lib/components/offer-counter-edit/offer-counter-edit.ts","../../../../packages/angular-property/src/lib/components/offer-counter-edit/offer-counter-edit.html","../../../../packages/angular-property/src/lib/components/offer-counter-latest-card/offer-counter-latest-card.ts","../../../../packages/angular-property/src/lib/components/offer-counter-latest-card/offer-counter-latest-card.html","../../../../packages/angular-property/src/lib/components/offer-counter-previous-card/offer-counter-previous-card.ts","../../../../packages/angular-property/src/lib/components/offer-counter-previous-card/offer-counter-previous-card.html","../../../../packages/angular-property/src/lib/components/offer-negotiation-section/offer-negotiation-section.ts","../../../../packages/angular-property/src/lib/components/offer-negotiation-section/offer-negotiation-section.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-offer-detail/property-manage-offer-detail.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-offer-detail/property-manage-offer-detail.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-offers.routes.ts","../../../../packages/angular-property/src/lib/property-util.ts","../../../../packages/angular-property/src/lib/components/property-filter-bar/property-filter-bar.ts","../../../../packages/angular-property/src/lib/components/property-filter-bar/property-filter-bar.html","../../../../packages/angular-property/src/lib/pages/property/property-layout/property-layout.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-layout/property-layout.component.html","../../../../packages/angular-property/src/lib/components/property-actions/property-actions.component.ts","../../../../packages/angular-property/src/lib/components/property-actions/property-actions.component.html","../../../../packages/angular-property/src/lib/components/property-item/property-item.component.ts","../../../../packages/angular-property/src/lib/components/property-item/property-item.component.html","../../../../packages/angular-property/src/lib/pipes/property-available.pipe.ts","../../../../packages/angular-property/src/lib/components/property-pricing/property-pricing.component.ts","../../../../packages/angular-property/src/lib/components/property-pricing/property-pricing.component.html","../../../../packages/angular-property/src/lib/components/property-info/property-info.component.ts","../../../../packages/angular-property/src/lib/components/property-info/property-info.component.html","../../../../packages/angular-property/src/lib/components/property-section/property-section.component.ts","../../../../packages/angular-property/src/lib/components/property-section/property-section.component.html","../../../../packages/angular-property/src/lib/components/property-video/property-video.component.ts","../../../../packages/angular-property/src/lib/components/property-video/property-video.component.html","../../../../packages/angular-property/src/lib/components/property-action-contact/property-action-contact.component.ts","../../../../packages/angular-property/src/lib/components/property-action-contact/property-action-contact.component.html","../../../../packages/angular-property/src/lib/components/property-agent-renderer/property-agent-renderer.ts","../../../../packages/angular-property/src/lib/components/property-agent-renderer/property-agent-renderer.html","../../../../packages/angular-property/src/lib/components/property-highlights/property-highlights.ts","../../../../packages/angular-property/src/lib/components/property-highlights/property-highlights.html","../../../../packages/angular-property/src/lib/components/epc-chart/epc-chart.ts","../../../../packages/angular-property/src/lib/components/epc-chart/epc-chart.html","../../../../packages/angular-property/src/lib/components/property-epc/property-epc.ts","../../../../packages/angular-property/src/lib/components/property-epc/property-epc.html","../../../../packages/angular-property/src/lib/components/property-floorplan/property-floorplan.ts","../../../../packages/angular-property/src/lib/components/property-floorplan/property-floorplan.html","../../../../packages/angular-property/src/lib/components/property-media-skeleton/property-media-skeleton.ts","../../../../packages/angular-property/src/lib/components/property-media-skeleton/property-media-skeleton.html","../../../../packages/angular-property/src/lib/components/property-info-skeleton/property-info-skeleton.ts","../../../../packages/angular-property/src/lib/components/property-info-skeleton/property-info-skeleton.html","../../../../packages/angular-property/src/lib/components/property-agent-skeleton/property-agent-skeleton.ts","../../../../packages/angular-property/src/lib/components/property-agent-skeleton/property-agent-skeleton.html","../../../../packages/angular-property/src/lib/pages/property/property-details/property-details.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-details/property-details.component.html","../../../../packages/angular-property/src/lib/components/property-viewing-time/property-viewing-time.component.ts","../../../../packages/angular-property/src/lib/components/property-viewing-time/property-viewing-time.component.html","../../../../packages/angular-property/src/lib/components/property-intent-shell/property-intent-shell.ts","../../../../packages/angular-property/src/lib/components/property-intent-shell/property-intent-shell.html","../../../../packages/angular-property/src/lib/components/property-market-breadcrumb/property-market-breadcrumb.ts","../../../../packages/angular-property/src/lib/components/property-market-breadcrumb/property-market-breadcrumb.html","../../../../packages/angular-property/src/lib/pages/property/property-viewing-request/property-viewing-request.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-viewing-request/property-viewing-request.component.html","../../../../packages/angular-property/src/lib/pages/property/property-offer-index/property-offer-index.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-offer-index/property-offer-index.component.html","../../../../packages/angular-property/src/lib/components/property-viewing-item/property-viewing-item.component.ts","../../../../packages/angular-property/src/lib/components/property-viewing-item/property-viewing-item.component.html","../../../../packages/angular-property/src/lib/pages/property/property-viewing-index/property-viewing-index.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-viewing-index/property-viewing-index.component.html","../../../../packages/angular-property/src/lib/components/offer-header-card/offer-header-card.ts","../../../../packages/angular-property/src/lib/components/offer-header-card/offer-header-card.html","../../../../packages/angular-property/src/lib/components/offer-side-summary-card/offer-side-summary-card.ts","../../../../packages/angular-property/src/lib/components/offer-side-summary-card/offer-side-summary-card.html","../../../../packages/angular-property/src/lib/components/property-workspace-shell/property-workspace-shell.ts","../../../../packages/angular-property/src/lib/components/property-workspace-shell/property-workspace-shell.html","../../../../packages/angular-property/src/lib/pages/property/property-offer-detail/property-offer-detail.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-offer-detail/property-offer-detail.component.html","../../../../packages/angular-property/src/lib/viewing-data-access/viewing-detail.context.ts","../../../../packages/angular-property/src/lib/viewing-data-access/property-viewing.facade.ts","../../../../packages/angular-property/src/lib/pages/property/property-viewing-detail/property-viewing-detail.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-viewing-detail/property-viewing-detail.component.html","../../../../packages/angular-property/src/lib/pages/property/property-wishlist/property-wishlist.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-wishlist/property-wishlist.component.html","../../../../packages/angular-property/src/lib/offer-data-access/offer-form.validators.ts","../../../../packages/angular-property/src/lib/offer-data-access/offer-form.facade.ts","../../../../packages/angular-property/src/lib/components/rental-offer-terms-section/rental-offer-terms-section.ts","../../../../packages/angular-property/src/lib/components/rental-offer-terms-section/rental-offer-terms-section.html","../../../../packages/angular-property/src/lib/offer-shared/services/tenant-registry.service.ts","../../../../packages/angular-property/src/lib/components/tenant-basic-info-section/tenant-basic-info-section.ts","../../../../packages/angular-property/src/lib/components/tenant-basic-info-section/tenant-basic-info-section.html","../../../../packages/angular-property/src/lib/components/corporate-section/corporate-section.ts","../../../../packages/angular-property/src/lib/components/corporate-section/corporate-section.html","../../../../packages/angular-property/src/lib/components/employment.section/employment.section.ts","../../../../packages/angular-property/src/lib/components/employment.section/employment.section.html","../../../../packages/angular-property/src/lib/components/guarantor-employment-section/guarantor-employment-section.ts","../../../../packages/angular-property/src/lib/components/guarantor-employment-section/guarantor-employment-section.html","../../../../packages/angular-property/src/lib/components/guarantor-company-section/guarantor-company-section.ts","../../../../packages/angular-property/src/lib/components/guarantor-company-section/guarantor-company-section.html","../../../../packages/angular-property/src/lib/components/guarantor-section/guarantor-section.ts","../../../../packages/angular-property/src/lib/components/guarantor-section/guarantor-section.html","../../../../packages/angular-property/src/lib/components/student-section/student-section.ts","../../../../packages/angular-property/src/lib/components/student-section/student-section.html","../../../../packages/angular-property/src/lib/offer-shared/services/tenant-form.token.ts","../../../../packages/angular-property/src/lib/components/tenant-applicant-type-section/tenant-applicant-type-section.ts","../../../../packages/angular-property/src/lib/components/tenant-applicant-type-section/tenant-applicant-type-section.html","../../../../packages/angular-property/src/lib/components/tenant-card/tenant-card.ts","../../../../packages/angular-property/src/lib/components/tenant-card/tenant-card.html","../../../../packages/angular-property/src/lib/components/tenant-list-section/tenant-list-section.ts","../../../../packages/angular-property/src/lib/components/tenant-list-section/tenant-list-section.html","../../../../packages/angular-property/src/lib/components/tenant-item/tenant-item.ts","../../../../packages/angular-property/src/lib/components/tenant-item/tenant-item.html","../../../../packages/angular-property/src/lib/components/agent-tenant-list-section/agent-tenant-list-section.ts","../../../../packages/angular-property/src/lib/components/agent-tenant-list-section/agent-tenant-list-section.html","../../../../packages/angular-property/src/lib/components/property-offer-rental-form/property-offer-rental-form.ts","../../../../packages/angular-property/src/lib/components/property-offer-rental-form/property-offer-rental-form.html","../../../../packages/angular-property/src/lib/components/sale-offer-section/sale-offer-section.ts","../../../../packages/angular-property/src/lib/components/sale-offer-section/sale-offer-section.html","../../../../packages/angular-property/src/lib/components/property-offer-sale-form/property-offer-sale-form.ts","../../../../packages/angular-property/src/lib/components/property-offer-sale-form/property-offer-sale-form.html","../../../../packages/angular-property/src/lib/pages/property/property-offer-create/property-offer-create.ts","../../../../packages/angular-property/src/lib/pages/property/property-offer-create/property-offer-create.html","../../../../packages/angular-property/src/lib/pages/property/property.routes.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-index/property-manage-index.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-index/property-manage-index.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-create/property-manage-create.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-create/property-manage-create.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-layout/property-manage-layout.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-layout/property-manage-layout.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-content/property-manage-content.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-content/property-manage-content.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-info/property-manage-info.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-info/property-manage-info.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-media/property-manage-media.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-media/property-manage-media.component.html","../../../../packages/angular-property/src/lib/components/property-manage-section-item/property-manage-section-item.component.ts","../../../../packages/angular-property/src/lib/components/property-manage-section-item/property-manage-section-item.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-sections/property-manage-sections.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-sections/property-manage-sections.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-pricing/property-manage-pricing.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-pricing/property-manage-pricing.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-schedule/property-manage-schedule.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-schedule/property-manage-schedule.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-features/property-manage-features.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-features/property-manage-features.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-location/property-manage-location.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-location/property-manage-location.component.html","../../../../packages/angular-property/src/lib/components/property-video-youtube-add/property-video-youtube-add.component.ts","../../../../packages/angular-property/src/lib/components/property-video-youtube-add/property-video-youtube-add.component.html","../../../../packages/angular-property/src/lib/components/property-video-item/property-video-item.ts","../../../../packages/angular-property/src/lib/components/property-video-item/property-video-item.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-video/property-manage-video.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-video/property-manage-video.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-highlights/property-manage-highlights.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-highlights/property-manage-highlights.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-epc/property-manage-epc.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-epc/property-manage-epc.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-translation/property-manage-translation.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-translation/property-manage-translation.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-keywords/property-manage-keywords.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-keywords/property-manage-keywords.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-floorplan/property-manage-floorplan.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-floorplan/property-manage-floorplan.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-mange.routes.ts","../../../../packages/angular-property/src/lib/components/property-viewing-confirmation/property-viewing-confirmation.component.ts","../../../../packages/angular-property/src/lib/components/property-viewing-confirmation/property-viewing-confirmation.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-viewings-detail/property-manage-viewings-detail.component.ts","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-viewings-detail/property-manage-viewings-detail.component.html","../../../../packages/angular-property/src/lib/pages/property-manage/property-manage-viewings.routes.ts","../../../../packages/angular-property/src/lib/components/property-market-item/property-market-item.ts","../../../../packages/angular-property/src/lib/components/property-market-item/property-market-item.html","../../../../packages/angular-property/src/lib/pages/property-market/property-market-index/property-market-index.ts","../../../../packages/angular-property/src/lib/pages/property-market/property-market-index/property-market-index.html","../../../../packages/angular-property/src/lib/components/letting-actions/letting-actions.ts","../../../../packages/angular-property/src/lib/components/letting-actions/letting-actions.html","../../../../packages/angular-property/src/lib/components/letting-action-contact/letting-action-contact.ts","../../../../packages/angular-property/src/lib/components/letting-action-contact/letting-action-contact.html","../../../../packages/angular-property/src/lib/pages/property-market/property-market-detail/property-market-detail.ts","../../../../packages/angular-property/src/lib/pages/property-market/property-market-detail/property-market-detail.html","../../../../packages/angular-property/src/lib/pages/property-market/property-market-viewing-index/property-market-viewing-index.ts","../../../../packages/angular-property/src/lib/pages/property-market/property-market-viewing-index/property-market-viewing-index.html","../../../../packages/angular-property/src/lib/pages/property-market/property-market-viewing-detail/property-market-viewing-detail.ts","../../../../packages/angular-property/src/lib/pages/property-market/property-market-viewing-detail/property-market-viewing-detail.html","../../../../packages/angular-property/src/lib/pages/property-market/property-market-offer-index/property-market-offer-index.ts","../../../../packages/angular-property/src/lib/pages/property-market/property-market-offer-index/property-market-offer-index.html","../../../../packages/angular-property/src/lib/pages/property-market/property-market-offer-detail/property-market-offer-detail.ts","../../../../packages/angular-property/src/lib/pages/property-market/property-market-offer-detail/property-market-offer-detail.html","../../../../packages/angular-property/src/lib/pages/property-market/property-market-viewing-request/property-market-viewing-request.ts","../../../../packages/angular-property/src/lib/pages/property-market/property-market-viewing-request/property-market-viewing-request.html","../../../../packages/angular-property/src/lib/pages/property-market/property-market-offer-request/property-market-offer-request.ts","../../../../packages/angular-property/src/lib/pages/property-market/property-market-offer-request/property-market-offer-request.html","../../../../packages/angular-property/src/lib/pages/property-market/property-market-saved-index/property-market-saved-index.ts","../../../../packages/angular-property/src/lib/pages/property-market/property-market-saved-index/property-market-saved-index.html","../../../../packages/angular-property/src/lib/pages/property-market/property-market.routes.ts","../../../../packages/angular-property/src/lib/pages/tenant-manage/tenant-manage-index/tenant-manage-index.ts","../../../../packages/angular-property/src/lib/pages/tenant-manage/tenant-manage-index/tenant-manage-index.html","../../../../packages/angular-property/src/lib/pages/tenant-manage/tenant-manage-detail/tenant-manage-detail.ts","../../../../packages/angular-property/src/lib/pages/tenant-manage/tenant-manage-detail/tenant-manage-detail.html","../../../../packages/angular-property/src/lib/pages/tenant-manage/tenant-manage-create/tenant-manage-create.ts","../../../../packages/angular-property/src/lib/pages/tenant-manage/tenant-manage-create/tenant-manage-create.html","../../../../packages/angular-property/src/lib/pages/tenant-manage/tenant-manage.routes.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-viewing-index/property-listing-viewing-index.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-viewing-index/property-listing-viewing-index.html","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-viewing-detail/property-listing-viewing-detail.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-viewing-detail/property-listing-viewing-detail.html","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-viewing.routes.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-offer-detail/property-listing-offer-detail.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-offer-detail/property-listing-offer-detail.html","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-offer-index/property-listing-offer-index.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-offer-index/property-listing-offer-index.html","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-offer.routes.ts","../../../../packages/angular-property/src/lib/pages/property-overview/property-agent-overview.routes.ts","../../../../packages/angular-property/src/lib/pages/property-overview/property-manage-overview.routes.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-index/property-listing-index.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-index/property-listing-index.html","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-create/property-listing-create.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-create/property-listing-create.html","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-layout/property-listing-layout.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-layout/property-listing-layout.html","../../../../packages/angular-property/src/lib/routing/feature-availability.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing-feature.ts","../../../../packages/angular-property/src/lib/pages/property-listing/property-listing.routes.ts","../../../../packages/angular-property/src/provider.ts","../../../../packages/angular-property/src/rolatech-angular-property.ts"],"sourcesContent":["import { Feature, FeatureValue } from './feature';\n\nexport interface Property {\n id: string;\n title: string;\n description: string;\n bedrooms: number;\n bathrooms: number;\n receptions: number;\n floor: number;\n size: number;\n availableDate: Date;\n media: PropertyMedia[];\n videos: PropertyVideo[];\n status: PropertyStatus | string;\n type: PropertyType | string;\n scope: PropertyScope | string;\n tags: PropertyTag[];\n sections: PropertySection[];\n options: PropertyOption[];\n features: PropertyFeatureOption[];\n userFeatures: PropertyFeature[];\n\n location: PropertyLocation;\n variants?: PropertyVariant[];\n price: number;\n deposit: number;\n priceType: PropertyPriceType;\n agentId: string;\n landlordId: string;\n createdAt: string;\n updatedAt: string;\n highlights: string[];\n epc: PropertyEpcModel;\n rentFrequency: RentFrequency;\n market: Market;\n}\nexport enum RentFrequency {\n NOT_SPECIFIED = 'Not specified',\n WEEKLY = 'Weekly',\n BI_WEEKLY = 'Bi weekly', // every 2 weeks\n MONTHLY = 'Monthly',\n BI_MONTHLY = 'Bi monthly', // every 2 months\n QUARTERLY = 'Quarterly', // every 3 months\n SEMI_ANNUAL = 'Semi annual', // every 6 months\n ANNUAL = 'Annual', // yearly\n ONE_TIME = 'One time', // single payment\n DAILY = 'Daily', // short-term rentals\n CUSTOM = 'Custom', // flexible/negotiated terms\n}\nexport enum Market {\n SALE = 'Sale',\n RENTAL = 'Rent',\n NOT_SPECIFIED = 'Not specified',\n}\n\nexport interface PropertyEpcModel {\n currentRating: string;\n potentialRating: string;\n currentScore: number;\n potentialScore: number;\n}\nexport interface PropertyHighlight {\n text: string;\n}\nexport interface PropertyFeature {\n code: string;\n type: string;\n label: string;\n}\nexport interface PropertyFeatureOption {\n property: Property;\n feature: Feature;\n value: FeatureValue;\n}\nexport enum PropertyPriceType {\n FIXED = '固定价格',\n PARTIAL = '支付定金',\n VARIED = '多变的',\n}\nexport interface PropertySection {\n id: string;\n title: string;\n description: string;\n content: string;\n media: PropertyMedia[];\n isUploading?: boolean;\n}\n\nexport interface PropertyVariant {\n id: string;\n title: string;\n price: number;\n sku: string;\n options: PropertyVariantOption[];\n media: PropertyVariantMedia[];\n isUploading?: boolean;\n status: PropertyInventoryStatus | string;\n inventoryItemId: string;\n}\nexport interface PropertyVariantMedia {\n url: string;\n alt: string;\n uploading?: boolean;\n}\nexport interface PropertyVariantOption {\n option: PropertyOption;\n value: PropertyOptionValue;\n}\nexport interface PropertyTag {\n id: string;\n name: string;\n}\nexport interface PropertyLocation {\n id?: string;\n flatNumber: string;\n streetNumber: string;\n name: string;\n street: string;\n town: string;\n postCode: string;\n country: string;\n longitude: string;\n latitude: string;\n}\nexport interface Floorplan {\n id: string;\n title: string;\n url: string;\n contentType: string;\n sortOrder: number;\n propertyId: string;\n}\nexport interface PropertyVideo {\n id?: string;\n title?: string;\n description?: string;\n url: string;\n provider?: PropertyVideoProvider;\n uploading?: boolean;\n progress: number | 0;\n duration: number | 0;\n thumbnail?: string;\n}\nexport enum PropertyVideoProvider {\n YOUTUBE = 'YOUTUBE',\n S3 = 'AWS S3',\n LOCAL = 'Local server',\n COS = 'COS',\n}\nexport enum PropertyStatus {\n DRAFT = <any>'Draft',\n PENDING = <any>'Pending',\n APPROVED = <any>'Approved',\n REJECTED = <any>'Rejected',\n AVAILABLE = <any>'Available',\n SOLD = <any>'Sold',\n RENTED = <any>'Rented',\n DELETED = <any>'Deleted',\n ARCHIVED = <any>'Archived',\n}\nexport enum PropertyType {\n ROOM = 'Room',\n HOUSE = 'House',\n APARTMENT = 'Flat/Apartment',\n}\nexport enum PropertyInventoryStatus {\n IN_STOCK = '有货',\n LOW_STOCK = '库存不足',\n OUT_OF_STOCK = '售罄',\n DISCONTINUED = '已停产',\n}\nexport enum PropertyScope {\n WEB = <any>'网站',\n GLOBAL = <any>'全域',\n}\nexport interface PropertyMedia {\n id: string;\n url: string;\n alt: string;\n width: number;\n height: number;\n uuid: string;\n selected: boolean;\n}\n\nexport interface PropertyTag {\n id: string;\n name: string;\n}\n\nexport interface PropertyOption {\n id: string;\n name: string;\n values: PropertyOptionValue[];\n}\nexport interface PropertyOptionValue {\n id?: string;\n name: string;\n}\nexport interface PropertyDepositResult {\n holdingDeposit: number;\n securityDeposit: number;\n agentCommission: number;\n}\nexport interface PropertyViewingRequest {\n firstName?: string;\n lastName?: string;\n email?: string;\n phone?: string;\n jobTitle?: string;\n monthlyBudget?: number;\n annualIncome?: number;\n moveInDate?: string;\n viewerCategory?: PropertyViewerCategory;\n applicantType?: PropertyApplicantTypeCode | string;\n proposedSlots: ViewingProposedSlot[];\n}\nexport interface ViewingProposedSlot {\n id?: string;\n date: string;\n time: string;\n source?: string | null;\n state?: string | null;\n}\nexport interface PropertyViewing {\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n jobTitle?: string;\n monthlyBudget?: number;\n annualIncome?: number;\n moveInDate?: string;\n userId: string;\n agentId: string;\n appId?: string;\n orgId?: string;\n status: PropertyViewingStatusCode | string;\n viewerCategory?: PropertyViewerCategory | string;\n tenantCategory?: PropertyApplicantTypeCode | string;\n requesterType?: string;\n requesterAppId?: string;\n requesterOrgId?: string;\n viewingDate?: string;\n viewingTime?: string;\n slotProposalSource?: string | null;\n slotDecisionRequired?: boolean | null;\n counteredAt?: string | null;\n proposedSlots: ViewingProposedSlot[];\n item: PropertyViewingItem;\n}\nexport interface PropertyViewingItem {\n propertyId: string;\n title: string;\n description: string;\n address: string;\n price: number;\n bedrooms: number;\n bathrooms: number;\n receptions: number;\n agentId: string;\n media: PropertyViewingItemMedia[];\n}\nexport interface PropertyViewingItemMedia {\n id: string;\n url: string;\n alt: string;\n width?: number;\n height?: number;\n uuid?: string;\n}\nexport enum PropertyViewingStatus {\n PENDING = 'Pending',\n COUNTERED = 'Countered',\n APPROVED = 'Approved',\n REJECTED = 'Rejected',\n CANCELLED = 'Cancelled',\n COMPLETED = 'Completed',\n}\nexport enum PropertyViewerCategory {\n TENANT = 'TENANT',\n AGENT = 'AGENT',\n}\nexport type PropertyViewingStatusCode = keyof typeof PropertyViewingStatus;\n\nexport function propertyViewingStatusCode(status: string | null | undefined): PropertyViewingStatusCode | null {\n const normalized = `${status ?? ''}`.trim().toUpperCase();\n return normalized && normalized in PropertyViewingStatus ? (normalized as PropertyViewingStatusCode) : null;\n}\n\nexport function propertyViewingStatusLabel(status: string | null | undefined): string {\n const code = propertyViewingStatusCode(status);\n return code ? PropertyViewingStatus[code] : `${status ?? ''}`.trim();\n}\nexport interface PropertyOfferRequest {\n firstName?: string;\n lastName?: string;\n email?: string;\n phone?: string;\n applicantType?: PropertyApplicantType | string;\n residencyStatus?: ResidencyStatus | string;\n employmentStatus?: EmploymentStatus | string;\n adverseCreditStatus?: AdverseCreditStatus | string;\n startDate: string;\n notes: string;\n amount: number;\n numberOfTenants?: number;\n tenancyDuration?: number;\n tenantId?: string;\n}\nexport type OfferInvoiceOption = 'COMBINED' | 'SEPARATE';\n\nexport interface PropertyOffer {\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n userId: string;\n agentId: string;\n propertyId: string;\n amount: number;\n startDate: string;\n type: PropertyOfferType;\n invoiceOption: OfferInvoiceOption;\n status: PropertyOfferStatus;\n numberOfTenants: string;\n tenancyDuration: number;\n applicantType: PropertyApplicantType;\n residencyStatus: ResidencyStatus;\n employmentStatus: EmploymentStatus;\n employer: string;\n jobTitle: string;\n income: number;\n adverseCreditStatus: AdverseCreditStatus;\n property: Property;\n title: string;\n description: string;\n createdAt: string;\n notes: string;\n item: PropertyOfferItem;\n}\nexport enum PropertyOfferTimelineStatus {\n OFFER_CREATED = 'Offer created',\n OFFER_ACCEPTED = 'Offer accepted',\n OFFER_REJECTED = 'Offer rejected',\n OFFER_CLOSED = 'Offer closed',\n OFFER_CANCELLED = 'Offer cancelled',\n OFFER_HOLDING_DEPOSIT_PAID = 'Offer holding deposit paid',\n OFFER_SECURITY_DEPOSIT_PAID = 'Offer security deposit paid',\n OFFER_REFUNDED = 'Offer refunded',\n OFFER_COMPLETED = 'Offer completed',\n OFFER_RETURN_REQUESTED = 'Offer return requested',\n OFFER_RETURN_APPROVED = 'Offer return approved',\n OFFER_RETURN_REJECTED = 'Offer return rejected',\n OFFER_RETURN_PROCESSING = 'Offer return processing',\n OFFER_RETURN_REFUNDED = 'Offer return refunded',\n}\nexport interface PropertyOfferItem {\n propertyId: string;\n title: string;\n description: string;\n amount: number;\n bedrooms: number;\n bathrooms: number;\n receptions: number;\n agentId: string;\n media: PropertyOfferItemMedia[];\n}\nexport interface PropertyOfferItemMedia {\n id: string;\n url: string;\n alt: string;\n width: number;\n height: number;\n uuid: string;\n}\nexport enum PropertyOfferType {\n SALE = 'Sale',\n RENTAL = 'Rent',\n NOT_SPECIFIED = 'Not specified',\n}\nexport enum PropertyOfferStatus {\n // ── Draft / submission ────────────────────\n DRAFT = 'DRAFT',\n SUBMITTED = 'SUBMITTED',\n\n // ── Negotiation turn states ───────────────\n VIEWED_BY_AGENT = 'VIEWED_BY_AGENT',\n VIEWED_BY_TENANT = 'VIEWED_BY_TENANT',\n\n COUNTERED_BY_AGENT = 'COUNTERED_BY_AGENT',\n COUNTERED_BY_TENANT = 'COUNTERED_BY_TENANT',\n\n WITHDRAWN_BY_AGENT = 'WITHDRAWN_BY_AGENT',\n WITHDRAWN_BY_TENANT = 'WITHDRAWN_BY_TENANT',\n\n // ── Decision ──────────────────────────────\n ACCEPTED = 'ACCEPTED', // accepted in principle\n REJECTED = 'REJECTED',\n\n // ── Market / listing ──────────────────────\n UNDER_OFFER = 'UNDER_OFFER',\n\n // ── Holding deposit ───────────────────────\n HOLDING_DEPOSIT_PENDING = 'HOLDING_DEPOSIT_PENDING',\n HOLDING_DEPOSIT_PAID = 'HOLDING_DEPOSIT_PAID',\n\n // ── Referencing ───────────────────────────\n REFERENCING = 'REFERENCING',\n REFERENCES_PASSED = 'REFERENCES_PASSED',\n REFERENCES_FAILED = 'REFERENCES_FAILED',\n\n // ── Contract ──────────────────────────────\n CONTRACT_PENDING = 'CONTRACT_PENDING',\n CONTRACT_SIGNED = 'CONTRACT_SIGNED',\n CONTRACT_FAILED = 'CONTRACT_FAILED',\n\n // ── Move-in payments ──────────────────────\n SECURITY_DEPOSIT_PENDING = 'SECURITY_DEPOSIT_PENDING',\n SECURITY_DEPOSIT_PAID = 'SECURITY_DEPOSIT_PAID',\n FIRST_RENT_PENDING = 'FIRST_RENT_PENDING',\n MOVE_IN_PAYMENT_PAID = 'MOVE_IN_PAYMENT_PAID',\n\n // ── Completion ────────────────────────────\n COMPLETED = 'COMPLETED',\n\n // ── Terminal / system ─────────────────────\n FAILED = 'FAILED',\n EXPIRED = 'EXPIRED',\n CANCELLED = 'CANCELLED',\n}\n\nexport enum EmploymentStatus {\n EMPLOYED = 'Employed',\n RETRIED = 'Retried',\n SELF_EMPLOYED = 'Self employed',\n STUDENT = 'Student',\n UNEMPLOYED = 'UnEmployed',\n}\nexport enum ResidencyStatus {\n CITIZEN = \"I don't need a visa\",\n VISA_HOLDER = 'I have a visa',\n WAITING_FOR_VISA = 'I am waiting for my visa',\n NOT_YET_APPLIED_FOR_VISA = 'I have not yet applied for a visa',\n}\nexport enum PropertyApplicantType {\n INDIVIDUAL = 'Individual',\n CORPORATE = 'Corporate',\n STUDENT = 'Student',\n}\nexport type PropertyApplicantTypeCode = keyof typeof PropertyApplicantType;\n\nexport enum AdverseCreditStatus {\n NONE = 'None',\n ACTIVE_CCJ = 'Active CCJ',\n SATISFIED_CCJ = 'Satisfied CCJ',\n DEBT_MANAGEMENT_PLAN = 'Debt managment plan',\n LOW_CREDIT_SCORE = 'Low credit score',\n OTHER = 'Other',\n}\nexport interface Tenant {\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n avatar: string;\n income?: number;\n tenantCategory?: PropertyApplicantType;\n employmentStatus?: EmploymentStatus;\n adverseCreditStatus?: AdverseCreditStatus;\n residencyStatus?: ResidencyStatus;\n}\nexport interface PropertySearchOptions {\n market: string;\n town: string;\n type: string;\n availableFrom: string;\n minBedrooms: string;\n maxBedrooms: string;\n minPrice: number | 0;\n maxPrice: number | null;\n location: string;\n radius?: string;\n page?: number;\n limit?: number;\n}\nexport const ViewingTime = [\n '09:00',\n '09:15',\n '09:30',\n '09:45',\n\n '10:00',\n '10:15',\n '10:30',\n '10:45',\n '11:00',\n '11:15',\n '11:30',\n '11:45',\n\n '12:00',\n '12:15',\n '12:30',\n '12:45',\n '13:00',\n '13:15',\n '13:30',\n '13:45',\n\n '14:00',\n '14:15',\n '14:30',\n '14:45',\n '15:00',\n '15:15',\n '15:30',\n '15:45',\n\n '16:00',\n '16:15',\n '16:30',\n '16:45',\n '17:00',\n '17:15',\n '17:30',\n '17:45',\n\n '18:00',\n];\nexport const BedroomRange = [\n { label: 'No min', value: '0' },\n { label: 'No max', value: null },\n { label: '1', value: '1' },\n { label: '2', value: '2' },\n { label: '3', value: '3' },\n { label: '4', value: '4' },\n { label: '5', value: '5' },\n];\nexport const PriceRange = [\n { label: 'No min', value: 0 },\n { label: 'No max', value: null },\n { label: '£100 PCM', value: 100 },\n { label: '£150 PCM', value: 150 },\n { label: '£200 PCM', value: 200 },\n { label: '£250 PCM', value: 250 },\n { label: '£300 PCM', value: 300 },\n { label: '£350 PCM', value: 350 },\n { label: '£400 PCM', value: 400 },\n { label: '£450 PCM', value: 450 },\n { label: '£500 PCM', value: 500 },\n { label: '£600 PCM', value: 600 },\n { label: '£700 PCM', value: 700 },\n { label: '£800 PCM', value: 800 },\n { label: '£900 PCM', value: 900 },\n { label: '£1,000 PCM', value: 1000 },\n { label: '£1,100 PCM', value: 1100 },\n { label: '£1,200 PCM', value: 1200 },\n { label: '£1,250 PCM', value: 1250 },\n { label: '£1,300 PCM', value: 1300 },\n { label: '£1,400 PCM', value: 1400 },\n { label: '£1,500 PCM', value: 1500 },\n { label: '£1,750 PCM', value: 1750 },\n { label: '£2,000 PCM', value: 2000 },\n { label: '£2,250 PCM', value: 2250 },\n { label: '£2,500 PCM', value: 2500 },\n { label: '£2,750 PCM', value: 2750 },\n { label: '£3,000 PCM', value: 3000 },\n { label: '£3,500 PCM', value: 3500 },\n { label: '£4,000 PCM', value: 4000 },\n { label: '£4,500 PCM', value: 4500 },\n { label: '£5,000 PCM', value: 5000 },\n { label: '£5,500 PCM', value: 5500 },\n { label: '£6,000 PCM', value: 6000 },\n { label: '£6,500 PCM', value: 6500 },\n { label: '£7,000 PCM', value: 7000 },\n { label: '£8,000 PCM', value: 8000 },\n { label: '£9,000 PCM', value: 9000 },\n { label: '£10,000 PCM', value: 10000 },\n { label: '£12,500 PCM', value: 12500 },\n { label: '£15,000 PCM', value: 15000 },\n { label: '£17,500 PCM', value: 17500 },\n { label: '£20,000 PCM', value: 20000 },\n { label: '£25,000 PCM', value: 25000 },\n { label: '£30,000 PCM', value: 30000 },\n { label: '£35,000 PCM', value: 35000 },\n { label: '£40,000 PCM', value: 40000 },\n];\n","import { booleanAttribute, Component, effect, ElementRef, HostBinding, inject, input, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { ThumbnailComponent, ImagePlaceholderComponent } from '@rolatech/angular-components';\nimport { Property, PropertyStatus } from '../../interfaces';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-manage-item',\n imports: [CommonModule, ThumbnailComponent, ImagePlaceholderComponent, MatButtonModule, MatMenuModule, PricePipe],\n templateUrl: './property-manage-item.component.html',\n styleUrl: './property-manage-item.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyManageItemComponent {\n @HostBinding('class.rolatech-property-manage-item') hasClass = true;\n el = inject(ElementRef);\n property = input.required<Property>();\n thumbnail = input();\n status = PropertyStatus;\n list = input(false, { transform: booleanAttribute });\n constructor() {\n effect(() => {\n if (this.list()) {\n this.el.nativeElement.setAttribute('list', '');\n } else {\n this.el.nativeElement.removeAttribute('list', '');\n }\n });\n }\n publish() {}\n archived() {}\n delete() {}\n}\n","<div\n class=\"flex 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 [src]=\"property().media.length > 0 ? property().media[0].url : ''\" size=\"medium\" mode=\"clip\">\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=\"px-2 pb-3\">\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=\"\">{{ property().price | price }}</div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { booleanAttribute, Component, effect, ElementRef, HostBinding, inject, input, ViewEncapsulation } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-property-manage-item-skeleton',\n imports: [CommonModule, Skeleton],\n templateUrl: './property-manage-item-skeleton.html',\n styleUrl: './property-manage-item-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyManageItemSkeleton {\n @HostBinding('class.rolatech-property-manage-item-skeleton') hasClass = true;\n el = inject(ElementRef);\n loading = input(false);\n list = input(false, { transform: booleanAttribute });\n constructor() {\n effect(() => {\n if (this.list()) {\n this.el.nativeElement.setAttribute('list', '');\n } else {\n this.el.nativeElement.removeAttribute('list', '');\n }\n });\n }\n}\n","<div class=\"flex w-full\" [ngClass]=\"list() ? 'flex-row' : 'flex-col'\">\n <div class=\"object-cover aspect-video rounded-lg\" [ngClass]=\"list() ? 'w-1/3 mr-3' : ''\">\n <rolatech-skeleton class=\"w-full h-full\"></rolatech-skeleton>\n </div>\n <div class=\"flex flex-col justify-between\" [ngClass]=\"list() ? 'w-2/3' : ''\">\n <rolatech-skeleton class=\"w-2/3 h-5 my-1\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-12 h-4 my-1\"></rolatech-skeleton>\n </div>\n</div>\n","import { Component, HostBinding, inject, OnInit, viewChild, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatTableModule } from '@angular/material/table';\nimport { RouterLink } from '@angular/router';\nimport { ToolbarComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyManageItemComponent } from '../../../components/property-manage-item/property-manage-item.component';\nimport { Property } from '../../../interfaces';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDialog } from '@angular/material/dialog';\nimport { PropertyManageItemSkeleton } from '../../../components/property-manage-item-skeleton/property-manage-item-skeleton';\n\n@Component({\n selector: 'rolatech-property-review-index',\n imports: [\n MatButtonModule,\n RouterLink,\n MatIconModule,\n MatTableModule,\n MatMenuModule,\n MatPaginatorModule,\n ToolbarComponent,\n PropertyManageItemComponent,\n PropertyManageItemSkeleton,\n ],\n templateUrl: './property-review-index.component.html',\n styleUrl: './property-review-index.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyReviewIndexComponent implements OnInit {\n @HostBinding('class.rolatech-property-manage-index') hasClass = true;\n paginator = viewChild(MatPaginator);\n dialog = inject(MatDialog);\n snackBar = inject(MatSnackBar);\n propertyService = inject(PropertyService);\n isLoading = false;\n isSearch = false;\n properties: Property[] = [];\n\n ngOnInit(): void {\n this.findProperties();\n }\n findProperties() {\n this.propertyService.find({}).subscribe({\n next: (res: any) => {\n this.properties = res.data;\n },\n });\n }\n}\n","<rolatech-toolbar title=\"Properties\"> </rolatech-toolbar>\n@if (isLoading) {\n <div class=\"bg-(--rt-rasised-background) h-full\">\n <!-- <rolatech-property-manage-filter></rolatech-property-manage-filter> -->\n <div class=\"flex flex-row flex-wrap p-3 gap-3\">\n @for (row of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; track row) {\n <rolatech-property-manage-item-skeleton></rolatech-property-manage-item-skeleton>\n }\n </div>\n </div>\n} @else {\n <div class=\"bg-(--rt-rasised-background) h-full\">\n <div class=\"flex flex-wrap p-3 gap-3\">\n @for (item of properties; track $index) {\n <rolatech-property-manage-item class=\"cursor-pointer\"\n list\n [property]=\"item\"\n routerLink=\"./properties/{{ item.id }}\"\n ></rolatech-property-manage-item>\n }\n </div>\n </div>\n\n <!-- <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"pageEvent = find($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator> -->\n}\n","import { Component, HostBinding, inject, input, ViewEncapsulation } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Media } from '@rolatech/angular-common';\nimport { ThumbnailComponent, ImagePreviewDialogComponent, Loading, Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-property-media',\n imports: [NgClass, ThumbnailComponent, Skeleton],\n templateUrl: './property-media.component.html',\n styleUrl: './property-media.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyMediaComponent extends Loading {\n @HostBinding('class.rolatech-property-medi') hasClass = true;\n @HostBinding('class.scrollbar-hide') disableScrollbar = true;\n media = input<Media[]>();\n min = input<boolean>(false);\n mediaIndex = 0;\n onImageClick(i: any) {\n const dialogRef = this.dialog.open(ImagePreviewDialogComponent, {\n maxWidth: '80vw',\n maxHeight: '80vh',\n height: '80%',\n width: '80%',\n panelClass: 'full-screen-modal',\n data: {\n media: this.media,\n selected: i,\n },\n });\n dialogRef.afterClosed().subscribe((result) => {});\n }\n}\n","<div class=\"py-3\">\n @if (loading()) {\n <div class=\"object-cover aspect-video bg-(--rt-raised-background)\">\n <rolatech-skeleton></rolatech-skeleton>\n </div>\n\n <div class=\"flex overflow-y-hidden overflow-x-scroll scrollbar-hide pb-4\">\n @for (dummy of [0, 1, 2, 3]; track dummy) {\n <div class=\"flex flex-row mt-3 mr-3 rounded-md min-w-32 object-cover aspect-video bg-(--rt-raised-background)\">\n <rolatech-skeleton></rolatech-skeleton>\n </div>\n }\n </div>\n } @else {\n @if (media()?.length) {\n <div class=\"object-cover aspect-video bg-(--rt-raised-background)\">\n <rolatech-thumbnail [src]=\"media()![mediaIndex]?.url ?? ''\" size=\"small\"> </rolatech-thumbnail>\n </div>\n\n <div class=\"flex overflow-y-hidden overflow-x-scroll scrollbar-hide pb-4\">\n @for (m of media()!; track m; let index = $index) {\n <div\n class=\"flex flex-row mt-3 mr-3 cursor-pointer rounded-md min-w-32\"\n (click)=\"mediaIndex = index\"\n [ngClass]=\"mediaIndex === index ? '' : 'opacity-30'\"\n >\n <rolatech-thumbnail [src]=\"m.url\" size=\"small\"></rolatech-thumbnail>\n </div>\n }\n </div>\n } @else {\n <div class=\"aspect-video bg-(--rt-raised-background) flex items-center justify-center text-gray-400\">\n No media available\n </div>\n }\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PropertyFeature } from '../../interfaces';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n selector: 'rolatech-property-features',\n imports: [CommonModule, MatIconModule],\n templateUrl: './property-features.component.html',\n styleUrl: './property-features.component.scss',\n})\nexport class PropertyFeaturesComponent {\n features = input.required<PropertyFeature[]>();\n}\n","<div class=\"\">\n <div class=\"text-2xl font-bold py-3\" i18n>Features</div>\n <div class=\"flex flex-row flex-wrap items-center\">\n @for (feature of features(); track feature) {\n <div class=\"flex items-center mr-2\">\n <mat-icon>check</mat-icon>\n <span>{{ feature.label }}</span>\n </div>\n }\n </div>\n</div>\n","// src/app/utils/load-google-maps.ts\nlet mapsLoadingPromise: Promise<void> | null = null;\n\ntype LoadMapsOpts = {\n host?: string; // default: your proxy host\n key: string; // Browser API key\n libraries?: string[]; // e.g. ['marker','places']\n version?: string; // e.g. 'weekly'\n language?: string; // e.g. 'en-GB'\n region?: string; // e.g. 'GB'\n mapIds?: string[]; // <-- NEW: JS Map IDs to preload (comma-separated)\n nonceSelector?: string; // selector to copy CSP nonce from\n};\n\ndeclare global {\n interface Window {\n google: any;\n __initMapLoaderCb?: () => void;\n }\n}\n\nexport function loadGoogleMaps({\n host = 'https://maps.google.com',\n key,\n libraries = [],\n version = 'weekly',\n language,\n region,\n mapIds, // <-- NEW\n nonceSelector,\n}: LoadMapsOpts): Promise<void> {\n if (typeof window === 'undefined' || typeof document === 'undefined') return Promise.resolve();\n if (window.google?.maps) return Promise.resolve();\n if (mapsLoadingPromise) return mapsLoadingPromise;\n\n mapsLoadingPromise = new Promise<void>((resolve, reject) => {\n // Define the global callback BEFORE inserting the script\n window.__initMapLoaderCb = () => {\n resolve();\n delete window.__initMapLoaderCb;\n };\n\n const params = new URLSearchParams();\n params.set('key', key);\n params.set('v', version);\n if (libraries.length) params.set('libraries', Array.from(new Set(libraries)).join(','));\n if (language) params.set('language', language);\n if (region) params.set('region', region);\n if (mapIds?.length) params.set('map_ids', Array.from(new Set(mapIds)).join(',')); // <-- NEW\n params.set('loading', 'async');\n params.set('callback', '__initMapLoaderCb');\n\n const script = document.createElement('script');\n script.async = true;\n script.src = `${host}/maps/api/js?${params.toString()}`;\n\n if (nonceSelector) {\n const el = document.querySelector<HTMLScriptElement>(nonceSelector);\n if (el?.nonce) script.nonce = el.nonce;\n }\n\n script.onerror = () => reject(new Error('Maps JS failed to load'));\n document.head.appendChild(script);\n });\n\n return mapsLoadingPromise;\n}\n","import { Component, ElementRef, inject, input, OnInit, PLATFORM_ID, viewChild } from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { PropertyLocation } from '../../interfaces';\nimport { loadGoogleMaps } from './load-google-maps';\nimport { APP_CONFIG } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-location',\n imports: [CommonModule],\n templateUrl: './property-location.component.html',\n styleUrl: './property-location.component.scss',\n})\nexport class PropertyLocationComponent implements OnInit {\n platformId = inject(PLATFORM_ID);\n location = input.required<PropertyLocation>();\n mapElementRef = viewChild.required<ElementRef>('mapElement');\n environment = inject(APP_CONFIG);\n\n async ngOnInit(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) return;\n\n await loadGoogleMaps({\n host: this.environment.mapsUrl,\n key: 'AIzaSyAeV09t2sHyceSpInkj63wl5t1rM_YV78M',\n libraries: ['marker', 'places'],\n language: 'en-GB',\n region: 'GB',\n mapIds: ['6a8f7b7d56282c69'],\n });\n\n const { Map } = (await google.maps.importLibrary('maps')) as google.maps.MapsLibrary;\n const { AdvancedMarkerElement } = (await google.maps.importLibrary('marker')) as google.maps.MarkerLibrary;\n\n const center = {\n lat: parseFloat(this.location().latitude) || 51.509865,\n lng: parseFloat(this.location().longitude) || -0.118092,\n };\n const options: google.maps.MapOptions = {\n mapId: '6a8f7b7d56282c69',\n center: center,\n zoom: 15,\n };\n const map = new Map(this.mapElementRef().nativeElement, options);\n new AdvancedMarkerElement({ map, position: map.getCenter() });\n }\n}\n","<div class=\"\">\n <div class=\"text-2xl font-bold py-4\" i18n>Location</div>\n <div class=\"bg-(--rt-raised-background)\">\n <div class=\"map-container\">\n <div #mapElement id=\"map\"></div>\n </div>\n </div>\n</div>\n","import { Component, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { AngularCommonModule } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-owner-renderer',\n imports: [AngularCommonModule, MatIconModule],\n templateUrl: './property-owner-renderer.component.html',\n styleUrl: './property-owner-renderer.component.scss',\n})\nexport class PropertyOwnerRendererComponent {\n name = input<string>();\n avatar = input<string>();\n username = input<string>();\n subtitle = input<string>();\n}\n","<div class=\"flex flex-col\">\n <div class=\"flex flex-row items-center py-3\">\n <div class=\"flex mr-3 gap-2 items-center\">\n @if (avatar()) {\n <div class=\"cursor-pointer\" [routerLink]=\"['/', '@' + username()]\">\n <img [src]=\"avatar()\" class=\"w-14 h-14 rounded-full\" alt />\n </div>\n } @else {\n <div class=\"w-14 h-14 rounded-full bg-(--rt-brand-color)\"></div>\n }\n <div class=\"flex flex-col\">\n <div class=\"flex items-center text-lg font-bold cursor-pointer\">\n <a class=\"cursor-pointer\" [routerLink]=\"['/', '@' + username()]\">\n <span>{{ name() }}</span>\n </a>\n <mat-icon class=\"verified-icon\">verified</mat-icon>\n </div>\n <div class=\"text-lg font-bold text-(--rt-brand-color)\">{{ subtitle() }}</div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, DoCheck, inject, model, OnInit, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AuthUserService } from '@rolatech/angular-auth';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\n@Component({\n selector: 'rolatech-property-agent-update',\n imports: [\n CommonModule,\n MatFormFieldModule,\n FormsModule,\n MatInputModule,\n MatSelectModule,\n ],\n templateUrl: './property-agent-update.html',\n styleUrl: './property-agent-update.scss',\n})\nexport class PropertyAgentUpdate implements OnInit, DoCheck {\n authUserService = inject(AuthUserService);\n loading = true\n output = output<any>();\n agents: any;\n selectedAgentId: any;\n ngOnInit(): void {\n this.findAgents()\n }\n findAgents() {\n this.authUserService.findAll({}).subscribe({\n next: res => {\n this.agents = res.data\n this.loading = false\n }\n })\n\n }\n ngDoCheck(): void {\n this.output.emit(this.selectedAgentId);\n }\n}\n","@if (!loading) {\n<mat-form-field appearance=\"fill\">\n <mat-label>Select tenant</mat-label>\n <mat-select [(ngModel)]=\"selectedAgentId\">\n @for (item of agents; track $index) {\n <mat-option [value]=\"item.id\">\n <div class=\"flex justify-between items-center\">\n <span class=\"mr-3\">{{ item.firstName }}, {{item.lastName}}</span>\n <span>{{item.email}}</span>\n </div>\n </mat-option>\n }\n </mat-select>\n</mat-form-field>\n\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n AcceptDialogComponent,\n BaseComponent,\n RejectDialogComponent,\n RichLabelComponent,\n ToolbarComponent,\n} from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyStatus } from '../../../interfaces';\nimport { AuthUserService } from '@rolatech/angular-auth';\nimport { PropertyMediaComponent } from '../../../components/property-media/property-media.component';\nimport { PropertyFeaturesComponent } from '../../../components/property-features/property-features.component';\nimport { PropertyLocationComponent } from '../../../components/property-location/property-location.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PropertyOwnerRendererComponent } from '../../../components/property-owner-renderer/property-owner-renderer.component';\nimport { PropertyAgentUpdate } from '../../../components/property-agent-update/property-agent-update';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-review-detail',\n imports: [\n CommonModule,\n ToolbarComponent,\n RichLabelComponent,\n PropertyMediaComponent,\n PropertyFeaturesComponent,\n PropertyLocationComponent,\n MatButtonModule,\n PropertyOwnerRendererComponent,\n PricePipe,\n ],\n templateUrl: './property-review-detail.component.html',\n styleUrl: './property-review-detail.component.scss',\n})\nexport class PropertyReviewDetailComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n authUserService = inject(AuthUserService);\n userFullName = '';\n property: any;\n user: any;\n agent: any;\n status = PropertyStatus;\n ngOnInit(): void {\n this.getProperty();\n }\n getProperty() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property = res.data;\n if (this.property.userId) {\n this.getUserPublicInfo(this.property.userId);\n }\n if (this.property.agentId) {\n this.getAgentPublicInfo(this.property.agentId);\n }\n },\n });\n }\n getUserPublicInfo(userId: string) {\n this.authUserService.getPublicUserInfo(userId).subscribe({\n next: (res) => {\n this.user = res;\n this.userFullName = res.name;\n },\n });\n }\n getAgentPublicInfo(agentId: string) {\n this.authUserService.getPublicUserInfo(agentId).subscribe({\n next: (res) => {\n this.agent = res;\n },\n });\n }\n approve() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'Approve',\n message: 'Approve this property?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyService.reviewApprove(this.id).subscribe({\n next: (res) => {\n this.property.status = 'ACTIVE';\n this.snackBarService.open('Approved');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n reject() {\n const dialogRef = this.dialog.open(RejectDialogComponent, {\n width: '400px',\n data: {\n content: '',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyService.reviewReject(this.id, result).subscribe({\n next: (res) => {\n this.snackBarService.open('Rejected');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n updateAgent() {\n const options = {\n title: 'Update agent',\n cancelText: 'Cancel',\n confirmText: 'Confirm',\n component: PropertyAgentUpdate,\n data: {\n agents: {},\n },\n width: '599px',\n };\n\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe({\n next: (res) => {\n if (res) {\n this.propertyService.updateAgent(this.id, { userId: res }).subscribe({\n next: (res: any) => {\n this.getAgentPublicInfo(res.data.agentId);\n },\n });\n }\n },\n });\n }\n}\n","@if (property) {\n <rolatech-toolbar [title]=\"status[property.status]\" large link=\"../../\">\n <button mat-flat-button (click)=\"approve()\" i18n>Approve</button>\n <button mat-button (click)=\"reject()\" i18n>Reject</button>\n </rolatech-toolbar>\n <div class=\"px-4\">\n <div class=\"flex flex-col md:flex-row mb-32\">\n <div class=\"w-full md:w-2/3 p-3\">\n <div class=\"text-lg font-bold py-2\">{{ property.title }}</div>\n <hr class=\"mb-2\" />\n <div class=\"flex items-center py-2\">\n <div class=\"flex w-full justify-between\">\n <div class=\"flex justify-between w-full\">\n <div class=\"flex flex-col\">\n <div class=\"inline-flex gap-1\">\n <div>\n <span class=\"mr-1\">{{ property.bedrooms }}</span>\n <span i18n>Bedrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ property.bathrooms }}</span>\n <span i18n>Bathrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ property.receptions }}</span>\n <span i18n>Receptions</span>\n </div>\n </div>\n </div>\n <div class=\"text-right\">\n <div class=\"text-sm\">{{ property.price | price }}</div>\n </div>\n </div>\n </div>\n <div class=\"hidden md:flex flex-col px-3\"></div>\n </div>\n <rolatech-property-media [media]=\"property.media\"></rolatech-property-media>\n <rolatech-property-owner-renderer\n [name]=\"userFullName\"\n [avatar]=\"user?.avatar\"\n [username]=\"user?.username\"\n ></rolatech-property-owner-renderer>\n <rolatech-property-features [features]=\"property.features\"></rolatech-property-features>\n <rolatech-property-location [location]=\"property.location\"></rolatech-property-location>\n </div>\n <div class=\"w-full md:w-1/3 p-3\">\n <div class=\"flex items-center justify-between h-14\">\n <div class=\"text-lg font-bold py-2\" i18n>Agent</div>\n <button mat-flat-button (click)=\"updateAgent()\" i18n>Update Agent</button>\n </div>\n @if (agent) {\n <div class=\"flex flex-col gap-1 mt-3\">\n <rolatech-rich-label label=\"First Name\" [title]=\"agent.firstName\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Last Name\" [title]=\"agent.lastName\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Email\" [title]=\"agent.email\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Phone\" [title]=\"agent.phone\"></rolatech-rich-label>\n </div>\n } @else {\n <div>Agent not set</div>\n }\n </div>\n </div>\n </div>\n}\n","import { Routes } from '@angular/router';\nimport { PropertyReviewIndexComponent } from './property-review-index/property-review-index.component';\nimport { PropertyReviewDetailComponent } from './property-review-detail/property-review-detail.component';\n\nexport const propertyReviewRoutes: Routes = [\n {\n path: '',\n component: PropertyReviewIndexComponent,\n },\n {\n path: 'properties/:id',\n component: PropertyReviewDetailComponent,\n },\n];\n","import { Component, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { AngularCommonModule, OptionsFormatPipe } from '@rolatech/angular-common';\nimport { AngularComponentsModule } from '@rolatech/angular-components';\nimport { Feature } from '../../interfaces/feature';\n\n@Component({\n selector: 'rolatech-feature-manage-item',\n imports: [\n MatChipsModule,\n MatButtonModule,\n MatFormFieldModule,\n AngularCommonModule,\n AngularComponentsModule,\n MatIconModule,\n OptionsFormatPipe,\n ],\n templateUrl: './feature-manage-item.component.html',\n styleUrl: './feature-manage-item.component.scss',\n})\nexport class FeatureManageItemComponent {\n feature = input.required<Feature>();\n addOnBlur = true;\n delete = output<Feature>();\n save = output<Feature>();\n edit = output<Feature>();\n\n onDelete() {\n this.delete.emit(this.feature());\n }\n onSave() {\n this.save.emit(this.feature());\n }\n onEdit() {\n this.edit.emit(this.feature());\n }\n}\n","<div class=\"group flex justify-between items-center h-14 hover:bg-(--rt-raised-background) cursor-pointer px-2\">\n <div class=\"flex\">\n <div class=\"min-w-[150px] mr-3\">{{ feature().name }}</div>\n <div class=\"overflow-hidden line-clamp-1\">\n {{ feature().values! | options }}\n </div>\n </div>\n <div class=\"flex justify-end max-w-24 w-24 invisible group-hover:visible\">\n <button mat-icon-button (click)=\"onEdit()\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button (click)=\"onDelete()\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n</div>\n<mat-divider></mat-divider>\n","import { Component, DoCheck, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule } from '@rolatech/angular-components';\nimport { ENTER, COMMA } from '@angular/cdk/keycodes';\nimport { Feature } from '../../interfaces/feature';\n\n@Component({\n selector: 'rolatech-feature-manage-item-add',\n imports: [MatChipsModule, MatButtonModule, MatFormFieldModule, AngularCommonModule, AngularComponentsModule, MatIconModule],\n templateUrl: './feature-manage-item-add.component.html',\n styleUrl: './feature-manage-item-add.component.scss',\n})\nexport class FeatureManageItemAddComponent implements DoCheck {\n feature: Feature = {\n id: '',\n name: '',\n values: [],\n };\n addOnBlur = true;\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n cancel = output();\n save = output<Feature>();\n action = true;\n output = output<any>();\n\n onCancel() {\n this.cancel.emit();\n }\n onSave() {\n this.save.emit(this.feature);\n }\n\n addFeatureValues(event: MatChipInputEvent) {\n const value = (event.value || '').trim();\n const exists = this.feature.values.some((item) => item.name.toLowerCase() === value.toLowerCase());\n if (value && !exists) {\n this.feature.values.push({ id: '', name: value });\n }\n event.chipInput.clear();\n }\n removeValue(value: any) {\n if (value) {\n const index = this.feature.values.findIndex((item: any) => item.name === value.name);\n this.feature.values?.splice(index, 1);\n }\n }\n ngDoCheck(): void {\n this.output.emit(this.feature);\n }\n}\n","<div class=\"flex flex-col\">\n <div class=\"p-1\" i18n>Feature</div>\n <form>\n <mat-form-field appearance=\"fill\">\n <input matInput placeholder=\"Name\" type=\"text\" [(ngModel)]=\"feature.name\" [ngModelOptions]=\"{ standalone: true }\" i18n />\n </mat-form-field>\n <mat-form-field>\n <mat-chip-grid #chipGrid aria-label=\"Enter values\">\n @for (value of feature.values; track value) {\n <mat-chip-row\n (removed)=\"removeValue(value)\"\n [editable]=\"true\"\n [aria-description]=\"'press enter to edit ' + value.name\"\n >\n {{ value.name }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + value.name\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n placeholder=\"Value\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"addFeatureValues($event)\"\n i18n\n />\n </mat-chip-grid>\n </mat-form-field>\n </form>\n</div>\n@if (action) {\n <div class=\"flex items-center justify-end\">\n <button mat-button (click)=\"onCancel()\" i18n>Cancel</button>\n <button mat-flat-button (click)=\"onSave()\" i18n>Save</button>\n </div>\n}\n","import { Component, ElementRef, inject, OnInit, viewChild } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { BaseComponent, ConfirmationDialogComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { Feature } from '../../../interfaces/feature';\nimport { map, Observable, startWith } from 'rxjs';\nimport { ENTER, COMMA } from '@angular/cdk/keycodes';\nimport { MatAutocomplete, MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatOptionModule } from '@angular/material/core';\nimport { findIndex } from 'lodash';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { FeatureService } from '@rolatech/angular-services';\nimport { FeatureManageItemComponent } from '../../../components/feature-manage-item/feature-manage-item.component';\nimport { FeatureManageItemAddComponent } from '../../../components/feature-manage-item-add/feature-manage-item-add.component';\n\n@Component({\n selector: 'rolatech-feature-manage-index',\n imports: [\n MatDividerModule,\n FormsModule,\n MatFormFieldModule,\n MatChipsModule,\n MatIconModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatOptionModule,\n ToolbarComponent,\n FeatureManageItemComponent,\n FeatureManageItemAddComponent,\n ],\n templateUrl: './feature-manage-index.component.html',\n styleUrl: './feature-manage-index.component.scss',\n})\nexport class FeatureManageIndexComponent extends BaseComponent implements OnInit {\n featureService = inject(FeatureService);\n features: Feature[] = [];\n selectedFeatures: Feature[] = [];\n filteredFeatures!: Observable<string[]>;\n addOnBlur = true;\n add = false;\n private allowFreeTextAddFeature = false;\n public featureControl = new FormControl();\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n featureInput = viewChild.required<ElementRef<HTMLInputElement>>('featureInput');\n matAutocomplete = viewChild<MatAutocomplete>('auto');\n ngOnInit(): void {\n this.findUserFeatures();\n }\n findUserFeatures() {\n this.featureService.find({}).subscribe({\n next: (res: any) => {\n this.features = res.data || [];\n this.filteredFeatures = this.featureControl.valueChanges.pipe(\n startWith(null),\n map((featureName) => {\n return this.filterOnInputChange(featureName);\n }),\n );\n },\n });\n }\n saveFeature(feature: Feature) {\n this.featureService.addFeature(feature).subscribe({\n next: (res) => {\n this.features.push(res.data);\n this.add = false;\n },\n });\n }\n onUpdateFeature(feature: Feature) {\n const features = {\n title: 'Edit feature',\n cancelText: 'Cancel',\n confirmText: 'Confirm',\n data: {\n feature: feature,\n action: false,\n },\n component: FeatureManageItemAddComponent,\n };\n this.dialogService.open(features);\n this.dialogService.confirmed().subscribe({\n next: (res) => {\n if (res) {\n this.featureService.update(feature.id, res).subscribe({\n next: (res) => {\n feature.values = res.data.values;\n },\n });\n }\n },\n });\n }\n onDeleteFeature(feature: Feature) {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n width: '400px',\n data: {\n title: 'Delete feature',\n message: `Confirm delete ${feature.name} ?`,\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.featureService.delete(feature.id).subscribe({\n next: (res) => {\n const index = this.features.findIndex((item) => item.id === feature.id);\n this.features.splice(index, 1);\n this.snackBarService.open('Delete successfully');\n },\n });\n }\n });\n }\n // addFeature(event: MatChipInputEvent) {\n // const value = (event.value || '').trim();\n // if (value) {\n // this.features.push({ id: '', name: value });\n // }\n // event.chipInput.clear();\n // }\n private filterOnInputChange(featureName: string | null): string[] {\n const featuresLessSelected = this.features.filter(\n (engineer) => findIndex(this.selectedFeatures, (item: any) => item.name === engineer.name) < 0,\n );\n return featureName\n ? this.filterFeature(featuresLessSelected, featureName)\n : featuresLessSelected.map((feature) => feature.name);\n }\n private filterFeature(featureList: Feature[], featureName: string): string[] {\n let filteredFeatureList: Feature[] = [];\n const filterValue = featureName.toLowerCase();\n const featuresMatchingFeatureName = featureList.filter((feature) => feature.name.toLowerCase().indexOf(filterValue) === 0);\n if (featuresMatchingFeatureName.length || this.allowFreeTextAddFeature) {\n filteredFeatureList = featuresMatchingFeatureName;\n } else {\n filteredFeatureList = featureList;\n }\n return filteredFeatureList.map((feature) => feature.name);\n }\n public remove(feature: Feature): void {\n const index = findIndex(this.selectedFeatures, (item) => item.name === feature.name);\n if (index > -1) {\n this.selectedFeatures.splice(index, 1);\n this.resetInputs();\n }\n }\n\n public selected(event: MatAutocompleteSelectedEvent): void {\n this.selectFeatureByName(event.option.value);\n this.resetInputs();\n }\n private selectFeatureByName(featureName: string) {\n const foundFeature = this.features.filter((item) => item.name == featureName);\n this.selectedFeatures.push(foundFeature[0]);\n }\n private resetInputs() {\n this.featureInput().nativeElement.value = '';\n this.featureControl.setValue(null);\n }\n}\n","<rolatech-toolbar title=\"Features\">\n <div class=\"flex items-center gap-2\">\n <button class=\"cursor-pointer\" mat-flat-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n <span i18n>Add Feature</span>\n </button>\n </div>\n</rolatech-toolbar>\n<div class=\"p-3\">\n @for (item of features; track $index) {\n <rolatech-feature-manage-item\n [feature]=\"item\"\n (delete)=\"onDeleteFeature($event)\"\n (edit)=\"onUpdateFeature($event)\"\n ></rolatech-feature-manage-item>\n }\n <div class=\"mt-3\">\n @if (add) {\n <rolatech-feature-manage-item-add (save)=\"saveFeature($event)\" (cancel)=\"add = false\"></rolatech-feature-manage-item-add>\n } @else {\n <button mat-stroked-button (click)=\"add = true\">\n <mat-icon>add</mat-icon>\n <span i18n>Add</span>\n </button>\n }\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-feature-manage-detail',\n imports: [CommonModule],\n templateUrl: './feature-manage-detail.component.html',\n styleUrl: './feature-manage-detail.component.scss',\n})\nexport class FeatureManageDetailComponent {}\n","<p>feature-manage-detail works!</p>\n","import { Routes } from '@angular/router';\nimport { FeatureManageIndexComponent } from './feature-manage-index/feature-manage-index.component';\nimport { FeatureManageDetailComponent } from './feature-manage-detail/feature-manage-detail.component';\n\nexport const featureManageRoutes: Routes = [\n {\n path: '',\n component: FeatureManageIndexComponent,\n },\n {\n path: ':id',\n component: FeatureManageDetailComponent,\n },\n];\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { PropertyOffer, PropertyOfferStatus } from '../../interfaces';\nimport { ThumbnailComponent, ImagePlaceholderComponent } from '@rolatech/angular-components';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { offerStatusLabel } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-property-offer-item',\n imports: [CommonModule, ThumbnailComponent, ImagePlaceholderComponent, PricePipe],\n templateUrl: './property-offer-item.component.html',\n styleUrl: './property-offer-item.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class PropertyOfferItemComponent {\n offer = input.required<PropertyOffer>();\n readonly statusLabel = computed(() => offerStatusLabel(this.offer().status));\n readonly requesterName = computed(() => `${this.offer().firstName} ${this.offer().lastName}`.trim());\n\n statusToneClass(status: PropertyOfferStatus) {\n switch (status) {\n case PropertyOfferStatus.ACCEPTED:\n case PropertyOfferStatus.COMPLETED:\n return 'property-offer-item__status property-offer-item__status--positive';\n case PropertyOfferStatus.REJECTED:\n case PropertyOfferStatus.CANCELLED:\n return 'property-offer-item__status property-offer-item__status--negative';\n default:\n return 'property-offer-item__status property-offer-item__status--neutral';\n }\n }\n}\n","<article class=\"property-offer-item\">\n <div class=\"property-offer-item__top\">\n <div class=\"property-offer-item__copy\">\n <span class=\"property-offer-item__eyebrow\">Offer pipeline</span>\n <h3 class=\"property-offer-item__title\">{{ offer().item.title }}</h3>\n <p class=\"property-offer-item__id\">Offer {{ offer().id }}</p>\n </div>\n\n <div class=\"property-offer-item__badges\">\n <span class=\"property-offer-item__type\">{{ offer().type }}</span>\n <span [class]=\"statusToneClass(offer().status)\">{{ statusLabel() }}</span>\n </div>\n </div>\n\n <div class=\"property-offer-item__content\">\n <div class=\"property-offer-item__media\">\n @if (offer().item.media.length > 0) {\n @defer {\n <rolatech-thumbnail [src]=\"offer().item.media[0].url\" size=\"medium\" mode=\"clip\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"property-offer-item__media-placeholder\"></div>\n }\n } @else {\n <rolatech-image-placeholder></rolatech-image-placeholder>\n }\n </div>\n\n <div class=\"property-offer-item__details\">\n <div class=\"property-offer-item__meta-grid\">\n <div class=\"property-offer-item__meta-card\">\n <span class=\"property-offer-item__meta-label\">Offer amount</span>\n <strong>{{ offer().amount | price }}</strong>\n </div>\n\n <div class=\"property-offer-item__meta-card\">\n <span class=\"property-offer-item__meta-label\">Requested by</span>\n <strong>{{ requesterName() }}</strong>\n </div>\n\n <div class=\"property-offer-item__meta-card\">\n <span class=\"property-offer-item__meta-label\">Move in</span>\n <strong>{{ offer().startDate | date: 'mediumDate' }}</strong>\n </div>\n\n <div class=\"property-offer-item__meta-card\">\n <span class=\"property-offer-item__meta-label\">Tenancy</span>\n <strong>{{ offer().tenancyDuration || 'Flexible' }}</strong>\n @if (offer().tenancyDuration) {\n <span class=\"property-offer-item__meta-note\">months</span>\n }\n </div>\n </div>\n\n <div class=\"property-offer-item__facts\">\n <span>{{ offer().item.bedrooms }} bed</span>\n <span>{{ offer().item.bathrooms }} bath</span>\n <span>{{ offer().item.receptions }} reception</span>\n <span>Listed {{ offer().item.amount | price }}</span>\n </div>\n </div>\n </div>\n</article>\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-offer-item-skeleton',\n imports: [CommonModule, Skeleton],\n templateUrl: './offer-item-skeleton.html',\n styleUrl: './offer-item-skeleton.scss',\n})\nexport class OfferItemSkeleton {}\n","<div class=\"flex flex-col py-3\">\n <div class=\"flex justify-between w-full mb-2\">\n <rolatech-skeleton class=\"w-52 h-5\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-11 h-5\"></rolatech-skeleton>\n </div>\n <div class=\"flex flex-row py-2\">\n <div class=\"min-w-24 w-36 object-cover aspect-video rounded-lg mr-3\">\n <rolatech-skeleton class=\"w-full h-full\"></rolatech-skeleton>\n </div>\n <div class=\"flex w-full justify-between\">\n <div class=\"flex justify-between w-full\">\n <div class=\"flex flex-col\">\n <rolatech-skeleton class=\"w-40 h-4\"></rolatech-skeleton>\n <div class=\"inline-flex gap-1 mt-2\">\n <rolatech-skeleton class=\"w-20 h-4\"></rolatech-skeleton>\n </div>\n </div>\n <div class=\"text-right\">\n <rolatech-skeleton class=\"w-8 h-4\"></rolatech-skeleton>\n </div>\n </div>\n </div>\n </div>\n</div>\n","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 SearchBar,\n} from '@rolatech/angular-components';\nimport { RouterModule } from '@angular/router';\nimport { PropertyOfferService, PropertyService } from '@rolatech/angular-services';\nimport { PropertyOfferItemComponent } from '../../../components/property-offer-item/property-offer-item.component';\nimport { PropertyOffer } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\nimport { OfferItemSkeleton } from '../../../components/offer-item-skeleton/offer-item-skeleton';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'rolatech-property-manage-offer-index',\n imports: [\n CommonModule,\n ToolbarComponent,\n TabsComponent,\n TabComponent,\n RouterModule,\n PropertyOfferItemComponent,\n EmptyComponent,\n MatPaginatorModule,\n OfferItemSkeleton,\n MatIcon,\n SearchBar,\n ],\n templateUrl: './property-manage-offer-index.component.html',\n styleUrl: './property-manage-offer-index.component.scss',\n})\nexport class PropertyManageOfferIndexComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n propertyOfferService = inject(PropertyOfferService);\n\n select = 0;\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Submitted',\n icon: 'category',\n status: 'submitted',\n },\n {\n name: 'Accepted',\n icon: 'category',\n status: 'accepted',\n },\n {\n name: 'Rejected',\n icon: 'category',\n status: 'rejected',\n },\n {\n name: 'Cancelled',\n icon: 'category',\n status: 'cancelled',\n },\n ];\n offers = signal<PropertyOffer[]>([]);\n meta: any;\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n pageIndex = signal(0);\n loading = false;\n open = signal(false);\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 q: p.get('q') || undefined,\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.propertyOfferService.search(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.offers.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.offers.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 toggleSearch() {\n this.open.update((v) => !v);\n }\n searchByText(event: any) {\n this.router.navigate([], {\n queryParams: { q: event, page: 1, limit: 15 },\n queryParamsHandling: 'merge', // keep other params like sort, etc.\n });\n }\n onCloseSearch() {\n // this.open.set(false);\n // this.router.navigate([], { queryParams: {}, queryParamsHandling: 'merge' });\n this.router.navigate(['/offers']);\n }\n}\n","<rolatech-toolbar title=\"Offers\">\n <div class=\"flex items-center gap-2\">\n <button mat-icon-button (click)=\"toggleSearch()\">\n <mat-icon>search</mat-icon>\n </button>\n </div>\n</rolatech-toolbar>\n<div class=\"p-2\">\n <rolatech-search-bar\n [(show)]=\"open\"\n placeholder=\"Search offer by offer id or address\"\n #searchBar\n (search)=\"searchByText($event)\"\n (close)=\"onCloseSearch()\"\n ></rolatech-search-bar>\n</div>\n<rolatech-tabs [select]=\"select\">\n @for (item of links; track item) {\n @if (item.status) {\n <rolatech-tab class=\"cursor-pointer\" [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab class=\"cursor-pointer\" [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n }\n }\n</rolatech-tabs>\n@if (loading) {\n <div class=\"divide-y divide-(--rt-10-percent-layer) flex flex-col px-3\">\n @for (row of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; track row) {\n <rolatech-offer-item-skeleton></rolatech-offer-item-skeleton>\n }\n </div>\n} @else {\n <div class=\"space-y-2 p-2\">\n @if (offers() && offers().length > 0) {\n @for (item of offers(); track item) {\n <rolatech-property-offer-item class=\"cursor-pointer\" [routerLink]=\"['./', item.id]\" [offer]=\"item\"></rolatech-property-offer-item>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\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","import { CommonModule } from '@angular/common';\nimport { Component, DoCheck, input, model, OnInit, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatOptionModule, DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { BaseComponent } from '@rolatech/angular-components';\n\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n\n@Component({\n selector: 'rolatech-offer-edit',\n imports: [CommonModule, FormsModule, MatInputModule, MatDatepickerModule, MatSelectModule, MatOptionModule],\n templateUrl: './offer-edit.html',\n styleUrl: './offer-edit.scss',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n})\nexport class OfferEdit extends BaseComponent implements DoCheck {\n minDate = new Date();\n offer = model.required<any>();\n output = output<any>();\n ngDoCheck(): void {\n this.output.emit(this.offer());\n }\n}\n","<div class=\"flex flex-col gap-2\">\n <div class=\"flex justify-between gap-3\">\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Firstname</mat-label>\n <input matInput [(ngModel)]=\"offer().firstName\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Lastname</mat-label>\n <input matInput [(ngModel)]=\"offer().lastName\" />\n </mat-form-field>\n </div>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Email</mat-label>\n <input matInput [(ngModel)]=\"offer().email\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Phone</mat-label>\n <input matInput [(ngModel)]=\"offer().phone\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Offer amount</mat-label>\n <input matInput [(ngModel)]=\"offer().amount\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label i18n>Move-in date</mat-label>\n <!-- [max]=\"maxDate\" -->\n <input\n matInput\n placeholder=\"Move-in date\"\n [min]=\"minDate\"\n [matDatepicker]=\"startDatePicker\"\n (focus)=\"startDatePicker.open()\"\n [(ngModel)]=\"offer().startDate\"\n (dateInput)=\"offer().startDate = $event.value.format('YYYY-MM-DD')\"\n required\n readonly\n />\n <mat-datepicker-toggle matIconPrefix [for]=\"startDatePicker\"></mat-datepicker-toggle>\n <mat-datepicker #startDatePicker></mat-datepicker>\n </mat-form-field>\n</div>\n","import { Injectable, inject, signal, computed, effect } from '@angular/core';\nimport {\n Guarantor,\n OfferInvoiceOption,\n PersonAddress,\n PropertyOfferCounterService,\n PropertyOfferHistory,\n PropertyOfferResponse,\n PropertyOfferService,\n Tenant,\n} from '@rolatech/angular-services';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class OfferDetailContext {\n private readonly api = inject(PropertyOfferService);\n private readonly counterApi = inject(PropertyOfferCounterService);\n\n // input\n readonly offerId = signal<string | null>(null);\n\n // state (single source of truth)\n readonly offer = signal<PropertyOfferResponse | null>(null);\n readonly history = signal<PropertyOfferHistory[] | null>(null);\n\n readonly loadingOffer = signal(false);\n readonly loadingHistory = signal(false);\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n\n constructor() {\n effect(() => {\n const id = this.offerId();\n if (!id) return;\n\n void this.reloadOffer(id);\n void this.reloadHistory(id);\n });\n }\n init(id: string) {\n this.offerId.set(id);\n }\n async reloadOffer(id = this.offerId()): Promise<void> {\n if (!id) return;\n this.loadingOffer.set(true);\n this.error.set(null);\n try {\n const res = await firstValueFrom(this.api.getOffer(id));\n this.offer.set(res.data ?? (res as any));\n } catch (err) {\n this.error.set('Failed to load offer');\n console.error(err);\n } finally {\n this.loadingOffer.set(false);\n }\n }\n\n async reloadHistory(id = this.offerId()): Promise<void> {\n if (!id) return;\n this.loadingHistory.set(true);\n this.error.set(null);\n try {\n const res = await firstValueFrom(this.counterApi.getHistory(id));\n this.history.set(res.data ?? (res as any));\n } catch (err) {\n this.error.set('Failed to load offer history');\n console.error(err);\n } finally {\n this.loadingHistory.set(false);\n }\n }\n\n readonly isRental = computed(() => this.offer()?.type === 'RENTAL');\n readonly isSale = computed(() => this.offer()?.type === 'SALE');\n readonly invoiceOptionLabel: Record<OfferInvoiceOption, string> = {\n COMBINED: 'Combined',\n SEPARATE: 'Separate',\n };\n\n asText(v: unknown): string {\n if (v === null || v === undefined) return '—';\n if (typeof v === 'string' && v.trim() === '') return '—';\n return String(v);\n }\n\n asBool(v: boolean | null | undefined): string {\n if (v === null || v === undefined) return '—';\n return v ? 'Yes' : 'No';\n }\n\n asMoney(amount: number | null | undefined): string {\n if (amount === null || amount === undefined) return '—';\n try {\n return new Intl.NumberFormat('en-GB', { style: 'currency', currency: 'GBP' }).format(amount);\n } catch {\n return String(amount);\n }\n }\n\n asList(list: string[] | null | undefined): string {\n if (!list || list.length === 0) return '—';\n return list.join(', ');\n }\n\n ageFromDob(dob: string | null | undefined): string {\n if (!dob) return '—';\n\n const birth = new Date(dob);\n if (Number.isNaN(birth.getTime())) return '—';\n\n const today = new Date();\n let age = today.getFullYear() - birth.getFullYear();\n\n const m = today.getMonth() - birth.getMonth();\n if (m < 0 || (m === 0 && today.getDate() < birth.getDate())) {\n age--;\n }\n\n return age >= 0 ? `${age}` : '—';\n }\n fullAddress(\n a:\n | { line1: string | null; line2: string | null; city: string | null; postcode: string | null; country: string | null }\n | null\n | undefined,\n ) {\n if (!a) return '—';\n const parts = [a.line1, a.line2, a.city, a.postcode, a.country].filter((p) => !!p && p.trim() !== '');\n return parts.length ? parts.join(', ') : '—';\n }\n isEmptyAddress(a: PersonAddress | null | undefined): boolean {\n if (!a) return true;\n const parts = [a.line1, a.line2, a.city, a.postcode, a.country].map((v) => (v ?? '').trim());\n return parts.every((v) => v === '');\n }\n isEmptyGuarantor(g: Guarantor | null | undefined): boolean {\n if (!g) return true;\n\n // treat \"guarantor\": { \"address\": {} } as empty\n const addressEmpty = this.isEmptyAddress(g.address as any);\n\n const fields = [\n g.fullName,\n g.dob,\n g.nationality,\n g.phone,\n g.email,\n g.type,\n g.employmentStatus,\n g.companyName,\n g.jobTitle,\n g.annualSalary,\n g.companyNumber,\n g.taxReturnSubmitted,\n g.additionalFinancialSupport,\n ];\n\n const fieldsEmpty = fields.every((v) => v === null || v === undefined || (typeof v === 'string' && v.trim() === ''));\n\n return addressEmpty && fieldsEmpty;\n }\n isIndividual(t: Tenant): boolean {\n return t.applicantType === 'INDIVIDUAL';\n }\n\n isCorporate(t: Tenant): boolean {\n return t.applicantType === 'CORPORATE';\n }\n\n isStudent(t: Tenant): boolean {\n return t.applicantType === 'STUDENT';\n }\n}\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { OfferDetailContext } from '../../offer-data-access/offer-detail.context';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-offer-rental-terms-card',\n imports: [CommonModule, PricePipe],\n templateUrl: './offer-rental-terms-card.html',\n styleUrl: './offer-rental-terms-card.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferRentalTermsCard {\n readonly ctx = inject(OfferDetailContext);\n\n humanize(value: string | null | undefined) {\n if (!value) {\n return '—';\n }\n\n return value\n .trim()\n .replace(/[_-]+/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n\n boolLabel(value: boolean | null | undefined) {\n if (value === null || value === undefined) {\n return '—';\n }\n\n return value ? 'Yes' : 'No';\n }\n}\n","@if (ctx.offer(); as o) {\n<section class=\"offer-rental-terms-card\">\n <div class=\"offer-rental-terms-card__head\">\n <div>\n <span class=\"offer-rental-terms-card__eyebrow\">Submitted terms</span>\n <h3 class=\"offer-rental-terms-card__title\">Original rental offer</h3>\n <p class=\"offer-rental-terms-card__description\">These were the first rental terms attached to the submission.</p>\n </div>\n </div>\n\n @if (o.rentalTerms; as rt) {\n <div class=\"offer-rental-terms-card__grid\">\n <article class=\"offer-rental-terms-card__field\">\n <span class=\"offer-rental-terms-card__label\">Offer amount</span>\n <strong class=\"offer-rental-terms-card__value\">{{ rt.amount | price }}</strong>\n </article>\n <article class=\"offer-rental-terms-card__field\">\n <span class=\"offer-rental-terms-card__label\">Move-in date</span>\n <strong class=\"offer-rental-terms-card__value\">{{ rt.moveInDate ? (rt.moveInDate | date: 'mediumDate') : '—' }}</strong>\n </article>\n <article class=\"offer-rental-terms-card__field\">\n <span class=\"offer-rental-terms-card__label\">Payment frequency</span>\n <strong class=\"offer-rental-terms-card__value\">{{ humanize(rt.paymentFrequency) }}</strong>\n </article>\n <article class=\"offer-rental-terms-card__field\">\n <span class=\"offer-rental-terms-card__label\">Tenancy length</span>\n <strong class=\"offer-rental-terms-card__value\">{{ ctx.asText(rt.tenancyLengthMonths) }}</strong>\n </article>\n <article class=\"offer-rental-terms-card__field\">\n <span class=\"offer-rental-terms-card__label\">Break clause</span>\n <strong class=\"offer-rental-terms-card__value\">{{ ctx.asText(rt.breakClauseMonths) }}</strong>\n </article>\n <article class=\"offer-rental-terms-card__field\">\n <span class=\"offer-rental-terms-card__label\">Pets</span>\n <strong class=\"offer-rental-terms-card__value\">{{ rt.pets.length ? rt.pets.join(', ') : '—' }}</strong>\n </article>\n <article class=\"offer-rental-terms-card__field\">\n <span class=\"offer-rental-terms-card__label\">Smoker</span>\n <strong class=\"offer-rental-terms-card__value\">{{ boolLabel(rt.smoker) }}</strong>\n </article>\n <article class=\"offer-rental-terms-card__field\">\n <span class=\"offer-rental-terms-card__label\">Furniture</span>\n <strong class=\"offer-rental-terms-card__value\">{{ humanize(rt.furnitureRequirement) }}</strong>\n </article>\n <article class=\"offer-rental-terms-card__field offer-rental-terms-card__field--wide\">\n <span class=\"offer-rental-terms-card__label\">Additional requests</span>\n <strong class=\"offer-rental-terms-card__value offer-rental-terms-card__value--multiline\"\n >{{ rt.additionalRequests ?? '—' }}</strong\n >\n </article>\n </div>\n }\n</section>\n}\n","import { Component, computed, inject, input } from '@angular/core';\nimport { Gender, Tenant } from '@rolatech/angular-services';\nimport { OfferDetailContext } from '../../offer-data-access/offer-detail.context';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-offer-tenant-expanded',\n imports: [PricePipe],\n templateUrl: './offer-tenant-expanded.html',\n styleUrl: './offer-tenant-expanded.scss',\n})\nexport class OfferTenantExpanded {\n readonly ctx = inject(OfferDetailContext);\n tenant = input.required<Tenant>();\n\n formatAddress(a: any) {\n const parts = [a?.line1, a?.line2, a?.city, a?.postcode, a?.country].filter((v: string) => !!v && v.trim() !== '');\n return parts.length ? parts.join(', ') : '—';\n }\n readonly genderLabel: Record<Gender, string> = {\n MALE: 'Male',\n FEMALE: 'Female',\n OTHER: 'Other',\n PREFER_NOT_TO_SAY: 'Prefer not to say',\n };\n\n readonly guarantor = computed(() => this.tenant()?.guarantor ?? null);\n\n readonly hasGuarantor = computed(() => !!this.guarantor());\n}\n","<div class=\"p-4 border-t border-(--rt-border-color) space-y-4\">\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm\">\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Age</div>\n <div class=\"font-medium\">{{ ctx.ageFromDob(tenant().dob) }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Gender</div>\n <div class=\"font-medium\">@if (tenant().gender) { {{ genderLabel[tenant().gender!] }} } @else { — }</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Applicant type</div>\n <div class=\"font-medium\">{{ tenant().applicantType ?? '—' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Nationality</div>\n <div class=\"font-medium\">{{ tenant().nationality }}</div>\n </div>\n\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Phone</div>\n <div class=\"font-medium\">{{ tenant().phone }}</div>\n </div>\n\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Email</div>\n <div class=\"font-medium\">{{ tenant().email }}</div>\n </div>\n\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Visa status</div>\n <div class=\"font-medium\">{{ tenant().visaStatus }}</div>\n </div>\n\n @if ((tenant().applicantType === 'INDIVIDUAL' || tenant().applicantType === 'INDIVIDUAL') && tenant().visaStatus ===\n 'VISA_HOLDER') {\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Visa sharecode</div>\n <div class=\"font-medium\">{{ tenant().visaShareCodeStatus || '--' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Visa sharecode details</div>\n <div class=\"font-medium\">{{ tenant().visaShareCodeOther || '--' }}</div>\n </div>\n }\n <div class=\"sm:col-span-2\">\n <div class=\"text-xs text-(--rt-text-secondary)\">Address</div>\n <div class=\"font-medium\">{{ formatAddress(tenant().address) }}</div>\n </div>\n </div>\n\n @switch (tenant().applicantType) { @case ('INDIVIDUAL') {\n <div class=\"rounded-xl border border-(--rt-border-color) p-3 space-y-2\">\n <div class=\"text-xs font-semibold\">Individual</div>\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm\">\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Employment</div>\n <div class=\"font-medium\">{{ tenant().employmentStatus ?? '—' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Company</div>\n <div class=\"font-medium\">{{ tenant().companyName ?? '—' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Job title</div>\n <div class=\"font-medium\">{{ tenant().jobTitle ?? '—' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Annual salary</div>\n <div class=\"font-medium\">{{ tenant().annualSalary | price}}</div>\n </div>\n </div>\n </div>\n } @case ('CORPORATE') {\n <div class=\"rounded-xl border border-(--rt-border-color) p-3 space-y-2\">\n <div class=\"text-xs font-semibold\">Corporate</div>\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm\">\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Company</div>\n <div class=\"font-medium\">{{ tenant().corporateCompanyName ?? '—' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Company number</div>\n <div class=\"font-medium\">{{ tenant().corporateCompanyNumber ?? '—' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Job title</div>\n <div class=\"font-medium\">{{ tenant().corporateJobTitle ?? '—' }}</div>\n </div>\n </div>\n </div>\n } @case ('STUDENT') {\n <div class=\"rounded-xl border border-(--rt-border-color) p-3 space-y-2\">\n <div class=\"text-xs font-semibold\">Student</div>\n <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm\">\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">University</div>\n <div class=\"font-medium\">{{ tenant().universityName ?? '—' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Course</div>\n <div class=\"font-medium\">{{ tenant().courseTitle ?? '—' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Years of study</div>\n <div class=\"font-medium\">{{ tenant().yearOfStudy ?? '-' }}</div>\n </div>\n </div>\n </div>\n } }\n <!-- ✅ Guarantor -->\n @if (hasGuarantor(); as _unused) { @if (guarantor(); as g) {\n <div class=\"mt-6 rounded-2xl border border-(--rt-border-color) p-4\">\n <div class=\"flex items-center justify-between\">\n <div class=\"text-sm font-semibold\">Guarantor</div>\n <div class=\"text-xs text-(--rt-text-secondary)\">{{ g.type }}</div>\n </div>\n\n <div class=\"mt-3 grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm\">\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Full name</div>\n <div class=\"font-medium\">{{ g.fullName ?? '—' }}</div>\n </div>\n\n <div c>\n <div class=\"text-xs text-(--rt-text-secondary)\">Age</div>\n <div class=\"font-medium\">{{ ctx.ageFromDob(g.dob) }}</div>\n </div>\n\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Phone</div>\n <div class=\"font-medium\">{{ g.phone ?? '—' }}</div>\n </div>\n\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Email</div>\n <div class=\"font-medium\">{{ g.email ?? '—' }}</div>\n </div>\n\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Relationship</div>\n <div class=\"font-medium\">{{ g.relationshipType || '--' }}</div>\n </div>\n\n @if (g.relationshipType === 'OTHER') {\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Relationship other</div>\n <div class=\"font-medium\">{{ g.relationshipOther || '--' }}</div>\n </div>\n }\n\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Address</div>\n @if (g.address; as a) {\n <div class=\"font-medium\">\n {{ a.line1 ?? '—' }} @if (a.line2) { <span>, {{ a.line2 }}</span> } @if (a.city) { <span>, {{ a.city }}</span> } @if\n (a.postcode) { <span>, {{ a.postcode }}</span> } @if (a.country) { <span>, {{ a.country }}</span> }\n </div>\n } @else {\n <div class=\"font-medium\">—</div>\n }\n </div>\n\n <!-- INDIVIDUAL fields -->\n @if (g.type === 'INDIVIDUAL') {\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Employment status</div>\n <div class=\"font-medium\">{{ g.employmentStatus ?? '—' }}</div>\n </div>\n\n @if (g.employmentStatus === 'EMPLOYED') {\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Job title</div>\n <div class=\"font-medium\">{{ g.jobTitle ?? '—' }}</div>\n </div>\n\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Company name</div>\n <div class=\"font-medium\">{{ g.companyName ?? '—' }}</div>\n </div>\n\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Annual salary</div>\n <div class=\"font-medium\">{{ g.annualSalary| price }}</div>\n </div>\n } @if (g.employmentStatus === 'SELF_EMPLOYED') {\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Company name</div>\n <div class=\"font-medium\">{{ g.companyName ?? '—' }}</div>\n </div>\n\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Annual salary</div>\n <div class=\"font-medium\">{{ g.annualSalary| price }}</div>\n </div>\n } @if (g.employmentStatus === 'UNEMPLOYED') {\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Additional financial support</div>\n <div class=\"font-medium whitespace-pre-wrap\">{{ g.additionalFinancialSupport ?? '—' }}</div>\n </div>\n } }\n\n <!-- COMPANY fields (if you later add them on backend) -->\n @if (g.type === 'COMPANY') {\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Company guarantor</div>\n <div class=\"font-medium\">—</div>\n </div>\n }\n </div>\n </div>\n } }\n</div>\n","import { Component, input } from '@angular/core';\nimport {\n AdverseCreditStatus,\n ApplicantType,\n EmploymentStatus,\n FurnitureRequirement,\n Gender,\n PaymentFrequency,\n Tenant,\n VisaStatus,\n} from '@rolatech/angular-services';\nimport { OfferTenantExpanded } from '../offer-tenant-expanded/offer-tenant-expanded';\n\n@Component({\n selector: 'rolatech-offer-tenant-card',\n imports: [OfferTenantExpanded],\n templateUrl: './offer-tenant-card.html',\n styleUrl: './offer-tenant-card.scss',\n host: { class: 'block' },\n})\nexport class OfferTenantCard {\n // ---- signal inputs\n readonly index = input.required<number>();\n readonly expanded = input.required<boolean>();\n readonly tenant = input.required<Tenant>();\n\n // ---- label maps (for tooltips / pretty labels)\n readonly paymentFrequencyLabel: Record<PaymentFrequency, string> = {\n MONTHLY: 'Monthly',\n QUARTERLY: 'Quarterly',\n SEMI_ANNUALLY: 'Semi-annually',\n ANNUALLY: 'Annually',\n };\n\n readonly furnitureRequirementLabel: Record<FurnitureRequirement, string> = {\n FURNISHED: 'Furnished',\n UNFURNISHED: 'Unfurnished',\n };\n\n readonly applicantTypeLabel: Record<ApplicantType, string> = {\n INDIVIDUAL: 'Individual',\n CORPORATE: 'Corporate',\n STUDENT: 'Student',\n };\n\n readonly employmentStatusLabel: Record<EmploymentStatus, string> = {\n EMPLOYED: 'Employed',\n SELF_EMPLOYED: 'Self-employed',\n UNEMPLOYED: 'Unemployed',\n };\n\n readonly visaStatusLabel: Record<VisaStatus, string> = {\n CITIZEN: 'Citizen',\n VISA_HOLDER: 'Visa Holder',\n WAITING_FOR_VISA: 'Waiting For Visa',\n NOT_YET_APPLIED_FOR_VISA: 'Not Yet Applied For Visa',\n };\n\n readonly adverseCreditStatusLabel: Record<AdverseCreditStatus, string> = {\n NONE: 'None',\n ACTIVE_CCJ: 'Active Ccj',\n SATISFIED_CCJ: 'Satisfied Ccj',\n DEBT_MANAGEMENT_PLAN: 'Debt Management Plan',\n LOW_CREDIT_SCORE: 'Low Credit Score',\n OTHER: 'Other',\n };\n\n // ---- callback input instead of Output\n readonly onToggleInput = input.required<(index: number) => void>();\n\n onToggle(): void {\n this.onToggleInput()(this.index());\n }\n}\n","<div class=\"offer-tenant-card\">\n <button\n type=\"button\"\n class=\"offer-tenant-card__toggle\"\n (click)=\"onToggle()\"\n >\n <div class=\"offer-tenant-card__copy\">\n <div class=\"offer-tenant-card__topline\">Applicant {{ index() + 1 }}</div>\n <div class=\"offer-tenant-card__name\">{{ tenant().fullName ?? '--' }}</div>\n <div class=\"offer-tenant-card__contact\">{{ tenant().email ?? '--' }} · {{ tenant().phone ?? '--' }}</div>\n <div class=\"offer-tenant-card__chips\">\n <span class=\"offer-tenant-card__chip\">\n @if (tenant().applicantType) { {{ applicantTypeLabel[tenant().applicantType!] }} } @else { Applicant: -- }\n </span>\n\n <span class=\"offer-tenant-card__chip\">\n @if (tenant().employmentStatus) { {{ employmentStatusLabel[tenant().employmentStatus!] }} } @else { Employment: --}\n </span>\n\n <span class=\"offer-tenant-card__chip\">\n @if (tenant().adverseCreditStatus) { {{ adverseCreditStatusLabel[tenant().adverseCreditStatus!] }} } @else { Credit:\n -- }\n </span>\n\n <span class=\"offer-tenant-card__chip\">\n @if (tenant().visaStatus) { {{ visaStatusLabel[tenant().visaStatus!] }} } @else { Visa: — }\n </span>\n </div>\n </div>\n\n <div class=\"offer-tenant-card__arrow\" [class.offer-tenant-card__arrow--expanded]=\"expanded()\">\n <svg class=\"offer-tenant-card__icon\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fill-rule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 0 1 1.06.02L10 11.168l3.71-3.936a.75.75 0 1 1 1.08 1.04l-4.24 4.5a.75.75 0 0 1-1.08 0l-4.24-4.5a.75.75 0 0 1 .02-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </div>\n </button>\n\n @if (expanded()) {\n <div class=\"offer-tenant-card__body\">\n <rolatech-offer-tenant-expanded [tenant]=\"tenant()\" />\n </div>\n }\n</div>\n","import { Component, computed, inject, signal, ViewEncapsulation } from '@angular/core';\nimport {\n AdverseCreditStatus,\n ApplicantType,\n EmploymentStatus,\n FurnitureRequirement,\n Gender,\n PaymentFrequency,\n Tenant,\n VisaStatus,\n} from '@rolatech/angular-services';\nimport { OfferDetailContext } from '../../offer-data-access/offer-detail.context';\nimport { OfferTenantCard } from '../offer-tenant-card/offer-tenant-card';\n\n@Component({\n selector: 'rolatech-offer-tenants-accordion',\n imports: [OfferTenantCard],\n templateUrl: './offer-tenants-accordion.html',\n styleUrl: './offer-tenants-accordion.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferTenantsAccordion {\n readonly ctx = inject(OfferDetailContext);\n\n // tenants snapshot from ctx\n readonly tenants = computed<Tenant[]>(() => this.ctx.offer()?.tenants ?? []);\n\n // index-based expanded state (per your requirement)\n readonly expandedIndexes = signal<Set<number>>(new Set());\n\n isExpanded(i: number) {\n return this.expandedIndexes().has(i);\n }\n\n toggle = (index: number) => {\n this.expandedIndexes.update((prev) => {\n const next = new Set(prev);\n if (next.has(index)) next.delete(index);\n else next.add(index);\n return next;\n });\n };\n expandAll(count: number) {\n const next = new Set<number>();\n for (let i = 0; i < count; i++) next.add(i);\n this.expandedIndexes.set(next);\n }\n\n collapseAll() {\n this.expandedIndexes.set(new Set());\n }\n}\n","@if (tenants(); as ts) {\n<section class=\"offer-tenants-accordion\">\n <div class=\"offer-tenants-accordion__head\">\n <div class=\"offer-tenants-accordion__copy\">\n <span class=\"offer-tenants-accordion__eyebrow\">Applicants</span>\n <h3 class=\"offer-tenants-accordion__title\">Tenant profiles</h3>\n <p class=\"offer-tenants-accordion__description\">\n Review identity, affordability, and guarantor information for each applicant attached to the offer.\n </p>\n </div>\n\n <div class=\"offer-tenants-accordion__tools\">\n <span class=\"offer-tenants-accordion__count\">{{ ts.length }} applicants</span>\n <button\n type=\"button\"\n class=\"offer-tenants-accordion__tool\"\n (click)=\"expandAll(ts.length)\"\n [disabled]=\"ts.length === 0\"\n >\n Expand all\n </button>\n <button\n type=\"button\"\n class=\"offer-tenants-accordion__tool\"\n (click)=\"collapseAll()\"\n [disabled]=\"expandedIndexes().size === 0\"\n >\n Collapse all\n </button>\n </div>\n </div>\n\n @if (ts.length > 0) {\n <div class=\"offer-tenants-accordion__list\">\n @for (t of ts; track $index) {\n <rolatech-offer-tenant-card [index]=\"$index\" [expanded]=\"isExpanded($index)\" [tenant]=\"t\" [onToggleInput]=\"toggle\" />\n }\n </div>\n } @else {\n <div class=\"offer-tenants-accordion__empty\">No applicants have been attached to this offer yet.</div>\n }\n</section>\n}\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { OfferDetailContext } from '../../offer-data-access/offer-detail.context';\nimport { PropertyOfferResponse } from '@rolatech/angular-services';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-offer-item-card',\n imports: [PricePipe],\n templateUrl: './offer-item-card.html',\n styleUrl: './offer-item-card.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferItemCard {\n readonly ctx = inject(OfferDetailContext);\n firstMediaUrl(o: PropertyOfferResponse): string | null {\n const m = o.item?.media?.[0];\n return m?.url ?? null;\n }\n}\n","@if (ctx.offer(); as o) {\n<section class=\"offer-item-card\">\n <div class=\"offer-item-card__head\">\n <div class=\"offer-item-card__copy\">\n <span class=\"offer-item-card__eyebrow\">Property snapshot</span>\n <h3 class=\"offer-item-card__title\">{{ o.item.title }}</h3>\n </div>\n <span class=\"offer-item-card__property-chip\">Property ID {{ o.item.propertyId }}</span>\n </div>\n\n <div class=\"offer-item-card__content\">\n @if (firstMediaUrl(o); as mediaUrl) {\n <img class=\"offer-item-card__media\" [src]=\"mediaUrl\" [alt]=\"o.item.title\" />\n } @else {\n <div class=\"offer-item-card__placeholder\">Property image unavailable</div>\n }\n\n <div class=\"offer-item-card__panel\">\n <div class=\"offer-item-card__price\">{{ o.item.amount | price }}</div>\n\n <div class=\"offer-item-card__facts\">\n <article class=\"offer-item-card__fact\">\n <span class=\"offer-item-card__fact-label\">Bedrooms</span>\n <strong class=\"offer-item-card__fact-value\">{{ o.item.bedrooms }}</strong>\n </article>\n <article class=\"offer-item-card__fact\">\n <span class=\"offer-item-card__fact-label\">Bathrooms</span>\n <strong class=\"offer-item-card__fact-value\">{{ o.item.bathrooms }}</strong>\n </article>\n <article class=\"offer-item-card__fact\">\n <span class=\"offer-item-card__fact-label\">Receptions</span>\n <strong class=\"offer-item-card__fact-value\">{{ o.item.receptions }}</strong>\n </article>\n </div>\n </div>\n </div>\n</section>\n}\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OfferDetailContext } from '../../offer-data-access/offer-detail.context';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-offer-sale-details-card',\n imports: [CommonModule, PricePipe],\n templateUrl: './offer-sale-details-card.html',\n styleUrl: './offer-sale-details-card.scss',\n host: { class: 'block' },\n})\nexport class OfferSaleDetailsCard {\n readonly ctx = inject(OfferDetailContext);\n\n humanize(value: string | null | undefined) {\n if (!value) {\n return '—';\n }\n\n return value\n .trim()\n .replace(/[_-]+/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n","@if (ctx.offer(); as o) {\n<section class=\"offer-sale-details-card\">\n <div class=\"offer-sale-details-card__head\">\n <div>\n <span class=\"offer-sale-details-card__eyebrow\">Buyer terms</span>\n <h3 class=\"offer-sale-details-card__title\">Sale offer details</h3>\n <p class=\"offer-sale-details-card__description\">Buyer details and funding information attached to the submitted sale offer.</p>\n </div>\n </div>\n\n @if (o.sale; as s) {\n <div class=\"offer-sale-details-card__grid\">\n <article class=\"offer-sale-details-card__field\">\n <span class=\"offer-sale-details-card__label\">Offer amount</span>\n <strong class=\"offer-sale-details-card__value\">{{ s.amount | price }}</strong>\n </article>\n <article class=\"offer-sale-details-card__field\">\n <span class=\"offer-sale-details-card__label\">Payment method</span>\n <strong class=\"offer-sale-details-card__value\">{{ humanize(s.paymentMethod) }}</strong>\n </article>\n <article class=\"offer-sale-details-card__field\">\n <span class=\"offer-sale-details-card__label\">Buyer name</span>\n <strong class=\"offer-sale-details-card__value\">{{ s.buyerName ?? '—' }}</strong>\n </article>\n <article class=\"offer-sale-details-card__field\">\n <span class=\"offer-sale-details-card__label\">Phone</span>\n <strong class=\"offer-sale-details-card__value\">{{ s.phone ?? '—' }}</strong>\n </article>\n <article class=\"offer-sale-details-card__field\">\n <span class=\"offer-sale-details-card__label\">Email</span>\n <strong class=\"offer-sale-details-card__value\">{{ s.email ?? '—' }}</strong>\n </article>\n <article class=\"offer-sale-details-card__field\">\n <span class=\"offer-sale-details-card__label\">Exchange target</span>\n <strong class=\"offer-sale-details-card__value\">{{\n s.proposedExchangeDate ? (s.proposedExchangeDate | date: 'mediumDate') : '—'\n }}</strong>\n </article>\n <article class=\"offer-sale-details-card__field offer-sale-details-card__field--wide\">\n <span class=\"offer-sale-details-card__label\">Solicitor company</span>\n <strong class=\"offer-sale-details-card__value\">{{ s.solicitorCompanyName ?? '—' }}</strong>\n </article>\n </div>\n }\n</section>\n}\n","// offer-manage.facade.ts\nimport { computed, Injectable, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { inject } from '@angular/core';\nimport {\n OfferReferencingPatchPayload,\n OfferReferencingView,\n PropertyOfferService,\n ReferenceProvider,\n} from '@rolatech/angular-services';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Injectable({ providedIn: 'root' })\nexport class OfferManageFacade {\n private readonly api = inject(PropertyOfferService);\n private readonly snackBar = inject(MatSnackBar);\n\n // set this from the manage page (route param)\n readonly offerId = signal<string | null>(null);\n\n // server truth\n readonly referencing = signal<OfferReferencingView | null>(null);\n\n // state\n readonly loading = signal(false);\n readonly saving = signal(false);\n readonly error = signal<string | null>(null);\n\n // derived\n readonly canLoad = computed(() => !!this.offerId());\n\n async loadReferencing(): Promise<void> {\n const id = this.offerId();\n if (!id) return;\n\n this.loading.set(true);\n this.error.set(null);\n try {\n const view = await firstValueFrom(this.api.getReference(id));\n this.referencing.set(view.data);\n } catch (e: any) {\n this.error.set(e?.error?.message ?? 'Failed to load referencing.');\n } finally {\n this.loading.set(false);\n }\n }\n\n async updateReferenceProvider(payload: OfferReferencingPatchPayload): Promise<void> {\n const id = this.offerId();\n\n if (!id) return;\n\n // client-side guard (server still enforces)\n if (payload.referenceProvider === 'OTHER') {\n const other = (payload.referenceProviderOther ?? '').trim();\n if (!other) {\n this.error.set('Please specify the provider name.');\n return;\n }\n payload = { ...payload, referenceProviderOther: other };\n } else {\n payload = { ...payload, referenceProviderOther: null };\n }\n\n this.saving.set(true);\n this.error.set(null);\n try {\n const updated = await firstValueFrom(this.api.updateReferenceProvider(id, payload));\n this.referencing.set(updated.data);\n this.snackBar.open('Referencing provider updated', undefined, {\n duration: 2500,\n panelClass: ['snackbar-success'],\n });\n } catch (e: any) {\n const msg = e?.error?.message ?? 'Failed to update referencing.';\n this.error.set(msg);\n // ❌ error feedback\n this.snackBar.open(msg, 'Dismiss', {\n duration: 4000,\n panelClass: ['snackbar-error'],\n });\n } finally {\n this.saving.set(false);\n }\n }\n\n // convenience for UI labels\n static providerLabel(p: ReferenceProvider): string {\n switch (p) {\n case 'GOODLORD':\n return 'Goodlord';\n case 'LET_ALLIANCE':\n return 'Let Alliance';\n case 'HOMELET':\n return 'HomeLet';\n case 'OTHER':\n return 'Other';\n }\n }\n}\n","import { Component, computed, effect, inject, model, ViewEncapsulation } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { OfferManageFacade } from '../../offer-data-access/offer-manage.facade';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { OfferReferencingPatchPayload } from '@rolatech/angular-services';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\n\ntype ReferenceProvider = 'GOODLORD' | 'LET_ALLIANCE' | 'HOMELET' | 'OTHER';\n\n@Component({\n selector: 'rolatech-offer-reference-provider',\n imports: [MatFormFieldModule, MatSelectModule, ReactiveFormsModule, MatButtonModule, MatInputModule],\n templateUrl: './offer-reference-provider.html',\n styleUrl: './offer-reference-provider.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferReferenceProvider {\n readonly facade = inject(OfferManageFacade);\n\n // local edit state (two-way friendly)\n readonly provider = model<ReferenceProvider>('GOODLORD');\n readonly providerOther = model<string>('');\n\n readonly isOther = computed(() => this.provider() === 'OTHER');\n\n readonly providerOptions: Array<{ value: ReferenceProvider; label: string }> = [\n { value: 'GOODLORD', label: 'Goodlord' },\n { value: 'LET_ALLIANCE', label: 'Let Alliance' },\n { value: 'HOMELET', label: 'HomeLet' },\n { value: 'OTHER', label: 'Other' },\n ];\n\n constructor() {\n // hydrate local edit models whenever server value changes\n effect(() => {\n const r = this.facade.referencing();\n if (!r) return;\n\n const p = (r.referenceProvider ?? 'GOODLORD') as ReferenceProvider;\n this.provider.set(p);\n this.providerOther.set((r.referenceProviderOther ?? '').trim());\n });\n }\n\n hasServerValue(): boolean {\n return this.facade.referencing() != null;\n }\n\n onProviderChange(p: ReferenceProvider) {\n this.provider.set(p);\n if (p !== 'OTHER') this.providerOther.set('');\n }\n\n canSave(): boolean {\n if (!this.facade.offerId()) return false;\n\n if (this.isOther()) {\n return this.providerOther().trim().length > 0;\n }\n return true;\n }\n\n cancel() {\n const r = this.facade.referencing();\n if (!r) return;\n\n const p = (r.referenceProvider ?? 'GOODLORD') as ReferenceProvider;\n this.provider.set(p);\n this.providerOther.set((r.referenceProviderOther ?? '').trim());\n this.facade.error.set(null);\n }\n\n async save() {\n const payload: OfferReferencingPatchPayload = {\n referenceProvider: this.provider(),\n referenceProviderOther: this.isOther() ? this.providerOther().trim() : null,\n };\n\n await this.facade.updateReferenceProvider(payload);\n // after save, facade.referencing updates; effect() re-hydrates local models\n }\n}\n","<section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-4 space-y-4\">\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"space-y-0.5\">\n <div class=\"text-sm font-semibold\">Referencing Provider</div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Select the service used to carry out tenant referencing checks.</div>\n </div>\n <div class=\"flex items-center gap-2\">\n <!-- <button mat-stroked-button (click)=\"cancel()\" [disabled]=\"facade.loading() || facade.saving() || !hasServerValue()\">\n Cancel\n </button> -->\n <button mat-flat-button (click)=\"save()\" [disabled]=\"!canSave() || facade.saving() || facade.loading()\">Save</button>\n </div>\n </div>\n\n <mat-form-field class=\"w-full\" appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Provider</mat-label>\n <mat-select [value]=\"provider()\" (selectionChange)=\"onProviderChange($event.value)\">\n @for (o of providerOptions; track o.value) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (isOther()) {\n <mat-form-field class=\"w-full\" appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Specify provider</mat-label>\n <input\n matInput\n [value]=\"providerOther()\"\n (input)=\"providerOther.set(($any($event.target).value ?? '').toString())\"\n placeholder=\"e.g., OpenRent\"\n />\n </mat-form-field>\n } @if (facade.error()) {\n <div class=\"text-sm text-red-600\">{{ facade.error() }}</div>\n }\n <!-- @if (facade.referencing()?.updatedAt) {\n <div class=\"text-xs text-(--rt-text-secondary)\">\n Last updated: {{ facade.referencing()?.updatedAt }} by {{ facade.referencing()?.updatedBy }}\n </div>\n } -->\n</section>\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { PropertyOfferHistory } from '@rolatech/angular-services';\n\ntype DiffValue = { from?: any; to?: any };\ntype DiffObject = Record<string, DiffValue | any>;\n\n@Component({\n selector: 'rolatech-offer-history-expanded',\n standalone: true,\n imports: [MatDividerModule],\n templateUrl: './offer-history-expanded.html',\n styleUrl: './offer-history-expanded.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferHistoryExpanded {\n readonly history = input.required<PropertyOfferHistory>();\n\n readonly changes = computed<DiffObject | null>(() => {\n const c: any = (this.history() as any)?.changes;\n if (!c) return null;\n if (typeof c === 'object') return c as DiffObject;\n if (typeof c === 'string') {\n try {\n const parsed = JSON.parse(c);\n return parsed && typeof parsed === 'object' ? (parsed as DiffObject) : null;\n } catch {\n return null;\n }\n }\n return null;\n });\n\n readonly snapshot = computed<Record<string, any> | null>(() => {\n const c = this.changes();\n const s = c?.['snapshot'];\n if (!s || typeof s !== 'object' || Array.isArray(s)) return null;\n // if snapshot is empty {}, treat as null (nothing to show)\n return Object.keys(s).length ? (s as Record<string, any>) : null;\n });\n\n readonly snapshotRows = computed(() => {\n const s = this.snapshot();\n if (!s) return [];\n return Object.entries(s).map(([key, value]) => ({\n key,\n label: this.fieldLabel(key),\n value: this.formatFieldValue(key, value),\n }));\n });\n\n readonly diffRows = computed(() => this.toDiffRows(this.changes()));\n\n readonly hasSnapshot = computed(() => !!this.snapshotRows().length);\n readonly hasDiff = computed(() => !!this.diffRows().length);\n\n actorLabel(actor: any): string {\n const v = String(actor ?? '').toUpperCase();\n switch (v) {\n case 'TENANT':\n return 'Tenant';\n case 'AGENT':\n return 'Agent';\n case 'LANDLORD':\n return 'Landlord';\n case 'SYSTEM':\n return 'System';\n default:\n return 'Unknown';\n }\n }\n\n humanizeEnum(v: any): string {\n if (!v) return '—';\n return String(v)\n .toLowerCase()\n .replace(/_/g, ' ')\n .replace(/^\\w/, (c) => c.toUpperCase());\n }\n\n formatTs(ts: any): string {\n if (!ts) return '—';\n const d = new Date(ts);\n if (Number.isNaN(d.getTime())) return String(ts);\n return new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: 'short',\n day: '2-digit',\n hour: 'numeric',\n minute: '2-digit',\n }).format(d);\n }\n\n toDiffRows(diff: DiffObject | null): Array<{ key: string; label: string; from: string; to: string }> {\n if (!diff) return [];\n\n return Object.entries(diff)\n .filter(([key]) => key !== 'snapshot')\n .map(([key, v]) => {\n const from = v && typeof v === 'object' && 'from' in v ? (v as DiffValue).from : undefined;\n const to = v && typeof v === 'object' && 'to' in v ? (v as DiffValue).to : v;\n return {\n key,\n label: this.fieldLabel(key),\n from: this.formatFieldValue(key, from),\n to: this.formatFieldValue(key, to),\n };\n });\n }\n\n fieldLabel(key: string): string {\n switch (key) {\n case 'pets':\n return 'Pets';\n case 'smoker':\n return 'Smoker';\n case 'additionalRequests':\n return 'Additional requests';\n case 'amount':\n return 'Offer amount';\n case 'moveInDate':\n return 'Move-in date';\n case 'paymentFrequency':\n return 'Payment frequency';\n default:\n return this.humanizeKey(key);\n }\n }\n\n humanizeKey(key: string): string {\n return String(key)\n .replace(/_/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .replace(/^\\w/, (c) => c.toUpperCase());\n }\n\n formatFieldValue(key: string, value: any): string {\n if (value === null || value === undefined || value === '') return '—';\n\n // arrays -> comma list\n if (Array.isArray(value)) {\n return value.map((x) => this.formatFieldValue(key, x)).join(', ');\n }\n\n const k = String(key ?? '').toLowerCase();\n\n // money (your response already pounds)\n if (k === 'amount' || k.includes('amount') || k.includes('deposit')) {\n const n = Number(value);\n if (!Number.isNaN(n)) {\n return new Intl.NumberFormat(undefined, { style: 'currency', currency: 'GBP' }).format(n);\n }\n }\n\n // booleans -> Yes/No\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n\n // dates\n if (k.includes('date')) {\n const d = new Date(value);\n if (!Number.isNaN(d.getTime())) {\n return new Intl.DateTimeFormat(undefined, { year: 'numeric', month: 'short', day: '2-digit' }).format(d);\n }\n }\n\n // enums\n if (typeof value === 'string' && value.includes('_')) return this.humanizeEnum(value);\n\n // primitives\n if (typeof value === 'string' || typeof value === 'number') return String(value);\n\n // objects\n return this.pretty(value);\n }\n\n private pretty(value: any): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n }\n}\n","@if (history(); as h) {\n<div class=\"p-4 border-t border-(--rt-border-color) space-y-4\">\n <!-- meta -->\n <div class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-base-background) p-3 text-sm\">\n <div class=\"font-medium\">{{ actorLabel(h.actor) }} • {{ humanizeEnum(h.action) }}</div>\n <div class=\"text-xs opacity-70 mt-1\">{{ formatTs(h.timestamp) }}</div>\n </div>\n\n <!-- Snapshot -->\n @if (hasSnapshot()) {\n <div class=\"space-y-2\">\n <div class=\"flex items-center justify-between\">\n <div class=\"text-sm font-semibold\">Snapshot</div>\n <div class=\"text-xs opacity-70\">Initial submitted values</div>\n </div>\n\n <div class=\"rounded-xl border border-(--rt-border-color) overflow-hidden\">\n <div class=\"grid grid-cols-12 text-xs font-medium bg-(--rt-base-background)\">\n <div class=\"col-span-4 p-3 border-b border-(--rt-border-color)\">Field</div>\n <div class=\"col-span-8 p-3 border-b border-(--rt-border-color)\">Value</div>\n </div>\n\n @for (r of snapshotRows(); track r.key) {\n <div class=\"grid grid-cols-12 text-sm\">\n <div class=\"col-span-4 p-3 border-b border-(--rt-border-color) font-medium\">{{ r.label }}</div>\n <div class=\"col-span-8 p-3 border-b border-(--rt-border-color) whitespace-pre-wrap wrap-break-words font-mono text-xs\">\n {{ r.value }}\n </div>\n </div>\n }\n </div>\n </div>\n\n <mat-divider></mat-divider>\n } @else { @if (h.action === 'SUBMITTED') {\n <div class=\"text-sm opacity-70\">Snapshot exists but is empty. (Backend must include snapshot fields to display them.)</div>\n <mat-divider></mat-divider>\n } }\n\n <!-- Changes (diff) -->\n <div class=\"space-y-2\">\n <div class=\"flex items-center justify-between\">\n <div class=\"text-sm font-semibold\">Changes</div>\n @if (!hasDiff()) {\n <div class=\"text-xs opacity-70\">No diff</div>\n }\n </div>\n\n @if (hasDiff()) {\n <div class=\"rounded-xl border border-(--rt-border-color) overflow-hidden\">\n <div class=\"grid grid-cols-12 text-xs font-medium bg-(--rt-base-background)\">\n <div class=\"col-span-4 p-3 border-b border-(--rt-border-color)\">Field</div>\n <div class=\"col-span-4 p-3 border-b border-(--rt-border-color)\">From</div>\n <div class=\"col-span-4 p-3 border-b border-(--rt-border-color)\">To</div>\n </div>\n\n @for (r of diffRows(); track r.key) {\n <div class=\"grid grid-cols-12 text-sm\">\n <div class=\"col-span-4 p-3 border-b border-(--rt-border-color) font-medium\">{{ r.label }}</div>\n <div\n class=\"col-span-4 p-3 border-b border-(--rt-border-color) opacity-80 whitespace-pre-wrap wrap-break-words font-mono text-xs\"\n >\n {{ r.from }}\n </div>\n <div class=\"col-span-4 p-3 border-b border-(--rt-border-color) whitespace-pre-wrap wrap-break-words font-mono text-xs\">\n {{ r.to }}\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"text-sm opacity-70\">No change details recorded.</div>\n }\n </div>\n</div>\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { PropertyOfferHistory } from '@rolatech/angular-services';\nimport { OfferHistoryExpanded } from '../offer-history-expanded/offer-history-expanded';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-offer-history-card',\n imports: [CommonModule, OfferHistoryExpanded],\n templateUrl: './offer-history-card.html',\n styleUrl: './offer-history-card.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferHistoryCard {\n // ---- signal inputs\n readonly index = input.required<number>();\n readonly expanded = input.required<boolean>();\n readonly history = input.required<PropertyOfferHistory>();\n // ---- callback input instead of Output\n readonly onToggleInput = input.required<(index: number) => void>();\n\n onToggle(): void {\n this.onToggleInput()(this.index());\n }\n actorLabel(actor: any): string {\n const v = String(actor ?? '').toUpperCase();\n switch (v) {\n case 'TENANT':\n return 'Tenant';\n case 'AGENT':\n return 'Agent';\n case 'LANDLORD':\n return 'Landlord';\n case 'SYSTEM':\n return 'System';\n default:\n return 'Unknown';\n }\n }\n actionLabel(action: any): string {\n return this.humanizeEnum(action);\n }\n humanizeEnum(v: any): string {\n if (!v) return '—';\n return String(v)\n .toLowerCase()\n .replace(/_/g, ' ')\n .replace(/^\\w/, (c) => c.toUpperCase());\n }\n\n iconForAction(action?: any): string {\n const v = String(action ?? '').toUpperCase();\n switch (v) {\n case 'SUBMITTED':\n return 'send';\n case 'COUNTERED_BY_AGENT':\n case 'COUNTERED_BY_TENANT':\n return 'compare_arrows';\n case 'WITHDRAWN_BY_AGENT':\n case 'WITHDRAWN_BY_TENANT':\n return 'undo';\n case 'VIEWED_BY_AGENT':\n case 'VIEWED_BY_TENANT':\n return 'visibility';\n case 'ACCEPTED':\n return 'check_circle';\n case 'REJECTED':\n return 'cancel';\n default:\n return 'history';\n }\n }\n\n formatTs(ts: any): string {\n if (!ts) return '—';\n const d = new Date(ts);\n if (Number.isNaN(d.getTime())) return String(ts);\n return new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: 'short',\n day: '2-digit',\n hour: 'numeric',\n minute: '2-digit',\n }).format(d);\n }\n\n summary(h: PropertyOfferHistory): string {\n return `${this.actorLabel(h.actor)} • ${this.actionLabel(h.action)}`;\n }\n}\n","<div class=\"offer-history-card\">\n <button\n type=\"button\"\n class=\"offer-history-card__toggle\"\n (click)=\"onToggle()\"\n >\n <div class=\"offer-history-card__copy\">\n <div class=\"offer-history-card__meta\">\n <span class=\"offer-history-card__actor\">{{ actorLabel(history().actor) }}</span>\n <span class=\"offer-history-card__timestamp\">{{ formatTs(history().timestamp) }}</span>\n </div>\n <div class=\"offer-history-card__summary\">{{ actionLabel(history().action) }}</div>\n </div>\n\n <div class=\"offer-history-card__arrow\" [class.offer-history-card__arrow--expanded]=\"expanded()\">\n <svg class=\"offer-history-card__icon\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fill-rule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 0 1 1.06.02L10 11.168l3.71-3.936a.75.75 0 1 1 1.08 1.04l-4.24 4.5a.75.75 0 0 1-1.08 0l-4.24-4.5a.75.75 0 0 1 .02-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </div>\n </button>\n\n @if (expanded()) {\n <div class=\"offer-history-card__body\">\n <rolatech-offer-history-expanded [history]=\"history()\" />\n </div>\n }\n</div>\n","import { Component, computed, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { OfferHistoryCard } from '../offer-history-card/offer-history-card';\nimport { OfferDetailContext } from '../../offer-data-access/offer-detail.context';\nimport { PropertyOfferHistory } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-offer-history-accordion',\n imports: [OfferHistoryCard],\n templateUrl: './offer-history-accordion.html',\n styleUrl: './offer-history-accordion.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferHistoryAccordion {\n readonly ctx = inject(OfferDetailContext);\n\n // tenants snapshot from ctx\n readonly history = computed<PropertyOfferHistory[]>(() => this.ctx.history() ?? []);\n\n // index-based expanded state (per your requirement)\n readonly expandedIndexes = signal<Set<number>>(new Set());\n\n isExpanded(i: number) {\n return this.expandedIndexes().has(i);\n }\n\n toggle = (index: number) => {\n this.expandedIndexes.update((prev) => {\n const next = new Set(prev);\n if (next.has(index)) next.delete(index);\n else next.add(index);\n return next;\n });\n };\n expandAll(count: number) {\n const next = new Set<number>();\n for (let i = 0; i < count; i++) next.add(i);\n this.expandedIndexes.set(next);\n }\n\n collapseAll() {\n this.expandedIndexes.set(new Set());\n }\n\n actorLabel(actor: any): string {\n switch (actor) {\n case 'TENANT':\n return 'Tenant';\n case 'AGENT':\n return 'AGENT';\n case 'System':\n return 'System';\n default:\n return '-';\n }\n }\n}\n","@if (history(); as ts) {\n<section class=\"offer-history-accordion\">\n <div class=\"offer-history-accordion__head\">\n <div class=\"offer-history-accordion__copy\">\n <span class=\"offer-history-accordion__eyebrow\">Timeline</span>\n <h3 class=\"offer-history-accordion__title\">Offer history</h3>\n <p class=\"offer-history-accordion__description\">\n Every submitted change, view, and response is recorded here so you can audit the full negotiation trail.\n </p>\n </div>\n\n <div class=\"offer-history-accordion__tools\">\n <span class=\"offer-history-accordion__count\">{{ ts.length }} events</span>\n <button\n type=\"button\"\n class=\"offer-history-accordion__tool\"\n (click)=\"expandAll(ts.length)\"\n [disabled]=\"ts.length === 0\"\n >\n Expand all\n </button>\n <button\n type=\"button\"\n class=\"offer-history-accordion__tool\"\n (click)=\"collapseAll()\"\n [disabled]=\"expandedIndexes().size === 0\"\n >\n Collapse all\n </button>\n </div>\n </div>\n\n @if (ts.length > 0) {\n <div class=\"offer-history-accordion__list\">\n @for (t of ts; track $index) {\n <rolatech-offer-history-card [index]=\"$index\" [expanded]=\"isExpanded($index)\" [history]=\"t\" [onToggleInput]=\"toggle\" />\n }\n </div>\n } @else {\n <div class=\"offer-history-accordion__empty\">No recorded offer events yet.</div>\n }\n</section>\n}\n","import { ENTER, COMMA } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport { Component, DoCheck, inject, input, model, output, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatNativeDateModule, DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { PropertyOfferCounterRequest } from '@rolatech/angular-services';\n\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n\n@Component({\n selector: 'rolatech-offer-counter-dialog',\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatSlideToggleModule,\n MatChipsModule,\n MatIcon,\n FormsModule,\n ],\n templateUrl: './offer-counter-dialog.html',\n styleUrl: './offer-counter-dialog.scss',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n})\nexport class OfferCounterDialog implements DoCheck {\n readonly minDate = new Date();\n readonly pets = signal<string[]>([]);\n readonly petsInputFocused = signal(false);\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n term = model.required<PropertyOfferCounterRequest>();\n output = output<any>();\n\n ngDoCheck(): void {\n this.output.emit(this.term());\n }\n addPet(event: MatChipInputEvent) {\n const raw = (event.value ?? '').trim();\n event.chipInput?.clear();\n if (!raw) return;\n\n // if someone types \"Dog, Cat\" despite separators, handle it\n const tokens = raw\n .split(',')\n .map((x) => x.trim())\n .filter(Boolean);\n\n let curr = this.getPets();\n\n for (const token of tokens) {\n const normalized = this.normalizePet(token);\n if (!normalized) continue;\n\n // \"None\" logic: treat it as exclusive\n if (normalized.toLowerCase() === 'none') {\n curr = ['None'];\n break;\n }\n\n // if \"None\" already exists and user adds real pets, remove \"None\"\n curr = curr.filter((x) => x.toLowerCase() !== 'none');\n\n // prevent duplicates (case-insensitive)\n const exists = curr.some((x) => x.toLowerCase() === normalized.toLowerCase());\n if (!exists) curr = [...curr, normalized];\n }\n\n this.setPets(curr);\n }\n\n removePet(pet: string) {\n const curr = this.getPets();\n const next = curr.filter((x) => x.toLowerCase() !== pet.toLowerCase());\n this.setPets(next);\n }\n\n /** Example normalization */\n private normalizePet(input: string): string {\n const s = input.trim();\n if (!s) return '';\n\n // collapse spaces\n const collapsed = s.replace(/\\s+/g, ' ');\n\n // title-case common pets, keep \"None\" exact\n if (collapsed.toLowerCase() === 'none') return 'None';\n\n // Basic title-case:\n return collapsed.charAt(0).toUpperCase() + collapsed.slice(1);\n }\n private getPets(): string[] {\n const pets = this.term().pets;\n return Array.isArray(pets) ? pets : [];\n }\n\n private setPets(next: string[]) {\n this.term.update((t) => ({ ...t, pets: next }));\n }\n}\n","<div class=\"grid\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Offer amount (PCM)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().amount\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Move-in date</mat-label>\n <input matInput [min]=\"minDate\" (focus)=\"dp.open()\" [matDatepicker]=\"dp\" [(ngModel)]=\"term().moveInDate\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Payment frequency</mat-label>\n <mat-select [(ngModel)]=\"term().paymentFrequency\">\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Tenancy length (months)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().tenancyLengthMonths\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Break clause (months)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().breakClauseMonths\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Furniture</mat-label>\n <mat-select [(ngModel)]=\"term().furniture\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>{{ petsInputFocused() ? 'Pets' : 'Add a pet (e.g., Dog, Cat)' }}</mat-label>\n\n <mat-chip-grid #chipGrid aria-label=\"Pets\">\n @for (p of (term().pets); track p) {\n <mat-chip-row (removed)=\"removePet(p)\">\n {{ p }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + p\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n\n <input\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (focus)=\"petsInputFocused.set(true)\"\n (blur)=\"petsInputFocused.set(false)\"\n (matChipInputTokenEnd)=\"addPet($event)\"\n />\n </mat-chip-grid>\n\n @if ((term().pets).length <= 0) {\n <mat-error>At least one pet or none is required</mat-error>\n }\n <mat-hint>Press Enter or comma to add multiple pets.</mat-hint>\n </mat-form-field>\n\n <mat-slide-toggle labelPosition=\"before\" class=\"py-3\" [(ngModel)]=\"term().smoker\">\n <span class=\"text-lg font-bold\">Smoker</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"span2\">\n <mat-label>Additional requests</mat-label>\n <textarea matInput rows=\"3\" [(ngModel)]=\"term().additionalRequests\"></textarea>\n </mat-form-field>\n</div>\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { OfferDetailContext } from './offer-detail.context';\nimport { PropertyOfferService } from '@rolatech/angular-services';\n\n@Injectable({ providedIn: 'root' })\nexport class OfferInternalNoteFacade {\n private readonly ctx = inject(OfferDetailContext);\n private readonly api = inject(PropertyOfferService);\n\n readonly loading = signal(false);\n readonly saving = signal(false);\n readonly error = signal<string | null>(null);\n\n // server state\n readonly serverNote = signal<string>('');\n\n // UI state\n readonly editing = signal(false);\n readonly draft = signal<string>('');\n\n readonly offerId = computed(() => {\n // If your ctx has offerId() signal -> prefer it.\n // Otherwise derive from offer().\n const o: any = this.ctx.offer?.();\n return o?.id ?? null;\n });\n\n readonly canEdit = computed(() => {\n // Wire this to your auth module if you have it.\n // For now: allow edit if offer exists.\n return !!this.offerId();\n });\n\n async load(): Promise<void> {\n const id = this.offerId();\n if (!id) return;\n\n this.loading.set(true);\n this.error.set(null);\n try {\n const res = await firstValueFrom(this.api.getOfferInternalNote(id));\n const note = (res as any)?.data?.internalNote ?? '';\n this.serverNote.set(note ?? '');\n if (!this.editing()) this.draft.set(note ?? '');\n } catch (e: any) {\n this.error.set(e?.error?.message ?? 'Failed to load internal note.');\n } finally {\n this.loading.set(false);\n }\n }\n\n startEdit(): void {\n this.editing.set(true);\n this.draft.set(this.serverNote() ?? '');\n }\n\n cancelEdit(): void {\n this.editing.set(false);\n this.draft.set(this.serverNote() ?? '');\n this.error.set(null);\n }\n\n async save(): Promise<void> {\n const id = this.offerId();\n if (!id) return;\n\n const internalNote = (this.draft() ?? '').trim();\n\n this.saving.set(true);\n this.error.set(null);\n try {\n const res = await firstValueFrom(this.api.updateOfferInternalNote(id, { internalNote } as any));\n\n const updated = (res as any)?.data?.internalNote ?? internalNote;\n this.serverNote.set(updated ?? '');\n this.draft.set(updated ?? '');\n this.editing.set(false);\n } catch (e: any) {\n this.error.set(e?.error?.message ?? 'Failed to save internal note.');\n } finally {\n this.saving.set(false);\n }\n }\n}\n","import { Component, ViewEncapsulation, computed, effect, inject } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { OfferDetailContext } from '../../offer-data-access/offer-detail.context';\nimport { OfferInternalNoteFacade } from '../../offer-data-access/offer-internal-note.facade';\n\n@Component({\n selector: 'rolatech-offer-internal-note-card',\n standalone: true,\n imports: [MatIconModule, MatButtonModule, MatProgressSpinnerModule, MatFormFieldModule, MatInputModule],\n templateUrl: './offer-internal-note-card.html',\n styleUrl: './offer-internal-note-card.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferInternalNoteCard {\n readonly ctx = inject(OfferDetailContext);\n readonly facade = inject(OfferInternalNoteFacade);\n\n readonly offerId = this.facade.offerId;\n readonly loading = this.facade.loading;\n readonly saving = this.facade.saving;\n readonly editing = this.facade.editing;\n readonly error = this.facade.error;\n readonly serverNote = this.facade.serverNote;\n readonly draft = this.facade.draft;\n\n readonly hasNote = computed(() => (this.serverNote() ?? '').trim().length > 0);\n\n constructor() {\n // auto-load when offerId becomes available/changes\n effect(() => {\n const id = this.offerId();\n if (!id) return;\n void this.facade.load();\n });\n }\n\n edit(): void {\n this.facade.startEdit();\n }\n\n cancel(): void {\n this.facade.cancelEdit();\n }\n\n async save(): Promise<void> {\n await this.facade.save();\n }\n}\n","@if (ctx.offer(); as o) {\n<section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-4 space-y-3\">\n <header class=\"flex items-start justify-between gap-3\">\n <div class=\"min-w-0\">\n <div class=\"flex items-center gap-2\">\n <mat-icon class=\"text-(--rt-brand-color)\">lock</mat-icon>\n <div class=\"text-sm font-semibold\">Internal note</div>\n </div>\n <div class=\"text-xs opacity-70\">Visible to admins/agents only. Not part of offer version/history.</div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n @if (loading()) {\n <mat-progress-spinner diameter=\"18\" mode=\"indeterminate\"></mat-progress-spinner>\n } @if (!editing()) {\n <button mat-stroked-button type=\"button\" (click)=\"edit()\" [disabled]=\"!facade.canEdit() || loading()\">Edit</button>\n } @else {\n <button mat-stroked-button type=\"button\" (click)=\"cancel()\" [disabled]=\"saving()\">Cancel</button>\n <button mat-flat-button type=\"button\" (click)=\"save()\" [disabled]=\"saving()\">\n @if (saving()) { Saving… } @else { Save }\n </button>\n }\n </div>\n </header>\n\n @if (error()) {\n <div class=\"rounded-xl border border-red-300 bg-(--rt-base-background) p-3 text-sm\">{{ error() }}</div>\n }\n\n <!-- Read mode -->\n @if (!editing()) { @if (hasNote()) {\n <div class=\"rounded-xl border border-(--rt-border-color) p-3 text-sm whitespace-pre-wrap\">{{ serverNote() }}</div>\n } @else {\n <div class=\"text-sm opacity-70\">No internal note yet.</div>\n } }\n\n <!-- Edit mode -->\n @if (editing()) {\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>Internal note</mat-label>\n <textarea\n matInput\n rows=\"6\"\n [value]=\"draft()\"\n (input)=\"draft.set(($any($event.target).value ?? ''))\"\n placeholder=\"Write notes for agents/admins…\"\n ></textarea>\n <mat-hint>Keep it factual and actionable.</mat-hint>\n </mat-form-field>\n }\n</section>\n}\n","import { Injectable, inject, signal, computed } from '@angular/core';\nimport {\n EditLockResponse,\n PropertyOfferCounterService,\n PropertyOfferHistory,\n PropertyOfferVersion,\n} from '@rolatech/angular-services';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class PropertyOfferCounterFacade {\n private readonly api = inject(PropertyOfferCounterService);\n\n readonly offerId = signal<string | null>(null);\n\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n\n readonly versions = signal<PropertyOfferVersion[]>([]);\n readonly history = signal<PropertyOfferHistory[]>([]);\n\n // latest and previous versions for the compare UI\n readonly latest = computed(() => {\n const vs = this.versions();\n return vs.length ? vs[vs.length - 1] : null;\n });\n\n readonly previous = computed(() => {\n const vs = this.versions();\n return vs.length >= 2 ? vs[vs.length - 2] : null;\n });\n\n readonly latestHistoryItem = computed(() => {\n const hs = this.history();\n return hs.length ? hs[hs.length - 1] : null;\n });\n\n readonly changes = computed<Record<string, any>>(() => {\n const raw = this.latestHistoryItem()?.changes;\n if (!raw) return {};\n try {\n return JSON.parse(raw);\n } catch {\n return {};\n }\n });\n\n readonly editedFields = computed(() => new Set(Object.keys(this.changes())));\n\n isEdited(key: string) {\n return this.editedFields().has(key);\n }\n\n // edit lock + mode\n private readonly clientId = crypto.randomUUID();\n readonly lock = signal<EditLockResponse | null>(null);\n\n readonly canEdit = computed(() => {\n const lock = this.lock();\n if (!lock) return true; // optimistic\n if (!lock.locked) return true;\n // If locked by someone else, cannot edit\n // In real app, compare lock.lockedById with current user id\n return lock.lockedByName === 'Agent A'; // placeholder\n });\n\n readonly editMode = signal(false);\n\n // Draft is the latest version snapshot editable\n readonly draft = signal<PropertyOfferVersion | null>(null);\n\n readonly depositPence = computed(() => calcDepositPence(this.draft()?.amount ?? null));\n\n async load(id: string) {\n this.offerId.set(id);\n this.loading.set(true);\n this.error.set(null);\n try {\n const [vs, hs] = await Promise.all([firstValueFrom(this.api.getVersions(id)), firstValueFrom(this.api.getHistory(id))]);\n this.versions.set(vs.data);\n this.history.set(hs.data);\n\n // fetch lock state\n const lock = await firstValueFrom(this.api.getEditLock(id));\n this.lock.set(lock.data);\n\n // draft defaults to latest snapshot\n this.draft.set(structuredClone(this.latest()));\n } catch (e: any) {\n this.error.set(e?.error?.message ?? 'Failed to load offer.');\n } finally {\n this.loading.set(false);\n }\n }\n\n async enterEdit() {\n const id = this.offerId();\n if (!id) return;\n\n // acquire lock (so multiple agents see banner)\n const res = await firstValueFrom(this.api.acquireLock(id, this.clientId));\n this.lock.set(res.data);\n\n if (!this.canEdit()) return;\n\n this.draft.set(structuredClone(this.latest()));\n this.editMode.set(true);\n\n // start heartbeat\n this.startHeartbeat();\n }\n\n private heartbeatTimer: any;\n\n private startHeartbeat() {\n this.stopHeartbeat();\n const id = this.offerId();\n if (!id) return;\n\n this.heartbeatTimer = setInterval(async () => {\n try {\n const res = await firstValueFrom(this.api.heartbeat(id));\n this.lock.set(res.data);\n } catch {\n // heartbeat failure is non-fatal (network / tab inactive)\n }\n }, 30_000);\n }\n\n stopHeartbeat() {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n }\n\n async cancelEdit() {\n const id = this.offerId();\n if (!id) return;\n\n this.editMode.set(false);\n this.draft.set(structuredClone(this.latest()));\n this.stopHeartbeat();\n await firstValueFrom(this.api.release(id)).catch(() => {});\n }\n\n async sendCounter() {\n const id = this.offerId();\n const draft = this.draft();\n if (!id || !draft) return;\n\n // Backend expects pounds BigDecimal; we send pounds number\n const payload = {\n amount: penceToPounds(draft.amount ?? null), // pounds\n moveInDate: draft.moveInDate,\n paymentFrequency: draft.paymentFrequency,\n tenancyLengthMonths: draft.tenancyLengthMonths,\n breakClauseMonths: draft.breakClauseMonths,\n pets: draft.pets ?? [],\n smoker: draft.smoker,\n furniture: draft.furniture,\n additionalRequests: draft.additionalRequests,\n internalNote: null,\n };\n\n try {\n this.loading.set(true);\n await firstValueFrom(this.api.counterByAgent(id, payload));\n await this.load(id);\n this.editMode.set(false);\n this.stopHeartbeat();\n await firstValueFrom(this.api.release(id)).catch(() => {});\n } catch (e: any) {\n this.error.set(e?.error?.message ?? 'Failed to send counter offer.');\n } finally {\n this.loading.set(false);\n }\n }\n\n async accept() {\n const id = this.offerId();\n if (!id) return;\n await firstValueFrom(this.api.acceptByAgent(id));\n await this.load(id);\n }\n\n async reject(reason: string) {\n const id = this.offerId();\n if (!id) return;\n await firstValueFrom(this.api.rejectByAgent(id, reason));\n await this.load(id);\n }\n\n /**\n * Withdraw = unlock editing on latest snapshot, NOT rollback.\n * After withdraw, draft remains based on latest and user can edit and send -> v+1 :contentReference[oaicite:17]{index=17}\n */\n async withdraw() {\n const id = this.offerId();\n if (!id) return;\n\n await firstValueFrom(this.api.withdrawByAgent(id, this.clientId));\n await this.load(id);\n\n // enter edit mode on latest\n await this.enterEdit();\n }\n}\nexport function penceToPounds(pence: number | null): number | null {\n if (pence == null) return null;\n return Math.round(pence) / 100;\n}\n\nexport function poundsToPence(pounds: number | null): number | null {\n if (pounds == null) return null;\n return Math.round(pounds * 100);\n}\n\n// UI-only deposit calc (pence in/out)\nexport function calcDepositPence(monthlyPence: number | null): number | null {\n if (monthlyPence == null) return null;\n const annual = monthlyPence * 12;\n const threshold = 50_000 * 100;\n const weeks = annual < threshold ? 5 : 6;\n const weekly = Math.floor(annual / 52);\n return weekly * weeks;\n}\n","import { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { PropertyOfferCounterService, PropertyOfferNegotiationView, VersionDto } from '@rolatech/angular-services';\nimport { calcDepositPence, penceToPounds, poundsToPence } from './offer-counter.facade';\nimport { OfferDetailContext } from './offer-detail.context';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nexport type NegotiationMode = 'agent' | 'tenant';\nexport type MarketMode = 'agent' | 'tenant';\n\n@Injectable()\nexport class PropertyOfferNegotiationFacade {\n private readonly api = inject(PropertyOfferCounterService);\n private readonly offerCtx = inject(OfferDetailContext, { optional: true });\n private readonly snack = inject(MatSnackBar);\n\n readonly mode = signal<NegotiationMode>('tenant');\n readonly offerId = signal<string | null>(null);\n\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n\n readonly view = signal<PropertyOfferNegotiationView | null>(null);\n readonly sending = signal(false);\n readonly withdrawing = signal(false);\n readonly cancelling = signal(false);\n\n // latest / previous\n readonly offer = computed(() => this.view()?.offer ?? null);\n readonly latest = computed(() => this.view()?.latestVersion ?? null);\n readonly previous = computed(() => this.view()?.previousVersion ?? null);\n readonly latestHistory = computed(() => this.view()?.latestHistory ?? null);\n readonly history = computed(() => this.view()?.history ?? []);\n readonly permissions = computed(() => this.view()?.permissions ?? null);\n readonly status = computed(() => this.offer()?.status ?? null);\n readonly canEdit = computed(() => this.permissions()?.canEdit ?? false);\n readonly canCounter = computed(() => this.permissions()?.canCounter ?? false);\n readonly canWithdraw = computed(() => this.permissions()?.canWithdraw ?? false);\n readonly canAccept = computed(() => this.permissions()?.canAccept ?? false);\n readonly canReject = computed(() => this.permissions()?.canReject ?? false);\n readonly canCancel = computed(() => this.permissions()?.canCancel ?? false);\n\n readonly lock = computed(() => this.view()?.editLock ?? null);\n readonly withdrawLabel = computed(() => {\n // UX: tenant can “Cancel” before negotiation really starts\n const mode = this.mode();\n const s = this.status();\n\n if (mode === 'tenant' && (s === 'DRAFT' || s === 'SUBMITTED')) return 'Cancel';\n return 'Withdraw';\n });\n\n readonly showLifecycleActions = computed(() => {\n const p = this.permissions();\n return (\n !!p &&\n (p.canMarkUnderOffer ||\n p.canStartReferencing ||\n p.canMarkReferencesPassed ||\n p.canMarkReferencesFailed ||\n p.canMarkCompleted)\n );\n });\n // Edited fields from latestHistory.changes\n readonly editedFields = computed(() => {\n const changes = this.latestHistory()?.changes ?? {};\n return new Set(Object.keys(changes));\n });\n\n isEdited(key: keyof VersionDto | string) {\n return this.editedFields().has(String(key));\n }\n\n // Draft editing (no @Input, no Output)\n readonly editMode = signal(false);\n readonly draft = signal<VersionDto | null>(null);\n\n // UI-only deposit\n readonly depositPence = computed(() => calcDepositPence(this.draft()?.amount ?? null));\n\n // ClientId for withdraw/locks\n readonly clientId = crypto.randomUUID();\n\n async load(id: string, mode: NegotiationMode) {\n this.offerId.set(id);\n this.mode.set(mode);\n\n this.loading.set(true);\n this.error.set(null);\n\n try {\n const res =\n mode === 'agent'\n ? await firstValueFrom(this.api.getNegotiationViewByAgent(id))\n : await firstValueFrom(this.api.getNegotiationViewByTenant(id));\n\n this.view.set(res.data);\n\n // draft base = latest snapshot\n this.draft.set(this.cloneVersion(this.latest()));\n this.editMode.set(false);\n\n // ✅ mark viewed (fire-and-forget)\n this.markViewed(id, mode);\n } catch (e: any) {\n this.error.set(e?.message ?? e?.message ?? 'Failed to load negotiation view.');\n } finally {\n this.loading.set(false);\n }\n }\n\n private markViewed(id: string, mode: NegotiationMode) {\n const call = mode === 'agent' ? this.api.viewedByAgent(id) : this.api.viewedByTenant(id);\n call.subscribe({ error: () => {} });\n }\n\n enterEdit() {\n // lock acquisition can be separate endpoint in your codebase.\n // Here we only enable edit mode if permissions.canEdit is true.\n const canEdit = this.permissions()?.canEdit ?? false;\n if (!canEdit) return;\n\n this.draft.set(this.cloneVersion(this.latest()));\n this.editMode.set(true);\n }\n\n cancelEdit() {\n this.draft.set(this.cloneVersion(this.latest()));\n this.editMode.set(false);\n }\n\n // ---------------- actions ----------------\n // ---- counter rules (from your context) ----\n\n async sendCounter() {\n const id = this.offerId();\n const d = this.draft();\n if (!id || !d) return;\n\n // backend request expects pounds BigDecimal: send amount as pounds number\n const payload = {\n amount: d.amount,\n moveInDate: d.moveInDate,\n paymentFrequency: d.paymentFrequency,\n tenancyLengthMonths: d.tenancyLengthMonths,\n breakClauseMonths: d.breakClauseMonths,\n pets: d.pets ?? [],\n smoker: d.smoker,\n furniture: d.furniture,\n additionalRequests: d.additionalRequests,\n\n // agent-only internal note could be collected elsewhere in UI\n internalNote: null,\n };\n\n this.loading.set(true);\n this.sending.set(true);\n this.error.set(null);\n\n // client-side guard (server enforces too)\n // if (role === 'TENANT' && !this.canCounterTenant(status)) {\n // this.snack.open('You can only counter after the agent has countered.', 'Close', { duration: 3500 });\n // return;\n // }\n // if (role === 'AGENT' && !this.canCounterAgent(status)) {\n // this.snack.open('You can only counter after submission or a tenant counter.', 'Close', { duration: 3500 });\n // return;\n // }\n\n try {\n // pick endpoint by actor\n const res =\n this.mode() === 'tenant'\n ? await firstValueFrom(this.api.counterByTenant(id, payload))\n : await firstValueFrom(this.api.counterByAgent(id, payload));\n\n await this.load(id, this.mode());\n\n // ✅ refresh offer detail state (history card, header, etc.)\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n } catch (e: any) {\n this.error.set(e?.message ?? 'Failed to send counter offer.');\n } finally {\n this.loading.set(false);\n this.sending.set(false);\n }\n }\n async withdraw() {\n const id = this.offerId();\n if (!id) return;\n\n this.withdrawing.set(true);\n this.error.set(null);\n\n try {\n if (this.mode() === 'tenant') {\n await firstValueFrom(this.api.withdrawByTenant(id, this.clientId));\n } else {\n await firstValueFrom(this.api.withdrawByAgent(id, this.clientId));\n }\n\n this.success('Offer withdrawn.');\n\n // ✅ success: refresh everything + exit edit mode\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n\n this.editMode.set(false);\n this.draft.set(this.cloneVersion(this.latest()));\n } catch (e: any) {\n const msg = e?.message ?? 'Failed to withdraw offer.';\n this.error.set(msg);\n this.failure(msg);\n\n // ✅ failure: refresh everything (rule #5)\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n } finally {\n this.withdrawing.set(false);\n }\n }\n\n async accept() {\n const id = this.offerId();\n if (!id) return;\n\n this.loading.set(true);\n this.error.set(null);\n try {\n // await firstValueFrom(this.api.acceptByTenant(id));\n\n const res =\n this.mode() === 'tenant'\n ? await firstValueFrom(this.api.acceptByTenant(id))\n : await firstValueFrom(this.api.acceptByAgent(id));\n\n this.success('Offer accepted.');\n\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n } catch (e: any) {\n const msg = e?.message ?? 'Failed to accept offer.';\n this.error.set(msg);\n this.failure(msg);\n } finally {\n this.loading.set(false);\n }\n }\n\n async reject(reason: string) {\n const id = this.offerId();\n if (!id) return;\n\n this.loading.set(true);\n this.error.set(null);\n try {\n const res =\n this.mode() === 'tenant'\n ? await firstValueFrom(this.api.rejectByTenant(id, reason))\n : await firstValueFrom(this.api.rejectByAgent(id, reason));\n\n this.success('Offer rejected.');\n\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n } catch (e: any) {\n const msg = e?.message ?? 'Failed to reject offer.';\n this.error.set(msg);\n this.failure(msg);\n } finally {\n this.loading.set(false);\n }\n }\n\n async markUnderOffer() {\n const id = this.offerId();\n if (!id) return;\n\n this.loading.set(true);\n this.error.set(null);\n try {\n await firstValueFrom(this.api.markUnderOffer(id)); // <- implement in API\n\n this.success('Offer marked as under offer.');\n\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n } catch (e: any) {\n const msg = e?.message ?? 'Failed to mark under offer.';\n this.error.set(msg);\n this.failure(msg);\n } finally {\n this.loading.set(false);\n }\n }\n\n async startReferencing() {\n const id = this.offerId();\n if (!id) return;\n\n this.loading.set(true);\n this.error.set(null);\n try {\n await firstValueFrom(this.api.startReferencing(id)); // <- implement in API\n\n this.success('Referencing started.');\n\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n } catch (e: any) {\n const msg = e?.message ?? 'Failed to start referencing.';\n this.error.set(msg);\n this.failure(msg);\n } finally {\n this.loading.set(false);\n }\n }\n\n async markReferencesPassed() {\n const id = this.offerId();\n if (!id) return;\n\n this.loading.set(true);\n this.error.set(null);\n try {\n await firstValueFrom(this.api.markReferencesPassed(id)); // <- implement in API\n\n this.success('References marked as passed.');\n\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n } catch (e: any) {\n const msg = e?.message ?? 'Failed to mark references passed.';\n this.error.set(msg);\n this.failure(msg);\n } finally {\n this.loading.set(false);\n }\n }\n\n async markReferencesFailed(reason: string) {\n const id = this.offerId();\n if (!id) return;\n\n if (!reason?.trim()) {\n this.error.set('Please provide a reason for reference failure.');\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n try {\n await firstValueFrom(this.api.markReferencesFailed(id, { notes: reason }));\n\n this.success('References marked as failed.');\n\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n } catch (e: any) {\n const msg = e?.message ?? 'Failed to mark references failed.';\n this.error.set(msg);\n this.failure(msg);\n } finally {\n this.loading.set(false);\n }\n }\n\n async markCompleted() {\n const id = this.offerId();\n if (!id) return;\n\n this.loading.set(true);\n this.error.set(null);\n try {\n await firstValueFrom(this.api.markCompleted(id)); // <- implement in API\n\n this.success('Offer marked as completed.');\n\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n } catch (e: any) {\n const msg = e?.message ?? 'Failed to mark completed.';\n this.error.set(msg);\n this.failure(msg);\n } finally {\n this.loading.set(false);\n }\n }\n\n async cancelOffer() {\n const id = this.offerId();\n if (!id) return;\n\n this.cancelling.set(true);\n this.error.set(null);\n\n try {\n if (this.mode() === 'tenant') {\n await firstValueFrom(this.api.cancelByTenant(id, this.clientId));\n } else {\n await firstValueFrom(this.api.cancelByAgent(id, this.clientId));\n }\n\n this.success('Offer cancelled.');\n\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n\n this.editMode.set(false);\n this.draft.set(this.cloneVersion(this.latest()));\n } catch (e: any) {\n const msg = e?.message ?? 'Failed to cancel offer.';\n this.error.set(msg);\n this.failure(msg);\n // keep your “refresh on failure” rule\n await this.load(id, this.mode());\n await this.offerCtx?.reloadOffer?.(id);\n await this.offerCtx?.reloadHistory?.(id);\n } finally {\n this.cancelling.set(false);\n }\n }\n\n // ---------------- draft setters ----------------\n\n setAmountPounds(v: number | null) {\n const d = this.draft();\n if (!d) return;\n this.draft.set({ ...d, amount: v });\n }\n\n setField<K extends keyof VersionDto>(key: K, value: VersionDto[K]) {\n const d = this.draft();\n if (!d) return;\n this.draft.set({ ...d, [key]: value });\n }\n\n // ---------------- helpers ----------------\n\n private cloneVersion(v: VersionDto | null): VersionDto | null {\n if (!v) return null;\n return {\n ...v,\n pets: Array.isArray(v.pets) ? [...v.pets] : [],\n };\n }\n private success(message: string) {\n this.snack.open(message, 'Close', {\n duration: 3000,\n panelClass: ['snack-success'],\n });\n }\n\n private failure(message: string) {\n this.snack.open(message, 'Close', {\n duration: 4000,\n panelClass: ['snack-error'],\n });\n }\n}\n","import { Component, computed, inject, signal } from '@angular/core';\nimport { PropertyOfferNegotiationFacade } from '../../offer-data-access/property-offer-negotiation.facade';\nimport { ENTER, COMMA } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule, MatChipInputEvent } from '@angular/material/chips';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-offer-counter-edit',\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatSlideToggleModule,\n MatChipsModule,\n MatIconModule,\n MatButtonModule,\n PricePipe,\n ],\n templateUrl: './offer-counter-edit.html',\n styleUrl: './offer-counter-edit.scss',\n})\nexport class OfferCounterEdit {\n readonly f = inject(PropertyOfferNegotiationFacade);\n\n // min date for datepicker (today)\n readonly minDate = new Date();\n\n // focus flag for the pets label behavior\n readonly petsInputFocused = signal(false);\n\n // chip separators\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n // draft accessor\n readonly term = computed(() => {\n const d = this.f.draft();\n if (!d) throw new Error('Draft not loaded');\n // Ensure pets exists\n if (!Array.isArray(d.pets)) this.f.setField('pets', []);\n return this.f.draft()!;\n });\n\n readonly depositPence = computed(() => {\n const d = this.f.draft();\n const monthly = d?.amount ?? null; // pence\n if (monthly == null) return null;\n\n const annual = monthly * 12;\n const threshold = 50_000; // £50,000 in pence\n const weeks = annual < threshold ? 5 : 6;\n\n return (((monthly * 12) / 52) * weeks).toFixed(2);\n });\n\n // amount helpers (draft.amount is pence)\n\n setAmountPounds(v: number | null) {\n const n = typeof v === 'number' && Number.isFinite(v) ? v : null;\n this.f.setAmountPounds(n);\n }\n\n setField<K extends keyof ReturnType<PropertyOfferNegotiationFacade['draft']>>(key: any, value: any) {\n this.f.setField(key, value);\n }\n\n setFieldNumber(key: any, v: any) {\n const value = v === '' || v == null ? null : Number(v);\n this.f.setField(key, Number.isFinite(value) ? value : null);\n }\n\n addPet(ev: MatChipInputEvent) {\n const inputValue = (ev.value ?? '').trim();\n ev.chipInput?.clear();\n\n if (!inputValue) return;\n\n const current = this.term().pets ?? [];\n const next = Array.from(new Set([...current, inputValue]));\n this.f.setField('pets', next);\n }\n\n removePet(p: string) {\n const current = this.term().pets ?? [];\n this.f.setField(\n 'pets',\n current.filter((x) => x !== p),\n );\n }\n}\n","<!-- offer-counter-edit.component.html (Angular Material + Tailwind grid) -->\n\n<div class=\"grid gap-4\">\n <!-- Row 1 -->\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Offer amount (PCM) @if (f.isEdited('amount')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n inputmode=\"decimal\"\n [ngModel]=\"this.term().amount\"\n (ngModelChange)=\"setAmountPounds($event)\"\n />\n <mat-hint>\n Deposit:\n <span class=\"font-medium\">{{ depositPence() ?? 0 | price }}</span>\n </mat-hint>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Move-in date @if (f.isEdited('moveInDate')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n\n <input\n matInput\n [min]=\"minDate\"\n (focus)=\"dp.open()\"\n [matDatepicker]=\"dp\"\n [ngModel]=\"term().moveInDate\"\n (ngModelChange)=\"setField('moveInDate', $event)\"\n readonly\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Payment frequency @if (f.isEdited('paymentFrequency')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <mat-select [ngModel]=\"term().paymentFrequency\" (ngModelChange)=\"setField('paymentFrequency', $event)\">\n <mat-option [value]=\"null\">—</mat-option>\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Row 2 -->\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Tenancy length (months) @if (f.isEdited('tenancyLengthMonths')) {\n <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"term().tenancyLengthMonths\"\n (ngModelChange)=\"setFieldNumber('tenancyLengthMonths', $event)\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Break clause (months) @if (f.isEdited('breakClauseMonths')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"term().breakClauseMonths\"\n (ngModelChange)=\"setFieldNumber('breakClauseMonths', $event)\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Furniture @if (f.isEdited('furniture')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <mat-select [ngModel]=\"term().furniture\" (ngModelChange)=\"setField('furniture', $event)\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Pets -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>\n {{ petsInputFocused() ? 'Pets' : 'Add a pet (e.g., Dog, Cat)' }} @if (f.isEdited('pets')) {\n <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n\n <mat-chip-grid #chipGrid aria-label=\"Pets\">\n @for (p of term().pets; track p) {\n <mat-chip-row (removed)=\"removePet(p)\">\n {{ p }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + p\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n\n <input\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (focus)=\"petsInputFocused.set(true)\"\n (blur)=\"petsInputFocused.set(false)\"\n (matChipInputTokenEnd)=\"addPet($event)\"\n />\n </mat-chip-grid>\n\n @if (term().pets.length <= 0) {\n <mat-error>At least one pet or “None” is required</mat-error>\n }\n <mat-hint>Press Enter or comma to add multiple pets.</mat-hint>\n </mat-form-field>\n\n <!-- Smoker -->\n <div class=\"flex items-center justify-between rounded-xl border border-(--rt-border-color) bg-(--rt-base-background) p-3\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-sm text-(--rt-text-secondary)\">Smoker</span>\n @if (f.isEdited('smoker')) { <span class=\"text-xs text-orange-500\">Edited</span> }\n </div>\n\n <mat-slide-toggle labelPosition=\"before\" [ngModel]=\"term().smoker\" (ngModelChange)=\"setField('smoker', $event)\">\n <span class=\"font-medium\">{{ term().smoker ? 'Yes' : 'No' }}</span>\n </mat-slide-toggle>\n </div>\n\n <!-- Additional requests -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>\n Additional requests @if (f.isEdited('additionalRequests')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <textarea\n matInput\n rows=\"3\"\n [ngModel]=\"term().additionalRequests\"\n (ngModelChange)=\"setField('additionalRequests', $event)\"\n ></textarea>\n </mat-form-field>\n\n <!-- Actions -->\n <div class=\"flex justify-end gap-2 pt-2\">\n <button mat-stroked-button type=\"button\" (click)=\"f.cancelEdit()\" [disabled]=\"f.loading()\">Cancel</button>\n <button mat-flat-button type=\"button\" (click)=\"f.sendCounter()\" [disabled]=\"f.loading()\">Save & Send</button>\n </div>\n</div>\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { OfferCounterEdit } from '../offer-counter-edit/offer-counter-edit';\nimport { PropertyOfferNegotiationFacade } from '../../offer-data-access/property-offer-negotiation.facade';\nimport { CommonModule } from '@angular/common';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'rolatech-offer-counter-latest-card',\n imports: [CommonModule, PricePipe, OfferCounterEdit, MatButtonModule],\n templateUrl: './offer-counter-latest-card.html',\n styleUrl: './offer-counter-latest-card.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferCounterLatestCard {\n readonly f = inject(PropertyOfferNegotiationFacade);\n\n humanize(value: string | null | undefined) {\n if (!value) {\n return '—';\n }\n\n return value\n .trim()\n .replace(/[_-]+/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n\n boolLabel(value: boolean | null | undefined) {\n if (value === null || value === undefined) {\n return '—';\n }\n\n return value ? 'Yes' : 'No';\n }\n}\n","@if (f.latest(); as rt) {\n<section class=\"offer-counter-latest-card\">\n <div class=\"offer-counter-latest-card__head\">\n <div>\n <span class=\"offer-counter-latest-card__eyebrow\">Negotiated terms</span>\n <h3 class=\"offer-counter-latest-card__title\">Latest offer version</h3>\n <p class=\"offer-counter-latest-card__description\">This version reflects the newest negotiated rental terms.</p>\n </div>\n\n <div class=\"offer-counter-latest-card__badges\">\n @if (f.editedFields().size) {\n <span class=\"offer-counter-latest-card__badge\">{{ f.editedFields().size }} updated fields</span>\n } @if (f.editMode()) {\n <span class=\"offer-counter-latest-card__badge offer-counter-latest-card__badge--active\">Editing</span>\n }\n </div>\n </div>\n\n @if (f.editMode()) {\n <div class=\"offer-counter-latest-card__editor\">\n <rolatech-offer-counter-edit />\n </div>\n } @else {\n <div class=\"offer-counter-latest-card__grid\">\n <article class=\"offer-counter-latest-card__field\">\n <div class=\"offer-counter-latest-card__label-row\">\n <span class=\"offer-counter-latest-card__label\">Offer amount</span>\n @if (f.isEdited('amount')) {\n <span class=\"offer-counter-latest-card__edited\">Edited</span>\n }\n </div>\n <strong class=\"offer-counter-latest-card__value\">{{ rt.amount | price }}</strong>\n </article>\n <article class=\"offer-counter-latest-card__field\">\n <div class=\"offer-counter-latest-card__label-row\">\n <span class=\"offer-counter-latest-card__label\">Move-in date</span>\n @if (f.isEdited('moveInDate')) {\n <span class=\"offer-counter-latest-card__edited\">Edited</span>\n }\n </div>\n <strong class=\"offer-counter-latest-card__value\">{{ rt.moveInDate ? (rt.moveInDate | date: 'mediumDate') : '—' }}</strong>\n </article>\n <article class=\"offer-counter-latest-card__field\">\n <div class=\"offer-counter-latest-card__label-row\">\n <span class=\"offer-counter-latest-card__label\">Payment frequency</span>\n @if (f.isEdited('paymentFrequency')) {\n <span class=\"offer-counter-latest-card__edited\">Edited</span>\n }\n </div>\n <strong class=\"offer-counter-latest-card__value\">{{ humanize(rt.paymentFrequency) }}</strong>\n </article>\n <article class=\"offer-counter-latest-card__field\">\n <div class=\"offer-counter-latest-card__label-row\">\n <span class=\"offer-counter-latest-card__label\">Tenancy length</span>\n @if (f.isEdited('tenancyLengthMonths')) {\n <span class=\"offer-counter-latest-card__edited\">Edited</span>\n }\n </div>\n <strong class=\"offer-counter-latest-card__value\">{{ rt.tenancyLengthMonths ?? '—' }}</strong>\n </article>\n <article class=\"offer-counter-latest-card__field\">\n <div class=\"offer-counter-latest-card__label-row\">\n <span class=\"offer-counter-latest-card__label\">Break clause</span>\n @if (f.isEdited('breakClauseMonths')) {\n <span class=\"offer-counter-latest-card__edited\">Edited</span>\n }\n </div>\n <strong class=\"offer-counter-latest-card__value\">{{ rt.breakClauseMonths ?? '—' }}</strong>\n </article>\n <article class=\"offer-counter-latest-card__field\">\n <div class=\"offer-counter-latest-card__label-row\">\n <span class=\"offer-counter-latest-card__label\">Pets</span>\n @if (f.isEdited('pets')) {\n <span class=\"offer-counter-latest-card__edited\">Edited</span>\n }\n </div>\n <strong class=\"offer-counter-latest-card__value\">{{ rt.pets.length ? rt.pets.join(', ') : '—' }}</strong>\n </article>\n <article class=\"offer-counter-latest-card__field\">\n <div class=\"offer-counter-latest-card__label-row\">\n <span class=\"offer-counter-latest-card__label\">Smoker</span>\n @if (f.isEdited('smoker')) {\n <span class=\"offer-counter-latest-card__edited\">Edited</span>\n }\n </div>\n <strong class=\"offer-counter-latest-card__value\">{{ boolLabel(rt.smoker) }}</strong>\n </article>\n <article class=\"offer-counter-latest-card__field\">\n <div class=\"offer-counter-latest-card__label-row\">\n <span class=\"offer-counter-latest-card__label\">Furniture</span>\n @if (f.isEdited('furniture')) {\n <span class=\"offer-counter-latest-card__edited\">Edited</span>\n }\n </div>\n <strong class=\"offer-counter-latest-card__value\">{{ humanize(rt.furniture) }}</strong>\n </article>\n <article class=\"offer-counter-latest-card__field offer-counter-latest-card__field--wide\">\n <div class=\"offer-counter-latest-card__label-row\">\n <span class=\"offer-counter-latest-card__label\">Additional requests</span>\n @if (f.isEdited('additionalRequests')) {\n <span class=\"offer-counter-latest-card__edited\">Edited</span>\n }\n </div>\n <strong class=\"offer-counter-latest-card__value offer-counter-latest-card__value--multiline\"\n >{{ rt.additionalRequests ?? '—' }}</strong\n >\n </article>\n </div>\n }\n</section>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { PropertyOfferNegotiationFacade } from '../../offer-data-access/property-offer-negotiation.facade';\n\n@Component({\n selector: 'rolatech-offer-counter-previous-card',\n imports: [CommonModule, PricePipe],\n templateUrl: './offer-counter-previous-card.html',\n styleUrl: './offer-counter-previous-card.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferCounterPreviousCard {\n readonly f = inject(PropertyOfferNegotiationFacade);\n\n humanize(value: string | null | undefined) {\n if (!value) {\n return '—';\n }\n\n return value\n .trim()\n .replace(/[_-]+/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n\n boolLabel(value: boolean | null | undefined) {\n if (value === null || value === undefined) {\n return '—';\n }\n\n return value ? 'Yes' : 'No';\n }\n}\n","@if (f.previous(); as rt) {\n<section class=\"offer-counter-previous-card\">\n <div class=\"offer-counter-previous-card__head\">\n <span class=\"offer-counter-previous-card__eyebrow\">Previous version</span>\n <h3 class=\"offer-counter-previous-card__title\">Earlier rental terms</h3>\n <p class=\"offer-counter-previous-card__description\">\n Use this muted snapshot to compare the previous position against the latest counter.\n </p>\n </div>\n\n <div class=\"offer-counter-previous-card__grid\">\n <article class=\"offer-counter-previous-card__field\">\n <span class=\"offer-counter-previous-card__label\">Offer amount</span>\n <strong class=\"offer-counter-previous-card__value\">{{ rt.amount | price }}</strong>\n </article>\n <article class=\"offer-counter-previous-card__field\">\n <span class=\"offer-counter-previous-card__label\">Move-in date</span>\n <strong class=\"offer-counter-previous-card__value\"\n >{{ rt.moveInDate ? (rt.moveInDate | date: 'mediumDate') : '—' }}</strong\n >\n </article>\n <article class=\"offer-counter-previous-card__field\">\n <span class=\"offer-counter-previous-card__label\">Payment frequency</span>\n <strong class=\"offer-counter-previous-card__value\">{{ humanize(rt.paymentFrequency) }}</strong>\n </article>\n <article class=\"offer-counter-previous-card__field\">\n <span class=\"offer-counter-previous-card__label\">Tenancy length</span>\n <strong class=\"offer-counter-previous-card__value\">{{ rt.tenancyLengthMonths ?? '—' }}</strong>\n </article>\n <article class=\"offer-counter-previous-card__field\">\n <span class=\"offer-counter-previous-card__label\">Break clause</span>\n <strong class=\"offer-counter-previous-card__value\">{{ rt.breakClauseMonths ?? '—' }}</strong>\n </article>\n <article class=\"offer-counter-previous-card__field\">\n <span class=\"offer-counter-previous-card__label\">Pets</span>\n <strong class=\"offer-counter-previous-card__value\">{{ rt.pets.length ? rt.pets.join(', ') : '—' }}</strong>\n </article>\n <article class=\"offer-counter-previous-card__field\">\n <span class=\"offer-counter-previous-card__label\">Smoker</span>\n <strong class=\"offer-counter-previous-card__value\">{{ boolLabel(rt.smoker) }}</strong>\n </article>\n <article class=\"offer-counter-previous-card__field\">\n <span class=\"offer-counter-previous-card__label\">Furniture</span>\n <strong class=\"offer-counter-previous-card__value\">{{ humanize(rt.furniture) }}</strong>\n </article>\n <article class=\"offer-counter-previous-card__field offer-counter-previous-card__field--wide\">\n <span class=\"offer-counter-previous-card__label\">Additional requests</span>\n <strong class=\"offer-counter-previous-card__value offer-counter-previous-card__value--multiline\"\n >{{ rt.additionalRequests ?? '—' }}</strong\n >\n </article>\n </div>\n</section>\n}\n","import { Component, computed, inject, ViewEncapsulation } from '@angular/core';\nimport { PropertyOfferNegotiationFacade } from '../../offer-data-access/property-offer-negotiation.facade';\nimport { offerStatusLabel } from '@rolatech/angular-services';\nimport { RejectDialogComponent } from '@rolatech/angular-components';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'rolatech-offer-negotiation-section',\n imports: [MatButtonModule],\n templateUrl: './offer-negotiation-section.html',\n styleUrl: './offer-negotiation-section.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class OfferNegotiationSection {\n readonly f = inject(PropertyOfferNegotiationFacade);\n dialog = inject(MatDialog);\n readonly statusLabel = computed(() => offerStatusLabel(this.f.offer()?.status));\n readonly isTerminal = computed(() => {\n const s = this.f.offer()?.status;\n return (\n s === 'ACCEPTED' || s === 'REJECTED' || s === 'WITHDRAWN_BY_AGENT' || s === 'WITHDRAWN_BY_TENANT' || s === 'CANCELLED'\n );\n });\n // readonly terminalNote = computed(() => this.f.offer()?.terminalReason ?? null);\n reject() {\n const ref = this.dialog.open(RejectDialogComponent, {\n width: '420px',\n });\n\n ref.afterClosed().subscribe((notes: string | null) => {\n if (notes) {\n this.f.reject(notes);\n }\n });\n }\n cancelOffer() {\n this.f.cancelOffer();\n }\n openReferenceFailedDialog() {\n const ref = this.dialog.open(RejectDialogComponent, {\n width: '420px',\n });\n\n ref.afterClosed().subscribe((notes: string | null) => {\n if (notes) {\n this.f.markReferencesFailed(notes);\n }\n });\n }\n}\n","@if (!isTerminal()) {\n<section class=\"offer-negotiation-section\">\n <header class=\"offer-negotiation-section__header\">\n <div class=\"offer-negotiation-section__copy\">\n <span class=\"offer-negotiation-section__eyebrow\">Negotiation controls</span>\n <div class=\"offer-negotiation-section__heading\">\n <h3 class=\"offer-negotiation-section__title\">Respond to the latest offer</h3>\n <span class=\"offer-negotiation-section__status\">{{ statusLabel() }}</span>\n </div>\n <p class=\"offer-negotiation-section__description\">\n Keep the negotiation moving with one clear next action. Every response stays recorded in the offer history below.\n </p>\n </div>\n\n @if (f.lock(); as lk) {\n @if (lk.locked) {\n <div class=\"offer-negotiation-section__lock\">Locked by {{ lk.lockedByName ?? lk.lockedById }}</div>\n }\n }\n </header>\n\n @if (f.error(); as err) {\n <div class=\"offer-negotiation-section__alert\">{{ err }}</div>\n }\n\n @if (f.editMode()) {\n <div class=\"offer-negotiation-section__edit-note\">\n Counter editing is active below. Review the updated terms, then send the counter-offer when ready.\n </div>\n }\n\n <div class=\"offer-negotiation-section__actions\">\n <button mat-stroked-button [disabled]=\"!f.canCounter() || f.editMode()\" (click)=\"f.enterEdit()\">Counter</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()) {\n Working...\n } @else {\n {{ f.withdrawLabel() }}\n }\n </button>\n }\n\n <span class=\"offer-negotiation-section__spacer\"></span>\n\n <button mat-flat-button color=\"primary\" [disabled]=\"!f.canAccept() || f.loading()\" (click)=\"f.accept()\">Accept</button>\n <button mat-stroked-button color=\"warn\" [disabled]=\"!f.canReject() || f.loading()\" (click)=\"reject()\">Reject</button>\n <button mat-stroked-button color=\"warn\" [disabled]=\"!f.canCancel() || f.cancelling()\" (click)=\"cancelOffer()\">\n @if (f.cancelling()) {\n Working...\n } @else {\n Cancel\n }\n </button>\n </div>\n\n @if (f.showLifecycleActions()) {\n <div class=\"offer-negotiation-section__secondary\">\n <div class=\"offer-negotiation-section__secondary-copy\">\n <span class=\"offer-negotiation-section__secondary-eyebrow\">Workflow steps</span>\n <h4 class=\"offer-negotiation-section__secondary-title\">Progress the deal after negotiation</h4>\n </div>\n\n <div class=\"offer-negotiation-section__secondary-actions\">\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 <button\n mat-stroked-button\n [disabled]=\"!(f.permissions()?.canStartReferencing ?? false) || f.loading()\"\n (click)=\"f.startReferencing()\"\n >\n Start referencing\n </button>\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 <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 <button\n mat-flat-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} @else {\n <section class=\"offer-negotiation-section offer-negotiation-section--terminal\">\n <span class=\"offer-negotiation-section__eyebrow\">Negotiation closed</span>\n <div class=\"offer-negotiation-section__heading\">\n <h3 class=\"offer-negotiation-section__title\">This offer is no longer awaiting action</h3>\n <span class=\"offer-negotiation-section__status\">{{ statusLabel() }}</span>\n </div>\n <p class=\"offer-negotiation-section__description\">\n The final state has been recorded. Use the history section below to review how the negotiation reached this outcome.\n </p>\n </section>\n}\n","import { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AcceptDialogComponent, BaseComponent, RejectDialogComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { EmploymentStatus, OfferInvoiceOption, Property, PropertyOffer, PropertyOfferStatus } from '../../../interfaces';\nimport {\n InvoiceService,\n offerStatusLabel,\n PropertyOfferCounterService,\n PropertyOfferResponse,\n PropertyOfferService,\n PropertyService,\n} from '@rolatech/angular-services';\nimport { AuthUserService } from '@rolatech/angular-auth';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { OfferEdit } from '../../../components/offer-edit/offer-edit';\nimport { MatRadioButton, MatRadioGroup, MatRadioModule } from '@angular/material/radio';\nimport { FormsModule } from '@angular/forms';\nimport { OfferRentalTermsCard } from '../../../components/offer-rental-terms-card/offer-rental-terms-card';\nimport { OfferTenantsAccordion } from '../../../components/offer-tenants-accordion/offer-tenants-accordion';\nimport { OfferDetailContext } from '../../../offer-data-access/offer-detail.context';\nimport { OfferItemCard } from '../../../components/offer-item-card/offer-item-card';\nimport { OfferSaleDetailsCard } from '../../../components/offer-sale-details-card/offer-sale-details-card';\nimport { OfferManageSummary } from '../../../components/offer-manage-summary/offer-manage-summary';\nimport { OfferReferenceProvider } from '../../../components/offer-reference-provider/offer-reference-provider';\nimport { OfferManageFacade } from '../../../offer-data-access/offer-manage.facade';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { OfferHistoryAccordion } from '../../../components/offer-history-accordion/offer-history-accordion';\nimport { OfferCounterDialog } from '../../../components/offer-counter-dialog/offer-counter-dialog';\nimport { OfferInternalNoteCard } from '../../../components/offer-internal-note-card/offer-internal-note-card';\nimport { PropertyOfferNegotiationFacade } from '../../../offer-data-access/property-offer-negotiation.facade';\nimport { OfferCounterLatestCard } from '../../../components/offer-counter-latest-card/offer-counter-latest-card';\nimport { OfferCounterPreviousCard } from '../../../components/offer-counter-previous-card/offer-counter-previous-card';\nimport { OfferInternalNoteFacade } from '../../../offer-data-access/offer-internal-note.facade';\nimport { OfferNegotiationSection } from '../../../components/offer-negotiation-section/offer-negotiation-section';\n\n@Component({\n selector: 'rolatech-property-manage-offer-detail',\n imports: [\n CommonModule,\n ToolbarComponent,\n MatButtonModule,\n MatIcon,\n MatMenuModule,\n MatRadioModule,\n FormsModule,\n OfferRentalTermsCard,\n OfferTenantsAccordion,\n OfferItemCard,\n OfferSaleDetailsCard,\n OfferReferenceProvider,\n OfferHistoryAccordion,\n OfferInternalNoteCard,\n OfferCounterLatestCard,\n OfferCounterPreviousCard,\n OfferNegotiationSection,\n ],\n templateUrl: './property-manage-offer-detail.component.html',\n styleUrl: './property-manage-offer-detail.component.scss',\n providers: [OfferDetailContext, PropertyOfferNegotiationFacade, OfferInternalNoteFacade],\n})\nexport class PropertyManageOfferDetailComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n propertyOfferService = inject(PropertyOfferService);\n propertyOfferCounterService = inject(PropertyOfferCounterService);\n readonly f = inject(PropertyOfferNegotiationFacade);\n\n authUserService = inject(AuthUserService);\n invoiceService = inject(InvoiceService);\n readonly ctx = inject(OfferDetailContext);\n private readonly facade = inject(OfferManageFacade);\n clipboard = inject(Clipboard);\n\n readonly invoiceOptionDraft = signal<OfferInvoiceOption | null>(null);\n readonly invoiceOptionLabel: Record<OfferInvoiceOption, string> = {\n COMBINED: 'Combined',\n SEPARATE: 'Separate',\n };\n\n offer!: PropertyOfferResponse;\n name = '';\n property!: Property;\n status = PropertyOfferStatus;\n readonly statusLabel = computed(() => offerStatusLabel(this.offer.status));\n\n employmentStatus = EmploymentStatus;\n agent: any;\n readonly isRental = computed(() => this.offer.type.toString() === 'RENTAL');\n readonly isSale = computed(() => this.offer.type.toString() === 'SALE');\n ngOnInit(): void {\n this.getOffer();\n this.ctx.init(this.id);\n this.facade.offerId.set(this.id);\n this.facade.loadReferencing();\n if (this.id) this.f.load(this.id, 'agent');\n }\n getOffer() {\n this.propertyOfferService.getOffer(this.id).subscribe({\n next: (res) => {\n this.offer = res.data;\n this.invoiceOptionDraft.set(res.data.invoiceOption);\n // this.name = this.offer.firstName + ', ' + this.offer.lastName;\n this.getProperty(this.offer.propertyId);\n },\n });\n }\n getProperty(propertyId: string) {\n this.propertyService.get(propertyId).subscribe({\n next: (res: any) => {\n this.property = res.data;\n this.getAgentPublicInfo(this.property.agentId);\n },\n });\n }\n getAgentPublicInfo(agentId: string) {\n this.authUserService.getPublicUserInfo(agentId).subscribe({\n next: (res) => {\n this.agent = res;\n },\n });\n }\n underOffer() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'Confirm under offer',\n message: 'Set status to Under offer. Continue?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.underOffer(this.id).subscribe({\n next: (res) => {\n // this.offer.status = 'UNDER_OFFER' as PropertyOfferStatus;\n this.snackBarService.open('Status changed to Under Offer');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n accept() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'Accept offer',\n message: 'Accept this offer?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.acceptOffer(this.id).subscribe({\n next: (res) => {\n // this.offer.status = 'ACCEPTED' as PropertyOfferStatus;\n this.snackBarService.open('Accepted');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n reject() {\n const dialogRef = this.dialog.open(RejectDialogComponent, {\n width: '400px',\n data: {\n content: '',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.rejectOffer(this.id, { reason: result.content }).subscribe({\n next: (res) => {\n // this.offer.status = 'REJECTED' as PropertyOfferStatus;\n this.snackBarService.open('Rejected');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n counter() {\n const options = {\n width: '500px',\n title: 'Counter offer',\n height: '90%',\n cancelText: 'Cancel',\n confirmText: 'Confirm',\n component: OfferCounterDialog,\n data: {\n term: this.f.draft(),\n },\n };\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe((res) => {\n if (res) {\n console.log(res);\n this.propertyOfferCounterService.counterByAgent(this.id, res).subscribe({\n next: (res) => {\n this.snackBarService.open('Counter sent');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n });\n }\n withdraw() {}\n rfPassed() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'References passed',\n message: 'References passed for this offer?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.referencesPassed(this.id).subscribe({\n next: (res) => {\n // this.offer.status = 'REFERENCES_PASSED' as PropertyOfferStatus;\n this.snackBarService.open('Passed');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n rfFailed() {\n const dialogRef = this.dialog.open(RejectDialogComponent, {\n width: '400px',\n data: {\n content: '',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.referencesFailed(this.id, { notes: result.content }).subscribe({\n next: (res) => {\n // this.offer.status = 'REFERENCES_FAILED' as PropertyOfferStatus;\n this.snackBarService.open('Failed');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n openReferenceFailedDialog() {\n const ref = this.dialog.open(RejectDialogComponent, {\n width: '420px',\n });\n\n ref.afterClosed().subscribe((notes: string | null) => {\n if (notes) {\n this.f.markReferencesFailed(notes);\n }\n });\n }\n completed() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'Complete offer',\n message: 'Are you sure you want to complete this offer and finalise the tenancy?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.complete(this.id).subscribe({\n next: (res) => {\n // this.offer.status = 'COMPLETED' as PropertyOfferStatus;\n this.snackBarService.open('Offer completed successfully.');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n fail() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'Mark offer as unsuccessful',\n message: 're you sure you want to mark this offer as unsuccessful?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.fail(this.id).subscribe({\n next: (res) => {\n // this.offer.status = 'FAILED' as PropertyOfferStatus;\n this.snackBarService.open('Offer marked as unsuccessful');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n edit() {\n const options = {\n title: 'Update offer',\n cancelText: 'Cancel',\n confirmText: 'Confirm',\n data: {\n offer: this.offer,\n },\n component: OfferEdit,\n };\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe({\n next: (res) => {\n if (res) {\n const data = {\n firstName: res.firstName,\n lastName: res.lastName,\n email: res.email,\n phone: res.phone,\n amount: res.amount,\n moveInDate: res.startDate,\n };\n this.propertyOfferService.updateOffer(this.id, data).subscribe({\n next: (res: any) => {\n this.snackBarService.open('Offer updated');\n },\n });\n }\n },\n });\n }\n setInvoiceOption(v: OfferInvoiceOption) {\n this.invoiceOptionDraft.set(v);\n }\n saveInvoiceOption(id: any) {\n const draft = this.invoiceOptionDraft();\n\n this.propertyOfferService.updateInvoiceOption(this.id, { invoiceOption: draft }).subscribe({\n next: (res: any) => {\n this.snackBarService.open('Offer invoice option updated');\n },\n error: (error) => this.snackBarService.open(error.message),\n });\n }\n emailApplicant(email: string) {}\n callApplicant(phone: string) {}\n copyText(redactContact: boolean) {\n this.propertyOfferService.getCopyText(this.id).subscribe({\n next: (res) => {\n this.clipboard.copy(res.data.text);\n this.snackBarService.open('Copied');\n },\n });\n }\n}\n","@if (offer) {\n <rolatech-toolbar [title]=\"statusLabel()\" large link=\"../\">\n <div class=\"hidden md:flex gap-2\">\n <button mat-flat-button (click)=\"copyText(true)\">\n <mat-icon>content_copy</mat-icon>\n <span i18n>Copy</span>\n </button>\n </div>\n <div class=\"block md:hidden\">\n <button mat-icon-button [matMenuTriggerFor]=\"moreMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </rolatech-toolbar>\n <div class=\"grid grid-cols-1 lg:grid-cols-12 gap-4 p-4\">\n <!-- Main column -->\n <div class=\"grid grid-cols-1 lg:col-span-8 space-y-4 h-fit\">\n <!-- Primary negotiation actions -->\n <rolatech-offer-negotiation-section />\n\n <rolatech-offer-item-card />\n\n <!-- Tenants card -->\n @if (ctx.isRental()) {\n @if (!f.latest()) {\n <rolatech-offer-rental-terms-card />\n } @else {\n <!-- Updated offer -->\n <rolatech-offer-counter-latest-card />\n <!-- Previous Offer (Grey) -->\n <rolatech-offer-counter-previous-card />\n }\n <rolatech-offer-tenants-accordion />\n }\n @if (ctx.isSale()) {\n <rolatech-offer-sale-details-card />\n }\n <rolatech-offer-history-accordion />\n <rolatech-offer-internal-note-card />\n </div>\n\n <!-- Right rail -->\n <div class=\"lg:col-span-4 space-y-4\">\n <!-- Move-in billing -->\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-4\">\n <div class=\"flex items-start justify-between gap-3\">\n <div>\n <div class=\"text-sm font-semibold\">Move-in billing</div>\n <div class=\"mt-1 text-xs text-(--rt-text-secondary)\">\n Choose whether Security Deposit and First Rent are combined or separate invoices.\n </div>\n </div>\n\n <button mat-flat-button type=\"button\" (click)=\"saveInvoiceOption(offer.id)\">Save</button>\n </div>\n\n <div class=\"mt-4 rounded-xl border border-(--rt-border-color) bg-(--rt-surface-2) p-3\">\n <mat-radio-group class=\"block\" [value]=\"offer.invoiceOption\" (change)=\"setInvoiceOption($event.value)\">\n <div class=\"grid grid-cols-1 gap-2\">\n <!-- Combined -->\n <div\n class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-base-background) p-3 hover:border-(--rt-border-color) transition\"\n >\n <div class=\"flex items-start gap-3\">\n <mat-radio-button value=\"COMBINED\"></mat-radio-button>\n <div class=\"min-w-0\">\n <div class=\"text-sm font-semibold\">Combined</div>\n <div class=\"mt-1 text-xs text-(--rt-text-secondary)\">\n One invoice with 2 lines: Security deposit + First rent.\n </div>\n </div>\n </div>\n </div>\n\n <!-- Separate -->\n <div\n class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-base-background) p-3 hover:border-(--rt-border-color) transition\"\n >\n <div class=\"flex items-start gap-3\">\n <mat-radio-button value=\"SEPARATE\"></mat-radio-button>\n <div class=\"min-w-0\">\n <div class=\"text-sm font-semibold\">Separate</div>\n <div class=\"mt-1 text-xs text-(--rt-text-secondary)\">\n Two invoices: Security deposit invoice, then First rent invoice.\n </div>\n </div>\n </div>\n </div>\n </div>\n </mat-radio-group>\n </div>\n </section>\n\n <!-- Offer references -->\n <rolatech-offer-reference-provider />\n\n <!-- Offer user card -->\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-4\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-semibold\">Applicant</div>\n <div class=\"mt-1 text-xs text-(--rt-text-secondary)\">Contact and identity details.</div>\n </div>\n </div>\n\n <div class=\"mt-4 flex items-center gap-3\">\n <div class=\"h-10 w-10 overflow-hidden rounded-full border border-(--rt-border-color) bg-(--rt-surface-2)\"></div>\n\n <div class=\"min-w-0 flex-1\">\n <div class=\"truncate text-sm font-semibold\">{{ name }}</div>\n <div class=\"truncate text-xs text-(--rt-text-secondary)\">User ID: {{ offer.id }}</div>\n </div>\n </div>\n\n <div class=\"mt-4 space-y-2\">\n @if (offer.id) {\n <div class=\"flex items-center gap-2 text-sm\">\n <mat-icon class=\"!text-base text-(--rt-text-secondary)\">mail</mat-icon>\n <span class=\"truncate\">{{ offer.id }}</span>\n </div>\n }\n @if (offer.id) {\n <div class=\"flex items-center gap-2 text-sm\">\n <mat-icon class=\"!text-base text-(--rt-text-secondary)\">call</mat-icon>\n <span class=\"truncate\">{{ offer.id }}</span>\n </div>\n }\n </div>\n\n <div class=\"mt-4 grid grid-cols-2 gap-2\">\n <button mat-stroked-button type=\"button\" [disabled]=\"!offer.id\" (click)=\"emailApplicant(offer.id!)\">Email</button>\n <button mat-stroked-button type=\"button\" [disabled]=\"!offer.id\" (click)=\"callApplicant(offer.id!)\">Call</button>\n </div>\n </section>\n <!-- Offer viewing agent -->\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-4\">\n <div class=\"flex items-start justify-between\">\n <div>\n <div class=\"text-sm font-semibold\">Agent</div>\n <div class=\"mt-1 text-xs text-(--rt-text-secondary)\">Contact and identity details.</div>\n </div>\n </div>\n\n <div class=\"mt-4 flex items-center gap-3\">\n <div class=\"h-10 w-10 overflow-hidden rounded-full border border-(--rt-border-color) bg-(--rt-surface-2)\"></div>\n\n <div class=\"min-w-0 flex-1\">\n <div class=\"truncate text-sm font-semibold\">{{ name }}</div>\n <div class=\"truncate text-xs text-(--rt-text-secondary)\">Agent ID: {{ offer.agentId }}</div>\n </div>\n </div>\n\n <div class=\"mt-4 space-y-2\">\n @if (offer.id) {\n <div class=\"flex items-center gap-2 text-sm\">\n <mat-icon class=\"!text-base text-(--rt-text-secondary)\">mail</mat-icon>\n <span class=\"truncate\">{{ offer.id }}</span>\n </div>\n }\n @if (agent) {\n <div class=\"flex items-center gap-2 text-sm\">\n <mat-icon class=\"!text-base text-(--rt-text-secondary)\">call</mat-icon>\n <span class=\"truncate\">{{ agent.phone }}</span>\n </div>\n }\n </div>\n\n <div class=\"mt-4 grid grid-cols-2 gap-2\">\n <button mat-stroked-button type=\"button\" [disabled]=\"!offer.id\" (click)=\"emailApplicant(offer.id!)\">Email</button>\n <button mat-stroked-button type=\"button\" [disabled]=\"!offer.id\" (click)=\"callApplicant(offer.id!)\">Call</button>\n </div>\n </section>\n\n <!-- Quick actions card (optional) -->\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-4\">\n <div class=\"text-sm font-semibold\">Quick actions</div>\n <div class=\"mt-1 text-xs text-(--rt-text-secondary)\">Common operations for this offer.</div>\n <div class=\"mt-4 space-y-2\">\n @if (offer.status.toString() === 'SUBMITTED') {\n <button mat-flat-button type=\"button\" class=\"w-full\" (click)=\"accept()\">Accept</button>\n <button mat-stroked-button type=\"button\" class=\"w-full\" (click)=\"counter()\">Counter</button>\n <button mat-stroked-button type=\"button\" class=\"w-full\" (click)=\"reject()\">Reject</button>\n }\n @if (offer.status.toString() === 'UNDER_OFFER') {\n <button mat-flat-button (click)=\"rfPassed()\" class=\"w-full\">References passed</button>\n <button mat-stroked-button (click)=\"rfFailed()\" class=\"w-full\">References failed</button>\n }\n </div>\n </section>\n </div>\n </div>\n\n <mat-menu #moreMenu=\"matMenu\" xPosition=\"after\" class=\"divide-y divide-light-900\">\n <button mat-menu-item (click)=\"copyText(true)\">\n <span i18n>Copy</span>\n </button>\n @if (f.permissions()?.canCounter) {\n <button mat-menu-item class=\"rounded-full border border-(--rt-border-color) px-4 py-2\" (click)=\"f.enterEdit()\">Counter Offer</button>\n }\n @if (offer.status.toString() === 'SUBMITTED') {\n <button mat-menu-item (click)=\"accept()\" i18n>Accept</button>\n <button mat-menu-item (click)=\"reject()\" i18n>Reject</button>\n }\n <!-- References -->\n @if (offer.status.toString() === 'UNDER_OFFER') {\n <button mat-menu-item (click)=\"rfPassed()\" i18n>References passed</button>\n <button mat-menu-item (click)=\"rfFailed()\" i18n>References failed</button>\n }\n <button mat-menu-item (click)=\"edit()\">Edit</button>\n </mat-menu>\n}\n","import { Routes } from '@angular/router';\nimport { PropertyManageOfferIndexComponent } from './property-manage-offer-index/property-manage-offer-index.component';\nimport { PropertyManageOfferDetailComponent } from './property-manage-offer-detail/property-manage-offer-detail.component';\n\nexport const propertyManageOffersRoutes: Routes = [\n {\n path: '',\n component: PropertyManageOfferIndexComponent,\n },\n {\n path: ':id',\n component: PropertyManageOfferDetailComponent,\n },\n];\n","import { EventEmitter, Injectable } from \"@angular/core\";\n\nexport enum PropertyViewType {\n GRID = 0,\n LIST = 1,\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PropertyUtil {\n viewEvent = new EventEmitter<PropertyViewType>();\n\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, model, OnInit, output, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { PriceRange, PropertySearchOptions, PropertyType } from '../../interfaces';\nimport { BedroomRange } from '../../interfaces';\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n@Component({\n selector: 'rolatech-property-filter-bar',\n imports: [\n CommonModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatOptionModule,\n FormsModule,\n MatDatepickerModule,\n ],\n templateUrl: './property-filter-bar.html',\n styleUrl: './property-filter-bar.scss',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyFilterBar implements OnInit {\n route = inject(ActivatedRoute);\n router = inject(Router);\n search = output<any>();\n reset = output<any>();\n show = model<boolean>(true);\n\n priceOptions = PriceRange;\n bedroomOptions = BedroomRange;\n\n minOptions = computed(() => {\n return this.priceOptions.filter((o) => o.value !== null);\n });\n maxOptions = computed(() => {\n return this.priceOptions.filter((o) => o.value !== 0);\n });\n minBedroom = computed(() => {\n return this.bedroomOptions.filter((o) => o.value !== null);\n });\n maxBedRoom = computed(() => {\n return this.bedroomOptions.filter((o) => o.value !== '0');\n });\n towns: string[] = ['London', 'Manchester'];\n market: string[] = ['Sale', 'Rental'];\n types = PropertyType;\n\n options = model<PropertySearchOptions>({\n market: '',\n town: '',\n type: '',\n availableFrom: '',\n minBedrooms: '',\n maxBedrooms: '',\n minPrice: 0,\n maxPrice: null,\n location: '',\n radius: '',\n });\n minDate = new Date();\n constructor() {\n // Reflect model changes back to URL\n effect(() => {\n const opts = this.options();\n this.router.navigate([], {\n queryParams: {\n market: opts.market || null,\n town: opts.town || null,\n type: opts.type || null,\n minBedrooms: opts.minBedrooms || null,\n maxBedrooms: opts.maxBedrooms || null,\n minPrice: opts.minPrice || null,\n maxPrice: opts.maxPrice || null,\n },\n queryParamsHandling: 'merge',\n });\n });\n }\n ngOnInit(): void {\n this.route.queryParams.subscribe((params) => {\n this.options.set({\n market: params['market'] || '',\n town: params['town'] || '',\n type: params['type'] || '',\n availableFrom: params['availableFrom'] || '',\n minBedrooms: params['minBedrooms'] || '',\n maxBedrooms: params['maxBedrooms'] || '',\n minPrice: params['minPrice'] ? +params['minPrice'] : 0,\n maxPrice: params['maxPrice'] ? +params['maxPrice'] : null,\n location: params['location'] || '',\n page: params['page'] ? +params['page'] : 1,\n limit: params['limit'] ? +params['limit'] : 15,\n });\n });\n }\n onReset() {\n this.reset.emit({});\n this.options.update(() => {\n return {\n market: '',\n town: '',\n type: '',\n availableFrom: '',\n minBedrooms: '',\n maxBedrooms: '',\n minPrice: 0,\n maxPrice: null,\n location: '',\n radius: '',\n page: 1,\n limit: 15,\n };\n });\n }\n onSearch() {\n const filteredOptions = Object.fromEntries(Object.entries(this.options()).filter(([_, v]) => v != null && v !== ''));\n this.search.emit(filteredOptions);\n this.router.navigate([], {\n queryParams: filteredOptions,\n queryParamsHandling: 'merge', // keep other params like sort, etc.\n });\n }\n}\n","<div class=\"px-2 mb-3 close\" [class.open]=\"show()\">\n <div class=\"flex flex-col h-min justify-center items-center gap-3\">\n <div class=\"flex flex-col md:flex-row gap-3 w-full items-center\">\n <div class=\"flex flex-col w-full md:w-1/4\">\n <div class=\"py-1\">Market</div>\n <div>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-select #select=\"matSelect\" placeholder=\"Market\" [(ngModel)]=\"options().market\">\n @for (m of market; track m) {\n <mat-option [value]=\"m\"> {{ m }} </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"flex flex-col w-full md:w-1/4\">\n <div class=\"py-1\">Type</div>\n <div>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-select #select=\"matSelect\" placeholder=\"Type\" [(ngModel)]=\"options().type\">\n @for (type of types | keyvalue; track type) {\n <mat-option [value]=\"type.key\"> {{ type.value }} </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"flex flex-col w-full md:w-1/4\">\n <div class=\"py-1\">Town</div>\n <div>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-select #select=\"matSelect\" placeholder=\"Town\" [(ngModel)]=\"options().town\">\n @for (town of towns; track town) {\n <mat-option [value]=\"town\"> {{ town }} </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"flex flex-col w-full md:w-1/4\">\n <div class=\"py-1\">Available date</div>\n <div>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\" class=\"z-[1000]\">\n <input\n matInput\n placeholder=\"Available\"\n [matDatepicker]=\"startDatePicker\"\n [min]=\"minDate\"\n (focus)=\"startDatePicker.open()\"\n name=\"available\"\n [(ngModel)]=\"options().availableFrom\"\n (dateInput)=\"options().availableFrom = $event.value.format('YYYY-MM-DD')\"\n readonly\n />\n <mat-datepicker-toggle matIconPrefix [for]=\"startDatePicker\"></mat-datepicker-toggle>\n <mat-datepicker panelClass=\"datepicker-on-top\" #startDatePicker></mat-datepicker>\n </mat-form-field>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col md:flex-row gap-3 w-full items-center\">\n <div class=\"flex flex-col w-full md:w-1/3 overflow-hidden\">\n <div class=\"py-1\">Price range (£)</div>\n <div class=\"flex flex-row items-center\">\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Min (PCM)</mat-label>\n <mat-select [(ngModel)]=\"options().minPrice\">\n @for (opt of minOptions(); track opt.value) {\n <mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n <div class=\"px-2\">-</div>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Max (PCM)</mat-label>\n <mat-select [(ngModel)]=\"options().maxPrice\">\n @for (opt of maxOptions(); track opt.value) {\n <mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"flex flex-col w-full md:w-1/3\">\n <div class=\"py-1\">No. of bedrooms</div>\n <div class=\"flex flex-row items-center\">\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Min</mat-label>\n <mat-select [(ngModel)]=\"options().minBedrooms\">\n @for (opt of minBedroom(); track opt.value) {\n <mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n <div class=\"px-2\">-</div>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Max</mat-label>\n <mat-select [(ngModel)]=\"options().maxBedrooms\">\n @for (opt of maxBedRoom(); track opt.value) {\n <mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"h-14 md:w-1/3 self-end w-full\">\n <button mat-flat-button (click)=\"onSearch()\" class=\"w-full min-h-14\">\n <a i18n>Search</a>\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Component, effect, ElementRef, inject, OnInit, signal, viewChild } from '@angular/core';\nimport { AngularComponentsModule, BaseComponent, ContainerComponent, SearchBar } from '@rolatech/angular-components';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyUtil, PropertyViewType } from '../../../property-util';\nimport { PropertyFilterBar } from '../../../components/property-filter-bar/property-filter-bar';\nimport { PropertySearchOptions } from '../../../interfaces';\n\n@Component({\n selector: 'rolatech-property-layout',\n imports: [AngularCommonModule, AngularComponentsModule, ContainerComponent, SearchBar, PropertyFilterBar],\n templateUrl: './property-layout.component.html',\n styleUrl: './property-layout.component.scss',\n})\nexport class PropertyLayoutComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n util = inject(PropertyUtil);\n open = signal(false);\n showFilter = signal(true);\n model: { q?: string } = {};\n gridView = true;\n searchBar = viewChild<ElementRef<HTMLInputElement>>('searchBar');\n selectIndex = 0;\n filter = false;\n options = signal<PropertySearchOptions>({\n market: '',\n town: '',\n type: '',\n availableFrom: '',\n minBedrooms: '',\n maxBedrooms: '',\n minPrice: 0,\n maxPrice: null,\n location: '',\n });\n ngOnInit(): void {}\n toggleSearch() {\n this.open.update((v) => !v);\n }\n onCloseSearch() {\n // this.open.set(false);\n // this.router.navigate([], { queryParams: {}, queryParamsHandling: 'merge' });\n this.router.navigate(['/properties']);\n }\n toggleView() {\n if (this.gridView) {\n this.gridView = false;\n this.util.viewEvent.emit(PropertyViewType.LIST);\n } else {\n this.gridView = true;\n this.util.viewEvent.emit(PropertyViewType.GRID);\n }\n }\n toggleFilter() {\n this.showFilter.update((v) => !v);\n }\n onSearch(event: any) {\n const qp = Object.fromEntries(\n Object.entries(event).filter(\n ([_, v]) => v !== undefined && v !== null && !(Array.isArray(v) && v.length === 0) && v !== '',\n ),\n );\n\n this.router.navigate([], {\n queryParams: qp,\n queryParamsHandling: 'merge', // keep other params like sort, etc.\n });\n }\n searchByText(event: any) {\n this.router.navigate([], {\n queryParams: { q: event, page: 1, limit: 15 },\n queryParamsHandling: 'merge', // keep other params like sort, etc.\n });\n }\n onReset(event: any) {\n this.router.navigate([], {\n queryParams: {}, // empty\n // omit queryParamsHandling so it REPLACES (not merges) → clears everything\n });\n }\n}\n","<rolatech-container>\n <div class=\"flex flex-col min-w-[320px] max-w-[1280px] m-auto\">\n <div class=\"flex justify-between items-center h-16\">\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"p-3 text-2xl font-medium cursor-pointer\" routerLink=\"/properties\" i18n>Properties</div>\n <div class=\"flex flex-row\">\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-icon-button (click)=\"toggleFilter()\">\n <mat-icon>tune</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <rolatech-property-filter-bar\n [(show)]=\"showFilter\"\n (search)=\"onSearch($event)\"\n [(options)]=\"options\"\n ></rolatech-property-filter-bar>\n <rolatech-search-bar\n [(show)]=\"open\"\n #searchBar\n (search)=\"searchByText($event)\"\n (close)=\"onCloseSearch()\"\n ></rolatech-search-bar>\n <div class=\"w-full\">\n <router-outlet></router-outlet>\n </div>\n </div>\n</rolatech-container>\n","import { Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Property } from '../../interfaces';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-actions',\n imports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule, PricePipe],\n templateUrl: './property-actions.component.html',\n styleUrl: './property-actions.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyActionsComponent {\n property = input.required<Property>();\n requestViewing = output<Property>();\n offer = output<Property>();\n deposit = output<Property>();\n\n displayDeposit = computed(() => {\n return this.property().deposit.toFixed(2);\n });\n\n onRequestViewing(property: Property) {\n this.requestViewing.emit(property);\n }\n onOffer(property: Property) {\n this.offer.emit(property);\n }\n onDeposit(property: Property) {\n this.deposit.emit(property);\n }\n}\n","<div class=\"flex flex-col gap-3\">\n <a mat-stroked-button class=\"\" (click)=\"onRequestViewing(property())\" i18n>Request viewing</a>\n @if (property().priceType && property().priceType.toString() === 'PARTIAL') {\n <a mat-flat-button class=\"\" (click)=\"onDeposit(property())\" i18n>Pay deposit {{ displayDeposit() | price }}</a>\n } @else {\n <a mat-flat-button class=\"\" (click)=\"onOffer(property())\" i18n>Make an offer</a>\n }\n <ng-content select=\"rolatech-property-action-contact\"></ng-content>\n</div>\n","import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Property } from '../../interfaces';\nimport { ImagePlaceholderComponent, ThumbnailComponent } from '@rolatech/angular-components';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-item',\n imports: [CommonModule, ThumbnailComponent, ImagePlaceholderComponent, PricePipe],\n templateUrl: './property-item.component.html',\n styleUrl: './property-item.component.scss',\n})\nexport class PropertyItemComponent {\n property = input.required<Property>();\n}\n","<div class=\"flex flex-col hover:bg-(--rt-raised-background) cursor-pointer p-3\">\n <div>\n <div class=\"flex justify-between w-full mb-2\">\n <a class=\"flex items-center gap-3\">\n <span>ID: {{ property().id }}</span>\n </a>\n </div>\n <div class=\"flex flex-col overflow-x-scroll scrollbar-hide\">\n <div class=\"flex flex-row py-2\">\n @if (property().media) {\n <div class=\"min-w-24 w-36 object-cover aspect-video rounded-lg mr-3\">\n @defer {\n <rolatech-thumbnail [src]=\"property().media[0].url\" size=\"medium\" mode=\"clip\"> </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=\"min-w-24 w-36 object-cover aspect-video rounded-lg mr-3\">\n <rolatech-image-placeholder></rolatech-image-placeholder>\n </div>\n }\n <div class=\"flex w-full justify-between\">\n <div class=\"flex justify-between w-full\">\n <div class=\"flex flex-col\">\n <div>{{ property().title }}</div>\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span class=\"mr-1\">{{ property().bedrooms }}</span>\n <span i18n>Bedrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ property().bathrooms }}</span>\n <span i18n>Bathrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ property().receptions }}</span>\n <span i18n>Receptions</span>\n </div>\n </div>\n </div>\n <div class=\"text-right\">\n <div class=\"text-sm\">{{ property().price | price }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","// property-available.pipe.ts\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'availableDate',\n standalone: true,\n})\nexport class AvailableDatePipe implements PipeTransform {\n transform(value: string | Date | null): string {\n if (!value) return '';\n const date = new Date(value);\n const today = new Date();\n\n // strip time for comparison\n today.setHours(0, 0, 0, 0);\n date.setHours(0, 0, 0, 0);\n\n if (date <= today) {\n return 'Now';\n }\n return new Intl.DateTimeFormat('en-GB', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }).format(date);\n }\n}\n","import { Component, computed, input, OnInit, output, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Property } from '../../interfaces';\nimport { AvailableDatePipe } from '../../pipes/property-available.pipe';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-pricing',\n imports: [CommonModule, MatButtonModule, AvailableDatePipe, PricePipe],\n templateUrl: './property-pricing.component.html',\n styleUrl: './property-pricing.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyPricingComponent implements OnInit {\n ngOnInit(): void {\n this.calculateDeposit();\n }\n property = input.required<Property>();\n price = input<number>();\n holdingDeposit;\n securityDeposit;\n displayPrice = computed(() => {\n return this.property().price.toFixed(2);\n });\n market = computed(() => {\n return this.property().market.toString();\n });\n rentFrequency = computed(() => {\n return this.property().rentFrequency.toString();\n });\n calculateDeposit() {\n const price = this.property().price;\n if (this.rentFrequency() === 'MONTHLY') {\n this.holdingDeposit = ((price * 12) / 52).toFixed(2);\n this.securityDeposit = (((price * 12) / 52) * 5).toFixed(2);\n }\n if (this.rentFrequency() === 'WEEKLY') {\n this.holdingDeposit = price.toFixed(2);\n this.securityDeposit = (price * 5).toFixed(2);\n }\n }\n}\n","<div class=\"py-3 flex flex-col gap-3\">\n <div class=\"flex justify-between items-center\">\n @if (market() === 'RENTAL' && rentFrequency() === 'MONTHLY') {\n <div class=\"text-lg font-bold\" i18n>Rent per month</div>\n }\n @if (market() === 'RENTAL' && rentFrequency() === 'WEEKLY') {\n <div class=\"text-lg font-bold\" i18n>Rent per week</div>\n }\n @if (market() === 'RENTAL' && rentFrequency() === 'NOT_SPECIFIED') {\n <div class=\"text-lg font-bold\" i18n>Rent price</div>\n }\n @if (market() === 'SALE') {\n <div class=\"text-lg font-bold\" i18n>Price</div>\n }\n <div class=\"text-xl font-bold\">{{ displayPrice() | price }}</div>\n </div>\n <div class=\"flex justify-between items-center\">\n <div>Available</div>\n <div>{{ property().availableDate | availableDate }}</div>\n </div>\n @if (market() === 'RENTAL') {\n <div class=\"flex justify-between items-center\">\n <span i18n>Holding Deposit</span>\n <span>{{ holdingDeposit | price }}</span>\n </div>\n <div class=\"flex justify-between items-center font-bold\">\n <span i18n>Security Deposit</span>\n <span>{{ securityDeposit | price }}</span>\n </div>\n }\n</div>\n","import { Component, input, output, ViewEncapsulation } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterModule } from '@angular/router';\nimport { Property, PropertyType } from '../../interfaces';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Loading, Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-property-info',\n imports: [MatButtonModule, MatIconModule, RouterModule, Skeleton],\n templateUrl: './property-info.component.html',\n styleUrl: './property-info.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n id: 'rolatech-property-info',\n },\n})\nexport class PropertyInfoComponent extends Loading {\n property = input.required<Property>();\n wish = output<Property>();\n inWishList = input<boolean>(false);\n type = PropertyType;\n onWish(property: Property) {\n this.wish.emit(property);\n }\n onShare() {}\n onMore() {}\n}\n","@if (loading()) {\n <div>\n <div class=\"flex justify-between items-start gap-3\">\n <!-- title -->\n <rolatech-skeleton class=\"w-[80%] h-8 mb-3\"></rolatech-skeleton>\n <!-- action button -->\n <rolatech-skeleton class=\"w-6 h-6\"></rolatech-skeleton>\n </div>\n <div class=\"font-bold mb-3\">\n <!-- short info -->\n <rolatech-skeleton class=\"w-[50%] h-6\"></rolatech-skeleton>\n </div>\n <!-- description -->\n <rolatech-skeleton class=\"w-full aspect-video\"></rolatech-skeleton>\n </div>\n} @else {\n <div>\n <div class=\"flex justify-between items-center\">\n <div class=\"text-2xl font-medium\">{{ property().title }}</div>\n <div class=\"flex items-center px-3\">\n <button mat-icon-button (click)=\"onWish(property())\">\n @if (inWishList()) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"m293-203.08 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08Z\"\n />\n </svg>\n } @else {\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm-61 83.92 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08ZM480-470Z\"\n />\n </svg>\n }\n </button>\n <!-- <button mat-icon-button (click)=\"onShare()\">\n <mat-icon>share</mat-icon>\n </button>\n <button mat-icon-button (click)=\"onMore()\">\n <mat-icon>more_vert</mat-icon>\n </button> -->\n </div>\n </div>\n <div class=\"font-bold mb-3\">\n {{ property().size }} sq ft · {{ property().bedrooms }} beds · {{ property().bathrooms }} bathrooms\n\n @if (property().market.toString() === 'SALE') {\n @if (property().type !== 'NOT_SPECIFIED') {\n {{ type[property().type].toLowerCase() }}\n }\n <span> for sale</span>\n }\n @if (property().market.toString() === 'RENTAL') {\n @if (property().type !== 'NOT_SPECIFIED') {\n {{ type[property().type].toLowerCase() }}\n }\n <span> to rent</span>\n }\n </div>\n <div [innerHTML]=\"property().description\">\n <!-- {{ property().description }} -->\n </div>\n </div>\n}\n","import { Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { CommonModule, ViewportScroller } from '@angular/common';\nimport { PropertySection } from '../../interfaces';\nimport { ThumbnailComponent } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-property-section',\n imports: [CommonModule, ThumbnailComponent],\n templateUrl: './property-section.component.html',\n styleUrl: './property-section.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertySectionComponent {\n section = input.required<PropertySection>();\n user = input<string>();\n username = input<string>();\n viewportScroller = inject(ViewportScroller);\n\n onClickScroller(id: string) {\n this.viewportScroller.scrollToAnchor(id);\n }\n}\n","@if (section(); as section) {\n <div>\n @if (section.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-(--rt-brand-color) inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ section.title }}</span>\n </div>\n }\n @if (section.description) {\n <div>\n {{ section.description }}\n </div>\n }\n @if (section.media) {\n <div class=\"w-80%\">\n @for (item of section.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"clip\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n}\n","import { Component, computed, inject, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PropertyVideo, PropertyVideoProvider } from '../../interfaces';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\n@Component({\n selector: 'rolatech-property-video',\n imports: [CommonModule],\n templateUrl: './property-video.component.html',\n styleUrl: './property-video.component.scss',\n})\nexport class PropertyVideoComponent {\n sanitizer = inject(DomSanitizer);\n video = input.required<PropertyVideo>();\n videoUrl = computed(() => {\n if (this.video().provider !== PropertyVideoProvider.YOUTUBE) return;\n const match = this.video().url.match(/(?:youtu\\.be\\/|youtube\\.com\\/watch\\?v=)([\\w-]+)/);\n if (match && match[1]) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(`https://www.youtube.com/embed/${match[1]}`);\n\n }\n return null; // Not a valid YouTube URL\n });\n youtube = computed(() => {\n return this.video().provider === PropertyVideoProvider.YOUTUBE\n })\n}\n","<div class=\"\">\n <div class=\"text-2xl font-bold py-4\" i18n>Videos</div>\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","import { Component, ElementRef, input, output, viewChild, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { Property } from '../../interfaces';\n\n@Component({\n selector: 'rolatech-property-action-contact',\n imports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule],\n templateUrl: './property-action-contact.component.html',\n styleUrl: './property-action-contact.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyActionContactComponent {\n btnRef = viewChild('btnEl', { read: ElementRef });\n email = input<string>();\n phone = input<string>();\n callAgent = output<Property>();\n emailAgent = output<Property>();\n onCallAgent() {}\n onEmailAgent(property: Property) {\n this.emailAgent.emit(property);\n }\n}\n","<a\n mat-stroked-button\n class=\"w-full\"\n #btnEl\n [matMenuTriggerFor]=\"callMenu\"\n [matMenuTriggerData]=\"{ width: btnRef()?.nativeElement.offsetWidth }\"\n (click)=\"onCallAgent()\"\n>\n <span i18n>Ask a question</span>\n</a>\n<mat-menu #callMenu=\"matMenu\" [overlapTrigger]=\"false\" class=\"custom-menu-panel\">\n <ng-template matMenuContent let-width=\"width\">\n <div class=\"menu-content\" [ngStyle]=\"{ width: width + 'px' }\">\n <a mat-menu-item href=\"mailto:hello@gmail.com\">\n <span class=\"flex items-center\">\n <span class=\"flex items-center\">\n <mat-icon class=\"mr-3\">email</mat-icon>\n </span>\n <span i18n>Email</span>\n </span>\n <span class=\"pl-9\" i18n>{{ email() }}</span>\n </a>\n <hr />\n <a mat-menu-item [href]=\"'https://wa.me/' + phone()\" target=\"_blank\">\n <span class=\"flex items-center\">\n <span class=\"flex items-center\">\n <mat-icon class=\"mr-3\">call</mat-icon>\n </span>\n <span i18n>WhatsApp</span>\n </span>\n <span class=\"pl-9\" i18n>{{ phone() }}</span>\n </a>\n </div>\n </ng-template>\n</mat-menu>\n","import { Component, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { AngularCommonModule } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-agent-renderer',\n imports: [AngularCommonModule, MatIconModule],\n templateUrl: './property-agent-renderer.html',\n styleUrl: './property-agent-renderer.scss',\n})\nexport class PropertyAgentRenderer {\n name = input<string>();\n avatar = input<string>();\n username = input<string>();\n subtitle = input<string>();\n}\n","<div class=\"flex flex-col\">\n <div class=\"flex flex-row items-center pb-3\">\n <div class=\"flex mr-3 gap-2 items-center\">\n @if (avatar()) {\n <div class=\"cursor-pointer\" [routerLink]=\"['/', '@' + username()]\">\n <img [src]=\"avatar()\" class=\"w-14 h-14 rounded-full\" alt />\n </div>\n } @else {\n <div class=\"w-14 h-14 rounded-full bg-(--rt-brand-color)\"></div>\n }\n <div class=\"flex flex-col\">\n <div class=\"flex items-center text-lg font-bold cursor-pointer\">\n <a class=\"cursor-pointer\" [routerLink]=\"['/', '@' + username()]\">\n <span>{{ name() }}</span>\n </a>\n <mat-icon class=\"verified-icon\">verified</mat-icon>\n </div>\n <div class=\"text-lg font-bold text-(--rt-brand-color)\">{{ subtitle() }}</div>\n </div>\n </div>\n </div>\n <div class=\"text-sm opacity-70\">This listing is verified and managed by an Primecase agent</div>\n</div>\n","import { Component, input } from '@angular/core';\nimport { PropertyHighlight } from '../../interfaces';\n\n@Component({\n selector: 'rolatech-property-highlights',\n templateUrl: './property-highlights.html',\n styleUrl: './property-highlights.scss',\n})\nexport class PropertyHighlights {\n highlights = input.required<PropertyHighlight[]>();\n\n}\n","<div class=\"\">\n <div class=\"text-2xl font-bold py-3\" i18n>Highlights</div>\n <div class=\"flex flex-col flex-wrap\">\n @for (item of highlights(); track $index) {\n <div class=\"flex items-center py-1\">\n <!-- <mat-icon>check</mat-icon> -->\n <span>{{ item }}</span>\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, computed, input, signal } from '@angular/core';\ntype Band = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G';\n\nconst BANDS: Band[] = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];\nconst RANGES: Record<Band, string> = {\n A: '(92+)',\n B: '(81-91)',\n C: '(69-80)',\n D: '(55-68)',\n E: '(39-54)',\n F: '(21-38)',\n G: '(1-20)',\n};\nconst COLORS: Record<Band, string> = {\n A: '#0E9F6E', // green\n B: '#10B981',\n C: '#84CC16',\n D: '#F59E0B',\n E: '#F97316',\n F: '#FB7185',\n G: '#DC2626',\n};\n\nfunction bandFromScore(s?: number | null): Band {\n const v = s ?? 0;\n if (v >= 92) return 'A';\n if (v >= 81) return 'B';\n if (v >= 69) return 'C';\n if (v >= 55) return 'D';\n if (v >= 39) return 'E';\n if (v >= 21) return 'F';\n return 'G';\n}\n\n@Component({\n selector: 'rolatech-epc-chart',\n imports: [CommonModule],\n templateUrl: './epc-chart.html',\n styleUrl: './epc-chart.scss',\n host: { class: 'w-full' },\n})\nexport class EpcChart {\n // --- inputs (signals) ---\n currentScore = input<number | null>(null); // 1..100\n potentialScore = input<number | null>(null); // 1..100\n showCaptions = input<boolean>(true);\n\n // --- layout ---\n width = 920;\n\n leftPadding = 24;\n headerY = 40;\n\n private rangeColW = 90;\n private gapY = 10;\n private topY = 110; // top of first row area\n rowH = 48; // height of each wedge row\n rows = 7;\n\n // wedge geometry\n private wedgeMaxW = 420; // width of 'A' row\n private wedgeMinW = 220;\n private wedgeDelta = 44; // decrement per row\n private cut = 24; // right slant depth\n\n // arrow columns\n arrowW = 104;\n arrowH = 44;\n private colGap = 130;\n private wedgeAreaRight = this.leftPadding + this.rangeColW + 12 + this.wedgeMaxW + 20;\n currentColX = this.wedgeAreaRight + 80;\n potentialColX = this.currentColX + this.colGap;\n\n // captions\n topCaptionY = this.topY - 22;\n get bottomCaptionY() {\n return this.topY + this.rows * (this.rowH + this.gapY) + 22;\n }\n\n // overall height\n get height() {\n return this.bottomCaptionY + 56;\n }\n\n // expose constants to template\n bands = BANDS;\n RANGES = RANGES;\n COLORS = COLORS;\n get rangeX() {\n return this.leftPadding;\n }\n get maxW() {\n return this.wedgeMinW + 6 * this.wedgeDelta;\n } // width of G (widest)\n\n // helpers\n private wedgeX(i: number) {\n return this.leftPadding + this.rangeColW + 12;\n }\n // private wedgeW(i: number) { return this.wedgeMaxW - (i * this.wedgeDelta); }\n private wedgeW(i: number) {\n // A..G => 0..6 → widths increase downward\n return this.wedgeMinW + i * this.wedgeDelta;\n }\n rowY(i: number) {\n return this.topY + i * (this.rowH + this.gapY);\n }\n\n wedgePoints1(i: number) {\n const x = this.wedgeX(i),\n y = this.rowY(i),\n w = this.wedgeW(i),\n h = this.rowH,\n c = this.cut;\n // rectangle with right chevron tip\n // (x,y) → (x+w-c,y) → (x+w,y+h/2) → (x+w-c,y+h) → (x,y+h)\n return `${x},${y} ${x + w - c},${y} ${x + w},${y + h / 2} ${x + w - c},${y + h} ${x},${y + h}`;\n }\n wedgePoints(i: number) {\n const x = this.wedgeX(i),\n y = this.rowY(i),\n w = this.wedgeW(i),\n h = this.rowH;\n // rectangle: (x,y) → (x+w,y) → (x+w,y+h) → (x,y+h)\n return `${x},${y} ${x + w},${y} ${x + w},${y + h} ${x},${y + h}`;\n }\n\n wedgeLetterX(i: number) {\n // place on the trailing (right) end of wedge, just before chevron tip\n return this.wedgeX(i) + this.wedgeW(i) - this.cut - 10;\n }\n\n // arrow badge (left-pointing)\n arrowPoints() {\n const w = this.arrowW,\n h = this.arrowH,\n tip = 18; // tip depth\n // (w,0) → (tip,0) → (0,h/2) → (tip,h) → (w,h) → close\n return `${w},0 ${tip},0 0,${h / 2} ${tip},${h} ${w},${h}`;\n }\n\n // vertical placement: center the arrow in the band row for the given score\n arrowY(score: number) {\n const b = bandFromScore(score);\n const rowIndex = this.bands.indexOf(b);\n const y = this.rowY(rowIndex) + (this.rowH - this.arrowH) / 2;\n return Math.max(y, this.topY); // safety\n }\n\n clampScore(s: number) {\n return Math.max(1, Math.min(100, Math.round(s)));\n }\n\n // add below COLORS, bandFromScore...\n colorForBand(b: Band) {\n return COLORS[b];\n }\n colorForScore(s: number) {\n return this.colorForBand(bandFromScore(s));\n }\n\n // simple contrast so numbers stay readable\n textColorForBand(b: Band) {\n const hex = this.colorForBand(b).replace('#', '');\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const bl = parseInt(hex.slice(4, 6), 16);\n const yiq = (r * 299 + g * 587 + bl * 114) / 1000;\n return yiq >= 170 ? '#111' : '#fff'; // light bg → dark text, else white\n }\n textColorForScore(s: number) {\n return this.textColorForBand(bandFromScore(s));\n }\n}\n","<svg [attr.viewBox]=\"'0 0 ' + width + ' ' + height\" class=\"w-full h-auto\">\n <!-- outer border -->\n <rect x=\"0\" y=\"0\" [attr.width]=\"width\" [attr.height]=\"height\" fill=\"none\" stroke=\"var(--rt-text-primary)\" stroke-width=\"2\" />\n\n <!-- header row -->\n <text [attr.x]=\"leftPadding\" [attr.y]=\"headerY\" font-weight=\"700\" font-size=\"16\" fill=\"var(--rt-text-primary)\">\n Energy Rating\n </text>\n <text\n [attr.x]=\"currentColX + arrowW/2\"\n [attr.y]=\"headerY\"\n text-anchor=\"middle\"\n font-weight=\"700\"\n font-size=\"16\"\n fill=\"var(--rt-text-primary)\"\n >\n Current\n </text>\n <text\n [attr.x]=\"potentialColX + arrowW/2\"\n [attr.y]=\"headerY\"\n text-anchor=\"middle\"\n font-weight=\"700\"\n font-size=\"16\"\n fill=\"var(--rt-text-primary)\"\n >\n Potential\n </text>\n <line\n x1=\"0\"\n [attr.y1]=\"headerY+10\"\n [attr.x2]=\"width - 16\"\n [attr.y2]=\"headerY+10\"\n stroke=\"var(--rt-text-primary)\"\n stroke-width=\"2\"\n />\n\n <!-- top/bottom captions -->\n @if (showCaptions()) {\n <text [attr.x]=\"leftPadding\" [attr.y]=\"topCaptionY\" fill=\"#9CA3AF\" font-size=\"20\">\n very energy efficient - lower running costs\n </text>\n <text [attr.x]=\"leftPadding\" [attr.y]=\"bottomCaptionY\" fill=\"#9CA3AF\" font-size=\"20\">\n not energy efficient - higher running costs\n </text>\n }\n\n <!-- Wedges (A..G) -->\n @for (b of bands; track b; let i = $index) {\n <!-- range text column -->\n <text [attr.x]=\"rangeX\" [attr.y]=\"rowY(i) + rowH/2 + 5\" fill=\"#6B7280\" font-size=\"16\">{{ RANGES[b] }}</text>\n\n <!-- colored wedge -->\n <polygon [attr.points]=\"wedgePoints(i)\" [attr.fill]=\"COLORS[b]\" stroke=\"none\" />\n\n <!-- band letter -->\n <text\n [attr.x]=\"wedgeLetterX(i)\"\n [attr.y]=\"rowY(i) + rowH/2 + 8\"\n fill=\"white\"\n font-size=\"28\"\n font-weight=\"700\"\n text-anchor=\"end\"\n >\n {{ b }}\n </text>\n }\n\n <!-- Current arrow badge -->\n @if (currentScore() !== null) {\n <g [attr.transform]=\"'translate(' + currentColX + ',' + arrowY(currentScore()!) + ')'\">\n <polygon [attr.points]=\"arrowPoints()\" [attr.fill]=\"colorForScore(currentScore()!)\"></polygon>\n <text\n [attr.x]=\"arrowW/2 + 6\"\n [attr.y]=\"arrowH/2 + 9\"\n text-anchor=\"middle\"\n font-size=\"24\"\n font-weight=\"800\"\n [attr.fill]=\"textColorForScore(currentScore()!)\"\n >\n {{ clampScore(currentScore()!) }}\n </text>\n <!-- underline (optional) -->\n <rect\n [attr.x]=\"arrowW/2 - 12\"\n [attr.y]=\"arrowH/2 + 12\"\n width=\"36\"\n height=\"3\"\n [attr.fill]=\"textColorForScore(currentScore()!)\"\n opacity=\"0.8\"\n />\n </g>\n }\n\n <!-- Potential arrow badge -->\n @if (potentialScore() !== null) {\n <g [attr.transform]=\"'translate(' + potentialColX + ',' + arrowY(potentialScore()!) + ')'\">\n <polygon [attr.points]=\"arrowPoints()\" [attr.fill]=\"colorForScore(potentialScore()!)\"></polygon>\n <text\n [attr.x]=\"arrowW/2 + 6\"\n [attr.y]=\"arrowH/2 + 9\"\n text-anchor=\"middle\"\n font-size=\"24\"\n font-weight=\"800\"\n [attr.fill]=\"textColorForScore(potentialScore()!)\"\n >\n {{ clampScore(potentialScore()!) }}\n </text>\n </g>\n }\n</svg>\n","import { Component, input } from '@angular/core';\nimport { PropertyEpcModel } from '../../interfaces';\nimport { EpcChart } from \"../epc-chart/epc-chart\";\n\n@Component({\n selector: 'rolatech-property-epc',\n imports: [EpcChart],\n templateUrl: './property-epc.html',\n styleUrl: './property-epc.scss',\n})\nexport class PropertyEpc {\n epc = input.required<PropertyEpcModel>();\n}\n","<div class=\"w-full\">\n <div class=\"text-2xl font-bold py-3\" i18n>EPC</div>\n <div class=\"flex flex-row items-center font-thin text-sm\">\n <rolatech-epc-chart\n [currentScore]=\"epc().currentScore\"\n [potentialScore]=\"epc().potentialScore\"\n [showCaptions]=\"true\"\n ></rolatech-epc-chart>\n </div>\n</div>\n","import { Component, input } from '@angular/core';\nimport { Floorplan } from '../../interfaces';\nimport { ThumbnailComponent } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-property-floorplan',\n imports: [ThumbnailComponent],\n templateUrl: './property-floorplan.html',\n styleUrl: './property-floorplan.scss',\n})\nexport class PropertyFloorplan {\n floorplans = input.required<Floorplan[]>();\n}\n","<div class=\"w-full\">\n <div class=\"text-2xl font-bold py-3\" i18n>Floorplans</div>\n <div class=\"flex flex-col flex-wrap gap-3\">\n @for (item of floorplans(); track $index) {\n <rolatech-thumbnail [src]=\"item.url\" size=\"medium\" mode=\"full\"> </rolatech-thumbnail>\n }\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-property-media-skeleton',\n imports: [Skeleton],\n templateUrl: './property-media-skeleton.html',\n styleUrl: './property-media-skeleton.scss',\n})\nexport class PropertyMediaSkeleton {}\n","<div class=\"py-3\">\n <div class=\"object-cover aspect-video bg-(--rt-raised-background)\">\n <rolatech-skeleton></rolatech-skeleton>\n </div>\n\n <div class=\"flex overflow-y-hidden overflow-x-scroll scrollbar-hide pb-4\">\n @for (dummy of [0, 1, 2, 3]; track dummy) {\n <div class=\"flex flex-row mt-3 mr-3 rounded-md min-w-32 object-cover aspect-video bg-(--rt-raised-background)\">\n <rolatech-skeleton></rolatech-skeleton>\n </div>\n }\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Loading, Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-property-info-skeleton',\n imports: [Skeleton],\n templateUrl: './property-info-skeleton.html',\n styleUrl: './property-info-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyInfoSkeleton extends Loading {}\n","<div>\n <div class=\"flex justify-between items-start gap-3\">\n <!-- title -->\n <rolatech-skeleton class=\"w-[80%] h-8 mb-3\"></rolatech-skeleton>\n <!-- action button -->\n <rolatech-skeleton class=\"w-6 h-6\"></rolatech-skeleton>\n </div>\n <div class=\"font-bold mb-3\">\n <!-- short info -->\n <rolatech-skeleton class=\"w-[50%] h-6\"></rolatech-skeleton>\n </div>\n <!-- description -->\n <rolatech-skeleton class=\"w-full aspect-video\"></rolatech-skeleton>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Loading, Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-property-agent-skeleton',\n imports: [Skeleton],\n templateUrl: './property-agent-skeleton.html',\n styleUrl: './property-agent-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyAgentSkeleton extends Loading {}\n","<div class=\"flex flex-col\">\n <div class=\"flex flex-row items-center pb-3\">\n <div class=\"flex mr-3 gap-2 items-center w-full\">\n <!-- avatar -->\n <rolatech-skeleton class=\"w-14 h-14 rounded-full\"></rolatech-skeleton>\n <rolatech-skeleton class=\"flex-1 h-6\"></rolatech-skeleton>\n </div>\n </div>\n <div class=\"text-sm opacity-70\">\n <rolatech-skeleton class=\"w-full h-6\"></rolatech-skeleton>\n </div>\n</div>\n","import { Component, computed, effect, inject, OnInit, signal } from '@angular/core';\nimport { AngularComponentsModule, BaseComponent, ContainerComponent } from '@rolatech/angular-components';\nimport { FloorplanService, PropertyHighlightsService, PropertyService, TimeZoneService } from '@rolatech/angular-services';\nimport _ from 'lodash';\nimport {\n Property,\n PropertyOption,\n PropertyVariant,\n PropertyVariantOption,\n PropertyVideo,\n PropertyVideoProvider,\n} from '../../../interfaces';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { PropertyPricingComponent, PropertyActionsComponent } from '../../../components';\nimport { PropertyInfoComponent } from '../../../components/property-info/property-info.component';\nimport { PropertyMediaComponent } from '../../../components/property-media/property-media.component';\nimport { PropertySectionComponent } from '../../../components/property-section/property-section.component';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { PropertyLocationComponent } from '../../../components/property-location/property-location.component';\nimport { PropertyFeaturesComponent } from '../../../components/property-features/property-features.component';\nimport { PropertyVideoComponent } from '../../../components/property-video/property-video.component';\nimport { PropertyActionContactComponent } from '../../../components/property-action-contact/property-action-contact.component';\nimport { PropertyAgentRenderer } from '../../../components/property-agent-renderer/property-agent-renderer';\nimport { PropertyHighlights } from '../../../components/property-highlights/property-highlights';\nimport { PropertyEpc } from '../../../components/property-epc/property-epc';\nimport { PropertyFloorplan } from '../../../components/property-floorplan/property-floorplan';\nimport { PropertyMediaSkeleton } from '../../../components/property-media-skeleton/property-media-skeleton';\nimport { PropertyInfoSkeleton } from '../../../components/property-info-skeleton/property-info-skeleton';\nimport { PropertyAgentSkeleton } from '../../../components/property-agent-skeleton/property-agent-skeleton';\n\n@Component({\n selector: 'rolatech-property-details',\n imports: [\n AngularCommonModule,\n AngularComponentsModule,\n ContainerComponent,\n PropertyInfoComponent,\n PropertyMediaComponent,\n PropertyPricingComponent,\n PropertySectionComponent,\n PropertyActionsComponent,\n PropertyAgentRenderer,\n PropertyLocationComponent,\n PropertyFeaturesComponent,\n PropertyVideoComponent,\n PropertyActionContactComponent,\n PropertyHighlights,\n PropertyEpc,\n PropertyFloorplan,\n PropertyMediaSkeleton,\n PropertyInfoSkeleton,\n PropertyAgentSkeleton,\n ],\n templateUrl: './property-details.component.html',\n styleUrl: './property-details.component.scss',\n})\nexport class PropertyDetailsComponent extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n propertyService = inject(PropertyService);\n floorplanService = inject(FloorplanService);\n propertyHighlightsService = inject(PropertyHighlightsService);\n timezoneService = inject(TimeZoneService);\n authenticated = this.authService.authenticated;\n readonly property = signal<Property | null>(null);\n loading = signal<boolean>(true);\n\n fullname = '';\n username = '';\n user: any;\n inWishList = false;\n purchased = false;\n selectedOption!: PropertyOption;\n variants: PropertyVariant[] = [];\n features: any[] = [];\n allVideos = signal<PropertyVideo[]>([]);\n highlights: any[] = [];\n floorplans: any[] = [];\n epc: any;\n timezone = signal<string>('');\n\n // get videos(): PropertyVideo[] {\n // const v = this.allVideos; // read signal once\n // if (!v) return [];\n\n // const tz = this.timezone();\n // const provider = tz === 'Asia/Shanghai' ? PropertyVideoProvider.COS : PropertyVideoProvider.YOUTUBE;\n // return v.filter((v) => v.provider === provider);\n // }\n videos = computed(() => {\n const v = this.allVideos(); // read signal once\n if (!v) return [];\n const tz = this.timezone();\n const provider = tz === 'Asia/Shanghai' ? PropertyVideoProvider.COS : PropertyVideoProvider.YOUTUBE;\n return v.filter((v) => v.provider === provider);\n });\n\n constructor() {\n super();\n effect(() => {\n if (this.authenticated()) {\n this.wishListCheck();\n }\n });\n }\n ngOnInit(): void {\n this.getProperty();\n this.getVideos();\n this.getFeatures();\n this.getHighlights();\n this.getFloorplans();\n this.getEpc();\n // this.timezoneService.getTimeZoneFromApi().subscribe({\n // next: res => {\n // this.timezone.set(res)\n // }\n // })\n const timezone = this.timezoneService.getBrowserTimeZone() ?? '';\n this.timezone.set(timezone);\n }\n getProperty() {\n this.loading.set(true);\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n const p = res.data as Property | null;\n this.property.set(p);\n\n const description = p?.description ?? '';\n const firstPart = description.split(/<br\\s*\\/?>/i)[0]?.trim() ?? '';\n const arr = firstPart.split('|').map((s) => s.trim());\n\n if (p?.agentId) {\n this.findUserBaseInfo(p.agentId);\n }\n this.titleService.setTitle(`${p?.title}`);\n this.loading.set(false);\n },\n error: () => {\n this.loading.set(false);\n },\n });\n }\n private getVideos() {\n this.propertyService.getVideos(this.id).subscribe({\n next: (res: any) => {\n this.allVideos.set(res.data);\n },\n });\n }\n\n findUserBaseInfo(userId: string) {\n this.authUserService.getPublicUserInfo(userId).subscribe({\n next: (res) => {\n this.fullname = res.name;\n this.username = res.username;\n this.user = res;\n },\n });\n }\n getFeatures() {\n this.propertyService.getFeatures(this.id).subscribe({\n next: (res: any) => {\n this.features = res.data || [];\n },\n });\n }\n getHighlights() {\n this.propertyHighlightsService.getHighlights(this.id).subscribe({\n next: (res: any) => {\n this.highlights = res.data || [];\n },\n });\n }\n getFloorplans() {\n this.floorplanService.listFloorplans(this.id).subscribe({\n next: (res: any) => {\n this.floorplans = res.data || [];\n },\n });\n }\n getEpc() {\n this.propertyService.getEpc(this.id).subscribe({\n next: (res: any) => {\n this.epc = res.data;\n },\n });\n }\n private wishListCheck() {\n this.propertyService.wishListCheck(this.id).subscribe({\n next: (res: any) => {\n this.inWishList = res.data;\n },\n });\n }\n onWish(e: any) {\n if (this.authenticated()) {\n if (this.inWishList) {\n this.removeFromWishlist();\n } else {\n this.addToWishlist();\n }\n } else {\n this.snackBarService.open('Please sign in');\n }\n }\n onRequestViewing(e: any) {\n this.router.navigate([`/properties/${this.id}/viewing/application`]);\n }\n private removeFromWishlist() {\n this.propertyService.removeFromWishlist(this.id).subscribe({\n next: (res) => {\n this.inWishList = false;\n this.snackBarService.open('Removed');\n },\n });\n }\n private addToWishlist() {\n this.propertyService.addToWishlist(this.id).subscribe({\n next: (res) => {\n this.inWishList = true;\n this.snackBarService.open('Added');\n },\n });\n }\n onOffer(e: any) {\n const action = this.property()?.market.toString() === 'SALE' ? 'sale' : 'rental';\n if (this.authenticated()) {\n this.router.navigate([`/properties/${this.id}/offer/${action}`]);\n } else {\n this.snackBarService.open('Please sign in');\n }\n }\n}\n","<rolatech-container>\n <div class=\"flex flex-col w-full\">\n @if (loading()) {\n <rolatech-property-media-skeleton></rolatech-property-media-skeleton>\n\n <div class=\"flex flex-col md:flex-row gap-3 w-full\">\n <rolatech-property-info-skeleton class=\"w-full md:w-2/3\"></rolatech-property-info-skeleton>\n <rolatech-property-agent-skeleton class=\"w-full md:w-1/3\"></rolatech-property-agent-skeleton>\n </div>\n } @else {\n @if (property(); as property) {\n <rolatech-property-media [media]=\"property.media ? property.media : []\"></rolatech-property-media>\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 @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 @if (floorplans.length > 0) {\n <rolatech-property-floorplan [floorplans]=\"floorplans\"></rolatech-property-floorplan>\n }\n @if (property.location) {\n <rolatech-property-location [location]=\"property.location\"></rolatech-property-location>\n }\n @if (videos() && videos().length > 0) {\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 }\n }\n </div>\n</rolatech-container>\n","import { Component, input, OnInit, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { ViewingProposedSlot, ViewingTime } from '../../interfaces';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerInputEvent, MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatIconModule } from '@angular/material/icon';\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n\n@Component({\n selector: 'rolatech-property-viewing-time',\n imports: [\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n MatDatepickerModule,\n MatSelectModule,\n MatOptionModule,\n MatIconModule,\n MatButtonModule,\n ],\n templateUrl: './property-viewing-time.component.html',\n styleUrl: './property-viewing-time.component.scss',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n})\nexport class PropertyViewingTimeComponent implements OnInit {\n minDate = new Date();\n maxDate = new Date();\n output = output<ViewingProposedSlot>();\n\n proposedTime = input<ViewingProposedSlot>({\n date: '',\n time: '',\n });\n time = ViewingTime;\n\n ngOnInit(): void {\n this.minDate.setDate(this.minDate.getDate() + 1);\n this.maxDate.setDate(this.maxDate.getDate() + 7);\n }\n\n onDateInput(event: MatDatepickerInputEvent<unknown>): void {\n this.updateSlot({\n date: this.formatDateValue(event.value),\n });\n }\n\n onTimeChange(time: string | null): void {\n this.updateSlot({\n time: time ?? '',\n });\n }\n\n private updateSlot(changes: Partial<ViewingProposedSlot>): void {\n const current = this.proposedTime() ?? {\n date: '',\n time: '',\n };\n\n const next: ViewingProposedSlot = {\n ...current,\n ...changes,\n };\n\n if (current.date === next.date && current.time === next.time) {\n return;\n }\n\n current.date = next.date;\n current.time = next.time;\n\n this.output.emit(next);\n }\n\n private formatDateValue(value: unknown): string {\n if (!value) {\n return '';\n }\n\n if (typeof value === 'object' && value !== null && 'format' in value && typeof value.format === 'function') {\n return value.format('YYYY-MM-DD');\n }\n\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n const year = value.getFullYear();\n const month = String(value.getMonth() + 1).padStart(2, '0');\n const day = String(value.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n return String(value);\n }\n}\n","<div class=\"flex flex-col md:flex-row gap-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Viewing Date</mat-label>\n <!-- [max]=\"maxDate\" -->\n <input\n matInput\n placeholder=\"Viewing date\"\n [matDatepicker]=\"startDatePicker\"\n [min]=\"minDate\"\n (focus)=\"startDatePicker.open()\"\n name=\"viewingDate\"\n [ngModel]=\"proposedTime().date || null\"\n (dateInput)=\"onDateInput($event)\"\n required\n readonly\n />\n <mat-datepicker-toggle matIconPrefix [for]=\"startDatePicker\"></mat-datepicker-toggle>\n <mat-datepicker #startDatePicker></mat-datepicker>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Viewing time</mat-label>\n <mat-icon matIconPrefix>schedule</mat-icon>\n <mat-select [ngModel]=\"proposedTime().time || null\" (ngModelChange)=\"onTimeChange($event)\" required>\n @for (d of time; track d) {\n <mat-option [value]=\"d\">\n {{ d }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input } from '@angular/core';\nimport { ThumbnailComponent, ContainerComponent } from '@rolatech/angular-components';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { Property } from '../../interfaces';\nimport { AvailableDatePipe } from '../../pipes/property-available.pipe';\n\n@Component({\n selector: 'rolatech-property-intent-shell',\n imports: [CommonModule, ContainerComponent, ThumbnailComponent, AvailableDatePipe, PricePipe],\n templateUrl: './property-intent-shell.html',\n styleUrl: './property-intent-shell.scss',\n})\nexport class PropertyIntentShell {\n property = input<Property | null>(null);\n\n readonly firstImageUrl = computed(() => this.property()?.media?.[0]?.url ?? '');\n}\n","<rolatech-container>\n <div class=\"property-intent-shell\">\n <section class=\"property-intent-shell__content\">\n <ng-content select=\"[intent-header]\"></ng-content>\n <div class=\"property-intent-shell__panel\">\n <ng-content select=\"[intent-body]\"></ng-content>\n </div>\n </section>\n\n <aside class=\"property-intent-shell__summary\">\n @if (property(); as property) {\n <div class=\"property-intent-shell__summary-card\">\n <div class=\"property-intent-shell__summary-title\" i18n>Property info</div>\n\n <rolatech-thumbnail [src]=\"firstImageUrl()\" size=\"small\"></rolatech-thumbnail>\n\n <div class=\"property-intent-shell__property-title\">{{ property.title }}</div>\n <div class=\"property-intent-shell__property-meta\">\n <span i18n>Available:</span>\n <span>{{ property.availableDate | availableDate }}</span>\n </div>\n\n @if (property.market.toString() === 'LETTINGS' && property.rentFrequency.toString() === 'MONTHLY') {\n <div class=\"property-intent-shell__price\">{{ property.price | price }}pcm</div>\n } @else {\n <div class=\"property-intent-shell__price\">{{ property.price | price }}</div>\n }\n </div>\n }\n </aside>\n </div>\n</rolatech-container>\n","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport interface PropertyMarketBreadcrumbItem {\n label: string;\n link?: string | any[];\n}\n\n@Component({\n selector: 'rolatech-property-market-breadcrumb',\n imports: [CommonModule, RouterLink, MatIconModule],\n templateUrl: './property-market-breadcrumb.html',\n styleUrl: './property-market-breadcrumb.scss',\n})\nexport class PropertyMarketBreadcrumbComponent {\n items = input.required<PropertyMarketBreadcrumbItem[]>();\n}\n","<nav class=\"property-market-breadcrumb\" aria-label=\"Breadcrumb\">\n @for (item of items(); track item.label; let last = $last) {\n @if (item.link && !last) {\n <a class=\"property-market-breadcrumb__link\" [routerLink]=\"item.link\">\n {{ item.label }}\n </a>\n } @else {\n <span class=\"property-market-breadcrumb__current\">\n {{ item.label }}\n </span>\n }\n\n @if (!last) {\n <mat-icon class=\"property-market-breadcrumb__separator\">chevron_right</mat-icon>\n }\n }\n</nav>\n","import { Component, effect, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormsModule } from '@angular/forms';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n APPLICATION_ADMIN_ROLES,\n APPLICATION_OWNER_ROLES,\n AuthService,\n ORGANIZATION_ADMIN_ROLES,\n ORGANIZATION_MEMBER_ROLES,\n ORGANIZATION_OWNER_ROLES,\n ORGANIZATION_STAFF_ROLES,\n PLATFORM_ADMIN_ROLES,\n} from '@rolatech/angular-auth';\nimport { PropertyService } from '@rolatech/angular-services';\nimport {\n PropertyApplicantType,\n Property,\n PropertyViewerCategory,\n PropertyViewingRequest,\n} from '../../../interfaces';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { PropertyViewingTimeComponent } from '../../../components/property-viewing-time/property-viewing-time.component';\nimport { PropertyIntentShell } from '../../../components/property-intent-shell/property-intent-shell';\nimport {\n PropertyMarketBreadcrumbComponent,\n PropertyMarketBreadcrumbItem,\n} from '../../../components/property-market-breadcrumb/property-market-breadcrumb';\n@Component({\n selector: 'rolatech-property-viewing-request',\n imports: [\n CommonModule,\n MatFormFieldModule,\n FormsModule,\n MatInputModule,\n TextFieldModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatButtonModule,\n MatSelectModule,\n MatRadioModule,\n PropertyViewingTimeComponent,\n PropertyIntentShell,\n PropertyMarketBreadcrumbComponent,\n ],\n templateUrl: './property-viewing-request.component.html',\n styleUrl: './property-viewing-request.component.scss',\n})\nexport class PropertyViewingRequestComponent extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n propertyService = inject(PropertyService);\n property: Property | null = null;\n readonly requestFlow = (this.route.snapshot.data['requestFlow'] as 'public' | 'agent' | 'market' | undefined) ?? 'public';\n readonly minMoveInDate = new Date();\n moveInDate: Date | null = null;\n viewing: PropertyViewingRequest = {\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n jobTitle: '',\n viewerCategory: PropertyViewerCategory.TENANT,\n proposedSlots: [\n { date: '', time: '' },\n { date: '', time: '' },\n { date: '', time: '' },\n ],\n };\n viewerCategory = PropertyViewerCategory;\n applicantTypes = PropertyApplicantType;\n\n constructor() {\n super();\n\n effect(() => {\n const user = this.authService.user();\n if (!user) {\n return;\n }\n\n this.viewing.firstName = this.viewing.firstName || user.firstName || user.name?.split(' ')[0] || '';\n this.viewing.lastName = this.viewing.lastName || user.lastName || user.name?.split(' ').slice(1).join(' ') || '';\n this.viewing.email = this.viewing.email || user.email || '';\n this.viewing.phone = this.viewing.phone || user.phone || '';\n\n if (!this.viewing.viewerCategory || this.viewing.viewerCategory === PropertyViewerCategory.TENANT) {\n this.viewing.viewerCategory =\n this.requestFlow === 'agent' || this.isAgencyRequester()\n ? PropertyViewerCategory.AGENT\n : PropertyViewerCategory.TENANT;\n }\n });\n }\n\n ngOnInit(): void {\n this.getProperty();\n }\n\n breadcrumbItems(): PropertyMarketBreadcrumbItem[] {\n return [\n { label: 'Properties', link: '/properties' },\n { label: this.property?.title || 'Property detail', link: ['/properties', this.id] },\n { label: 'Request viewing' },\n ];\n }\n\n get isMarketFlow() {\n return this.requestFlow === 'market';\n }\n\n get isAgentFlow() {\n return this.requestFlow === 'agent';\n }\n\n getProperty() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property = res.data;\n if (this.property) {\n this.titleService.setTitle(this.property.title);\n }\n },\n });\n }\n\n sendRequest() {\n this.propertyService.requestViewing(this.id, this.viewing).subscribe({\n next: (res) => {\n this.snackBarService.open('Request viewing successfully');\n if (this.requestFlow === 'market') {\n this.router.navigate(['..', 'viewings', res.data.id], { relativeTo: this.route });\n return;\n }\n this.router.navigate(this.requestFlow === 'agent' ? ['/viewings', res.data.id] : ['/properties/viewings', res.data.id]);\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n\n private isAgencyRequester(): boolean {\n const appId = this.authService.applications()[0]?.appId ?? this.authService.organizations()[0]?.appId ?? null;\n const orgId = this.authService.organizations()[0]?.orgId ?? null;\n\n return (\n this.authService.hasPlatformRole(...PLATFORM_ADMIN_ROLES) ||\n this.authService.hasApplicationRole(appId, ...APPLICATION_OWNER_ROLES, ...APPLICATION_ADMIN_ROLES) ||\n this.authService.hasOrganizationRole(\n appId,\n orgId,\n ...ORGANIZATION_OWNER_ROLES,\n ...ORGANIZATION_ADMIN_ROLES,\n ...ORGANIZATION_MEMBER_ROLES,\n ...ORGANIZATION_STAFF_ROLES,\n )\n );\n }\n\n private formatDateInput(date: Date) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n setMoveInDate(date: Date | null) {\n this.moveInDate = date;\n this.viewing.moveInDate = date ? this.formatDateInput(date) : undefined;\n }\n}\n","<rolatech-property-intent-shell [property]=\"property\">\n <div intent-header class=\"property-viewing-request__header\">\n <rolatech-property-market-breadcrumb\n class=\"property-viewing-request__breadcrumb\"\n [items]=\"breadcrumbItems()\"\n ></rolatech-property-market-breadcrumb>\n <span class=\"property-viewing-request__eyebrow\">\n {{ requestFlow === 'agent' ? 'Agent workflow' : isMarketFlow ? 'Market workflow' : 'Property enquiry' }}\n </span>\n <div class=\"property-viewing-request__title\" i18n>Request a viewing</div>\n <p class=\"property-viewing-request__description\" i18n>\n Choose the best slots for your visit and we will confirm the final time with the listing team.\n </p>\n </div>\n\n <div intent-body>\n <div class=\"property-viewing-request__form\">\n @if (!isAgentFlow) {\n <div class=\"mb-3\">\n <mat-radio-group aria-label=\"Select an option\" [(ngModel)]=\"viewing.viewerCategory\">\n <mat-radio-button [value]=\"viewerCategory.TENANT\" i18n>I'm a tenant</mat-radio-button>\n <mat-radio-button [value]=\"viewerCategory.AGENT\" i18n>I'm an agent</mat-radio-button>\n </mat-radio-group>\n </div>\n }\n\n <div class=\"flex flex-col md:flex-row gap-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>First name</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"viewing.firstName\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Last name</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"viewing.lastName\" />\n </mat-form-field>\n </div>\n\n <div class=\"flex flex-col md:flex-row gap-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Phone</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"viewing.phone\" />\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Email</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"viewing.email\" />\n </mat-form-field>\n\n <div class=\"property-viewing-request__grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Applicant type</mat-label>\n <mat-select placeholder=\"Applicant type\" [(ngModel)]=\"viewing.applicantType\">\n @for (applicantType of applicantTypes | keyvalue; track applicantType) {\n <mat-option [value]=\"applicantType.key\">\n {{ applicantType.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Job title</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"viewing.jobTitle\" />\n </mat-form-field>\n </div>\n\n <div class=\"property-viewing-request__grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Annual income</mat-label>\n <span matTextPrefix>£ </span>\n <input matInput type=\"number\" min=\"0\" [(ngModel)]=\"viewing.annualIncome\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Budget - per month</mat-label>\n <span matTextPrefix>£ </span>\n <input matInput type=\"number\" min=\"0\" [(ngModel)]=\"viewing.monthlyBudget\" />\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Move in date</mat-label>\n <input\n matInput\n [matDatepicker]=\"moveInDatePicker\"\n [min]=\"minMoveInDate\"\n [ngModel]=\"moveInDate\"\n (dateChange)=\"setMoveInDate($event.value)\"\n (focus)=\"moveInDatePicker.open()\"\n (click)=\"moveInDatePicker.open()\"\n readonly\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"moveInDatePicker\"></mat-datepicker-toggle>\n <mat-datepicker #moveInDatePicker></mat-datepicker>\n </mat-form-field>\n\n <div class=\"property-viewing-request__slots\">\n <div class=\"mb-3\">\n <div class=\"text-lg font-bold\" i18n>Viewing date</div>\n <div class=\"opacity-70\" i18n>\n Please choose 3 different times on at least 2 different days that would work for you.\n </div>\n </div>\n\n @for (item of viewing.proposedSlots; track $index) {\n <rolatech-property-viewing-time [proposedTime]=\"item\"></rolatech-property-viewing-time>\n }\n </div>\n\n <button mat-flat-button (click)=\"sendRequest()\" i18n>Send request</button>\n </div>\n </div>\n</rolatech-property-intent-shell>\n","import { Component, computed, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PropertyOfferService } from '@rolatech/angular-services';\nimport { RouterModule } from '@angular/router';\nimport { BaseComponent, PageCollectionShellComponent } from '@rolatech/angular-components';\nimport { PropertyOfferItemComponent } from '../../../components/property-offer-item/property-offer-item.component';\nimport { PropertyOffer, PropertyOfferStatus, PropertyOfferType } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\nimport { OfferItemSkeleton } from '../../../components/offer-item-skeleton/offer-item-skeleton';\n\n@Component({\n selector: 'rolatech-property-offer-index',\n imports: [\n CommonModule,\n RouterModule,\n PropertyOfferItemComponent,\n MatPaginatorModule,\n OfferItemSkeleton,\n PageCollectionShellComponent,\n ],\n templateUrl: './property-offer-index.component.html',\n styleUrl: './property-offer-index.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyOfferIndexComponent extends BaseComponent implements OnInit {\n propertyOfferService = inject(PropertyOfferService);\n\n offerType = PropertyOfferType;\n offerStatus = PropertyOfferStatus;\n select = 0;\n links = [\n {\n name: 'All',\n status: '',\n },\n {\n name: 'Submitted',\n status: 'submitted',\n },\n {\n name: 'Accepted',\n status: 'accepted',\n },\n {\n name: 'Rejected',\n icon: 'category',\n status: 'rejected',\n },\n {\n name: 'Cancelled',\n status: 'cancelled',\n },\n ];\n loading = false;\n offers = signal<PropertyOffer[]>([]);\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 readonly stats = computed(() => {\n const offers = this.offers();\n return [\n { label: 'Offers', value: this.length || offers.length, hint: 'All offer activity in one place' },\n { label: 'Submitted', value: offers.filter((item) => item.status === PropertyOfferStatus.SUBMITTED).length, hint: 'Recently sent to the listing team' },\n { label: 'Accepted', value: offers.filter((item) => item.status === PropertyOfferStatus.ACCEPTED).length, hint: 'Accepted in principle or moved forward' },\n { label: 'Cancelled', value: offers.filter((item) => item.status === PropertyOfferStatus.CANCELLED).length, hint: 'Closed or withdrawn negotiations' },\n ];\n });\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.propertyOfferService.findOffersByUser(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.offers.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.offers.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n\n statusCompareFn(t1: any, t2: any) {\n return t1 === t2;\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-page-collection-shell\n eyebrow=\"My applications\"\n title=\"My offers\"\n subtitle=\"Review every offer you submitted, watch counter-offers as they arrive, and move from summary to detail without losing your personal property context.\"\n>\n <div page-shell-header-meta class=\"property-offer-index__summary\">\n @for (stat of stats(); track stat.label) {\n <article class=\"property-offer-index__summary-card\">\n <span class=\"property-offer-index__summary-value\">{{ stat.value }}</span>\n <span class=\"property-offer-index__summary-label\">{{ stat.label }}</span>\n </article>\n }\n </div>\n\n <nav class=\"property-offer-index__status-nav\" aria-label=\"Offer status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"property-offer-index__status-link\"\n [class.property-offer-index__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n\n <section class=\"property-offer-index__list\">\n @if (loading) {\n @for (row of [0, 1, 2, 3]; track row) {\n <rolatech-offer-item-skeleton></rolatech-offer-item-skeleton>\n }\n } @else if (offers().length > 0) {\n @for (item of offers(); track item.id) {\n <rolatech-property-offer-item class=\"cursor-pointer\" [routerLink]=\"['./', item.id]\" [offer]=\"item\"></rolatech-property-offer-item>\n }\n } @else {\n <div class=\"property-offer-index__empty\">\n <h3 i18n>No offers yet</h3>\n <p i18n>Your submitted offers and any counter-offers will appear here.</p>\n </div>\n }\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 </section>\n</rolatech-page-collection-shell>\n","import { Component, computed, input } from '@angular/core';\nimport { PropertyViewing, propertyViewingStatusCode, propertyViewingStatusLabel } from '../../interfaces';\nimport { ThumbnailComponent, ImagePlaceholderComponent, Loading, Skeleton } from '@rolatech/angular-components';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-property-viewing-item',\n imports: [CommonModule, ThumbnailComponent, ImagePlaceholderComponent, Skeleton, PricePipe],\n templateUrl: './property-viewing-item.component.html',\n styleUrl: './property-viewing-item.component.scss',\n})\nexport class PropertyViewingItemComponent extends Loading {\n viewing = input.required<PropertyViewing>();\n readonly requesterName = computed(() => `${this.viewing().firstName} ${this.viewing().lastName}`.trim());\n readonly firstSlot = computed(() => this.viewing().proposedSlots?.[0] ?? null);\n readonly scheduledDate = computed(() => this.viewing().viewingDate || this.firstSlot()?.date || null);\n readonly scheduledTime = computed(() => this.viewing().viewingTime || this.firstSlot()?.time || null);\n readonly primaryMedia = computed(() => this.viewing().item?.media?.[0] ?? null);\n\n statusToneClass(status: string | null | undefined) {\n switch (propertyViewingStatusCode(status)) {\n case 'APPROVED':\n case 'COMPLETED':\n return 'property-viewing-item__status property-viewing-item__status--positive';\n case 'REJECTED':\n case 'CANCELLED':\n return 'property-viewing-item__status property-viewing-item__status--negative';\n default:\n return 'property-viewing-item__status property-viewing-item__status--neutral';\n }\n }\n\n statusLabel(status: string | null | undefined) {\n return propertyViewingStatusLabel(status);\n }\n}\n","@if (loading()) {\n <article class=\"property-viewing-item property-viewing-item--loading\">\n <div class=\"property-viewing-item__top\">\n <div class=\"property-viewing-item__copy\">\n <rolatech-skeleton class=\"h-4 w-24\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-6 w-56\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-4 w-72\"></rolatech-skeleton>\n </div>\n <rolatech-skeleton class=\"h-8 w-20\"></rolatech-skeleton>\n </div>\n\n <div class=\"property-viewing-item__content\">\n <div class=\"property-viewing-item__media\">\n <rolatech-skeleton class=\"h-full w-full\"></rolatech-skeleton>\n </div>\n\n <div class=\"property-viewing-item__details\">\n <div class=\"property-viewing-item__meta-grid\">\n @for (row of [0, 1, 2, 3]; track row) {\n <div class=\"property-viewing-item__meta-card\">\n <rolatech-skeleton class=\"h-3 w-20\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-4 w-28\"></rolatech-skeleton>\n </div>\n }\n </div>\n </div>\n </div>\n </article>\n} @else {\n <article class=\"property-viewing-item\">\n <div class=\"property-viewing-item__top\">\n <div class=\"property-viewing-item__copy\">\n <span class=\"property-viewing-item__eyebrow\">Viewing request</span>\n <h3 class=\"property-viewing-item__title\">{{ viewing().item.title }}</h3>\n <p class=\"property-viewing-item__address\">{{ viewing().item.address }}</p>\n </div>\n <span [class]=\"statusToneClass(viewing().status)\">{{ statusLabel(viewing().status) }}</span>\n </div>\n\n <div class=\"property-viewing-item__content\">\n <div class=\"property-viewing-item__media\">\n @if (primaryMedia().url) {\n @defer {\n <rolatech-thumbnail [src]=\"primaryMedia().url\" size=\"medium\" mode=\"clip\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"property-viewing-item__media-placeholder\"></div>\n }\n } @else {\n <rolatech-image-placeholder></rolatech-image-placeholder>\n }\n </div>\n\n <div class=\"property-viewing-item__details\">\n <div class=\"property-viewing-item__meta-grid\">\n <div class=\"property-viewing-item__meta-card\">\n <span class=\"property-viewing-item__meta-label\">Requested by</span>\n <strong>{{ requesterName() }}</strong>\n </div>\n\n <div class=\"property-viewing-item__meta-card\">\n <span class=\"property-viewing-item__meta-label\">Preferred slot</span>\n <strong>\n @if (scheduledDate()) {\n {{ scheduledDate() | date: 'mediumDate' }}\n } @else {\n Flexible\n }\n </strong>\n @if (scheduledTime()) {\n <span class=\"property-viewing-item__meta-note\">{{ scheduledTime() }}</span>\n }\n </div>\n\n <div class=\"property-viewing-item__meta-card\">\n <span class=\"property-viewing-item__meta-label\">Move in</span>\n <strong>\n @if (viewing().moveInDate) {\n {{ viewing().moveInDate | date: 'mediumDate' }}\n } @else {\n Not shared\n }\n </strong>\n </div>\n\n <div class=\"property-viewing-item__meta-card\">\n <span class=\"property-viewing-item__meta-label\">Budget</span>\n <strong>\n @if (viewing().monthlyBudget) {\n {{ viewing().monthlyBudget | price }}\n } @else {\n Not shared\n }\n </strong>\n </div>\n </div>\n\n <div class=\"property-viewing-item__facts\">\n <span>{{ viewing().item.bedrooms }} bed</span>\n <span>{{ viewing().item.bathrooms }} bath</span>\n <span>{{ viewing().item.receptions }} reception</span>\n <span>{{ viewing().item.price | price }}</span>\n </div>\n </div>\n </div>\n </article>\n}\n","import { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { RouterModule } from '@angular/router';\nimport { BaseComponent, PageCollectionShellComponent } from '@rolatech/angular-components';\nimport { PropertyViewingItemComponent } from '../../../components/property-viewing-item/property-viewing-item.component';\nimport { PropertyViewing, propertyViewingStatusCode } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\n\n@Component({\n selector: 'rolatech-property-viewing-index',\n imports: [\n CommonModule,\n RouterModule,\n PropertyViewingItemComponent,\n MatPaginatorModule,\n PageCollectionShellComponent,\n ],\n templateUrl: './property-viewing-index.component.html',\n styleUrl: './property-viewing-index.component.scss',\n})\nexport class PropertyViewingIndexComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n select = 0;\n links = [\n {\n name: 'All',\n status: '',\n },\n {\n name: 'Pending',\n status: 'pending',\n },\n {\n name: 'Approved',\n status: 'approved',\n },\n {\n name: 'Completed',\n status: 'completed',\n },\n {\n name: 'Cancelled',\n status: 'cancelled',\n },\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 readonly stats = computed(() => {\n const viewings = this.viewings();\n return [\n { label: 'Requests', value: this.length || viewings.length, hint: 'Every viewing tied to your property activity' },\n { label: 'Pending', value: viewings.filter((item) => propertyViewingStatusCode(item.status) === 'PENDING').length, hint: 'Waiting for team confirmation' },\n { label: 'Approved', value: viewings.filter((item) => propertyViewingStatusCode(item.status) === 'APPROVED').length, hint: 'Confirmed appointments' },\n { label: 'Completed', value: viewings.filter((item) => propertyViewingStatusCode(item.status) === 'COMPLETED').length, hint: 'Already attended' },\n ];\n });\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.findViewingsByUser(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.viewings.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n this.loading = false;\n },\n error: () => {\n this.viewings.set([]);\n this.length = 0;\n this.loading = false;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n statusCompareFn(t1: any, t2: any) {\n return t1 === t2;\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-page-collection-shell\n eyebrow=\"My applications\"\n title=\"My viewing requests\"\n subtitle=\"Keep track of every viewing you asked for, check which appointments were confirmed, and revisit each property from a personal applicant timeline.\"\n>\n <div page-shell-header-meta class=\"property-viewing-index__summary\">\n @for (stat of stats(); track stat.label) {\n <article class=\"property-viewing-index__summary-card\">\n <span class=\"property-viewing-index__summary-value\">{{ stat.value }}</span>\n <span class=\"property-viewing-index__summary-label\">{{ stat.label }}</span>\n </article>\n }\n </div>\n\n <nav class=\"property-viewing-index__status-nav\" aria-label=\"Viewing status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"property-viewing-index__status-link\"\n [class.property-viewing-index__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n\n <section class=\"property-viewing-index__list\">\n @if (loading) {\n @for (row of [0, 1, 2, 3]; track row) {\n <div class=\"property-viewing-index__placeholder\"></div>\n }\n } @else if (viewings().length) {\n @for (item of viewings(); track item.id) {\n <rolatech-property-viewing-item class=\"cursor-pointer\" [routerLink]=\"['./', item.id]\" [viewing]=\"item\"></rolatech-property-viewing-item>\n }\n } @else {\n <div class=\"property-viewing-index__empty\">\n <h3 i18n>No viewings yet</h3>\n <p i18n>Your viewing requests will appear here as soon as the listing team receives them.</p>\n </div>\n }\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 </section>\n</rolatech-page-collection-shell>\n","import { Component, inject } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { offerStatusLabel, PropertyOfferStatus } from '@rolatech/angular-services';\nimport { OfferDetailContext } from '../../offer-data-access/offer-detail.context';\n\n@Component({\n selector: 'rolatech-offer-header-card',\n imports: [NgClass],\n templateUrl: './offer-header-card.html',\n styleUrl: './offer-header-card.scss',\n})\nexport class OfferHeaderCard {\n readonly ctx = inject(OfferDetailContext);\n readonly offerStatusLabel = offerStatusLabel;\n\n private readonly ok = new Set<PropertyOfferStatus>([\n PropertyOfferStatus.ACCEPTED,\n PropertyOfferStatus.REFERENCES_PASSED,\n PropertyOfferStatus.CONTRACT_SIGNED,\n PropertyOfferStatus.MOVE_IN_PAYMENT_PAID,\n PropertyOfferStatus.COMPLETED,\n ]);\n\n private readonly warn = new Set<PropertyOfferStatus>([\n // negotiation\n PropertyOfferStatus.SUBMITTED,\n PropertyOfferStatus.VIEWED_BY_AGENT,\n PropertyOfferStatus.VIEWED_BY_TENANT,\n PropertyOfferStatus.COUNTERED_BY_AGENT,\n PropertyOfferStatus.COUNTERED_BY_TENANT,\n\n // workflow in progress\n PropertyOfferStatus.UNDER_OFFER,\n PropertyOfferStatus.HOLDING_DEPOSIT_PENDING,\n PropertyOfferStatus.HOLDING_DEPOSIT_PAID,\n PropertyOfferStatus.REFERENCING,\n PropertyOfferStatus.CONTRACT_PENDING,\n PropertyOfferStatus.SECURITY_DEPOSIT_PENDING,\n PropertyOfferStatus.SECURITY_DEPOSIT_PAID,\n PropertyOfferStatus.FIRST_RENT_PENDING,\n ]);\n\n private readonly bad = new Set<PropertyOfferStatus>([\n PropertyOfferStatus.REJECTED,\n PropertyOfferStatus.REFERENCES_FAILED,\n PropertyOfferStatus.CONTRACT_FAILED,\n PropertyOfferStatus.CANCELLED,\n PropertyOfferStatus.FAILED,\n PropertyOfferStatus.EXPIRED,\n ]);\n\n statusBadgeClass(status: PropertyOfferStatus | null | undefined) {\n if (!status) return 'offer-header-card__status offer-header-card__status--neutral';\n\n if (this.ok.has(status)) return 'offer-header-card__status offer-header-card__status--positive';\n if (this.warn.has(status)) return 'offer-header-card__status offer-header-card__status--warning';\n if (this.bad.has(status)) return 'offer-header-card__status offer-header-card__status--negative';\n\n // DRAFT or unknown\n return 'offer-header-card__status offer-header-card__status--neutral';\n }\n\n statusHint(status: PropertyOfferStatus | null | undefined): string {\n if (!status) return '';\n\n switch (status) {\n case PropertyOfferStatus.DRAFT:\n return 'Draft offer. Not submitted yet.';\n\n case PropertyOfferStatus.SUBMITTED:\n return 'Submitted. Awaiting agent response.';\n\n case PropertyOfferStatus.VIEWED_BY_AGENT:\n return 'Viewed by agent. Awaiting agent response.';\n case PropertyOfferStatus.VIEWED_BY_TENANT:\n return 'Viewed by tenant. Awaiting tenant response.';\n\n case PropertyOfferStatus.COUNTERED_BY_AGENT:\n return 'Agent countered. Awaiting tenant response.';\n case PropertyOfferStatus.COUNTERED_BY_TENANT:\n return 'Tenant countered. Awaiting agent response.';\n\n case PropertyOfferStatus.ACCEPTED:\n return 'Accepted in principle. Next steps required.';\n\n case PropertyOfferStatus.UNDER_OFFER:\n return 'Under offer. Property is taken off market.';\n\n case PropertyOfferStatus.HOLDING_DEPOSIT_PENDING:\n return 'Holding deposit invoice issued. Awaiting payment.';\n case PropertyOfferStatus.HOLDING_DEPOSIT_PAID:\n return 'Holding deposit received. Next steps can begin.';\n\n case PropertyOfferStatus.REFERENCING:\n return 'Referencing checks in progress.';\n case PropertyOfferStatus.REFERENCES_PASSED:\n return 'Referencing passed. Proceed to contract.';\n case PropertyOfferStatus.REFERENCES_FAILED:\n return 'Referencing failed. Offer cannot proceed.';\n\n case PropertyOfferStatus.CONTRACT_PENDING:\n return 'Contract issued. Awaiting signatures.';\n case PropertyOfferStatus.CONTRACT_SIGNED:\n return 'Contract signed. Awaiting move-in payments.';\n case PropertyOfferStatus.CONTRACT_FAILED:\n return 'Contract signing failed or expired.';\n\n case PropertyOfferStatus.SECURITY_DEPOSIT_PENDING:\n return 'Security deposit invoice issued. Awaiting payment.';\n case PropertyOfferStatus.SECURITY_DEPOSIT_PAID:\n return 'Security deposit paid.';\n\n case PropertyOfferStatus.FIRST_RENT_PENDING:\n return 'First rent invoice issued. Awaiting payment.';\n case PropertyOfferStatus.MOVE_IN_PAYMENT_PAID:\n return 'All move-in payments received. Ready to complete.';\n\n case PropertyOfferStatus.COMPLETED:\n return 'Completed. Tenancy has started.';\n\n case PropertyOfferStatus.REJECTED:\n return 'Rejected by agent/landlord.';\n case PropertyOfferStatus.EXPIRED:\n return 'Expired due to no response.';\n case PropertyOfferStatus.CANCELLED:\n return 'Cancelled by staff/system.';\n case PropertyOfferStatus.FAILED:\n return 'Failed due to an error or invalid state.';\n default:\n return '';\n }\n }\n\n typeLabel(value: string | null | undefined) {\n if (!value) {\n return 'Offer';\n }\n\n return `${String(value).toLowerCase().replace(/^\\w/, (char) => char.toUpperCase())} offer`;\n }\n}\n","@if (ctx.offer(); as o) {\n<section class=\"offer-header-card\">\n <div class=\"offer-header-card__body\">\n <div class=\"offer-header-card__copy\">\n <span class=\"offer-header-card__eyebrow\">{{ typeLabel(o.type) }}</span>\n\n <div class=\"offer-header-card__heading\">\n <div class=\"offer-header-card__heading-copy\">\n <h2 class=\"offer-header-card__title\">Offer #{{ o.id }}</h2>\n <p class=\"offer-header-card__description\">{{ statusHint(o.status) }}</p>\n </div>\n\n <span [ngClass]=\"statusBadgeClass(o.status)\">{{ offerStatusLabel(o.status) }}</span>\n </div>\n </div>\n\n <div class=\"offer-header-card__facts\">\n <article class=\"offer-header-card__fact\">\n <span class=\"offer-header-card__fact-label\">Offer type</span>\n <strong class=\"offer-header-card__fact-value\">{{ typeLabel(o.type) }}</strong>\n </article>\n <article class=\"offer-header-card__fact\">\n <span class=\"offer-header-card__fact-label\">Invoice style</span>\n <strong class=\"offer-header-card__fact-value\">{{ ctx.invoiceOptionLabel[o.invoiceOption] }}</strong>\n </article>\n <article class=\"offer-header-card__fact\">\n <span class=\"offer-header-card__fact-label\">{{ o.type === 'RENTAL' ? 'Applicants' : 'Payment method' }}</span>\n <strong class=\"offer-header-card__fact-value\">\n @if (o.type === 'RENTAL') {\n {{ o.tenants?.length ?? 0 }}\n } @else {\n {{ ctx.asText(o.sale?.paymentMethod) }}\n }\n </strong>\n </article>\n <article class=\"offer-header-card__fact\">\n <span class=\"offer-header-card__fact-label\">Property reference</span>\n <strong class=\"offer-header-card__fact-value\">{{ ctx.asText(o.propertyId) }}</strong>\n </article>\n </div>\n\n <div class=\"offer-header-card__meta\">\n <span class=\"offer-header-card__meta-chip\">Applicant ID {{ ctx.asText(o.userId) }}</span>\n <span class=\"offer-header-card__meta-chip\">Agent ID {{ ctx.asText(o.agentId) }}</span>\n <span class=\"offer-header-card__meta-chip\">Property ID {{ ctx.asText(o.propertyId) }}</span>\n </div>\n </div>\n\n <div class=\"offer-header-card__actions\">\n <ng-content></ng-content>\n </div>\n</section>\n}\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OfferDetailContext } from '../../offer-data-access/offer-detail.context';\nimport { offerStatusLabel, PropertyOfferResponse, PropertyOfferStatus, SalePaymentMethod } from '@rolatech/angular-services';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-offer-side-summary-card',\n imports: [CommonModule, PricePipe],\n templateUrl: './offer-side-summary-card.html',\n styleUrl: './offer-side-summary-card.scss',\n host: { class: 'block' },\n})\nexport class OfferSideSummaryCard {\n readonly ctx = inject(OfferDetailContext);\n readonly statusLabel = offerStatusLabel;\n\n readonly salePaymentMethodLabel: Record<SalePaymentMethod, string> = {\n CASH: 'Cash',\n MORTGAGE: 'Mortgage',\n };\n\n typeLabel(value: string | null | undefined) {\n if (!value) {\n return 'Offer';\n }\n\n return `${String(value).toLowerCase().replace(/^\\w/, (char) => char.toUpperCase())} offer`;\n }\n\n statusToneClass(status: PropertyOfferStatus | null | undefined) {\n switch (status) {\n case PropertyOfferStatus.ACCEPTED:\n case PropertyOfferStatus.REFERENCES_PASSED:\n case PropertyOfferStatus.CONTRACT_SIGNED:\n case PropertyOfferStatus.MOVE_IN_PAYMENT_PAID:\n case PropertyOfferStatus.COMPLETED:\n return 'offer-side-summary-card__status offer-side-summary-card__status--positive';\n case PropertyOfferStatus.REJECTED:\n case PropertyOfferStatus.REFERENCES_FAILED:\n case PropertyOfferStatus.CONTRACT_FAILED:\n case PropertyOfferStatus.CANCELLED:\n case PropertyOfferStatus.FAILED:\n case PropertyOfferStatus.EXPIRED:\n return 'offer-side-summary-card__status offer-side-summary-card__status--negative';\n default:\n return 'offer-side-summary-card__status offer-side-summary-card__status--neutral';\n }\n }\n\n leadAmount(offer: PropertyOfferResponse) {\n if (offer.type === 'RENTAL') {\n return offer.rentalTerms?.amount ?? offer.item.amount;\n }\n\n return offer.sale?.amount ?? offer.item.amount;\n }\n\n nextStepCopy(offer: PropertyOfferResponse) {\n switch (offer.status) {\n case PropertyOfferStatus.SUBMITTED:\n case PropertyOfferStatus.VIEWED_BY_AGENT:\n case PropertyOfferStatus.VIEWED_BY_TENANT:\n return 'The latest offer is waiting for a response.';\n case PropertyOfferStatus.COUNTERED_BY_AGENT:\n case PropertyOfferStatus.COUNTERED_BY_TENANT:\n return 'Compare the latest version against the previous one before responding.';\n case PropertyOfferStatus.ACCEPTED:\n case PropertyOfferStatus.UNDER_OFFER:\n return 'The negotiation has moved forward into the next workflow step.';\n case PropertyOfferStatus.REFERENCING:\n return 'Referencing checks are in progress.';\n case PropertyOfferStatus.COMPLETED:\n return 'The offer flow is complete and kept here as a record.';\n default:\n return 'Use this summary to keep the main terms and references visible while reviewing the detail page.';\n }\n }\n}\n","@if (ctx.offer(); as o) {\n<section class=\"offer-side-summary-card\">\n <div class=\"offer-side-summary-card__hero\">\n <span class=\"offer-side-summary-card__eyebrow\">Quick summary</span>\n <div class=\"offer-side-summary-card__amount\">{{ leadAmount(o) | price }}</div>\n <p class=\"offer-side-summary-card__description\">{{ nextStepCopy(o) }}</p>\n <span [class]=\"statusToneClass(o.status)\">{{ statusLabel(o.status) }}</span>\n </div>\n\n <div class=\"offer-side-summary-card__section\">\n <h3 class=\"offer-side-summary-card__section-title\">Offer details</h3>\n <div class=\"offer-side-summary-card__rows\">\n <div class=\"offer-side-summary-card__row\">\n <span>Type</span>\n <strong>{{ typeLabel(o.type) }}</strong>\n </div>\n <div class=\"offer-side-summary-card__row\">\n <span>Invoice</span>\n <strong>{{ ctx.invoiceOptionLabel[o.invoiceOption] }}</strong>\n </div>\n <div class=\"offer-side-summary-card__row\">\n <span>Listing amount</span>\n <strong>{{ o.item.amount | price }}</strong>\n </div>\n @if (ctx.isRental()) {\n <div class=\"offer-side-summary-card__row\">\n <span>Applicants</span>\n <strong>{{ o.tenants?.length ?? 0 }}</strong>\n </div>\n <div class=\"offer-side-summary-card__row\">\n <span>Move-in</span>\n <strong>{{ o.rentalTerms?.moveInDate ? (o.rentalTerms?.moveInDate | date: 'mediumDate') : '—' }}</strong>\n </div>\n } @else {\n <div class=\"offer-side-summary-card__row\">\n <span>Buyer method</span>\n <strong>{{ salePaymentMethodLabel[o.sale?.paymentMethod!] || ctx.asText(o.sale?.paymentMethod) }}</strong>\n </div>\n <div class=\"offer-side-summary-card__row\">\n <span>Buyer</span>\n <strong>{{ o.sale?.buyerName ?? '—' }}</strong>\n </div>\n }\n </div>\n </div>\n\n <div class=\"offer-side-summary-card__section\">\n <h3 class=\"offer-side-summary-card__section-title\">Route references</h3>\n <div class=\"offer-side-summary-card__chips\">\n <span class=\"offer-side-summary-card__chip\">User {{ ctx.asText(o.userId) }}</span>\n <span class=\"offer-side-summary-card__chip\">Agent {{ ctx.asText(o.agentId) }}</span>\n <span class=\"offer-side-summary-card__chip\">Property {{ ctx.asText(o.propertyId) }}</span>\n </div>\n </div>\n</section>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\nexport interface PropertyWorkspaceStat {\n label: string;\n value: string | number;\n hint?: string;\n}\n\n@Component({\n selector: 'rolatech-property-workspace-shell',\n imports: [CommonModule],\n templateUrl: './property-workspace-shell.html',\n styleUrl: './property-workspace-shell.scss',\n})\nexport class PropertyWorkspaceShell {\n eyebrow = input('Workspace');\n title = input.required<string>();\n description = input('');\n stats = input<PropertyWorkspaceStat[]>([]);\n}\n","<div class=\"property-workspace-shell\">\n <section class=\"property-workspace-shell__hero\">\n <div class=\"property-workspace-shell__copy\">\n <span class=\"property-workspace-shell__eyebrow\">{{ eyebrow() }}</span>\n <h1 class=\"property-workspace-shell__title\">{{ title() }}</h1>\n @if (description()) {\n <p class=\"property-workspace-shell__description\">{{ description() }}</p>\n }\n </div>\n\n @if (stats().length) {\n <div class=\"property-workspace-shell__stats\">\n @for (stat of stats(); track stat.label) {\n <article class=\"property-workspace-shell__stat\">\n <span class=\"property-workspace-shell__stat-value\">{{ stat.value }}</span>\n <span class=\"property-workspace-shell__stat-label\">{{ stat.label }}</span>\n @if (stat.hint) {\n <span class=\"property-workspace-shell__stat-hint\">{{ stat.hint }}</span>\n }\n </article>\n }\n </div>\n }\n </section>\n\n <div class=\"property-workspace-shell__actions\">\n <ng-content select=\"[workspace-actions]\"></ng-content>\n </div>\n\n <div class=\"property-workspace-shell__filters\">\n <ng-content select=\"[workspace-filters]\"></ng-content>\n </div>\n\n <div class=\"property-workspace-shell__body\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, computed, inject, input, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { BaseComponent, PageCollectionShellComponent } from '@rolatech/angular-components';\nimport { PropertyOfferService, offerStatusLabel } from '@rolatech/angular-services';\nimport { RouterLink } from '@angular/router';\nimport { OfferDetailContext } from '../../../offer-data-access/offer-detail.context';\nimport { OfferHeaderCard } from '../../../components/offer-header-card/offer-header-card';\nimport { OfferItemCard } from '../../../components/offer-item-card/offer-item-card';\nimport { OfferRentalTermsCard } from '../../../components/offer-rental-terms-card/offer-rental-terms-card';\nimport { OfferSaleDetailsCard } from '../../../components/offer-sale-details-card/offer-sale-details-card';\nimport { OfferTenantsAccordion } from '../../../components/offer-tenants-accordion/offer-tenants-accordion';\nimport { OfferSideSummaryCard } from '../../../components/offer-side-summary-card/offer-side-summary-card';\nimport { OfferHistoryAccordion } from '../../../components/offer-history-accordion/offer-history-accordion';\nimport {\n MarketMode,\n NegotiationMode,\n PropertyOfferNegotiationFacade,\n} from '../../../offer-data-access/property-offer-negotiation.facade';\nimport { OfferCounterPreviousCard } from '../../../components/offer-counter-previous-card/offer-counter-previous-card';\nimport { OfferCounterLatestCard } from '../../../components/offer-counter-latest-card/offer-counter-latest-card';\nimport { OfferNegotiationSection } from '../../../components/offer-negotiation-section/offer-negotiation-section';\nimport {\n PropertyWorkspaceShell,\n PropertyWorkspaceStat,\n} from '../../../components/property-workspace-shell/property-workspace-shell';\n\n@Component({\n selector: 'rolatech-property-offer-detail',\n imports: [\n CommonModule,\n RouterLink,\n MatButtonModule,\n PageCollectionShellComponent,\n PropertyWorkspaceShell,\n OfferHeaderCard,\n OfferItemCard,\n OfferRentalTermsCard,\n OfferSaleDetailsCard,\n OfferTenantsAccordion,\n OfferSideSummaryCard,\n OfferHistoryAccordion,\n OfferCounterPreviousCard,\n OfferCounterLatestCard,\n OfferNegotiationSection,\n ],\n templateUrl: './property-offer-detail.component.html',\n styleUrl: './property-offer-detail.component.scss',\n providers: [OfferDetailContext, PropertyOfferNegotiationFacade],\n})\nexport class PropertyOfferDetailComponent extends BaseComponent implements OnInit {\n readonly propertyOfferService = inject(PropertyOfferService);\n readonly f = inject(PropertyOfferNegotiationFacade);\n readonly ctx = inject(OfferDetailContext);\n readonly mode = input<NegotiationMode>('tenant');\n readonly market = input<MarketMode>('tenant');\n readonly eyebrow = input<string | null>(null);\n readonly title = input<string | null>(null);\n readonly description = input<string | null>(null);\n readonly backLabel = input<string | null>(null);\n\n private currentOfferId: string | null = this.id ?? null;\n\n readonly statusLabel = computed(() => offerStatusLabel(this.ctx.offer()?.status));\n readonly resolvedEyebrow = computed(\n () => this.eyebrow() ?? (this.mode() === 'agent' ? 'Market workflow' : 'My applications'),\n );\n readonly resolvedTitle = computed(() => this.title() ?? (this.mode() === 'agent' ? 'Offer detail' : 'Offer detail'));\n readonly resolvedDescription = computed(\n () =>\n this.description() ??\n (this.mode() === 'agent'\n ? 'Track buyer-side negotiations, compare counter-offers, and keep the deal moving from one shared workspace.'\n : 'Review every negotiation update, compare offer versions, and keep the next step close at hand.'),\n );\n\n readonly stats = computed<PropertyWorkspaceStat[]>(() => {\n const offer = this.ctx.offer();\n\n if (!offer) {\n return [\n { label: 'Status', value: 'Loading', hint: 'Checking the current negotiation state' },\n { label: 'Type', value: 'Loading', hint: 'Resolving the submitted offer type' },\n { label: 'Applicants', value: 'Loading', hint: 'Looking up the latest submitted party count' },\n { label: 'Offer amount', value: 'Loading', hint: 'Fetching the latest property snapshot' },\n ];\n }\n\n const isRental = offer.type === 'RENTAL';\n\n return [\n {\n label: 'Status',\n value: this.statusLabel(),\n hint: this.mode() === 'agent' ? 'Latest buyer-side negotiation state' : 'Latest response from the listing side',\n },\n {\n label: 'Type',\n value: this.humanize(offer.type),\n hint: isRental ? 'Rental negotiation workflow' : 'Sale negotiation workflow',\n },\n isRental\n ? {\n label: 'Applicants',\n value: offer.tenants?.length ?? 0,\n hint: 'People included in this submission',\n }\n : {\n label: 'Funding',\n value: this.humanize(offer.sale?.paymentMethod),\n hint: 'Declared buyer payment method',\n },\n {\n label: 'Offer amount',\n value: this.formatMoney(offer.item?.amount),\n hint: offer.item?.title || 'Property snapshot attached to this offer',\n },\n ];\n });\n\n ngOnInit() {\n this.route.paramMap.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((params) => {\n const id = params.get('id');\n this.currentOfferId = id;\n\n if (!id) {\n return;\n }\n\n this.ctx.init(id);\n void this.f.load(id, this.market());\n });\n\n this.route.queryParamMap.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((params) => {\n const sessionId = params.get('session_id');\n const offerId = this.currentOfferId;\n\n if (!offerId || !sessionId) {\n return;\n }\n\n this.propertyOfferService.checkOfferPaymentStatus(offerId, sessionId).subscribe({\n next: (res) => {\n if (res.status === 'paid') {\n void this.ctx.reloadOffer(offerId);\n void this.ctx.reloadHistory(offerId);\n void this.f.load(offerId, this.market());\n }\n },\n });\n });\n }\n\n private formatMoney(amount: number | null | undefined) {\n if (amount === null || amount === undefined) {\n return '—';\n }\n\n return new Intl.NumberFormat('en-GB', {\n style: 'currency',\n currency: 'GBP',\n maximumFractionDigits: 0,\n }).format(amount);\n }\n\n private humanize(value: string | null | undefined) {\n if (!value) {\n return '—';\n }\n\n return value\n .trim()\n .replace(/[_-]+/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n","<div class=\"property-offer-detail\">\n @if (mode() === 'agent') {\n <rolatech-property-workspace-shell\n [eyebrow]=\"resolvedEyebrow()\"\n [title]=\"resolvedTitle()\"\n [description]=\"resolvedDescription()\"\n [stats]=\"stats()\"\n >\n <ng-container [ngTemplateOutlet]=\"detailContent\"></ng-container>\n </rolatech-property-workspace-shell>\n } @else {\n <rolatech-page-collection-shell [eyebrow]=\"resolvedEyebrow()\" [title]=\"resolvedTitle()\" [subtitle]=\"resolvedDescription()\">\n <div page-shell-header-meta class=\"property-offer-detail__header-meta\">\n <div class=\"property-offer-detail__page-actions\">\n <a mat-stroked-button routerLink=\"../\">Back to offers</a>\n </div>\n\n <div class=\"property-offer-detail__summary\">\n @for (stat of stats(); track stat.label) {\n <article class=\"property-offer-detail__summary-card\">\n <span class=\"property-offer-detail__summary-value\">{{ stat.value }}</span>\n <span class=\"property-offer-detail__summary-label\">{{ stat.label }}</span>\n @if (stat.hint) {\n <span class=\"property-offer-detail__summary-hint\">{{ stat.hint }}</span>\n }\n </article>\n }\n </div>\n </div>\n\n <ng-container [ngTemplateOutlet]=\"detailContent\"></ng-container>\n </rolatech-page-collection-shell>\n }\n\n <ng-template #detailContent>\n @if (ctx.error()) {\n <section class=\"property-offer-detail__error\">{{ ctx.error() }}</section>\n }\n\n @if (ctx.offer()) {\n <div class=\"property-offer-detail__grid\">\n <div class=\"property-offer-detail__main\">\n <rolatech-offer-header-card></rolatech-offer-header-card>\n <rolatech-offer-negotiation-section />\n <rolatech-offer-item-card />\n\n @if (ctx.isRental()) {\n @if (!f.latest()) {\n <rolatech-offer-rental-terms-card />\n } @else {\n <rolatech-offer-counter-latest-card />\n <rolatech-offer-counter-previous-card />\n }\n\n <rolatech-offer-tenants-accordion />\n }\n\n @if (ctx.isSale()) {\n <rolatech-offer-sale-details-card />\n }\n\n <rolatech-offer-history-accordion />\n </div>\n\n <aside class=\"property-offer-detail__side\">\n <rolatech-offer-side-summary-card />\n </aside>\n </div>\n } @else {\n <section class=\"property-offer-detail__loading\">Loading offer detail...</section>\n }\n </ng-template>\n</div>\n","import { effect, inject, Injectable, signal } from '@angular/core';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { firstValueFrom } from 'rxjs';\nimport { PropertyViewing } from '../interfaces';\n\n@Injectable()\nexport class ViewingDetailContext {\n private readonly propertyService = inject(PropertyService);\n\n readonly viewingId = signal<string | null>(null);\n readonly viewing = signal<PropertyViewing | null>(null);\n\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n\n constructor() {\n effect(() => {\n const id = this.viewingId();\n if (!id) {\n return;\n }\n\n void this.reload(id);\n });\n }\n\n init(id: string) {\n if (this.viewingId() !== id) {\n this.viewing.set(null);\n }\n\n this.error.set(null);\n this.viewingId.set(id);\n }\n\n clear() {\n this.viewingId.set(null);\n this.viewing.set(null);\n this.loading.set(false);\n this.error.set(null);\n }\n\n updateViewing(updater: (viewing: PropertyViewing) => PropertyViewing) {\n const current = this.viewing();\n if (!current) {\n return;\n }\n\n this.viewing.set(updater(current));\n }\n\n async reload(id = this.viewingId()): Promise<void> {\n if (!id) {\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n try {\n const response = await firstValueFrom(this.propertyService.getViewing(id));\n if (this.viewingId() !== id) {\n return;\n }\n\n this.viewing.set(response.data ?? (response as PropertyViewing));\n } catch (error: any) {\n if (this.viewingId() === id) {\n this.error.set(this.errorMessage(error, 'Failed to load viewing detail.'));\n }\n console.error(error);\n } finally {\n if (this.viewingId() === id) {\n this.loading.set(false);\n }\n }\n }\n\n private errorMessage(error: any, fallback: string) {\n return error?.error?.message ?? error?.message ?? fallback;\n }\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { PropertyService, SnackBarService } from '@rolatech/angular-services';\nimport { firstValueFrom } from 'rxjs';\nimport { PropertyViewing, propertyViewingStatusCode, ViewingProposedSlot } from '../interfaces';\nimport { ViewingDetailContext } from './viewing-detail.context';\n\n@Injectable()\nexport class PropertyViewingFacade {\n private readonly propertyService = inject(PropertyService);\n private readonly snackBarService = inject(SnackBarService);\n private readonly ctx = inject(ViewingDetailContext);\n\n readonly viewing = computed(() => this.ctx.viewing());\n readonly acceptingSlotId = signal<string | null>(null);\n readonly cancelling = signal(false);\n\n readonly requiresSlotAcceptance = computed(() => {\n const viewing = this.viewing();\n\n return (\n !viewing?.viewingDate &&\n (viewing?.slotDecisionRequired === true ||\n this.slotProposalSource(viewing) === 'ADMIN_COUNTER' ||\n propertyViewingStatusCode(viewing?.status) === 'COUNTERED')\n );\n });\n\n readonly canCancel = computed(() => {\n const code = propertyViewingStatusCode(this.viewing()?.status);\n return code !== 'CANCELLED' && code !== 'COMPLETED';\n });\n\n canAcceptCounterSlot(slot: Pick<ViewingProposedSlot, 'id'> | null | undefined) {\n return this.requiresSlotAcceptance() && !!slot?.id && this.acceptingSlotId() !== slot.id;\n }\n\n async cancel(): Promise<void> {\n const viewingId = this.ctx.viewingId();\n\n if (!viewingId || !this.viewing() || !this.canCancel() || this.cancelling()) {\n return;\n }\n\n this.cancelling.set(true);\n\n try {\n await firstValueFrom(this.propertyService.cancelViewing(viewingId));\n this.ctx.updateViewing((viewing) => ({\n ...viewing,\n status: 'CANCELLED',\n slotDecisionRequired: false,\n }));\n this.snackBarService.open('Cancelled');\n } catch (error: any) {\n this.snackBarService.open(this.errorMessage(error, 'Failed to cancel viewing.'));\n } finally {\n this.cancelling.set(false);\n }\n }\n\n async acceptCounterSlot(slot: ViewingProposedSlot): Promise<void> {\n const viewingId = this.ctx.viewingId();\n\n if (!viewingId) {\n return;\n }\n\n if (!slot?.id) {\n this.snackBarService.open('This slot cannot be accepted because the slot id is missing.');\n return;\n }\n\n this.acceptingSlotId.set(slot.id);\n\n try {\n const response = await firstValueFrom(this.propertyService.confirmViewing(viewingId, slot.id));\n const nextViewing = response?.data as Partial<PropertyViewing> | undefined;\n\n this.ctx.updateViewing((viewing) => ({\n ...viewing,\n ...nextViewing,\n status: nextViewing?.status ?? 'APPROVED',\n viewingDate: nextViewing?.viewingDate ?? slot.date ?? viewing.viewingDate,\n viewingTime: nextViewing?.viewingTime ?? slot.time ?? viewing.viewingTime,\n proposedSlots: nextViewing?.proposedSlots ?? viewing.proposedSlots,\n item: nextViewing?.item ?? viewing.item,\n slotProposalSource: nextViewing?.slotProposalSource ?? viewing.slotProposalSource,\n slotDecisionRequired: nextViewing?.slotDecisionRequired ?? false,\n }));\n this.snackBarService.open('Viewing confirmed.');\n } catch (error: any) {\n this.snackBarService.open(this.errorMessage(error, 'Failed to confirm viewing.'));\n } finally {\n this.acceptingSlotId.set(null);\n }\n }\n\n private slotProposalSource(viewing: PropertyViewing | null | undefined) {\n const explicitSource = viewing?.slotProposalSource;\n if (explicitSource) {\n return explicitSource.toUpperCase();\n }\n\n const slotSource = viewing?.proposedSlots?.[0]?.source;\n return slotSource ? slotSource.toUpperCase() : 'REQUESTER';\n }\n\n private errorMessage(error: any, fallback: string) {\n return error?.error?.message ?? error?.message ?? fallback;\n }\n}\n","import { Component, computed, effect, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PricePipe } from '@rolatech/angular-common';\nimport {\n ToolbarComponent,\n BaseComponent,\n ThumbnailComponent,\n ImagePlaceholderComponent,\n Skeleton,\n} from '@rolatech/angular-components';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n PropertyApplicantType,\n PropertyViewerCategory,\n propertyViewingStatusCode,\n propertyViewingStatusLabel,\n} from '../../../interfaces';\nimport { RouterLink } from '@angular/router';\nimport { ViewingDetailContext } from '../../../viewing-data-access/viewing-detail.context';\nimport { PropertyViewingFacade } from '../../../viewing-data-access/property-viewing.facade';\n\n@Component({\n selector: 'rolatech-property-viewing-detail',\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n ThumbnailComponent,\n ImagePlaceholderComponent,\n Skeleton,\n ToolbarComponent,\n RouterLink,\n PricePipe,\n ],\n templateUrl: './property-viewing-detail.component.html',\n styleUrl: './property-viewing-detail.component.scss',\n providers: [ViewingDetailContext, PropertyViewingFacade],\n})\nexport class PropertyViewingDetailComponent extends BaseComponent implements OnInit {\n readonly ctx = inject(ViewingDetailContext);\n readonly facade = inject(PropertyViewingFacade);\n readonly viewing = computed(() => this.ctx.viewing());\n readonly applicantType = PropertyApplicantType;\n\n constructor() {\n super();\n\n effect(() => {\n this.titleService.setTitle(this.viewing()?.item?.title || 'Viewing detail');\n });\n }\n\n ngOnInit() {\n this.route.paramMap.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((params) => {\n const id = params.get('id');\n if (!id) {\n this.ctx.clear();\n return;\n }\n\n this.ctx.init(id);\n });\n }\n\n statusLabel(status: string | null | undefined) {\n return propertyViewingStatusLabel(status);\n }\n\n statusToneClass(status: string | null | undefined) {\n switch (propertyViewingStatusCode(status)) {\n case 'APPROVED':\n case 'COMPLETED':\n return 'property-viewing-detail__status property-viewing-detail__status--positive';\n case 'REJECTED':\n case 'CANCELLED':\n return 'property-viewing-detail__status property-viewing-detail__status--negative';\n default:\n return 'property-viewing-detail__status property-viewing-detail__status--neutral';\n }\n }\n\n statusHeadline() {\n if (this.facade.requiresSlotAcceptance()) {\n return 'The listing team returned new slots for you to choose from.';\n }\n\n switch (propertyViewingStatusCode(this.viewing()?.status)) {\n case 'COUNTERED':\n return 'The listing team returned new slots for you to choose from.';\n case 'APPROVED':\n return 'Your viewing is confirmed.';\n case 'COMPLETED':\n return 'This viewing has been completed.';\n case 'REJECTED':\n return 'This viewing request was declined.';\n case 'CANCELLED':\n return 'This viewing request has been cancelled.';\n default:\n return 'Waiting for the listing team to confirm your slot.';\n }\n }\n\n statusDescription() {\n const viewing = this.viewing();\n\n if (!viewing) {\n return '';\n }\n\n if (this.facade.requiresSlotAcceptance()) {\n return 'Review the three returned options below and accept the slot that works best for you.';\n }\n\n if (this.confirmedSlotLabel()) {\n return `Confirmed for ${this.confirmedSlotLabel()}.`;\n }\n\n switch (propertyViewingStatusCode(viewing.status)) {\n case 'REJECTED':\n return 'Review the proposed slots and submit a new request if you still want to visit the property.';\n case 'CANCELLED':\n return 'You can return to the property page whenever you are ready to request another visit.';\n case 'COMPLETED':\n return 'Keep this detail view as a record of the agreed appointment and property summary.';\n default:\n return 'All proposed slots are listed below, and the property card keeps the latest snapshot close at hand.';\n }\n }\n\n confirmedSlotLabel() {\n const viewing = this.viewing();\n\n if (!viewing?.viewingDate) {\n return null;\n }\n\n const date = new Date(viewing.viewingDate);\n const hasValidDate = !Number.isNaN(date.getTime());\n const formattedDate = hasValidDate\n ? new Intl.DateTimeFormat('en-GB', { dateStyle: 'medium' }).format(date)\n : viewing.viewingDate;\n\n return viewing.viewingTime ? `${formattedDate} at ${viewing.viewingTime}` : formattedDate;\n }\n\n isConfirmedSlot(slot: { date?: string | null; time?: string | null }) {\n const viewing = this.viewing();\n return !!viewing?.viewingDate && slot.date === viewing.viewingDate && slot.time === viewing.viewingTime;\n }\n\n primaryMediaUrl() {\n return this.viewing()?.item?.media?.[0]?.url || '';\n }\n\n requesterName() {\n const viewing = this.viewing();\n const fullName = `${viewing?.firstName ?? ''} ${viewing?.lastName ?? ''}`.trim();\n return fullName || 'Viewer';\n }\n\n contactSummary() {\n const viewing = this.viewing();\n\n if (!viewing) {\n return 'Contact details available below';\n }\n\n if (viewing.email && viewing.phone) {\n return `${viewing.email} · ${viewing.phone}`;\n }\n\n return viewing.email || viewing.phone || 'Contact details available below';\n }\n\n viewerCategoryLabel(value: string | null | undefined) {\n if (!value) {\n return 'Not specified';\n }\n\n const normalized = value.toUpperCase();\n if (normalized in PropertyViewerCategory) {\n return this.humanize(normalized);\n }\n\n return this.humanize(value);\n }\n\n applicantTypeLabel(value: string | null | undefined) {\n if (!value) {\n return 'Not shared';\n }\n\n const normalized = value.toUpperCase();\n return this.applicantType[normalized as keyof typeof PropertyApplicantType] || this.humanize(value);\n }\n\n requesterTypeLabel(value: string | null | undefined) {\n return value ? this.humanize(value) : 'Direct request';\n }\n\n private humanize(value: string) {\n return value\n .trim()\n .replace(/[_-]+/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n","<div class=\"property-viewing-detail xl:max-w-[1024px] 2xl:max-w-[1280px] m-auto\">\n <rolatech-toolbar\n [title]=\"viewing() ? 'Viewing detail' : 'Loading viewing'\"\n [subtitle]=\"viewing() ? statusLabel(viewing()?.status) : ''\"\n large\n link=\"../\"\n >\n @if (viewing()?.item?.propertyId; as propertyId) {\n <a mat-stroked-button [routerLink]=\"['../../', propertyId]\" i18n>Open property</a>\n }\n @if (viewing() && facade.canCancel()) {\n <button mat-flat-button type=\"button\" [disabled]=\"facade.cancelling()\" (click)=\"facade.cancel()\" i18n>Cancel request</button>\n }\n </rolatech-toolbar>\n\n @if (viewing(); as viewing) {\n <section class=\"property-viewing-detail__hero\">\n <div class=\"property-viewing-detail__hero-copy\">\n <span class=\"property-viewing-detail__eyebrow\" i18n>Viewing request</span>\n <div class=\"property-viewing-detail__hero-heading\">\n <h1 class=\"property-viewing-detail__title\">{{ viewing.item.title }}</h1>\n <span [class]=\"statusToneClass(viewing.status)\">{{ statusLabel(viewing.status) }}</span>\n </div>\n\n @if (viewing.item.address) {\n <p class=\"property-viewing-detail__address\">{{ viewing.item.address }}</p>\n }\n\n <p class=\"property-viewing-detail__intro\">{{ statusHeadline() }}</p>\n <p class=\"property-viewing-detail__summary-note\">{{ statusDescription() }}</p>\n\n <div class=\"property-viewing-detail__fact-grid\">\n <article class=\"property-viewing-detail__fact\">\n <span class=\"property-viewing-detail__fact-label\" i18n>Confirmed slot</span>\n <strong class=\"property-viewing-detail__fact-value\">{{ confirmedSlotLabel() || 'Awaiting confirmation' }}</strong>\n </article>\n <article class=\"property-viewing-detail__fact\">\n <span class=\"property-viewing-detail__fact-label\" i18n>Move-in target</span>\n <strong class=\"property-viewing-detail__fact-value\">{{\n viewing.moveInDate ? (viewing.moveInDate | date: 'mediumDate') : 'Not shared'\n }}</strong>\n </article>\n <article class=\"property-viewing-detail__fact\">\n <span class=\"property-viewing-detail__fact-label\" i18n>Monthly budget</span>\n <strong class=\"property-viewing-detail__fact-value\">{{\n viewing.monthlyBudget ? (viewing.monthlyBudget | price) : 'Not shared'\n }}</strong>\n </article>\n <article class=\"property-viewing-detail__fact\">\n <span class=\"property-viewing-detail__fact-label\" i18n>Annual income</span>\n <strong class=\"property-viewing-detail__fact-value\">{{\n viewing.annualIncome ? (viewing.annualIncome | price) : 'Not shared'\n }}</strong>\n </article>\n </div>\n </div>\n\n <div class=\"property-viewing-detail__hero-side\">\n <div class=\"property-viewing-detail__property-card\" [routerLink]=\"['../../', viewing.item.propertyId]\">\n <div class=\"property-viewing-detail__media\">\n @if (primaryMediaUrl()) {\n @defer {\n <rolatech-thumbnail [src]=\"primaryMediaUrl()\" size=\"medium\" mode=\"clip\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"property-viewing-detail__media-fallback\"></div>\n }\n } @else {\n <rolatech-image-placeholder></rolatech-image-placeholder>\n }\n </div>\n\n <div class=\"property-viewing-detail__property-copy\">\n <div class=\"property-viewing-detail__property-price\">{{ viewing.item.price | price }}</div>\n <div class=\"property-viewing-detail__property-facts\">\n <span>{{ viewing.item.bedrooms }} bed</span>\n <span>{{ viewing.item.bathrooms }} bath</span>\n <span>{{ viewing.item.receptions }} reception</span>\n </div>\n </div>\n </div>\n\n <div class=\"property-viewing-detail__summary-card\">\n <span class=\"property-viewing-detail__summary-label\" i18n>Requested by</span>\n <strong class=\"property-viewing-detail__summary-value\">{{ requesterName() }}</strong>\n <span class=\"property-viewing-detail__summary-contact\">{{ contactSummary() }}</span>\n </div>\n </div>\n </section>\n\n <div class=\"property-viewing-detail__content\">\n <main class=\"property-viewing-detail__main\">\n <section class=\"property-viewing-detail__panel\">\n <div class=\"property-viewing-detail__panel-head\">\n <div>\n <span class=\"property-viewing-detail__panel-eyebrow\" i18n>Viewer profile</span>\n <h2 class=\"property-viewing-detail__panel-title\" i18n>Contact and application details</h2>\n </div>\n </div>\n\n <div class=\"property-viewing-detail__info-grid\">\n <article class=\"property-viewing-detail__info-card\">\n <span class=\"property-viewing-detail__info-label\" i18n>Name</span>\n <strong>{{ viewing.firstName }} {{ viewing.lastName }}</strong>\n </article>\n <article class=\"property-viewing-detail__info-card\">\n <span class=\"property-viewing-detail__info-label\" i18n>Email</span>\n <strong>{{ viewing.email || 'Not shared' }}</strong>\n </article>\n <article class=\"property-viewing-detail__info-card\">\n <span class=\"property-viewing-detail__info-label\" i18n>Phone</span>\n <strong>{{ viewing.phone || 'Not shared' }}</strong>\n </article>\n <article class=\"property-viewing-detail__info-card\">\n <span class=\"property-viewing-detail__info-label\" i18n>Viewer type</span>\n <strong>{{ viewerCategoryLabel(viewing.viewerCategory) }}</strong>\n </article>\n <article class=\"property-viewing-detail__info-card\">\n <span class=\"property-viewing-detail__info-label\" i18n>Applicant type</span>\n <strong>{{ applicantTypeLabel(viewing.tenantCategory) }}</strong>\n </article>\n <article class=\"property-viewing-detail__info-card\">\n <span class=\"property-viewing-detail__info-label\" i18n>Job title</span>\n <strong>{{ viewing.jobTitle || 'Not shared' }}</strong>\n </article>\n </div>\n </section>\n\n <section class=\"property-viewing-detail__panel\">\n <div class=\"property-viewing-detail__panel-head\">\n <div>\n <span class=\"property-viewing-detail__panel-eyebrow\" i18n>Preferred slots</span>\n <h2 class=\"property-viewing-detail__panel-title\">\n @if (facade.requiresSlotAcceptance()) {\n Choose one of the returned slots\n } @else {\n Availability shared with the listing team\n }\n </h2>\n </div>\n </div>\n\n <div class=\"property-viewing-detail__slot-list\">\n @for (slot of viewing.proposedSlots; track slot.id || $index + ':' + slot.date + ':' + slot.time) {\n <article\n class=\"property-viewing-detail__slot-card\"\n [class.property-viewing-detail__slot-card--confirmed]=\"isConfirmedSlot(slot)\"\n >\n <div class=\"property-viewing-detail__slot-copy\">\n <div class=\"property-viewing-detail__slot-line\">\n <mat-icon>calendar_today</mat-icon>\n <strong>{{ slot.date | date: 'mediumDate' }}</strong>\n </div>\n <div class=\"property-viewing-detail__slot-line\">\n <mat-icon>schedule</mat-icon>\n <span>{{ slot.time }}</span>\n </div>\n </div>\n\n @if (isConfirmedSlot(slot)) {\n <span class=\"property-viewing-detail__slot-state property-viewing-detail__slot-state--confirmed\" i18n\n >Confirmed</span\n >\n } @else if (facade.requiresSlotAcceptance() && slot.id) {\n <button\n mat-flat-button\n type=\"button\"\n [disabled]=\"!facade.canAcceptCounterSlot(slot)\"\n (click)=\"facade.acceptCounterSlot(slot)\"\n >\n @if (facade.acceptingSlotId() === slot.id) {\n Accepting...\n } @else {\n Accept this slot\n }\n </button>\n } @else {\n <span class=\"property-viewing-detail__slot-state\" i18n>Proposed</span>\n }\n </article>\n } @empty {\n <div class=\"property-viewing-detail__empty\" i18n>No proposed slots were attached to this request.</div>\n }\n </div>\n </section>\n </main>\n\n <aside class=\"property-viewing-detail__side\">\n <div class=\"property-viewing-detail__sticky\">\n <section class=\"property-viewing-detail__panel property-viewing-detail__panel--subtle\">\n <span class=\"property-viewing-detail__panel-eyebrow\" i18n>Request context</span>\n <h2 class=\"property-viewing-detail__panel-title\" i18n>How this enquiry was submitted</h2>\n\n <div class=\"property-viewing-detail__summary-list\">\n <div>\n <span class=\"property-viewing-detail__summary-key\" i18n>Requester type</span>\n <strong>{{ requesterTypeLabel(viewing.requesterType) }}</strong>\n </div>\n <div>\n <span class=\"property-viewing-detail__summary-key\" i18n>Requester app</span>\n <strong>{{ viewing.requesterAppId || viewing.appId || 'Not attached' }}</strong>\n </div>\n <div>\n <span class=\"property-viewing-detail__summary-key\" i18n>Requester org</span>\n <strong>{{ viewing.requesterOrgId || viewing.orgId || 'Not attached' }}</strong>\n </div>\n </div>\n </section>\n\n <section class=\"property-viewing-detail__panel property-viewing-detail__panel--subtle\">\n <span class=\"property-viewing-detail__panel-eyebrow\" i18n>Next step</span>\n <h2 class=\"property-viewing-detail__panel-title\" i18n>Keep this request moving</h2>\n <p class=\"property-viewing-detail__summary-note\">\n @if (facade.requiresSlotAcceptance()) {\n Accept the slot that works for you. As soon as you do, the selected appointment becomes the confirmed viewing.\n } @else {\n The listing team will confirm one of the proposed slots or follow up with a new time if availability changes.\n }\n </p>\n\n <div class=\"property-viewing-detail__journey-actions\">\n @if (viewing.item.propertyId) {\n <a mat-stroked-button [routerLink]=\"['../../', viewing.item.propertyId]\" i18n>Return to property</a>\n }\n <a mat-stroked-button routerLink=\"../\" i18n>Back to viewings</a>\n </div>\n </section>\n </div>\n </aside>\n </div>\n } @else {\n <section class=\"property-viewing-detail__hero property-viewing-detail__hero--loading\">\n <div class=\"property-viewing-detail__hero-copy\">\n <rolatech-skeleton class=\"h-5 w-28\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-10 w-3/4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-5 w-full\"></rolatech-skeleton>\n <div class=\"property-viewing-detail__fact-grid\">\n @for (fact of [0, 1, 2, 3]; track fact) {\n <article class=\"property-viewing-detail__fact\">\n <rolatech-skeleton class=\"h-3 w-24\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-6 w-32\"></rolatech-skeleton>\n </article>\n }\n </div>\n </div>\n <div class=\"property-viewing-detail__hero-side\">\n <article class=\"property-viewing-detail__property-card property-viewing-detail__property-card--loading\">\n <rolatech-skeleton class=\"h-full w-full\"></rolatech-skeleton>\n </article>\n </div>\n </section>\n }\n</div>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { RouterModule } from '@angular/router';\nimport {\n ContainerComponent,\n ToolbarComponent,\n ListComponent,\n EmptyComponent,\n BaseComponent,\n} from '@rolatech/angular-components';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatSelectModule } from '@angular/material/select';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyItemComponent } from '../../../components';\n\n@Component({\n selector: 'rolatech-property-wishlist',\n imports: [\n CommonModule,\n ContainerComponent,\n RouterModule,\n ToolbarComponent,\n ListComponent,\n EmptyComponent,\n MatButtonModule,\n MatIconModule,\n FormsModule,\n MatFormFieldModule,\n MatDatepickerModule,\n MatOptionModule,\n MatInputModule,\n MatSelectModule,\n MatButtonModule,\n PropertyItemComponent,\n ],\n templateUrl: './property-wishlist.component.html',\n styleUrl: './property-wishlist.component.scss',\n})\nexport class PropertyWishlistComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n\n wishlist: any;\n ngOnInit(): void {\n this.findWishlist();\n }\n findWishlist() {\n this.propertyService.findWishlist({}).subscribe({\n next: (res: any) => {\n this.wishlist = res.data;\n },\n });\n }\n}\n","<rolatech-container>\n <rolatech-toolbar title=\"Wishlist\" large> </rolatech-toolbar>\n <rolatech-list>\n @if (wishlist) {\n @for (item of wishlist; track item) {\n <rolatech-property-item class=\"cursor-pointer\" [routerLink]=\"['../', item.id]\" [property]=\"item\"></rolatech-property-item>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n </rolatech-list>\n</rolatech-container>\n","// offer-form.validators.ts\nimport { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';\n\nexport function hasAnyValue(v: unknown): boolean {\n if (v == null) return false;\n if (typeof v === 'string') return v.trim().length > 0;\n if (typeof v === 'boolean') return v === true;\n if (typeof v === 'number') return true;\n if (Array.isArray(v)) return v.length > 0;\n if (typeof v === 'object') return Object.values(v as Record<string, unknown>).some((x) => hasAnyValue(x));\n return false;\n}\n\nexport function setValidators(ctrl: AbstractControl | null, validators: any[] | null) {\n if (!ctrl) return;\n ctrl.setValidators(validators);\n ctrl.updateValueAndValidity({ emitEvent: false });\n}\n\nexport function clearAllValidatorsDeep(group: FormGroup) {\n // clears validators/errors for group controls + nested groups\n for (const c of Object.values(group.controls)) {\n if (c instanceof FormControl) {\n c.setValidators(null);\n c.setAsyncValidators(null);\n c.setErrors(null);\n c.updateValueAndValidity({ emitEvent: false });\n } else if (c instanceof FormGroup) {\n clearAllValidatorsDeep(c);\n c.updateValueAndValidity({ emitEvent: false });\n }\n }\n group.updateValueAndValidity({ emitEvent: false });\n}\n\nexport function requiredIf(on: boolean, ...extra: any[]) {\n return on ? [Validators.required, ...extra] : null;\n}\n","import { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { firstValueFrom, Subscription } from 'rxjs';\nimport {\n AdverseCreditStatus,\n ApplicantType,\n CreateRentalOfferPayload,\n CreateSaleOfferPayload,\n EmploymentStatus,\n Gender,\n GuarantorRelationshipType,\n GuarantorType,\n OfferType,\n PropertyOfferResponse,\n PropertyOfferService,\n VisaShareCodeStatus,\n VisaStatus,\n} from '@rolatech/angular-services';\nimport { hasAnyValue, setValidators } from './offer-form.validators';\n\nfunction uid(): string {\n return (globalThis.crypto?.randomUUID?.() ?? Math.random().toString(16).slice(2)) as string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class OfferFormFacade {\n private readonly fb = inject(FormBuilder);\n private readonly api = inject(PropertyOfferService);\n\n readonly offerType = signal<OfferType>('RENTAL');\n readonly propertyId = signal<string>('');\n\n readonly submitting = signal(false);\n readonly submitError = signal<string | null>(null);\n\n readonly form = signal<FormGroup>(this.buildForm());\n\n readonly tenantsArray = computed(() => this.form().get('tenants') as FormArray<FormGroup>);\n private readonly tenantsVersion = signal(0);\n\n readonly tenantCount = computed(() => {\n this.tenantsVersion();\n return this.tenantsArray().length;\n });\n\n readonly canRemoveTenant = computed(() => this.tenantCount() > 1);\n\n readonly tenantClientKeys = computed(() => {\n this.tenantsVersion();\n return this.tenantsArray().controls.map((c) => c.get('clientKey')?.value as string);\n });\n\n readonly isRental = computed(() => this.offerType() === 'RENTAL');\n readonly isSale = computed(() => this.offerType() === 'SALE');\n\n readonly rentalGroup = computed(() => this.form().get('rental') as FormGroup);\n readonly saleGroup = computed(() => this.form().get('sale') as FormGroup);\n\n // ✅ prevent leaks\n private readonly tenantSubs = new Map<string, Subscription>();\n readonly submitIssues = signal<string[]>([]);\n\n constructor() {\n effect(() => {\n this.applyOfferTypeValidators(this.offerType());\n });\n\n effect(() => {\n if (this.isRental()) {\n if (this.tenantsArray().length === 0) this.addTenant();\n } else {\n // ✅ switching to SALE: clear tenants + clean subscriptions\n this.clearAllTenants();\n }\n });\n }\n\n setOfferType(type: OfferType) {\n this.offerType.set(type);\n }\n\n setPropertyId(id: string) {\n this.propertyId.set(id);\n }\n\n /** -------- tenant ops -------- */\n\n addTenant(): void {\n if (this.tenantsArray().length >= 6) return;\n\n const tenantGroup = this.buildTenantGroup();\n this.tenantsArray().push(tenantGroup);\n\n this.bindTenantRuleReactivity(tenantGroup);\n\n const guarantorGroup = tenantGroup.get('guarantor') as FormGroup;\n this.wireGuarantorRelationshipRules(guarantorGroup);\n // this.wireGuarantorCompleteness(guarantorGroup);\n\n this.tenantsVersion.update((v) => v + 1);\n\n // ensure rules applied once\n this.applyTenantDynamicValidators();\n }\n\n removeTenantByClientKey(clientKey: string): void {\n if (!clientKey) return;\n\n const arr = this.tenantsArray();\n if (!arr?.controls?.length) return;\n\n const idx = arr.controls.findIndex((c: FormGroup) => {\n const key = c.get('clientKey')?.getRawValue?.() ?? c.get('clientKey')?.value;\n return key === clientKey;\n });\n\n if (idx < 0) return;\n\n // ✅ unsubscribe tenant watchers\n this.tenantSubs.get(clientKey)?.unsubscribe();\n this.tenantSubs.delete(clientKey);\n\n arr.removeAt(idx);\n this.tenantsVersion.update((v) => v + 1);\n\n this.applyTenantDynamicValidators();\n }\n\n removeTenantById(id: string) {\n const idx = this.tenantsArray().controls.findIndex((c) => c.get('id')?.value === id);\n if (idx >= 0) this.tenantsArray().removeAt(idx);\n this.tenantsVersion.update((v) => v + 1);\n this.applyTenantDynamicValidators();\n }\n\n tenantGroupById(id: string): FormGroup {\n const g = this.tenantsArray().controls.find((c) => c.get('id')?.value === id);\n if (!g) throw new Error(`Tenant form group not found for id=${id}`);\n return g;\n }\n\n tenantGroupByClientKey(clientKey: string): FormGroup {\n const g = this.tenantsArray().controls.find((c) => c.get('clientKey')?.value === clientKey);\n if (!g) throw new Error(`Tenant group not found for clientKey=${clientKey}`);\n return g;\n }\n\n hasTenantId(id: string | null | undefined): boolean {\n if (!id) return false;\n return this.tenantsArray().controls.some((control) => control.get('id')?.value === id);\n }\n\n addTenantFromSavedRecord(record: any): string | null {\n const existingId = record?.id ?? null;\n if (this.hasTenantId(existingId)) {\n return this.tenantsArray().controls.find((control) => control.get('id')?.value === existingId)?.get('clientKey')?.value ?? null;\n }\n\n const arr = this.tenantsArray();\n const leadTenant = arr.at(0) as FormGroup | undefined;\n const canReuseLeadTenant = arr.length === 1 && !!leadTenant && this.isTenantBlank(leadTenant);\n const tenantGroup = canReuseLeadTenant ? leadTenant : this.buildTenantGroup();\n\n this.patchTenantGroupFromRecord(tenantGroup, record);\n\n if (!canReuseLeadTenant) {\n arr.push(tenantGroup);\n this.bindTenantRuleReactivity(tenantGroup);\n\n const guarantorGroup = tenantGroup.get('guarantor') as FormGroup;\n this.wireGuarantorRelationshipRules(guarantorGroup);\n }\n\n this.tenantsVersion.update((v) => v + 1);\n this.applyTenantDynamicValidators();\n\n return tenantGroup.get('clientKey')?.value ?? null;\n }\n\n toTenantPayloadByClientKey(clientKey: string): Record<string, any> {\n return this.toTenantPayload(this.tenantGroupByClientKey(clientKey).getRawValue());\n }\n\n async submit(): Promise<PropertyOfferResponse | null> {\n this.submitError.set(null);\n\n // ✅ apply dynamic validators before checking invalid\n if (this.isRental()) this.applyTenantDynamicValidators();\n\n this.form().markAllAsTouched();\n this.form().updateValueAndValidity();\n\n console.log(this.form().value);\n if (this.form().invalid) {\n const issues = this.collectFriendlyIssues();\n this.submitIssues.set(issues);\n this.submitError.set(\n issues.length\n ? `Please fix the following: \\n• ${issues.join('\\n• ')}`\n : 'Please check the form. Some fields are missing or invalid.',\n );\n\n return null;\n }\n\n this.submitting.set(true);\n try {\n if (this.isRental()) {\n return (await firstValueFrom(this.api.createRental(this.toCreateRentalPayload()))).data;\n }\n return (await firstValueFrom(this.api.createSale(this.toCreateSalePayload()))).data;\n } catch (e: any) {\n this.submitError.set(e?.message ?? 'Failed to submit offer.');\n return null;\n } finally {\n this.submitting.set(false);\n }\n }\n\n // ---------- private ----------\n\n private buildForm(): FormGroup {\n return this.fb.group({\n rental: this.fb.group({\n amount: new FormControl<number | null>(null),\n moveInDate: new FormControl<string | null>(null),\n paymentFrequency: new FormControl<string | null>(null),\n tenancyLengthMonths: new FormControl<number | null>(null),\n breakClauseMonths: new FormControl<number | null>(null),\n pets: this.fb.control<string[]>([], { nonNullable: true }),\n smoker: this.fb.control(false, { nonNullable: true }),\n furnitureRequirement: new FormControl<string | null>(null),\n additionalRequests: new FormControl<string | null>(null),\n }),\n\n tenants: this.fb.array<FormGroup>([]),\n\n sale: this.fb.group({\n amount: new FormControl<number | null>(null),\n buyerName: new FormControl<string | null>(null),\n email: new FormControl<string | null>(null),\n phone: new FormControl<string | null>(null),\n paymentMethod: new FormControl<string | null>(null),\n proposedExchangeDate: new FormControl<string | null>(null),\n solicitorCompanyName: new FormControl<string | null>(null),\n }),\n });\n }\n\n private buildTenantGroup(): FormGroup {\n return this.fb.group({\n clientKey: this.fb.control(uid(), { nonNullable: true }),\n id: this.fb.control<string | null>(null),\n\n fullName: this.fb.control<string | null>(null, [Validators.required]),\n dob: this.fb.control<string | null>(null, [Validators.required]),\n gender: this.fb.control<Gender | null>(null, [Validators.required]),\n nationality: this.fb.control<string | null>(null, [Validators.required]),\n visaStatus: this.fb.control<VisaStatus | null>(null, [Validators.required]),\n visaShareCodeStatus: this.fb.control<VisaShareCodeStatus | null>(null),\n visaShareCodeOther: this.fb.control<string | null>(null),\n\n phone: this.fb.control<string | null>(null, [Validators.required]),\n email: this.fb.control<string | null>(null, [Validators.required, Validators.email]),\n\n address: this.fb.group({\n line1: this.fb.control<string | null>(null, [Validators.required]),\n line2: this.fb.control<string | null>(null, [Validators.required]),\n city: this.fb.control<string | null>(null, [Validators.required]),\n postcode: this.fb.control<string | null>(null, [Validators.required]),\n country: this.fb.control<string | null>(null, [Validators.required]),\n }),\n\n adverseCreditStatus: this.fb.control<AdverseCreditStatus | null>(null, [Validators.required]),\n applicantType: this.fb.control<ApplicantType | null>(null, [Validators.required]),\n\n employmentStatus: this.fb.control<EmploymentStatus | null>(null),\n companyName: this.fb.control<string | null>(null),\n jobTitle: this.fb.control<string | null>(null),\n annualSalary: this.fb.control<number | null>(null),\n companyNumber: this.fb.control<string | null>(null),\n taxReturnSubmitted: this.fb.control(false, { nonNullable: true }),\n\n corporateCompanyName: this.fb.control<string | null>(null),\n corporateCompanyNumber: this.fb.control<string | null>(null),\n corporateJobTitle: this.fb.control<string | null>(null),\n\n universityName: this.fb.control<string | null>(null),\n courseTitle: this.fb.control<string | null>(null),\n yearOfStudy: this.fb.control<number | null>(null),\n\n guarantor: this.fb.group({\n fullName: this.fb.control<string | null>(null),\n dob: this.fb.control<string | null>(null),\n gender: this.fb.control<Gender | null>(null),\n nationality: this.fb.control<string | null>(null),\n phone: this.fb.control<string | null>(null),\n email: this.fb.control<string | null>(null),\n\n address: this.fb.group({\n line1: this.fb.control<string | null>(null),\n line2: this.fb.control<string | null>(null),\n city: this.fb.control<string | null>(null),\n postcode: this.fb.control<string | null>(null),\n country: this.fb.control<string | null>(null),\n }),\n\n // ❗️NOT required by default (required only when guarantor required)\n type: this.fb.control<GuarantorType | null>(null),\n\n employmentStatus: this.fb.control<EmploymentStatus | null>(null),\n companyName: this.fb.control<string | null>(null),\n jobTitle: this.fb.control<string | null>(null),\n annualSalary: this.fb.control<number | null>(null),\n companyNumber: this.fb.control<string | null>(null),\n taxReturnSubmitted: this.fb.control(false, { nonNullable: true }),\n additionalFinancialSupport: this.fb.control<string | null>(null),\n relationshipType: this.fb.control<GuarantorRelationshipType | null>(null),\n relationshipOther: this.fb.control<string | null>(null),\n }),\n });\n }\n\n private applyOfferTypeValidators(type: OfferType) {\n const rental = this.form().get('rental') as FormGroup;\n const sale = this.form().get('sale') as FormGroup;\n\n for (const ctrl of Object.values(rental.controls)) ctrl.clearValidators();\n for (const ctrl of Object.values(sale.controls)) ctrl.clearValidators();\n\n if (type === 'RENTAL') {\n rental.get('amount')?.setValidators([Validators.required, Validators.min(1)]);\n rental.get('moveInDate')?.setValidators([Validators.required]);\n rental.get('paymentFrequency')?.setValidators([Validators.required]);\n rental.get('tenancyLengthMonths')?.setValidators([Validators.required, Validators.min(1)]);\n rental.get('breakClauseMonths')?.setValidators([Validators.required, Validators.min(0)]);\n // rental.get('pets')?.setValidators([Validators.required]);\n rental.get('smoker')?.setValidators([Validators.required]);\n rental.get('furnitureRequirement')?.setValidators([Validators.required]);\n\n this.applyTenantDynamicValidators();\n }\n\n if (type === 'SALE') {\n sale.get('amount')?.setValidators([Validators.required, Validators.min(1)]);\n sale.get('buyerName')?.setValidators([Validators.required]);\n sale.get('email')?.setValidators([Validators.required, Validators.email]);\n sale.get('phone')?.setValidators([Validators.required]);\n sale.get('paymentMethod')?.setValidators([Validators.required]);\n sale.get('proposedExchangeDate')?.setValidators([Validators.required]);\n sale.get('solicitorCompanyName')?.setValidators([Validators.required]);\n }\n\n rental.updateValueAndValidity({ emitEvent: false });\n sale.updateValueAndValidity({ emitEvent: false });\n this.form().updateValueAndValidity({ emitEvent: false });\n }\n private applyGuarantorTypeValidators(guarantor: FormGroup) {\n // clear previous variant validators first\n guarantor.get('type')?.clearValidators();\n guarantor.get('employmentStatus')?.clearValidators();\n guarantor.get('companyName')?.clearValidators();\n guarantor.get('jobTitle')?.clearValidators();\n guarantor.get('annualSalary')?.clearValidators();\n guarantor.get('companyNumber')?.clearValidators();\n guarantor.get('taxReturnSubmitted')?.clearValidators();\n guarantor.get('additionalFinancialSupport')?.clearValidators();\n\n const type = guarantor.get('type')?.value as GuarantorType | null;\n const emp = guarantor.get('employmentStatus')?.value as EmploymentStatus | null;\n\n // type is required when guarantor required\n guarantor.get('type')?.setValidators([Validators.required]);\n\n // ✅ Example assumptions (adjust if your enum values differ):\n // GuarantorType: 'INDIVIDUAL' | 'COMPANY'\n if (type === 'COMPANY') {\n // Company guarantor: require companyName/email/phone (your group already has these fields)\n guarantor.get('companyName')?.setValidators([Validators.required]);\n guarantor.get('email')?.setValidators([Validators.required, Validators.email]);\n guarantor.get('phone')?.setValidators([Validators.required]);\n return;\n }\n\n if (type === 'INDIVIDUAL') {\n guarantor.get('employmentStatus')?.setValidators([Validators.required]);\n\n if (emp === 'EMPLOYED') {\n guarantor.get('jobTitle')?.setValidators([Validators.required]);\n guarantor.get('companyName')?.setValidators([Validators.required]);\n guarantor.get('annualSalary')?.setValidators([Validators.required, Validators.min(1)]);\n }\n\n if (emp === 'SELF_EMPLOYED') {\n guarantor.get('companyName')?.setValidators([Validators.required]);\n guarantor.get('jobTitle')?.setValidators([Validators.required]);\n guarantor.get('annualSalary')?.setValidators([Validators.required, Validators.min(1)]);\n guarantor.get('companyNumber')?.setValidators([Validators.required]);\n guarantor.get('taxReturnSubmitted')?.setValidators([Validators.required]);\n }\n\n if (emp === 'UNEMPLOYED') {\n guarantor.get('additionalFinancialSupport')?.setValidators([Validators.required]);\n }\n }\n }\n applyTenantDynamicValidators() {\n for (const g of this.tenantsArray().controls) {\n // base required\n g.get('fullName')?.setValidators([Validators.required]);\n g.get('dob')?.setValidators([Validators.required]);\n g.get('gender')?.setValidators([Validators.required]);\n g.get('nationality')?.setValidators([Validators.required]);\n g.get('visaStatus')?.setValidators([Validators.required]);\n g.get('phone')?.setValidators([Validators.required]);\n g.get('email')?.setValidators([Validators.required, Validators.email]);\n g.get('adverseCreditStatus')?.setValidators([Validators.required]);\n g.get('applicantType')?.setValidators([Validators.required]);\n\n // tenant address required (✅ do it properly, not 'address.line1' string)\n const tAddr = g.get('address') as FormGroup;\n tAddr.get('line1')?.setValidators([Validators.required]);\n tAddr.get('line2')?.setValidators([Validators.required]);\n tAddr.get('city')?.setValidators([Validators.required]);\n tAddr.get('postcode')?.setValidators([Validators.required]);\n tAddr.get('country')?.setValidators([Validators.required]);\n\n // clear variant validators\n g.get('employmentStatus')?.clearValidators();\n g.get('companyName')?.clearValidators();\n g.get('jobTitle')?.clearValidators();\n g.get('annualSalary')?.clearValidators();\n g.get('companyNumber')?.clearValidators();\n g.get('taxReturnSubmitted')?.clearValidators();\n\n g.get('corporateCompanyName')?.clearValidators();\n g.get('corporateCompanyNumber')?.clearValidators();\n g.get('corporateJobTitle')?.clearValidators();\n\n g.get('universityName')?.clearValidators();\n g.get('courseTitle')?.clearValidators();\n g.get('yearOfStudy')?.clearValidators();\n\n g.get('visaShareCodeStatus')?.clearValidators();\n g.get('visaShareCodeOther')?.clearValidators();\n\n const applicantType = g.get('applicantType')?.value as ApplicantType | null;\n const employmentStatus = g.get('employmentStatus')?.value as EmploymentStatus | null;\n\n const guarantor = g.get('guarantor') as FormGroup;\n this.enforceGuarantorWhenRequiredOrActive(guarantor, false);\n\n if (applicantType === 'INDIVIDUAL') {\n g.get('employmentStatus')?.setValidators([Validators.required]);\n\n if (employmentStatus === 'EMPLOYED') {\n g.get('companyName')?.setValidators([Validators.required]);\n g.get('jobTitle')?.setValidators([Validators.required]);\n g.get('annualSalary')?.setValidators([Validators.required, Validators.min(1)]);\n }\n\n if (employmentStatus === 'SELF_EMPLOYED') {\n g.get('companyName')?.setValidators([Validators.required]);\n g.get('jobTitle')?.setValidators([Validators.required]);\n g.get('annualSalary')?.setValidators([Validators.required, Validators.min(1)]);\n g.get('companyNumber')?.setValidators([Validators.required]);\n g.get('taxReturnSubmitted')?.setValidators([Validators.required]);\n }\n }\n\n if (applicantType === 'CORPORATE') {\n g.get('corporateCompanyName')?.setValidators([Validators.required]);\n g.get('corporateCompanyNumber')?.setValidators([Validators.required]);\n g.get('corporateJobTitle')?.setValidators([Validators.required]);\n }\n\n if (applicantType === 'STUDENT') {\n g.get('universityName')?.setValidators([Validators.required]);\n g.get('courseTitle')?.setValidators([Validators.required]);\n g.get('yearOfStudy')?.setValidators([Validators.required, Validators.min(1)]);\n }\n\n if (this.isVisaShareCodeRequired(g)) {\n g.get('visaShareCodeStatus')?.setValidators([Validators.required]);\n\n const sc = g.get('visaShareCodeStatus')?.value as VisaShareCodeStatus | null;\n if (sc === 'OTHER') {\n g.get('visaShareCodeOther')?.setValidators([Validators.required, Validators.maxLength(120)]);\n }\n } else {\n // normalize if not applicable\n this.resetControls(g as FormGroup, ['visaShareCodeStatus', 'visaShareCodeOther']);\n }\n\n g.get('visaShareCodeStatus')?.updateValueAndValidity({ emitEvent: false });\n g.get('visaShareCodeOther')?.updateValueAndValidity({ emitEvent: false });\n\n // update\n g.updateValueAndValidity({ emitEvent: false });\n tAddr.updateValueAndValidity({ emitEvent: false });\n guarantor.updateValueAndValidity({ emitEvent: false });\n (guarantor.get('address') as FormGroup).updateValueAndValidity({ emitEvent: false });\n }\n }\n\n private clearGuarantorValidators(guarantor: FormGroup) {\n // clear direct guarantor controls\n for (const c of Object.values(guarantor.controls)) {\n if (c instanceof FormControl) {\n c.setValidators(null);\n c.setAsyncValidators(null);\n c.setErrors(null);\n c.updateValueAndValidity({ emitEvent: false });\n }\n }\n\n // clear guarantor address controls\n const addr = guarantor.get('address') as FormGroup;\n for (const c of Object.values(addr.controls)) {\n c.setValidators(null);\n c.setAsyncValidators(null);\n c.setErrors(null);\n c.updateValueAndValidity({ emitEvent: false });\n }\n\n guarantor.updateValueAndValidity({ emitEvent: false });\n addr.updateValueAndValidity({ emitEvent: false });\n }\n\n private requireGuarantor(guarantor: FormGroup) {\n // --- A) base required info ---\n setValidators(guarantor.get('fullName'), [Validators.required, Validators.maxLength(120)]);\n setValidators(guarantor.get('dob'), [Validators.required]);\n setValidators(guarantor.get('gender'), [Validators.required]);\n setValidators(guarantor.get('nationality'), [Validators.required]);\n setValidators(guarantor.get('phone'), [Validators.required, Validators.maxLength(40)]);\n setValidators(guarantor.get('email'), [Validators.required, Validators.email, Validators.maxLength(160)]);\n\n const addr = guarantor.get('address') as FormGroup;\n setValidators(addr.get('line1'), [Validators.required, Validators.maxLength(160)]);\n setValidators(addr.get('line2'), [Validators.required, Validators.maxLength(160)]);\n setValidators(addr.get('city'), [Validators.required, Validators.maxLength(120)]);\n setValidators(addr.get('postcode'), [Validators.required, Validators.maxLength(20)]);\n setValidators(addr.get('country'), [Validators.required, Validators.maxLength(80)]);\n\n setValidators(guarantor.get('type'), [Validators.required]);\n setValidators(guarantor.get('relationshipType'), [Validators.required]);\n\n // relationshipOther required only when OTHER\n const rt = guarantor.get('relationshipType')?.value as GuarantorRelationshipType | null;\n const other = guarantor.get('relationshipOther');\n if (rt === 'OTHER') {\n setValidators(other, [Validators.required, Validators.maxLength(120)]);\n } else {\n setValidators(other, [Validators.maxLength(120)]); // optional\n other?.reset(null, { emitEvent: false });\n }\n\n // ---- Variant validators only after type chosen ----\n const gt = guarantor.get('type')?.value as GuarantorType | null;\n if (gt) this.applyGuarantorTypeValidators(guarantor);\n\n guarantor.updateValueAndValidity({ emitEvent: false });\n addr.updateValueAndValidity({ emitEvent: false });\n\n }\n private bindTenantRuleReactivity(g: FormGroup) {\n const clientKey = g.get('clientKey')?.value as string;\n if (!clientKey) return;\n\n this.tenantSubs.get(clientKey)?.unsubscribe();\n\n const applicantTypeCtrl = g.get('applicantType') as FormControl<ApplicantType | null>;\n const employmentStatusCtrl = g.get('employmentStatus') as FormControl<EmploymentStatus | null>;\n\n const guarantor = g.get('guarantor') as FormGroup;\n const guarantorTypeCtrl = guarantor.get('type') as FormControl<GuarantorType | null>;\n const guarantorEmpCtrl = guarantor.get('employmentStatus') as FormControl<EmploymentStatus | null>;\n const visaStatusCtrl = g.get('visaStatus') as FormControl<VisaStatus | null>;\n const visaShareCodeStatusCtrl = g.get('visaShareCodeStatus') as FormControl<VisaShareCodeStatus | null>;\n const sub = new Subscription();\n\n // ✅ When user edits anything in guarantor -> re-evaluate validators immediately\n const gBasicKeys = ['fullName', 'dob', 'gender', 'nationality', 'phone', 'email'] as const;\n for (const k of gBasicKeys) {\n const c = guarantor.get(k);\n if (c instanceof FormControl) sub.add(c.valueChanges.subscribe(() => this.applyTenantDynamicValidators()));\n }\n\n const gMetaKeys = ['type', 'employmentStatus', 'companyName', 'jobTitle', 'annualSalary', 'companyNumber'] as const;\n for (const k of gMetaKeys) {\n const c = guarantor.get(k);\n if (c instanceof FormControl) sub.add(c.valueChanges.subscribe(() => this.applyTenantDynamicValidators()));\n }\n\n const gRelKeys = ['relationshipType', 'relationshipOther'] as const;\n for (const k of gRelKeys) {\n const c = guarantor.get(k);\n if (c instanceof FormControl) sub.add(c.valueChanges.subscribe(() => this.applyTenantDynamicValidators()));\n }\n\n // address edits also activate guarantor requirements\n const gAddr = guarantor.get('address') as FormGroup;\n for (const k of ['line1', 'line2', 'city', 'postcode', 'country'] as const) {\n const c = gAddr.get(k);\n if (c instanceof FormControl) sub.add(c.valueChanges.subscribe(() => this.applyTenantDynamicValidators()));\n }\n\n // Applicant type changed => clear tenant variant fields\n sub.add(\n applicantTypeCtrl.valueChanges.subscribe(() => {\n // clear tenant variant values when switching type (prevents carry-over)\n this.clearTenantVariantValues(g);\n\n this.applyTenantDynamicValidators();\n }),\n );\n\n sub.add(\n visaStatusCtrl.valueChanges.subscribe(() => {\n this.resetControls(g, ['visaShareCodeStatus', 'visaShareCodeOther']);\n this.applyTenantDynamicValidators();\n }),\n );\n\n sub.add(\n visaShareCodeStatusCtrl.valueChanges.subscribe((v) => {\n if (v !== 'OTHER') this.resetControls(g, ['visaShareCodeOther']);\n this.applyTenantDynamicValidators();\n }),\n );\n\n // Tenant employmentStatus changed => clear tenant employment-specific values\n sub.add(\n employmentStatusCtrl.valueChanges.subscribe((emp) => {\n // clear tenant employment variant fields when switching status\n // (optional: keep companyName if you want; you asked to clear)\n if (emp === 'SELF_EMPLOYED') {\n this.resetControls(g, ['companyName', 'jobTitle', 'annualSalary', 'companyNumber', 'taxReturnSubmitted'], {\n taxReturnSubmitted: false,\n });\n } else {\n this.resetControls(g, ['companyName', 'jobTitle', 'annualSalary', 'companyNumber', 'taxReturnSubmitted']);\n }\n\n this.applyTenantDynamicValidators();\n }),\n );\n\n // Guarantor type changed => clear guarantor variant fields and re-apply type validators\n sub.add(\n guarantorTypeCtrl.valueChanges.subscribe(() => {\n this.clearGuarantorVariantValues(guarantor);\n this.applyTenantDynamicValidators();\n }),\n );\n\n // Guarantor employment status changed => clear employment-dependent fields + re-apply type validators\n sub.add(\n guarantorEmpCtrl.valueChanges.subscribe((emp) => {\n if (emp === 'SELF_EMPLOYED') {\n this.resetControls(\n guarantor,\n [\n 'jobTitle',\n 'annualSalary',\n 'companyNumber',\n 'taxReturnSubmitted',\n 'additionalFinancialSupport',\n 'relationshipType',\n 'relationshipOther',\n ],\n {\n taxReturnSubmitted: false,\n },\n );\n } else {\n this.resetControls(guarantor, [\n 'jobTitle',\n 'annualSalary',\n 'companyNumber',\n 'taxReturnSubmitted',\n 'additionalFinancialSupport',\n 'relationshipType',\n 'relationshipOther',\n ]);\n }\n this.applyTenantDynamicValidators();\n }),\n );\n\n this.tenantSubs.set(clientKey, sub);\n\n // apply once\n this.applyTenantDynamicValidators();\n }\n // ✅ PUT IT HERE (facade private helper)\n private isVisaShareCodeRequired(g: FormGroup): boolean {\n const applicantType = g.get('applicantType')?.value as ApplicantType | null;\n const visaStatus = g.get('visaStatus')?.value as VisaStatus | null;\n\n if (applicantType !== 'INDIVIDUAL' && applicantType !== 'STUDENT') return false;\n if (!visaStatus) return false;\n\n // Adjust if your VisaStatus enum differs\n return visaStatus === 'VISA_HOLDER';\n }\n private wireGuarantorRelationshipRules(guarantorGroup: FormGroup) {\n const type = guarantorGroup.get('relationshipType') as FormControl<GuarantorRelationshipType>;\n const other = guarantorGroup.get('relationshipOther') as FormControl<string | null>;\n\n const apply = (t: GuarantorRelationshipType) => {\n if (t === 'OTHER') {\n other.setValidators([Validators.required, Validators.maxLength(120)]);\n other.updateValueAndValidity({ emitEvent: false });\n } else {\n other.reset(null, { emitEvent: false });\n other.clearValidators();\n other.updateValueAndValidity({ emitEvent: false });\n }\n };\n\n type.valueChanges.subscribe(apply);\n apply(type.value);\n }\n private wireGuarantorCompleteness(guarantor: FormGroup) {\n // base controls\n const fullName = guarantor.get('fullName') as FormControl<string | null>;\n const dob = guarantor.get('dob') as FormControl<string | null>;\n const gender = guarantor.get('gender') as FormControl<Gender | null>;\n const nationality = guarantor.get('nationality') as FormControl<string | null>;\n const phone = guarantor.get('phone') as FormControl<string | null>;\n const email = guarantor.get('email') as FormControl<string | null>;\n\n // relationship\n const relationshipType = guarantor.get('relationshipType') as FormControl<GuarantorRelationshipType>;\n const relationshipOther = guarantor.get('relationshipOther') as FormControl<string | null>;\n\n // address group (matches your keys)\n const addr = guarantor.get('address') as FormGroup;\n\n const apply = () => {\n // “Active” means user started filling anything in guarantor section\n // To avoid recursion issues, always read rawValue (includes disabled)\n const raw = guarantor.getRawValue();\n const active = hasAnyValue(raw);\n\n // If active => require everything needed for a complete guarantor\n this.setRequired(fullName, active, [Validators.maxLength(120)]);\n this.setRequired(dob, active);\n this.setRequired(gender, active);\n this.setRequired(nationality, active);\n this.setRequired(phone, active, [Validators.maxLength(40)]);\n this.setRequired(email, active, [Validators.email, Validators.maxLength(160)]);\n\n // guarantor type + relationship are required when active\n this.setRequired(guarantor.get('type') as any, active);\n this.setRequired(relationshipType as any, active);\n\n // relationshipOther only when active + OTHER\n const otherRequired = active && relationshipType.value === 'OTHER';\n this.setRequired(relationshipOther, otherRequired, [Validators.maxLength(120)]);\n if (!otherRequired && relationshipType.value !== 'OTHER') {\n relationshipOther.reset(null, { emitEvent: false });\n }\n\n // address required when active\n this.setRequired(addr.get('line1') as any, active, [Validators.maxLength(160)]);\n this.setRequired(addr.get('line2') as any, active, [Validators.maxLength(160)]);\n this.setRequired(addr.get('city') as any, active, [Validators.maxLength(120)]);\n this.setRequired(addr.get('postcode') as any, active, [Validators.maxLength(20)]);\n this.setRequired(addr.get('country') as any, active, [Validators.maxLength(80)]);\n\n // Now apply your type/employment specific rules ONLY when active.\n // This prevents making employmentStatus required if guarantor is still empty.\n if (active) {\n this.applyGuarantorTypeValidators(guarantor);\n } else {\n // if not active, ensure those variant validators don’t linger\n guarantor.get('employmentStatus')?.clearValidators();\n guarantor.get('companyName')?.clearValidators();\n guarantor.get('jobTitle')?.clearValidators();\n guarantor.get('annualSalary')?.clearValidators();\n guarantor.get('companyNumber')?.clearValidators();\n guarantor.get('taxReturnSubmitted')?.clearValidators();\n guarantor.get('additionalFinancialSupport')?.clearValidators();\n\n guarantor.get('employmentStatus')?.updateValueAndValidity({ emitEvent: false });\n guarantor.get('companyName')?.updateValueAndValidity({ emitEvent: false });\n guarantor.get('jobTitle')?.updateValueAndValidity({ emitEvent: false });\n guarantor.get('annualSalary')?.updateValueAndValidity({ emitEvent: false });\n guarantor.get('companyNumber')?.updateValueAndValidity({ emitEvent: false });\n guarantor.get('taxReturnSubmitted')?.updateValueAndValidity({ emitEvent: false });\n guarantor.get('additionalFinancialSupport')?.updateValueAndValidity({ emitEvent: false });\n }\n\n guarantor.updateValueAndValidity({ emitEvent: false });\n addr.updateValueAndValidity({ emitEvent: false });\n };\n\n // IMPORTANT: don’t double-subscribe in a way that loops:\n // guarantor.valueChanges is enough; relationshipType subscription is optional.\n const sub = guarantor.valueChanges.subscribe(apply);\n\n // Run once for edit mode / initial state\n apply();\n\n // Optional: if you want to clean up later, you can store this sub in tenantSubs too.\n // For now it’s ok because tenant is removed with clearAllTenants() -> reset, but if you want leak-proof,\n // store it under clientKey and unsubscribe on remove.\n }\n\n private clearAllTenants() {\n // unsubscribe all\n for (const sub of this.tenantSubs.values()) sub.unsubscribe();\n this.tenantSubs.clear();\n\n const arr = this.tenantsArray();\n while (arr.length > 0) arr.removeAt(0);\n\n this.tenantsVersion.update((v) => v + 1);\n }\n\n private isTenantBlank(group: FormGroup): boolean {\n const raw = group.getRawValue();\n const { clientKey, id, ...rest } = raw;\n return !hasAnyValue(rest);\n }\n\n private patchTenantGroupFromRecord(group: FormGroup, record: any): void {\n const address = record?.address ?? {};\n const guarantor = record?.guarantor ?? {};\n const guarantorAddress = guarantor?.address ?? {};\n const fullName = record?.fullName || [record?.firstName, record?.lastName].filter(Boolean).join(' ').trim();\n\n group.patchValue(\n {\n id: record?.id ?? null,\n fullName: fullName || null,\n dob: record?.dob ?? null,\n gender: record?.gender ?? null,\n nationality: record?.nationality ?? null,\n visaStatus: this.normalizeVisaStatus(record?.visaStatus ?? record?.residencyStatus),\n visaShareCodeStatus: record?.visaShareCodeStatus ?? null,\n visaShareCodeOther: record?.visaShareCodeOther ?? null,\n phone: record?.phone ?? null,\n email: record?.email ?? null,\n address: {\n line1: address?.line1 ?? null,\n line2: address?.line2 ?? null,\n city: address?.city ?? null,\n postcode: address?.postcode ?? null,\n country: address?.country ?? null,\n },\n adverseCreditStatus: this.normalizeAdverseCreditStatus(record?.adverseCreditStatus),\n applicantType: this.normalizeApplicantType(record?.applicantType ?? record?.tenantCategory),\n employmentStatus: this.normalizeEmploymentStatus(record?.employmentStatus),\n companyName: record?.companyName ?? null,\n jobTitle: record?.jobTitle ?? record?.profession ?? null,\n annualSalary: record?.annualSalary ?? record?.income ?? null,\n companyNumber: record?.companyNumber ?? null,\n taxReturnSubmitted: record?.taxReturnSubmitted ?? false,\n corporateCompanyName: record?.corporateCompanyName ?? null,\n corporateCompanyNumber: record?.corporateCompanyNumber ?? null,\n corporateJobTitle: record?.corporateJobTitle ?? null,\n universityName: record?.universityName ?? null,\n courseTitle: record?.courseTitle ?? null,\n yearOfStudy: record?.yearOfStudy ?? null,\n guarantor: {\n fullName: guarantor?.fullName ?? null,\n dob: guarantor?.dob ?? null,\n gender: guarantor?.gender ?? null,\n nationality: guarantor?.nationality ?? null,\n phone: guarantor?.phone ?? null,\n email: guarantor?.email ?? null,\n address: {\n line1: guarantorAddress?.line1 ?? null,\n line2: guarantorAddress?.line2 ?? null,\n city: guarantorAddress?.city ?? null,\n postcode: guarantorAddress?.postcode ?? null,\n country: guarantorAddress?.country ?? null,\n },\n type: guarantor?.type ?? null,\n employmentStatus: this.normalizeEmploymentStatus(guarantor?.employmentStatus),\n companyName: guarantor?.companyName ?? null,\n jobTitle: guarantor?.jobTitle ?? null,\n annualSalary: guarantor?.annualSalary ?? null,\n companyNumber: guarantor?.companyNumber ?? null,\n taxReturnSubmitted: guarantor?.taxReturnSubmitted ?? false,\n additionalFinancialSupport: guarantor?.additionalFinancialSupport ?? null,\n relationshipType: guarantor?.relationshipType ?? null,\n relationshipOther: guarantor?.relationshipOther ?? null,\n },\n },\n { emitEvent: false },\n );\n }\n\n private toTenantPayload(raw: any): Record<string, any> {\n const fullName = (raw.fullName ?? '').trim();\n const [firstName = '', ...lastNameParts] = fullName ? fullName.split(/\\s+/) : ['', ''];\n\n return {\n id: raw.id ?? null,\n fullName: fullName || null,\n firstName: firstName || null,\n lastName: lastNameParts.join(' ') || null,\n email: raw.email ?? null,\n phone: raw.phone ?? null,\n dob: raw.dob ?? null,\n gender: raw.gender ?? null,\n nationality: raw.nationality ?? null,\n address: raw.address ?? null,\n income: raw.annualSalary ?? null,\n annualSalary: raw.annualSalary ?? null,\n profession: raw.jobTitle ?? null,\n jobTitle: raw.jobTitle ?? null,\n numberOfTenants: 1,\n tenantCategory: raw.applicantType ?? null,\n applicantType: raw.applicantType ?? null,\n employmentStatus: raw.employmentStatus ?? null,\n adverseCreditStatus: raw.adverseCreditStatus ?? null,\n residencyStatus: raw.visaStatus ?? null,\n visaStatus: raw.visaStatus ?? null,\n visaShareCodeStatus: raw.visaShareCodeStatus ?? null,\n visaShareCodeOther: raw.visaShareCodeOther ?? null,\n companyName: raw.companyName ?? null,\n companyNumber: raw.companyNumber ?? null,\n taxReturnSubmitted: raw.taxReturnSubmitted ?? false,\n corporateCompanyName: raw.corporateCompanyName ?? null,\n corporateCompanyNumber: raw.corporateCompanyNumber ?? null,\n corporateJobTitle: raw.corporateJobTitle ?? null,\n universityName: raw.universityName ?? null,\n courseTitle: raw.courseTitle ?? null,\n yearOfStudy: raw.yearOfStudy ?? null,\n guarantor: raw.guarantor ?? null,\n };\n }\n\n private normalizeApplicantType(value: string | null | undefined): ApplicantType | null {\n if (!value) return null;\n\n const map: Record<string, ApplicantType> = {\n INDIVIDUAL: 'INDIVIDUAL',\n Individual: 'INDIVIDUAL',\n CORPORATE: 'CORPORATE',\n Corporate: 'CORPORATE',\n STUDENT: 'STUDENT',\n Student: 'STUDENT',\n };\n\n return map[value] ?? null;\n }\n\n private normalizeEmploymentStatus(value: string | null | undefined): EmploymentStatus | null {\n if (!value) return null;\n\n const map: Record<string, EmploymentStatus | null> = {\n EMPLOYED: 'EMPLOYED',\n Employed: 'EMPLOYED',\n SELF_EMPLOYED: 'SELF_EMPLOYED',\n 'Self employed': 'SELF_EMPLOYED',\n UNEMPLOYED: 'UNEMPLOYED',\n UnEmployed: 'UNEMPLOYED',\n Student: null,\n RETRIED: 'UNEMPLOYED',\n Retried: 'UNEMPLOYED',\n };\n\n return map[value] ?? null;\n }\n\n private normalizeAdverseCreditStatus(value: string | null | undefined): AdverseCreditStatus | null {\n if (!value) return null;\n\n const map: Record<string, AdverseCreditStatus> = {\n NONE: 'NONE',\n None: 'NONE',\n ACTIVE_CCJ: 'ACTIVE_CCJ',\n 'Active CCJ': 'ACTIVE_CCJ',\n SATISFIED_CCJ: 'SATISFIED_CCJ',\n 'Satisfied CCJ': 'SATISFIED_CCJ',\n DEBT_MANAGEMENT_PLAN: 'DEBT_MANAGEMENT_PLAN',\n 'Debt managment plan': 'DEBT_MANAGEMENT_PLAN',\n LOW_CREDIT_SCORE: 'LOW_CREDIT_SCORE',\n 'Low credit score': 'LOW_CREDIT_SCORE',\n OTHER: 'OTHER',\n Other: 'OTHER',\n };\n\n return map[value] ?? null;\n }\n\n private normalizeVisaStatus(value: string | null | undefined): VisaStatus | null {\n if (!value) return null;\n\n const map: Record<string, VisaStatus> = {\n CITIZEN: 'CITIZEN',\n \"I don't need a visa\": 'CITIZEN',\n VISA_HOLDER: 'VISA_HOLDER',\n 'I have a visa': 'VISA_HOLDER',\n WAITING_FOR_VISA: 'WAITING_FOR_VISA',\n 'I am waiting for my visa': 'WAITING_FOR_VISA',\n NOT_YET_APPLIED_FOR_VISA: 'NOT_YET_APPLIED_FOR_VISA',\n 'I have not yet applied for a visa': 'NOT_YET_APPLIED_FOR_VISA',\n };\n\n return map[value] ?? null;\n }\n\n private toCreateRentalPayload(): CreateRentalOfferPayload {\n const v = this.form().value as any;\n\n const tenants = (v.tenants ?? []).map((t: any) => {\n const { id, clientKey, ...rest } = t;\n return rest;\n });\n\n // ensure validators applied before reading\n this.applyTenantDynamicValidators();\n\n const d: Date | null = v.rental.moveInDate;\n const moveInDate = d ? d.toISOString().slice(0, 10) : null;\n\n return {\n propertyId: this.propertyId(),\n rental: {\n amount: v.rental.amount,\n moveInDate,\n paymentFrequency: v.rental.paymentFrequency,\n tenancyLengthMonths: v.rental.tenancyLengthMonths,\n breakClauseMonths: v.rental.breakClauseMonths,\n pets: v.rental.pets,\n smoker: v.rental.smoker,\n furnitureRequirement: v.rental.furnitureRequirement,\n additionalRequests: v.rental.additionalRequests,\n },\n tenants,\n };\n }\n\n private toCreateSalePayload(): CreateSaleOfferPayload {\n const v = this.form().value as any;\n return {\n propertyId: this.propertyId(),\n sale: {\n amount: v.sale.amount,\n buyerName: v.sale.buyerName,\n email: v.sale.email,\n phone: v.sale.phone,\n paymentMethod: v.sale.paymentMethod,\n proposedExchangeDate: v.sale.proposedExchangeDate,\n solicitorCompanyName: v.sale.solicitorCompanyName,\n },\n };\n }\n private collectFriendlyIssues(): string[] {\n const issues: string[] = [];\n\n // Rental / Sale\n if (this.isRental()) {\n issues.push(...this.collectGroupIssues(this.rentalGroup(), 'Rental terms'));\n issues.push(...this.collectTenantsIssues());\n } else {\n issues.push(...this.collectGroupIssues(this.saleGroup(), 'Sale details'));\n }\n\n // Deduplicate + stable order\n return Array.from(new Set(issues));\n }\n\n private collectGroupIssues(group: FormGroup, prefix: string): string[] {\n const issues: string[] = [];\n\n for (const [key, ctrl] of Object.entries(group.controls)) {\n if (ctrl instanceof FormControl) {\n if (ctrl.invalid) issues.push(`${prefix} · ${this.labelFor(key)}${this.describeErrors(ctrl)}`);\n } else if (ctrl instanceof FormGroup) {\n issues.push(...this.collectGroupIssues(ctrl, `${prefix} · ${this.labelFor(key)}`));\n } else if (ctrl instanceof FormArray) {\n // not used here, tenants handled separately\n }\n }\n\n return issues;\n }\n\n private collectTenantsIssues(): string[] {\n const issues: string[] = [];\n const tenants = this.tenantsArray();\n\n tenants.controls.forEach((tenant, idx) => {\n const tenantPrefix = `Tenant ${idx + 1}`;\n issues.push(...this.collectTenantIssues(tenant as FormGroup, tenantPrefix));\n });\n\n return issues;\n }\n\n private collectTenantIssues(tenant: FormGroup, prefix: string): string[] {\n const issues: string[] = [];\n\n for (const [key, ctrl] of Object.entries(tenant.controls)) {\n if (key === 'clientKey' || key === 'id') continue;\n\n if (ctrl instanceof FormControl) {\n if (ctrl.invalid) issues.push(`${prefix} · ${this.labelFor(key)}${this.describeErrors(ctrl)}`);\n } else if (ctrl instanceof FormGroup) {\n if (key === 'guarantor') {\n issues.push(...this.collectGuarantorIssues(ctrl, `${prefix} · Guarantor`));\n } else if (key === 'address') {\n issues.push(...this.collectGroupIssues(ctrl, `${prefix} · Address`));\n } else {\n issues.push(...this.collectGroupIssues(ctrl, `${prefix} · ${this.labelFor(key)}`));\n }\n }\n }\n\n return issues;\n }\n\n private collectGuarantorIssues(guarantor: FormGroup, prefix: string): string[] {\n const issues: string[] = [];\n\n // Only list guarantor issues if any of its fields are actually required/invalid.\n // (Prevents showing guarantor fields when guarantor is optional.)\n if (!this.hasAnyInvalidTouchedOrRequired(guarantor)) return issues;\n\n for (const [key, ctrl] of Object.entries(guarantor.controls)) {\n if (ctrl instanceof FormControl) {\n if (ctrl.invalid) issues.push(`${prefix} · ${this.labelFor(key)}${this.describeErrors(ctrl)}`);\n } else if (ctrl instanceof FormGroup) {\n if (key === 'address') {\n issues.push(...this.collectGroupIssues(ctrl, `${prefix} · Address`));\n } else {\n issues.push(...this.collectGroupIssues(ctrl, `${prefix} · ${this.labelFor(key)}`));\n }\n }\n }\n\n return issues;\n }\n\n private hasAnyInvalidTouchedOrRequired(group: FormGroup): boolean {\n // show errors if:\n // - any control invalid AND touched\n // - OR any control has required validator and is invalid (even if not touched)\n for (const ctrl of Object.values(group.controls)) {\n if (ctrl instanceof FormControl) {\n const required = ctrl.hasValidator?.(Validators.required) ?? false;\n if ((ctrl.invalid && ctrl.touched) || (required && ctrl.invalid)) return true;\n } else if (ctrl instanceof FormGroup) {\n if (this.hasAnyInvalidTouchedOrRequired(ctrl)) return true;\n }\n }\n return false;\n }\n private setRequired(c: any, on: boolean, extra: any[] = []) {\n if (!c) return;\n if (on) c.setValidators([Validators.required, ...extra]);\n else c.clearValidators();\n c.updateValueAndValidity({ emitEvent: false });\n }\n\n private describeErrors(ctrl: FormControl): string {\n const e = ctrl.errors;\n if (!e) return '';\n\n if (e['required']) return ' (required)';\n if (e['email']) return ' (enter a valid email)';\n if (e['min']) return ` (must be ≥ ${e['min'].min})`;\n if (e['maxlength']) return ` (max ${e['maxlength'].requiredLength} chars)`;\n\n return ' (invalid)';\n }\n\n private labelFor(key: string): string {\n // ✅ customize labels here\n const map: Record<string, string> = {\n amount: 'Amount',\n moveInDate: 'Move-in date',\n paymentFrequency: 'Payment frequency',\n tenancyLengthMonths: 'Tenancy length (months)',\n breakClauseMonths: 'Break clause (months)',\n pets: 'Pets',\n smoker: 'Smoker',\n furnitureRequirement: 'Furniture requirement',\n additionalRequests: 'Additional requests',\n\n fullName: 'Full name',\n dob: 'Date of birth',\n gender: 'Gender',\n nationality: 'Nationality',\n visaStatus: 'Visa status',\n phone: 'Phone',\n email: 'Email',\n adverseCreditStatus: 'Adverse credit status',\n applicantType: 'Applicant type',\n employmentStatus: 'Employment status',\n companyName: 'Company name',\n jobTitle: 'Job title',\n annualSalary: 'Annual salary',\n companyNumber: 'Company number',\n taxReturnSubmitted: 'Tax return submitted',\n\n corporateCompanyName: 'Company name',\n corporateCompanyNumber: 'Company number',\n corporateJobTitle: 'Job title',\n\n universityName: 'University name',\n courseTitle: 'Course title',\n yearOfStudy: 'Year of study',\n\n line1: 'Address line 1',\n line2: 'Address line 2',\n city: 'City',\n postcode: 'Postcode',\n country: 'Country',\n\n type: 'Guarantor type',\n additionalFinancialSupport: 'Additional financial support',\n };\n\n // fallback: \"camelCase\" -> \"Camel case\"\n return map[key] ?? key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase());\n }\n\n private resetControls(group: FormGroup, keys: string[], defaults: Partial<Record<string, any>> = {}) {\n for (const k of keys) {\n const c = group.get(k);\n if (!(c instanceof FormControl)) continue;\n\n // use explicit default if provided, otherwise null\n const value = Object.prototype.hasOwnProperty.call(defaults, k) ? defaults[k] : null;\n\n c.reset(value, { emitEvent: false });\n }\n }\n\n private resetGroup(group: FormGroup) {\n group.reset({}, { emitEvent: false });\n }\n\n private clearTenantVariantValues(tenant: FormGroup) {\n // employment/corporate/student fields – clear all variant areas\n this.resetControls(tenant, [\n 'employmentStatus',\n 'companyName',\n 'jobTitle',\n 'annualSalary',\n 'companyNumber',\n 'taxReturnSubmitted',\n\n 'corporateCompanyName',\n 'corporateCompanyNumber',\n 'corporateJobTitle',\n\n 'universityName',\n 'courseTitle',\n 'yearOfStudy',\n\n 'visaShareCodeStatus',\n 'visaShareCodeOther',\n ]);\n }\n\n private clearGuarantorVariantValues(guarantor: FormGroup) {\n // Keep base identity/contact/address (optional), clear variant stuff\n this.resetControls(\n guarantor,\n [\n 'employmentStatus',\n 'companyName',\n 'jobTitle',\n 'annualSalary',\n 'companyNumber',\n 'taxReturnSubmitted',\n 'additionalFinancialSupport',\n ],\n {\n taxReturnSubmitted: false,\n },\n );\n }\n private isGuarantorActive(guarantor: FormGroup): boolean {\n // consider any value in guarantor section as “started”\n // (if you want to ignore relationshipType default, see Patch 2 below)\n return hasAnyValue(guarantor.getRawValue());\n }\n\n private enforceGuarantorWhenRequiredOrActive(guarantor: FormGroup, required: boolean) {\n const active = this.isGuarantorActive(guarantor);\n\n // Always start clean\n this.clearGuarantorValidators(guarantor);\n\n // If not required and not active -> keep optional\n if (!required && !active) return;\n\n // Now guarantor must be complete\n this.requireGuarantor(guarantor);\n\n // relationshipOther conditional (only if OTHER)\n const rt = guarantor.get('relationshipType')?.value as GuarantorRelationshipType | null;\n const other = guarantor.get('relationshipOther');\n if (rt === 'OTHER') {\n other?.setValidators([Validators.required, Validators.maxLength(120)]);\n } else {\n other?.clearValidators();\n other?.reset(null, { emitEvent: false });\n }\n other?.updateValueAndValidity({ emitEvent: false });\n\n guarantor.updateValueAndValidity({ emitEvent: false });\n (guarantor.get('address') as FormGroup).updateValueAndValidity({ emitEvent: false });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { OfferFormFacade } from '../../offer-data-access/offer-form.facade';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatIcon } from '@angular/material/icon';\nimport { ENTER, COMMA } from '@angular/cdk/keycodes';\nimport { AngularComponentsModule } from '@rolatech/angular-components';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n\n@Component({\n selector: 'rolatech-rental-offer-terms-section',\n imports: [\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatSlideToggleModule,\n MatChipsModule,\n MatIcon,\n AngularComponentsModule,\n ],\n templateUrl: './rental-offer-terms-section.html',\n styleUrl: './rental-offer-terms-section.scss',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n})\nexport class RentalOfferTermsSection {\n private readonly facade = inject(OfferFormFacade);\n readonly rental = this.facade.rentalGroup();\n\n readonly petsControl = computed(() => {\n const c = this.rental.get('pets');\n if (!c) throw new Error('Rental form missing control: pets');\n return c as FormControl<string[]>;\n });\n\n readonly pets = signal<string[]>([]);\n readonly petsInputFocused = signal(false);\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n readonly minDate = new Date();\n\n addPet(event: MatChipInputEvent) {\n const raw = (event.value ?? '').trim();\n event.chipInput?.clear();\n if (!raw) return;\n\n const normalized = this.normalizePet(raw);\n const curr = this.petsControl().value ?? [];\n\n // ✅ prevent duplicates (case-insensitive)\n const exists = curr.some((x) => x.toLowerCase() === normalized.toLowerCase());\n if (exists) return;\n\n this.pets.set([...curr, normalized]);\n this.petsControl().setValue([...curr, normalized]);\n this.petsControl().markAsDirty();\n this.petsControl().updateValueAndValidity();\n }\n\n removePet(pet: string) {\n const curr = this.petsControl().value ?? [];\n const next = curr.filter((x) => x !== pet);\n this.pets.set(next); // Manually update signal\n this.petsControl().setValue(next);\n this.petsControl().markAsDirty();\n this.petsControl().updateValueAndValidity();\n }\n\n private normalizePet(v: string): string {\n // Keep it user-friendly: trim, collapse spaces, Title Case\n const cleaned = v.replace(/\\s+/g, ' ').trim();\n if (!cleaned) return cleaned;\n return cleaned.charAt(0).toUpperCase() + cleaned.slice(1);\n }\n}\n","<div class=\"grid\" [formGroup]=\"rental\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Offer amount (PCM)</mat-label>\n <input matInput type=\"number\" formControlName=\"amount\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Move-in date</mat-label>\n <input matInput [min]=\"minDate\" (focus)=\"dp.open()\" [matDatepicker]=\"dp\" formControlName=\"moveInDate\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Payment frequency</mat-label>\n <mat-select formControlName=\"paymentFrequency\">\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Tenancy length (months)</mat-label>\n <input matInput type=\"number\" formControlName=\"tenancyLengthMonths\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Break clause (months)</mat-label>\n <input matInput type=\"number\" formControlName=\"breakClauseMonths\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Furniture</mat-label>\n <mat-select formControlName=\"furnitureRequirement\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>{{petsInputFocused() ? 'Pets' :'Add a pet (e.g., Dog, Cat)'}} </mat-label>\n <mat-chip-grid #chipGrid aria-label=\"Pets\" formControlName=\"pets\">\n @for (p of pets(); track p) {\n <mat-chip-row (removed)=\"removePet(p)\">\n {{ p }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + p\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n\n <input\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (focus)=\"petsInputFocused.set(true)\"\n (blur)=\"petsInputFocused.set(false)\"\n (matChipInputTokenEnd)=\"addPet($event)\"\n />\n </mat-chip-grid>\n <!-- ✅ Required error -->\n @if (petsControl().touched && petsControl().hasError('required')) {\n <mat-error>At least one pet or none is required</mat-error>\n }\n <mat-hint>Press Enter or comma to add multiple pets.</mat-hint>\n </mat-form-field>\n\n @if (petsControl().value.length) {\n <p class=\"hint\">Landlord approval may still be required.</p>\n }\n\n <mat-slide-toggle labelPosition=\"before\" class=\"py-3\" formControlName=\"smoker\">\n <span class=\"text-lg font-bold\">Smoker</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"span2\">\n <mat-label>Additional requests</mat-label>\n <textarea matInput rows=\"3\" formControlName=\"additionalRequests\"></textarea>\n </mat-form-field>\n</div>\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class TenantRegistryService {\n private keys: string[] = [];\n private cursor = 0;\n private signature = '';\n\n resetIfChanged(keys: string[]) {\n const sig = (keys ?? []).join('|'); // good enough signature for stable keys\n if (sig === this.signature) return; // ✅ do NOT reset during same render\n\n this.signature = sig;\n this.keys = [...keys];\n this.cursor = 0;\n }\n\n consumeNextKey(): string {\n const key = this.keys[this.cursor];\n if (!key) {\n throw new Error(\n `TenantRegistryService: no key at cursor=${this.cursor}. ` +\n `keys.length=${this.keys.length}. Did you resetIfChanged() before rendering cards?`,\n );\n }\n this.cursor++;\n return key;\n }\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { ControlContainer, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n@Component({\n selector: 'rolatech-tenant-basic-info-section',\n imports: [ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatSelectModule, MatDatepickerModule, MatNativeDateModule],\n templateUrl: './tenant-basic-info-section.html',\n styleUrl: './tenant-basic-info-section.scss',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n})\nexport class TenantBasicInfoSection {\n private readonly cc = inject(ControlContainer);\n readonly maxDate = new Date();\n\n // ✅ lazy read (never null once parent [formGroup] exists)\n readonly g = computed(() => this.cc.control as FormGroup);\n\n // ✅ computed depends on g()\n readonly address = computed(() => this.g().get('address') as FormGroup);\n}\n","<div class=\"text-lg\">Basic info</div>\n<div class=\"grid\" [formGroup]=\"g()\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Full name</mat-label>\n <input matInput formControlName=\"fullName\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Date of birth</mat-label>\n <input matInput [max]=\"maxDate\" [matDatepicker]=\"dp\" formControlName=\"dob\" (focus)=\"dp.open()\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Gender</mat-label>\n <mat-select formControlName=\"gender\">\n <mat-option value=\"MALE\">Male</mat-option>\n <mat-option value=\"FEMALE\">Female</mat-option>\n <mat-option value=\"OTHER\">Other</mat-option>\n <mat-option value=\"PREFER_NOT_TO_SAY\">Prefer not to say</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Nationality</mat-label>\n <input matInput formControlName=\"nationality\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Phone</mat-label>\n <input matInput formControlName=\"phone\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Email</mat-label>\n <input matInput formControlName=\"email\" />\n </mat-form-field>\n </div>\n\n <div [formGroup]=\"address()\">\n <h5>Current address</h5>\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-6\">\n <mat-label>Line 1</mat-label>\n <input matInput formControlName=\"line1\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-6\">\n <mat-label>Line 2</mat-label>\n <input matInput formControlName=\"line2\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>City</mat-label>\n <input matInput formControlName=\"city\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Postcode</mat-label>\n <input matInput formControlName=\"postcode\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Country</mat-label>\n <input matInput formControlName=\"country\" />\n </mat-form-field>\n </div>\n </div>\n</div>\n","import { Component, computed, inject } from '@angular/core';\nimport { ReactiveFormsModule, FormGroup, ControlContainer } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'rolatech-corporate-section',\n imports: [ReactiveFormsModule, MatFormFieldModule, MatInputModule],\n templateUrl: './corporate-section.html',\n styleUrl: './corporate-section.scss',\n})\nexport class CorporateSection {\n private readonly cc = inject(ControlContainer);\n readonly g = computed(() => this.cc.control as FormGroup);\n}\n","<h4>Corporate applicant</h4>\n\n<div class=\"grid grid-cols-12 gap-3\" [formGroup]=\"g()\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Company name</mat-label>\n <input matInput formControlName=\"corporateCompanyName\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Company number</mat-label>\n <input matInput formControlName=\"corporateCompanyNumber\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Job title</mat-label>\n <input matInput formControlName=\"corporateJobTitle\" />\n </mat-form-field>\n</div>\n","import { Component, computed, inject } from '@angular/core';\nimport { ReactiveFormsModule, FormGroup, ControlContainer } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\n@Component({\n selector: 'rolatech-employment-section',\n imports: [ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatSelectModule, MatSlideToggleModule],\n templateUrl: './employment.section.html',\n styleUrl: './employment.section.scss',\n})\nexport class EmploymentSection {\n private readonly cc = inject(ControlContainer);\n readonly g = computed(() => this.cc.control as FormGroup);\n\n isEmployed() {\n return this.g().get('employmentStatus')?.value === 'EMPLOYED';\n }\n isSelfEmployed() {\n return this.g().get('employmentStatus')?.value === 'SELF_EMPLOYED';\n }\n isUnemployed() {\n return this.g().get('employmentStatus')?.value === 'UNEMPLOYED';\n }\n}\n","<h4>Employment</h4>\n\n<div class=\"grid grid-cols-12 gap-3\" [formGroup]=\"g()\">\n <mat-form-field class=\"col-span-12\">\n <mat-label>Employment status</mat-label>\n <mat-select formControlName=\"employmentStatus\">\n <mat-option value=\"EMPLOYED\">Employed</mat-option>\n <mat-option value=\"SELF_EMPLOYED\">Self-employed</mat-option>\n <mat-option value=\"UNEMPLOYED\">Unemployed</mat-option>\n </mat-select>\n </mat-form-field>\n\n @if (isEmployed() || isSelfEmployed()) {\n <mat-form-field class=\"col-span-4\">\n <mat-label>Company name</mat-label>\n <input matInput formControlName=\"companyName\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Job title</mat-label>\n <input matInput formControlName=\"jobTitle\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Annual salary</mat-label>\n <input matInput type=\"number\" formControlName=\"annualSalary\" />\n </mat-form-field>\n } @if (isSelfEmployed()) {\n <mat-form-field class=\"col-span-4\">\n <mat-label>Company number</mat-label>\n <input matInput formControlName=\"companyNumber\" />\n </mat-form-field>\n\n <mat-slide-toggle class=\"col-span-12\" formControlName=\"taxReturnSubmitted\">Tax return submitted</mat-slide-toggle>\n } @if (isUnemployed()) {\n <p class=\"col-span-12 hint\">You can add a guarantor if extra financial support needs to be shown.</p>\n }\n</div>\n","import { Component, computed, inject } from '@angular/core';\nimport { ControlContainer, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\n@Component({\n selector: 'rolatech-guarantor-employment-section',\n imports: [ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatSelectModule, MatSlideToggleModule],\n templateUrl: './guarantor-employment-section.html',\n styleUrl: './guarantor-employment-section.scss',\n})\nexport class GuarantorEmploymentSection {\n private readonly cc = inject(ControlContainer);\n readonly g = computed(() => this.cc.control as FormGroup);\n\n isEmployed() {\n return this.g().get('employmentStatus')?.value === 'EMPLOYED';\n }\n isSelfEmployed() {\n return this.g().get('employmentStatus')?.value === 'SELF_EMPLOYED';\n }\n isUnemployed() {\n return this.g().get('employmentStatus')?.value === 'UNEMPLOYED';\n }\n}\n","<div class=\"grid grid-cols-12 gap-3\" [formGroup]=\"g()\">\n <mat-form-field class=\"col-span-12\">\n <mat-label>Employment status</mat-label>\n <mat-select formControlName=\"employmentStatus\">\n <mat-option value=\"EMPLOYED\">Employed</mat-option>\n <mat-option value=\"SELF_EMPLOYED\">Self-employed</mat-option>\n <mat-option value=\"UNEMPLOYED\">Unemployed</mat-option>\n </mat-select>\n </mat-form-field>\n\n @if (isEmployed() || isSelfEmployed()) {\n <mat-form-field class=\"col-span-4\">\n <mat-label>Company name</mat-label>\n <input matInput formControlName=\"companyName\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Job title</mat-label>\n <input matInput formControlName=\"jobTitle\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Annual salary</mat-label>\n <input matInput type=\"number\" formControlName=\"annualSalary\" />\n </mat-form-field>\n } @if (isSelfEmployed()) {\n <mat-form-field class=\"col-span-4\">\n <mat-label>Company number</mat-label>\n <input matInput formControlName=\"companyNumber\" />\n </mat-form-field>\n\n <mat-slide-toggle class=\"col-span-12\" formControlName=\"taxReturnSubmitted\">Tax return submitted</mat-slide-toggle>\n } @if (isUnemployed()) {\n <mat-form-field class=\"col-span-12\">\n <mat-label>Additional Financial Support</mat-label>\n <textarea matInput rows=\"2\" formControlName=\"additionalFinancialSupport\"></textarea>\n <mat-hint\n >To support this application, please provide details such as UK property ownership, significant savings, or alternative\n income (e.g., pension, investments).</mat-hint\n >\n </mat-form-field>\n }\n</div>\n","import { Component, computed, inject } from '@angular/core';\nimport { ReactiveFormsModule, ControlContainer, FormGroup } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'rolatech-guarantor-company-section',\n imports: [ReactiveFormsModule, MatFormFieldModule, MatInputModule],\n templateUrl: './guarantor-company-section.html',\n styleUrl: './guarantor-company-section.scss',\n})\nexport class GuarantorCompanySection {\n private readonly cc = inject(ControlContainer);\n readonly g = computed(() => this.cc.control as FormGroup);\n}\n","<div class=\"grid grid-cols-12 gap-3\" [formGroup]=\"g()\">\n <mat-form-field class=\"col-span-12\">\n <mat-label>Company name</mat-label>\n <input matInput formControlName=\"companyName\" />\n </mat-form-field>\n</div>\n","import { Component, computed, inject } from '@angular/core';\nimport { ReactiveFormsModule, FormGroup, ControlContainer, FormControl, Validators } from '@angular/forms';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { EmploymentSection } from '../employment.section/employment.section';\nimport { GuarantorEmploymentSection } from '../guarantor-employment-section/guarantor-employment-section';\nimport { GuarantorCompanySection } from '../guarantor-company-section/guarantor-company-section';\nimport { GuarantorRelationshipType } from '@rolatech/angular-services';\nimport { MatButtonModule } from '@angular/material/button';\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n@Component({\n selector: 'rolatech-guarantor-section',\n imports: [\n ReactiveFormsModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDatepickerModule,\n MatNativeDateModule,\n GuarantorEmploymentSection,\n GuarantorCompanySection,\n MatButtonModule,\n ],\n templateUrl: './guarantor-section.html',\n styleUrl: './guarantor-section.scss',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n})\nexport class GuarantorSection {\n private readonly cc = inject(ControlContainer);\n readonly maxDate = new Date();\n\n /** tenant group (parent wrapper) */\n readonly tenant = computed(() => this.cc.control as FormGroup);\n\n /** guarantor subgroup */\n readonly guarantorGroup = computed(() => this.tenant().get('guarantor') as FormGroup);\n\n /** address subgroup under guarantor */\n readonly guarantorAddress = computed(() => this.guarantorGroup().get('address') as FormGroup);\n\n readonly relationshipTypeControl = computed(() => {\n const g = this.guarantorGroup(); // however you obtain it\n const c = g.get('relationshipType');\n if (!c) throw new Error('Missing control: relationshipType');\n return c as FormControl<GuarantorRelationshipType>;\n });\n\n readonly relationshipOtherControl = computed(() => {\n const g = this.guarantorGroup();\n const c = g.get('relationshipOther');\n if (!c) throw new Error('Missing control: relationshipOther');\n return c as FormControl<string | null>;\n });\n\n readonly relationshipOptions = [\n { value: 'FAMILY', label: 'Family' },\n { value: 'FRIEND', label: 'Friend' },\n { value: 'GUARANTOR_SERVICE', label: 'Guarantor service' },\n { value: 'OTHER', label: 'Other' },\n ] as const;\n\n requirementHint(): string {\n return 'Optional';\n }\n\n isIndividual() {\n return this.guarantorGroup().get('type')?.value === 'INDIVIDUAL';\n }\n isCompany() {\n return this.guarantorGroup().get('type')?.value === 'COMPANY';\n }\n resetGuarantor() {\n this.guarantorGroup().reset();\n }\n}\n","<mat-expansion-panel class=\"z-0\">\n <mat-expansion-panel-header>\n <mat-panel-title>Guarantor</mat-panel-title>\n <mat-panel-description>{{ requirementHint() }}</mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"flex justify-end items-center mb-2\">\n <button mat-stroked-button (click)=\"resetGuarantor()\">Reset</button>\n </div>\n\n <div [formGroup]=\"guarantorGroup()\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Full name</mat-label>\n <input matInput formControlName=\"fullName\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Date of birth</mat-label>\n <input matInput [max]=\"maxDate\" [matDatepicker]=\"dp\" formControlName=\"dob\" (focus)=\"dp.open()\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Gender</mat-label>\n <mat-select formControlName=\"gender\">\n <mat-option value=\"MALE\">Male</mat-option>\n <mat-option value=\"FEMALE\">Female</mat-option>\n <mat-option value=\"OTHER\">Other</mat-option>\n <mat-option value=\"PREFER_NOT_TO_SAY\">Prefer not to say</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Nationality</mat-label>\n <input matInput formControlName=\"nationality\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Phone</mat-label>\n <input matInput formControlName=\"phone\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Email</mat-label>\n <input matInput formControlName=\"email\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-12\">\n <mat-label>Relationship</mat-label>\n <mat-select [formControl]=\"relationshipTypeControl()\">\n @for (o of relationshipOptions; track o.value) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (relationshipTypeControl().value === 'OTHER') {\n <mat-form-field class=\"col-span-12\">\n <mat-label>Specify relationship</mat-label>\n <input matInput [formControl]=\"relationshipOtherControl()\" placeholder=\"e.g., Uncle, Sponsor, Company name\" />\n @if (relationshipOtherControl().hasError('required')) {\n <mat-error>Please specify the relationship.</mat-error>\n }\n </mat-form-field>\n }\n </div>\n\n <div [formGroup]=\"guarantorAddress()\">\n <h5>Address</h5>\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-6\">\n <mat-label>Line 1</mat-label>\n <input matInput formControlName=\"line1\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-6\">\n <mat-label>Line 2</mat-label>\n <input matInput formControlName=\"line2\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>City</mat-label>\n <input matInput formControlName=\"city\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Postcode</mat-label>\n <input matInput formControlName=\"postcode\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Country</mat-label>\n <input matInput formControlName=\"country\" />\n </mat-form-field>\n </div>\n </div>\n <div class=\"grid grid-cols-12\">\n <mat-form-field class=\"col-span-12\">\n <mat-label>Guarantor type</mat-label>\n <mat-select formControlName=\"type\">\n <mat-option value=\"INDIVIDUAL\">Individual</mat-option>\n <mat-option value=\"COMPANY\">Company</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n @if (isIndividual()) {\n <rolatech-guarantor-employment-section />\n } @if (isCompany()) {\n <rolatech-guarantor-company-section />\n }\n </div>\n</mat-expansion-panel>\n","import { Component, computed, inject } from '@angular/core';\nimport { ReactiveFormsModule, FormGroup, ControlContainer } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'rolatech-student-section',\n imports: [ReactiveFormsModule, MatFormFieldModule, MatInputModule],\n templateUrl: './student-section.html',\n styleUrl: './student-section.scss',\n})\nexport class StudentSection {\n private readonly cc = inject(ControlContainer);\n readonly g = computed(() => this.cc.control as FormGroup);\n}\n","<h4>Student</h4>\n\n<div class=\"grid\" [formGroup]=\"g()\">\n <mat-form-field class=\"span2\">\n <mat-label>University name</mat-label>\n <input matInput formControlName=\"universityName\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Course title</mat-label>\n <input matInput formControlName=\"courseTitle\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Year of study</mat-label>\n <input matInput type=\"number\" formControlName=\"yearOfStudy\" />\n </mat-form-field>\n\n <p class=\"hint\">Add a guarantor if you want to strengthen the application.</p>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nexport const TENANT_FORM = new InjectionToken<FormGroup>('TENANT_FORM');\nexport const TENANT_KEY = new InjectionToken<string>('TENANT_KEY');\n","import { Component, computed, effect, inject } from '@angular/core';\nimport { ReactiveFormsModule, FormGroup, ControlContainer } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { OfferFormFacade } from '../../offer-data-access/offer-form.facade';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'rolatech-tenant-applicant-type-section',\n imports: [ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatSelectModule],\n templateUrl: './tenant-applicant-type-section.html',\n styleUrl: './tenant-applicant-type-section.scss',\n})\nexport class TenantApplicantTypeSection {\n private readonly cc = inject(ControlContainer);\n private readonly facade = inject(OfferFormFacade);\n\n readonly g = computed(() => this.cc.control as FormGroup);\n\n constructor() {\n effect(() => {\n // react when applicantType/employmentStatus changes\n void this.g().get('applicantType')?.value;\n void this.g().get('employmentStatus')?.value;\n void this.g().get('visaStatus')?.value;\n void this.g().get('visaShareCodeStatus')?.value;\n void this.g().get('visaShareCodeOther')?.value;\n void this.g().get('adverseCreditStatus')?.value;\n\n this.facade.applyTenantDynamicValidators();\n });\n }\n\n hintText(): string {\n const t = this.g().get('applicantType')?.value;\n if (t === 'INDIVIDUAL') return 'Employment may be required depending on your status.';\n if (t === 'CORPORATE') return 'Please provide company details.';\n if (t === 'STUDENT') return 'Please provide your study details for this application.';\n return 'Select the applicant type to continue.';\n }\n}\n","<h4>Applicant type</h4>\n\n<div class=\"grid grid-cols-12\" [formGroup]=\"g()\">\n <mat-form-field class=\"col-span-12\">\n <mat-label>Applicant type</mat-label>\n <mat-select formControlName=\"applicantType\">\n <mat-option value=\"INDIVIDUAL\">Individual</mat-option>\n <mat-option value=\"CORPORATE\">Corporate</mat-option>\n <mat-option value=\"STUDENT\">Student</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12\">\n <mat-label>Visa status</mat-label>\n <mat-select formControlName=\"visaStatus\">\n <mat-option value=\"CITIZEN\">Citizen</mat-option>\n <mat-option value=\"VISA_HOLDER\">Visa Holder</mat-option>\n <mat-option value=\"WAITING_FOR_VISA\">Waiting For Visa</mat-option>\n <mat-option value=\"NOT_YET_APPLIED_FOR_VISA\">Not Yet Applied For Visa</mat-option>\n </mat-select>\n </mat-form-field>\n\n @if ( (g().get('applicantType')?.value === 'INDIVIDUAL' || g().get('applicantType')?.value === 'STUDENT') &&\n g().get('visaStatus')?.value && g().get('visaStatus')?.value === 'VISA_HOLDER' ) {\n\n <mat-form-field class=\"col-span-12\">\n <mat-label>Visa share code</mat-label>\n <mat-select formControlName=\"visaShareCodeStatus\">\n <mat-option value=\"WAITING_FOR_SHARECODE\"> Waiting for share code </mat-option>\n <mat-option value=\"OTHER\"> Other </mat-option>\n </mat-select>\n <mat-hint>Required for UK Right to Rent checks</mat-hint>\n </mat-form-field>\n\n @if (g().get('visaShareCodeStatus')?.value === 'OTHER') {\n <mat-form-field class=\"col-span-12\">\n <mat-label>Visa share code details</mat-label>\n <input matInput formControlName=\"visaShareCodeOther\" maxlength=\"120\" />\n </mat-form-field>\n } }\n\n <mat-form-field class=\"col-span-12\">\n <mat-label>Adverse credit status</mat-label>\n <mat-select formControlName=\"adverseCreditStatus\">\n <mat-option value=\"NONE\">None</mat-option>\n <mat-option value=\"ACTIVE_CCJ\">Active Ccj</mat-option>\n <mat-option value=\"SATISFIED_CCJ\">Satisfied Ccj</mat-option>\n <mat-option value=\"DEBT_MANAGEMENT_PLAN\">Debt Management Plan</mat-option>\n <mat-option value=\"LOW_CREDIT_SCORE\">Low Credit Score</mat-option>\n <mat-option value=\"OTHER\">Other</mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n\n<p class=\"hint py-3\">{{ hintText() }}</p>\n","import { Component, computed, inject, input } from '@angular/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { OfferFormFacade } from '../../offer-data-access/offer-form.facade';\nimport { TenantRegistryService } from '../../offer-shared/services/tenant-registry.service';\nimport { TenantBasicInfoSection } from '../tenant-basic-info-section/tenant-basic-info-section';\nimport { CorporateSection } from '../corporate-section/corporate-section';\nimport { EmploymentSection } from '../employment.section/employment.section';\nimport { GuarantorSection } from '../guarantor-section/guarantor-section';\nimport { StudentSection } from '../student-section/student-section';\nimport { TENANT_FORM, TENANT_KEY } from '../../offer-shared/services/tenant-form.token';\nimport { TenantApplicantTypeSection } from '../tenant-applicant-type-section/tenant-applicant-type-section';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n selector: 'rolatech-tenant-card',\n imports: [\n ReactiveFormsModule,\n MatCardModule,\n MatDividerModule,\n MatIconModule,\n MatButtonModule,\n TenantBasicInfoSection,\n TenantApplicantTypeSection,\n EmploymentSection,\n CorporateSection,\n StudentSection,\n GuarantorSection,\n ],\n templateUrl: './tenant-card.html',\n styleUrl: './tenant-card.scss',\n /**\n * Key part:\n * - TenantListSection resets registry with clientKeys in order\n * - Each rt-tenant-card consumes one key\n * - It resolves the correct FormGroup by clientKey (NOT backend id)\n */\n providers: [\n {\n provide: TENANT_FORM,\n useFactory: () => {\n const facade = inject(OfferFormFacade);\n const registry = inject(TenantRegistryService);\n const clientKey = registry.consumeNextKey();\n return facade.tenantGroupByClientKey(clientKey);\n },\n },\n ],\n})\nexport class TenantCard {\n readonly facade = inject(OfferFormFacade);\n\n // ✅ signal input (Angular 20) — not @Input\n readonly clientKey = input.required<string>();\n\n // ✅ resolve tenant group lazily AFTER input exists\n readonly tenantGroup = computed<FormGroup>(() => this.facade.tenantGroupByClientKey(this.clientKey()));\n\n readonly tenantId = computed(() => this.tenantGroup().get('id')?.value as string | null);\n\n readonly subtitle = computed(() => {\n const g = this.tenantGroup();\n const name = (g.get('fullName')?.value as string | null) ?? '';\n const type = (g.get('applicantType')?.value as string | null) ?? '';\n const email = (g.get('email')?.value as string | null) ?? '';\n return [name || 'Unnamed', type || 'No applicant type', email || 'No email'].join(' • ');\n });\n\n isIndividual() {\n return this.tenantGroup().get('applicantType')?.value === 'INDIVIDUAL';\n }\n isCorporate() {\n return this.tenantGroup().get('applicantType')?.value === 'CORPORATE';\n }\n isStudent() {\n return this.tenantGroup().get('applicantType')?.value === 'STUDENT';\n }\n\n removeTenant() {\n this.facade.removeTenantByClientKey(this.clientKey());\n }\n}\n","<div>\n <div class=\"flex justify-between items-center\">\n <div class=\"flex flex-col\">\n <div>\n <span class=\"text-lg font-bold\"> Tenant </span>\n @if (tenantId()) {\n <span class=\"pill\">Saved</span>\n } @else {\n <span class=\"pill pill-warn\">Not saved</span>\n }\n </div>\n\n <div>{{ subtitle() }}</div>\n </div>\n <button\n mat-icon-button\n type=\"button\"\n aria-label=\"Remove tenant\"\n [disabled]=\"!facade.canRemoveTenant()\"\n (click)=\"removeTenant()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <div class=\"py-2\" [formGroup]=\"tenantGroup()\">\n <rolatech-tenant-basic-info-section />\n <mat-divider class=\"py-2\"></mat-divider>\n\n <rolatech-tenant-applicant-type-section />\n <mat-divider class=\"py-2\"></mat-divider>\n\n @if (isIndividual()) {\n <rolatech-employment-section />\n <mat-divider class=\"py-2\"></mat-divider>\n } @if (isCorporate()) {\n <rolatech-corporate-section />\n <mat-divider class=\"py-2\"></mat-divider>\n } @if (isStudent()) {\n <rolatech-student-section />\n <mat-divider class=\"py-2\"></mat-divider>\n }\n\n <rolatech-guarantor-section />\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject } from '@angular/core';\nimport { OfferFormFacade } from '../../offer-data-access/offer-form.facade';\nimport { TenantRegistryService } from '../../offer-shared/services/tenant-registry.service';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { TenantCard } from '../tenant-card/tenant-card';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'rolatech-tenant-list-section',\n imports: [\n CommonModule,\n MatButtonModule,\n MatExpansionModule,\n TenantCard,\n MatIcon,\n ],\n providers: [TenantRegistryService],\n templateUrl: './tenant-list-section.html',\n styleUrl: './tenant-list-section.scss',\n})\nexport class TenantListSection {\n readonly facade = inject(OfferFormFacade);\n readonly registry = inject(TenantRegistryService);\n\n readonly keys = this.facade.tenantClientKeys; // computed signal in facade\n\n constructor() {\n // Critical: reset registry before <rt-tenant-card> instances render/consume keys\n effect(() => {\n this.registry.resetIfChanged(this.keys());\n });\n }\n\n addTenant() {\n this.facade.addTenant();\n }\n\n tenantName(key: string): string {\n const g = this.facade.tenantGroupByClientKey(key);\n return (g.get('fullName')?.value as string) || '—';\n }\n}\n","<div class=\"tenant-list-section\">\n <div class=\"tenant-list-section__header\">\n <div>\n <div class=\"tenant-list-section__title\">Tenants</div>\n <p class=\"tenant-list-section__copy\">Enter the tenant details for this offer and add more applicants when needed.</p>\n </div>\n </div>\n\n <mat-accordion multi>\n @for (key of keys(); track key) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>Tenant {{ $index + 1 }}</mat-panel-title>\n <mat-panel-description>{{ tenantName(key) }}</mat-panel-description>\n </mat-expansion-panel-header>\n <rolatech-tenant-card [clientKey]=\"key\" />\n </mat-expansion-panel>\n }\n </mat-accordion>\n\n <div class=\"tenant-list-section__actions\">\n <button mat-stroked-button type=\"button\" (click)=\"addTenant()\">\n <mat-icon>add</mat-icon>\n <span>Add another tenant</span>\n </button>\n </div>\n</div>\n","import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Tenant } from '../../interfaces';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-tenant-item',\n imports: [CommonModule, PricePipe],\n templateUrl: './tenant-item.html',\n styleUrl: './tenant-item.scss',\n})\nexport class TenantItem {\n tenant = input.required<Tenant>();\n}\n","<article class=\"tenant-item\">\n <div class=\"tenant-item__top\">\n <div class=\"tenant-item__identity\">\n <span class=\"tenant-item__eyebrow\">Tenant profile</span>\n <h3 class=\"tenant-item__name\">{{ tenant().firstName }} {{ tenant().lastName }}</h3>\n <p class=\"tenant-item__contact\">{{ tenant().email }}</p>\n </div>\n\n <div class=\"tenant-item__phone\">{{ tenant().phone || 'No phone added' }}</div>\n </div>\n\n <div class=\"tenant-item__facts\">\n <div class=\"tenant-item__fact\">\n <span class=\"tenant-item__fact-label\">Income</span>\n <strong>\n @if (tenant().income) {\n {{ tenant().income | price }}\n } @else {\n Not shared\n }\n </strong>\n </div>\n\n <div class=\"tenant-item__fact\">\n <span class=\"tenant-item__fact-label\">Category</span>\n <strong>{{ tenant().tenantCategory || 'Not set' }}</strong>\n </div>\n\n <div class=\"tenant-item__fact\">\n <span class=\"tenant-item__fact-label\">Employment</span>\n <strong>{{ tenant().employmentStatus || 'Not set' }}</strong>\n </div>\n\n <div class=\"tenant-item__fact\">\n <span class=\"tenant-item__fact-label\">Residency</span>\n <strong>{{ tenant().residencyStatus || 'Not set' }}</strong>\n </div>\n </div>\n</article>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { OfferFormFacade } from '../../offer-data-access/offer-form.facade';\nimport { TenantRegistryService } from '../../offer-shared/services/tenant-registry.service';\nimport { TenantCard } from '../tenant-card/tenant-card';\nimport { TenantItem } from '../tenant-item/tenant-item';\n\n@Component({\n selector: 'rolatech-agent-tenant-list-section',\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatInputModule,\n TenantCard,\n TenantItem,\n MatIcon,\n ],\n providers: [TenantRegistryService],\n templateUrl: './agent-tenant-list-section.html',\n styleUrl: './agent-tenant-list-section.scss',\n})\nexport class AgentTenantListSection {\n readonly facade = inject(OfferFormFacade);\n readonly registry = inject(TenantRegistryService);\n private readonly propertyService = inject(PropertyService);\n\n readonly keys = this.facade.tenantClientKeys;\n readonly mode = signal<'manual' | 'existing' | null>(null);\n readonly loadingSavedTenants = signal(false);\n readonly savedTenants = signal<any[]>([]);\n readonly selectedTenantIds = computed(() => new Set(this.facade.tenantsArray().controls.map((group) => group.get('id')?.value).filter(Boolean)));\n readonly selectedSavedTenants = computed(() => {\n const selectedIds = this.selectedTenantIds();\n return this.savedTenants().filter((tenant) => !!tenant?.id && selectedIds.has(tenant.id));\n });\n readonly searchText = signal('');\n\n readonly visibleSavedTenants = computed(() => {\n const query = this.searchText().trim().toLowerCase();\n if (!query) {\n return this.savedTenants();\n }\n\n return this.savedTenants().filter((tenant) =>\n [tenant.fullName, tenant.firstName, tenant.lastName, tenant.email, tenant.phone].some((value: string | undefined) =>\n value?.toLowerCase().includes(query),\n ),\n );\n });\n\n constructor() {\n effect(() => {\n this.registry.resetIfChanged(this.mode() === 'manual' ? this.keys() : []);\n });\n }\n\n ngOnInit() {\n this.loadSavedTenants();\n }\n\n activateExisting(): void {\n this.mode.set('existing');\n }\n\n activateManual(): void {\n this.mode.set('manual');\n if (this.facade.tenantsArray().length === 0) {\n this.facade.addTenant();\n }\n }\n\n addManualTenant(): void {\n if (this.mode() !== 'manual') {\n this.activateManual();\n return;\n }\n\n this.facade.addTenant();\n }\n\n useSavedTenant(tenant: any): void {\n this.facade.addTenantFromSavedRecord(tenant);\n this.mode.set('existing');\n }\n\n removeSavedTenant(tenantId: string | null | undefined): void {\n if (!tenantId) {\n return;\n }\n\n this.facade.removeTenantById(tenantId);\n }\n\n isSelected(tenantId: string | null | undefined): boolean {\n return !!tenantId && this.selectedTenantIds().has(tenantId);\n }\n\n tenantName(key: string): string {\n const group = this.facade.tenantGroupByClientKey(key);\n return (group.get('fullName')?.value as string) || '—';\n }\n\n private loadSavedTenants(): void {\n this.loadingSavedTenants.set(true);\n this.propertyService.findTenants({}).subscribe({\n next: (res: any) => {\n this.savedTenants.set(res.data ?? []);\n this.loadingSavedTenants.set(false);\n },\n error: () => {\n this.savedTenants.set([]);\n this.loadingSavedTenants.set(false);\n },\n });\n }\n}\n","<section class=\"rt-agent-tenant-section\">\n <header class=\"rt-agent-tenant-section__header\">\n <div>\n <div class=\"rt-agent-tenant-section__title\">Tenants</div>\n <p class=\"rt-agent-tenant-section__copy\">\n Choose a tenant already in your registry, or start a fresh tenant entry only when you need a new profile.\n </p>\n </div>\n\n <div class=\"rt-agent-tenant-section__switch\">\n <button\n mat-stroked-button\n type=\"button\"\n [class.rt-agent-tenant-section__switch-button--active]=\"mode() === 'existing'\"\n (click)=\"activateExisting()\"\n >\n Select existing tenant\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n [class.rt-agent-tenant-section__switch-button--active]=\"mode() === 'manual'\"\n (click)=\"activateManual()\"\n >\n Enter new tenant manually\n </button>\n </div>\n </header>\n\n @if (mode() === null) {\n <div class=\"rt-agent-tenant-section__empty\">\n <h3>Choose how to add the tenant</h3>\n <p>Pick an existing record from your registry, or open the manual form when you need to create a new tenant profile.</p>\n </div>\n }\n\n @if (mode() === 'existing') {\n <section class=\"rt-agent-tenant-section__saved-panel\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Search saved tenants</mat-label>\n <input\n matInput\n type=\"text\"\n [ngModel]=\"searchText()\"\n (ngModelChange)=\"searchText.set($event)\"\n placeholder=\"Search by name, email, or phone\"\n />\n </mat-form-field>\n\n @if (selectedSavedTenants().length > 0) {\n <div class=\"rt-agent-tenant-section__selected\">\n <div class=\"rt-agent-tenant-section__selected-head\">\n <h3>Selected tenants</h3>\n <p>{{ selectedSavedTenants().length }} tenant{{ selectedSavedTenants().length === 1 ? '' : 's' }} already added to this offer.</p>\n </div>\n\n <div class=\"rt-agent-tenant-section__selected-grid\">\n @for (tenant of selectedSavedTenants(); track tenant.id ?? $index) {\n <article class=\"rt-agent-tenant-section__selected-card\">\n <rolatech-tenant-item [tenant]=\"tenant\"></rolatech-tenant-item>\n <button mat-stroked-button type=\"button\" (click)=\"removeSavedTenant(tenant.id)\">\n <mat-icon>remove_circle</mat-icon>\n <span>Remove tenant</span>\n </button>\n </article>\n }\n </div>\n </div>\n }\n\n @if (loadingSavedTenants()) {\n <div class=\"rt-agent-tenant-section__saved-grid\">\n @for (item of [0, 1]; track item) {\n <div class=\"rt-agent-tenant-section__saved-placeholder\"></div>\n }\n </div>\n } @else if (visibleSavedTenants().length > 0) {\n <div class=\"rt-agent-tenant-section__saved-grid\">\n @for (tenant of visibleSavedTenants(); track tenant.id ?? $index) {\n <article class=\"rt-agent-tenant-section__saved-card\">\n <rolatech-tenant-item [tenant]=\"tenant\"></rolatech-tenant-item>\n <button mat-stroked-button type=\"button\" (click)=\"useSavedTenant(tenant)\" [disabled]=\"isSelected(tenant.id)\">\n <mat-icon>{{ isSelected(tenant.id) ? 'check' : 'person_add' }}</mat-icon>\n <span>{{ isSelected(tenant.id) ? 'Added' : 'Use tenant' }}</span>\n </button>\n </article>\n }\n </div>\n } @else {\n <div class=\"rt-agent-tenant-section__empty\">\n <h3>No saved tenants found</h3>\n <p>Use manual entry if this tenant has not been added to your registry yet.</p>\n </div>\n }\n </section>\n }\n\n @if (mode() === 'manual') {\n <mat-accordion multi>\n @for (key of keys(); track key) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>Tenant {{ $index + 1 }}</mat-panel-title>\n <mat-panel-description>{{ tenantName(key) }}</mat-panel-description>\n </mat-expansion-panel-header>\n <rolatech-tenant-card [clientKey]=\"key\" />\n </mat-expansion-panel>\n }\n </mat-accordion>\n\n <div class=\"rt-agent-tenant-section__actions\">\n <button mat-stroked-button type=\"button\" (click)=\"addManualTenant()\">\n <mat-icon>add</mat-icon>\n <span>Add another tenant</span>\n </button>\n </div>\n }\n</section>\n","import { Component, effect, inject, input } from '@angular/core';\nimport { OfferFormFacade } from '../../offer-data-access/offer-form.facade';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { RentalOfferTermsSection } from '../rental-offer-terms-section/rental-offer-terms-section';\nimport { TenantListSection } from '../tenant-list-section/tenant-list-section';\nimport { AgentTenantListSection } from '../agent-tenant-list-section/agent-tenant-list-section';\n\n@Component({\n selector: 'rolatech-property-offer-rental-form',\n imports: [MatDividerModule, RentalOfferTermsSection, TenantListSection, AgentTenantListSection],\n templateUrl: './property-offer-rental-form.html',\n styleUrl: './property-offer-rental-form.scss',\n})\nexport class PropertyOfferRentalForm {\n readonly facade = inject(OfferFormFacade);\n readonly agentWorkflow = input(false);\n\n constructor() {\n effect(() => {\n // keep dynamic validators current when any tenant values change\n this.facade.applyTenantDynamicValidators();\n });\n }\n}\n","<rolatech-rental-offer-terms-section />\n@if (agentWorkflow()) {\n <rolatech-agent-tenant-list-section />\n} @else {\n <rolatech-tenant-list-section />\n}\n","import { Component, inject } from '@angular/core';\nimport { OfferFormFacade } from '../../offer-data-access/offer-form.facade';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\n@Component({\n selector: 'rolatech-sale-offer-section',\n imports: [ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatSelectModule, MatDatepickerModule, MatNativeDateModule],\n templateUrl: './sale-offer-section.html',\n styleUrl: './sale-offer-section.scss',\n})\nexport class SaleOfferSection {\n private readonly facade = inject(OfferFormFacade);\n readonly sale = this.facade.saleGroup();\n}\n","<div class=\"grid\" [formGroup]=\"sale\">\n <mat-form-field>\n <mat-label>Offer amount</mat-label>\n <input matInput type=\"number\" formControlName=\"amount\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Buyer name</mat-label>\n <input matInput formControlName=\"buyerName\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input matInput formControlName=\"email\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Phone</mat-label>\n <input matInput formControlName=\"phone\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Payment method</mat-label>\n <mat-select formControlName=\"paymentMethod\">\n <mat-option value=\"CASH\">Cash</mat-option>\n <mat-option value=\"MORTGAGE\">Mortgage</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Proposed exchange date</mat-label>\n <input matInput [matDatepicker]=\"dp\" formControlName=\"proposedExchangeDate\" (focus)=\"dp.open()\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field class=\"span2\">\n <mat-label>Solicitor company name</mat-label>\n <input matInput formControlName=\"solicitorCompanyName\" />\n </mat-form-field>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { SaleOfferSection } from '../sale-offer-section/sale-offer-section';\nimport { OfferFormFacade } from '../../offer-data-access/offer-form.facade';\n\n@Component({\n selector: 'rolatech-property-offer-sale-form',\n imports: [SaleOfferSection],\n templateUrl: './property-offer-sale-form.html',\n styleUrl: './property-offer-sale-form.scss',\n})\nexport class PropertyOfferSaleForm {\n readonly facade = inject(OfferFormFacade);\n}\n","<rolatech-sale-offer-section />\n","import { Component, computed, effect, inject, OnInit, signal } from '@angular/core';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { OfferFormFacade } from '../../../offer-data-access/offer-form.facade';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PropertyOfferRentalForm } from '../../../components/property-offer-rental-form/property-offer-rental-form';\nimport { PropertyOfferSaleForm } from '../../../components/property-offer-sale-form/property-offer-sale-form';\nimport { Property } from '../../../interfaces';\nimport { PropertyService, TitleService } from '@rolatech/angular-services';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { PropertyIntentShell } from '../../../components/property-intent-shell/property-intent-shell';\nimport {\n PropertyMarketBreadcrumbComponent,\n PropertyMarketBreadcrumbItem,\n} from '../../../components/property-market-breadcrumb/property-market-breadcrumb';\n\n@Component({\n selector: 'rolatech-property-offer-create',\n imports: [\n MatButtonModule,\n MatSnackBarModule,\n PropertyOfferRentalForm,\n PropertyOfferSaleForm,\n PropertyIntentShell,\n PropertyMarketBreadcrumbComponent,\n ],\n templateUrl: './property-offer-create.html',\n styleUrl: './property-offer-create.scss',\n providers: [OfferFormFacade],\n})\nexport class PropertyOfferCreate implements OnInit {\n readonly route = inject(ActivatedRoute);\n readonly router = inject(Router);\n readonly snack = inject(MatSnackBar);\n readonly authService = inject(AuthService);\n readonly facade = inject(OfferFormFacade);\n readonly titleService = inject(TitleService);\n propertyService = inject(PropertyService);\n readonly requestFlow = (this.route.snapshot.data['requestFlow'] as 'public' | 'agent' | 'market' | undefined) ?? 'public';\n\n readonly offerTypeLabel = computed(() => (this.facade.offerType() === 'RENTAL' ? 'rental offer' : 'sale offer'));\n property = signal<Property | null>(null);\n readonly marketBreadcrumbs = computed<PropertyMarketBreadcrumbItem[]>(() => [\n { label: 'Properties', link: '/properties' },\n { label: this.property()?.title || 'Property detail', link: ['/properties', this.route.snapshot.params['id']] },\n { label: 'Make an offer' },\n ]);\n readonly isMarketFlow = computed(() => this.requestFlow === 'market');\n\n constructor() {\n effect(() => {\n this.facade.setOfferType(this.resolveOfferType());\n\n const propertyId = this.route.snapshot.params['id'] ?? '';\n this.facade.setPropertyId(propertyId);\n\n const user = this.authService.user();\n if (user) {\n this.prefillRequester(user);\n }\n\n const p = this.property();\n if (p) {\n this.titleService.setTitle(p.title);\n }\n });\n }\n ngOnInit(): void {\n this.getProperty();\n }\n getProperty() {\n const id = this.route.snapshot.params['id'];\n\n this.propertyService.get(id).subscribe({\n next: (res: any) => {\n this.property.set(res.data);\n },\n });\n }\n saveDraft() {}\n async submit() {\n const res = await this.facade.submit();\n if (!res) return;\n this.snack.open('Offer submitted', 'OK', { duration: 2500 });\n if (this.requestFlow === 'market') {\n await this.router.navigate(['..', 'offers', res.id], { relativeTo: this.route });\n return;\n }\n await this.router.navigate(this.requestFlow === 'agent' ? ['/offers', res.id] : ['/properties/offers', res.id]);\n }\n\n private resolveOfferType(): 'RENTAL' | 'SALE' {\n const typeParam = this.route.snapshot.paramMap.get('type')?.toLowerCase();\n if (typeParam === 'sale') {\n return 'SALE';\n }\n if (typeParam === 'rental') {\n return 'RENTAL';\n }\n\n const market = this.property()?.market?.toString().toUpperCase();\n return market === 'SALE' ? 'SALE' : 'RENTAL';\n }\n\n private prefillRequester(user: { name?: string; firstName?: string; lastName?: string; email?: string; phone?: string }) {\n const fullName = `${user.firstName ?? ''} ${user.lastName ?? ''}`.trim() || user.name || null;\n const saleGroup = this.facade.saleGroup();\n\n if (!saleGroup.get('buyerName')?.value && fullName) {\n saleGroup.patchValue({ buyerName: fullName }, { emitEvent: false });\n }\n if (!saleGroup.get('email')?.value && user.email) {\n saleGroup.patchValue({ email: user.email }, { emitEvent: false });\n }\n if (!saleGroup.get('phone')?.value && user.phone) {\n saleGroup.patchValue({ phone: user.phone }, { emitEvent: false });\n }\n\n if (this.facade.isRental()) {\n if (this.facade.tenantsArray().length === 0) {\n this.facade.addTenant();\n }\n\n const leadTenant = this.facade.tenantsArray().at(0);\n if (!leadTenant) {\n return;\n }\n\n const patch: Record<string, string> = {};\n\n if (!leadTenant.get('fullName')?.value && fullName) {\n patch['fullName'] = fullName;\n }\n if (!leadTenant.get('email')?.value && user.email) {\n patch['email'] = user.email;\n }\n if (!leadTenant.get('phone')?.value && user.phone) {\n patch['phone'] = user.phone;\n }\n\n if (Object.keys(patch).length > 0) {\n leadTenant.patchValue(patch, { emitEvent: false });\n }\n }\n }\n}\n","<rolatech-property-intent-shell [property]=\"property()\">\n <div intent-header class=\"property-offer-create__header\">\n <rolatech-property-market-breadcrumb\n class=\"property-offer-create__breadcrumb\"\n [items]=\"marketBreadcrumbs()\"\n ></rolatech-property-market-breadcrumb>\n <span class=\"property-offer-create__eyebrow\">\n {{ requestFlow === 'agent' ? 'Agent workflow' : isMarketFlow() ? 'Market workflow' : 'Property offer' }}\n </span>\n <div class=\"property-offer-create__title\">Create {{ offerTypeLabel() }}</div>\n <p class=\"property-offer-create__description\">\n Share the core terms up front and the listing team can review the offer without switching between multiple forms.\n </p>\n </div>\n\n <div intent-body class=\"property-offer-create__body\">\n <div class=\"content\">\n @if (facade.isRental()) {\n <rolatech-property-offer-rental-form />\n } @else {\n <rolatech-property-offer-sale-form />\n }\n </div>\n\n <div class=\"flex flex-col md:flex-row gap-3\">\n <button class=\"w-full md:w-2/3\" mat-flat-button [disabled]=\"facade.submitting()\" (click)=\"submit()\">\n {{ facade.submitting() ? 'Submitting' : 'Submit' }}\n </button>\n </div>\n\n @if (facade.submitError()) {\n <p class=\"error\">{{ facade.submitError() }}</p>\n }\n </div>\n</rolatech-property-intent-shell>\n","import { Routes } from '@angular/router';\nimport { PropertyLayoutComponent } from './property-layout/property-layout.component';\nimport { PropertyDetailsComponent } from './property-details/property-details.component';\nimport { PropertyViewingRequestComponent } from './property-viewing-request/property-viewing-request.component';\nimport { PropertyOfferIndexComponent } from './property-offer-index/property-offer-index.component';\nimport { PropertyViewingIndexComponent } from './property-viewing-index/property-viewing-index.component';\nimport { PropertyOfferDetailComponent } from './property-offer-detail/property-offer-detail.component';\nimport { PropertyViewingDetailComponent } from './property-viewing-detail/property-viewing-detail.component';\nimport { PropertyWishlistComponent } from './property-wishlist/property-wishlist.component';\nimport { AuthGuard } from '@rolatech/angular-auth';\nimport { PropertyOfferCreate } from './property-offer-create/property-offer-create';\n\nexport const propertyRoutes: Routes = [\n {\n path: '',\n component: PropertyLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () => import('./property-index/property-index.component').then((x) => x.PropertyIndexComponent),\n },\n ],\n },\n {\n path: 'wishlist',\n canActivate: [AuthGuard],\n component: PropertyWishlistComponent,\n },\n {\n path: 'viewings',\n canActivate: [AuthGuard],\n component: PropertyViewingIndexComponent,\n },\n {\n path: 'offers',\n canActivate: [AuthGuard],\n component: PropertyOfferIndexComponent,\n },\n {\n path: 'invoices',\n canActivate: [AuthGuard],\n loadChildren: () => import('@rolatech/angular-billing').then((m) => m.invoiceRoutes),\n data: {\n invoiceBaseLink: '/properties/invoices',\n invoiceEyebrow: 'My billing',\n invoiceCollectionTitle: 'Your invoices',\n invoiceCollectionDescription: 'Track the invoices created from your property applications, deposits, and agreed move-in charges.',\n },\n },\n {\n path: 'viewings/:id',\n canActivate: [AuthGuard],\n component: PropertyViewingDetailComponent,\n },\n {\n path: 'offers/:id',\n canActivate: [AuthGuard],\n component: PropertyOfferDetailComponent,\n },\n {\n path: ':id/viewing/application',\n canActivate: [AuthGuard],\n data: {\n requestFlow: 'public',\n },\n component: PropertyViewingRequestComponent,\n },\n {\n path: ':id/offer/:type', // type = rental | sale\n canActivate: [AuthGuard],\n data: {\n requestFlow: 'public',\n },\n component: PropertyOfferCreate,\n },\n {\n path: ':id',\n component: PropertyDetailsComponent,\n },\n];\n","import { Component, DestroyRef, HostBinding, inject, OnInit, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatTableModule } from '@angular/material/table';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\nimport { ToolbarComponent, SearchBar, BaseComponent } from '@rolatech/angular-components';\nimport { PropertySearchService, PropertyService } from '@rolatech/angular-services';\nimport { Property } from '../../../interfaces';\nimport { PropertyManageItemComponent } from '../../../components/property-manage-item/property-manage-item.component';\nimport { distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\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-manage-index',\n imports: [\n MatButtonModule,\n RouterLink,\n MatIconModule,\n MatTableModule,\n MatMenuModule,\n MatPaginatorModule,\n ToolbarComponent,\n PropertyManageItemComponent,\n SearchBar,\n PropertyManageItemSkeleton,\n ],\n templateUrl: './property-manage-index.component.html',\n styleUrl: './property-manage-index.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyManageIndexComponent extends BaseComponent implements OnInit {\n @HostBinding('class.rolatech-property-manage-index') hasClass = true;\n propertyService = inject(PropertyService);\n propertySearchService = inject(PropertySearchService);\n util = inject(PropertyUtil);\n paginator = viewChild(MatPaginator);\n snackBar = inject(MatSnackBar);\n gridView = true;\n\n isSearch = false;\n // properties: Property[] = [];\n properties = signal<Property[]>([]);\n\n exporting = false;\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n pageIndex = signal(0);\n open = signal(false);\n meta: any;\n loading = false;\n\n ngOnInit(): void {\n // this.findProperties();\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\n return {\n q: p.get('q') || undefined,\n town: p.get('town') || 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 toggleSearch() {\n this.open.update((v) => !v);\n }\n toggleView() {\n if (this.gridView) {\n this.gridView = false;\n this.util.viewEvent.emit(PropertyViewType.LIST);\n } else {\n this.gridView = true;\n this.util.viewEvent.emit(PropertyViewType.GRID);\n }\n }\n searchByText(event: any) {\n this.router.navigate([], {\n queryParams: { q: event, page: 1, limit: 15 },\n queryParamsHandling: 'merge', // keep other params like sort, etc.\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 // this.pageIndex.set(Math.max(page - 1, 0));\n },\n error: (error) => {\n this.loading = false;\n },\n });\n }\n onCloseSearch() {\n // this.open.set(false);\n // this.router.navigate([], { queryParams: {}, queryParamsHandling: 'merge' });\n this.router.navigate(['/properties']);\n }\n export() {\n this.exporting = true;\n this.propertyService.export().subscribe({\n next: ({ blob, filename }) => {\n // Browser-only download\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename || 'properties.csv';\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n this.exporting = false;\n },\n error: (e) => {\n this.exporting = false;\n },\n });\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=\"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 class=\"cursor-pointer\" 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…\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=\"bg-(--rt-rasised-background) h-full\">\n <div class=\"flex flex-wrap px-2\">\n @for (row of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; track row) {\n <rolatech-property-manage-item-skeleton></rolatech-property-manage-item-skeleton>\n }\n </div>\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 px-2\">\n @for (item of properties(); track $index) {\n <rolatech-property-manage-item class=\"cursor-pointer\"\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","import { Component, inject } from '@angular/core';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ToolbarComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-property-manage-create',\n imports: [\n ToolbarComponent,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n TextFieldModule,\n MatSelectModule,\n MatOptionModule,\n MatButtonModule,\n ],\n templateUrl: './property-manage-create.component.html',\n styleUrl: './property-manage-create.component.scss',\n})\nexport class PropertyManageCreateComponent {\n private propertyService = inject(PropertyService);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private snackBar = inject(MatSnackBar);\n property: any = {};\n create() {\n const data = {\n ...this.property,\n };\n this.propertyService.create(data).subscribe({\n next: (res) => {\n this.router.navigate([`../${res.data.id}/manage/info`], {\n relativeTo: this.route,\n });\n },\n error: (e) => {\n this.snackBar.open(e.message);\n },\n });\n }\n}\n","<rolatech-toolbar title=\"Add property\" link=\"../\"> </rolatech-toolbar>\n<div class=\"p-3\">\n <section>\n <form #productForm=\"ngForm\">\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Title </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"property.title\" name=\"title\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Description </mat-label>\n <textarea\n matInput\n type=\"text\"\n [(ngModel)]=\"property.description\"\n name=\"description\"\n required\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n ></textarea>\n </mat-form-field>\n </div>\n </form>\n </section>\n <div i18n>* items are required</div>\n <div class=\"mt-3\">\n <button mat-flat-button class=\"w-28\" (click)=\"create()\" i18n>Create</button>\n </div>\n</div>\n","import { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { RouterLink, RouterLinkActive, RouterOutlet, ActivatedRoute } from '@angular/router';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { Property, PropertyStatus } from '../../../interfaces';\nimport { BaseComponent } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-property-manage-layout',\n imports: [RouterLink, RouterLinkActive, MatButtonModule, RouterOutlet],\n templateUrl: './property-manage-layout.component.html',\n styleUrl: './property-manage-layout.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyManageLayoutComponent extends BaseComponent implements OnInit {\n property!: Property;\n submitted = false;\n accepted = false;\n isDraft = false;\n propertyService = inject(PropertyService);\n ngOnInit(): void {\n this.id = this.route.snapshot.paramMap.get('id') as string;\n this.get();\n }\n get() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property = res.data;\n },\n });\n }\n submit() {\n this.propertyService.submitForReview(this.id).subscribe({\n next: (res) => {\n this.snackBarService.open('Submit successfully');\n\n this.property.status = PropertyStatus['Pending' as keyof typeof PropertyStatus];\n this.updateStatus();\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n updateStatus() {\n this.isDraft = this.property.status.toString() === 'DRAFT' || this.property.status.toString() === 'PENDING';\n this.accepted = this.property.status.toString() === 'ACCEPTED';\n }\n publish() {\n this.propertyService.publish(this.id).subscribe({\n next: (res) => {\n this.snackBarService.open('Publish successfully');\n this.property.status = PropertyStatus['Available' as keyof typeof PropertyStatus];\n this.updateStatus();\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<div class=\"flex flex-col md:flex-row m-auto\">\n <div\n class=\"min-w-[256px] px-3 md:px-0 flex flex-row md:flex-col md:h-full items-center md:items-start h-16 overflow-x-scroll overflow-y-hidden scrollbar-hide whitespace-pre\"\n >\n <div class=\"flex flex-row md:flex-col md:w-full\">\n <div class=\"hidden md:flex text-xl font-bold h-14 items-center px-1\" i18n>Property</div>\n <a routerLink=\"./info\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Basic info</a>\n <a routerLink=\"./media\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Media</a>\n <a routerLink=\"./videos\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Videos</a>\n <a routerLink=\"./sections\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Details</a>\n <a routerLink=\"./floorplans\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Floorplans</a>\n <a routerLink=\"./location\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Location</a>\n <a routerLink=\"./features\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Features</a>\n <a routerLink=\"./keywords\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Keywords</a>\n <a routerLink=\"./highlights\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Highlights</a>\n <a routerLink=\"./epc\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>EPC</a>\n <a routerLink=\"./translation\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Translation</a>\n <!-- <a routerLink=\"./amenities\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Amenities</a> -->\n <!-- <a routerLink=\"./tags\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Tags</a> -->\n <!-- <a routerLink=\"./options\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Options</a> -->\n </div>\n <div class=\"flex flex-row md:flex-col md:w-full\">\n <div class=\"hidden md:flex text-xl font-bold h-14 items-center px-2\" i18n>Settings</div>\n <!-- <a routerLink=\"./variants\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Variants</a> -->\n <a routerLink=\"./schedule\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Schedule</a>\n <a routerLink=\"./pricing\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Pricing</a>\n </div>\n <!-- <div class=\"flex flex-row md:flex-col md:w-full\">\n <div class=\"hidden md:flex text-xl font-bold h-14 items-center px-2\" i18n>Others</div>\n </div> -->\n @if (property) {\n @if (property.status.toString() === 'DRAFT') {\n <div class=\"md:mt-6 md:ml-2 flex items-center\">\n <button mat-flat-button (click)=\"submit()\" i18n>Submit for review</button>\n </div>\n }\n @if (property.status.toString() === 'PENDING') {\n <div class=\"md:mt-6 md:ml-2 flex items-center\">\n <button mat-flat-button disabled i18n>Pending</button>\n </div>\n }\n @if (property.status.toString() === 'APPROVED') {\n <div class=\"md:mt-6 md:ml-2 flex items-center\">\n <button mat-flat-button (click)=\"publish()\" i18n>Publish</button>\n </div>\n }\n }\n </div>\n <div class=\"w-full\">\n <router-outlet></router-outlet>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-property-manage-content',\n imports: [CommonModule],\n templateUrl: './property-manage-content.component.html',\n styleUrl: './property-manage-content.component.scss',\n})\nexport class PropertyManageContentComponent {}\n","<ng-content select=\"rolatech-toolbar\"></ng-content>\n<div class=\"p-3\">\n <ng-content></ng-content>\n</div>\n","import { Component, inject, model, OnInit } from '@angular/core';\nimport { CommonModule, KeyValuePipe } from '@angular/common';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS, MatOptionModule } from '@angular/material/core';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule, MatSelectChange } from '@angular/material/select';\nimport { DecimalDirective } from '@rolatech/angular-common';\nimport { ToolbarComponent, BaseComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyManageContentComponent } from '../property-manage-content/property-manage-content.component';\nimport { Property, PropertyStatus, PropertyType, PropertyPriceType } from '../../../interfaces';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\n\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n\n@Component({\n selector: 'rolatech-property-manage-info',\n imports: [\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n TextFieldModule,\n MatSelectModule,\n MatOptionModule,\n MatButtonModule,\n ToolbarComponent,\n PropertyManageContentComponent,\n DecimalDirective,\n MatSelectModule,\n KeyValuePipe,\n MatDatepickerModule,\n ],\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n templateUrl: './property-manage-info.component.html',\n styleUrl: './property-manage-info.component.scss',\n})\nexport class PropertyManageInfoComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n property!: Property;\n status = PropertyStatus;\n selectedCategoyIds!: string[];\n propertyType = PropertyType;\n priceType = PropertyPriceType;\n price = model<string>('0.00');\n deposit = model<string>('');\n minDate = new Date();\n ngOnInit(): void {\n this.id = this.route.parent?.snapshot.paramMap.get('id') as string;\n this.find();\n }\n find() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property = res.data;\n const price = this.property.price ? this.property.price.toFixed(2) : '0.00';\n this.price.set(price);\n if (this.property.priceType?.toString() === 'PARTIAL') {\n const deposit = this.property.deposit.toFixed(2);\n this.deposit.set(deposit);\n }\n },\n });\n }\n formatPrice(value: number) {\n // Convert to number first in case it's a string\n this.property.price = Number(Number(value).toFixed(2));\n }\n typeCompareFn(t1: any, t2: any) {\n return t1 === t2;\n }\n priceTypeCompareFn(t1: any, t2: any) {\n return t1 === t2;\n }\n onTypeChange(event: MatSelectChange) {\n // this.property.type = Object.keys(this.propertyType).find((key) => {\n // return this.propertyType[key] === event.value;\n // })!;\n this.property.type = event.value;\n }\n onCategoryChange(event: any) {\n this.selectedCategoyIds = event.value;\n }\n update() {\n const { title, description, type, priceType, availableDate, bedrooms, bathrooms, receptions, size, floor } = this.property;\n const data = {\n title,\n description,\n bedrooms,\n bathrooms,\n receptions,\n size,\n floor,\n type,\n price: Number(this.price()) * 100,\n priceType,\n deposit: Number(this.deposit()) * 100,\n availableDate,\n };\n this.propertyService.update(this.id, data).subscribe({\n next: (res) => {\n this.snackBarService.open('Update successfully');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n}\n","<rolatech-property-manage-content>\n <rolatech-toolbar title=\"Basic info\" class=\"hidden md:block\" divider></rolatech-toolbar>\n @if (property) {\n <div class=\"flex flex-col\">\n <form #propertyForm=\"ngForm\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Title </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"property.title\" name=\"title\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Description </mat-label>\n <textarea\n matInput\n type=\"text\"\n [(ngModel)]=\"property.description\"\n name=\"description\"\n required\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n ></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Bedrooms </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"property.bedrooms\" name=\"bedrooms\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Bathrooms </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"property.bathrooms\" name=\"bathrooms\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Receptions </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"property.receptions\" name=\"receptions\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Floor </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"property.floor\" name=\"floor\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Size(sqft) </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"property.size\" name=\"size\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" required>\n <mat-label i18n>Type</mat-label>\n <mat-select\n name=\"type\"\n [compareWith]=\"typeCompareFn\"\n (selectionChange)=\"onTypeChange($event)\"\n [(ngModel)]=\"property.type\"\n >\n @for (type of propertyType | keyvalue; track type) {\n <mat-option [value]=\"type.key\">\n {{ type.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <!-- <mat-form-field appearance=\"fill\" required>\n <mat-label i18n>Price type</mat-label>\n <mat-select name=\"priceType\" [compareWith]=\"priceTypeCompareFn\" [(ngModel)]=\"property.priceType\">\n @for (type of priceType | keyvalue; track type) {\n <mat-option [value]=\"type.key\">\n {{ type.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field> -->\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Available date</mat-label>\n <input\n matInput\n placeholder=\"Available date\"\n [matDatepicker]=\"availableDatePicker\"\n [min]=\"minDate\"\n (focus)=\"availableDatePicker.open()\"\n name=\"availableDate\"\n [(ngModel)]=\"property.availableDate\"\n (dateInput)=\"property.availableDate = $event.value.format('YYYY-MM-DD')\"\n readonly\n />\n <mat-datepicker-toggle matIconPrefix [for]=\"availableDatePicker\"></mat-datepicker-toggle>\n <mat-datepicker #availableDatePicker></mat-datepicker>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Price </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"price\" name=\"price\" required rolatechDecimal />\n </mat-form-field>\n @if (property.priceType && property.priceType.toString() === 'PARTIAL') {\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Deposit </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"deposit\" name=\"deposit\" required rolatechDecimal />\n </mat-form-field>\n }\n </form>\n </div>\n <div>\n <button mat-flat-button (click)=\"update()\" i18n>Save</button>\n </div>\n }\n</rolatech-property-manage-content>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { PropertyManageContentComponent } from '../property-manage-content/property-manage-content.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ActivatedRoute } from '@angular/router';\nimport { Media } from '@rolatech/angular-common';\nimport {\n MediaListComponent,\n MediaListItemComponent,\n ToolbarComponent,\n ImagePreviewDialogComponent,\n ConfirmationDialogComponent,\n} from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { findLastIndex } from 'lodash';\nimport { PropertyStatus } from '../../../interfaces';\nconst SIZE = 10 * 1024 * 1024; // file slice size 10MB\n\n@Component({\n selector: 'rolatech-property-manage-media',\n imports: [MediaListComponent, MediaListItemComponent, ToolbarComponent, PropertyManageContentComponent],\n templateUrl: './property-manage-media.component.html',\n styleUrl: './property-manage-media.component.scss',\n})\nexport class PropertyManageMediaComponent implements OnInit {\n route = inject(ActivatedRoute);\n propertyService = inject(PropertyService);\n dialog = inject(MatDialog);\n snackBar = inject(MatSnackBar);\n id: string;\n isLoading = false;\n media: Media[] = [];\n status = PropertyStatus;\n // propertyType: any = PropertyType;\n constructor() {\n this.id = this.route.parent?.snapshot.paramMap.get('id') as string;\n }\n ngOnInit(): void {\n this.find();\n }\n find() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.media = res.data.media || [];\n },\n });\n }\n onImageClick(i: any) {\n const dialogRef = this.dialog.open(ImagePreviewDialogComponent, {\n maxWidth: '80vw',\n maxHeight: '80vh',\n height: '80%',\n width: '80%',\n panelClass: 'full-screen-modal',\n data: {\n media: this.media,\n selected: i,\n },\n });\n dialogRef.afterClosed().subscribe((result) => {});\n }\n private createFileChunk(file: any, size = SIZE) {\n const fileChunkList: any = [];\n let cur = 0;\n while (cur < file.size) {\n fileChunkList.push({ file: file.slice(cur, cur + size) });\n cur += size;\n }\n return fileChunkList;\n }\n\n onUploadMedia2(event: any) {\n const file = event.target.files[0];\n const reader = new FileReader();\n reader.onload = (e) => {};\n\n const fileChunkList = this.createFileChunk(file);\n fileChunkList.forEach((item) => {});\n }\n onMultipleFilesUpload(event: any) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n const startIndex = this.media.length; // Offset to preserve existing items\n Array.from(input.files).forEach((file, i) => {\n this.uploadFile(file, startIndex + i);\n });\n }\n }\n private uploadFile(file: any, index: number) {\n const reader = new FileReader();\n const formData = new FormData();\n formData.append('file', file);\n\n this.media.splice(index, 0, {\n url: '',\n alt: 'Uploading...',\n width: 0,\n height: 0,\n uploading: true,\n });\n\n reader.readAsDataURL(file);\n reader.onload = () => {\n const img: any = new Image();\n img.onload = () => {\n Object.assign(this.media[index], {\n url: img.src,\n width: img.width,\n height: img.height,\n });\n };\n img.src = reader.result as string;\n };\n this.propertyService.uploadMedia(this.id, formData).subscribe({\n next: (res: any) => {\n // Replace item at index using native splice\n // this.media.splice(index, 1, res.data);\n this.media.splice(index, 1, {\n ...res.data,\n uploading: false,\n });\n },\n error: (e: any) => {\n this.snackBar.open('Upload failed: ' + e.message);\n this.media.splice(index, 1); // remove failed placeholder\n },\n });\n reader.onerror = (error) => {};\n }\n onUploadMedia(event: any) {\n const file = event.target.files[0];\n // 5MB * 1024 * 1024 = 5242880\n // if (file?.size > 5242880) {\n // this.snackBar.open('尺寸过大, 请修改后上传');\n // return;\n // }\n\n if (file) {\n const reader = new FileReader();\n const formData = new FormData();\n formData.append('file', file);\n\n reader.readAsDataURL(file);\n reader.onload = () => {\n const img: any = new Image();\n img.onload = () => {\n this.media.push({\n url: img.src,\n alt: 'upload image',\n width: img.width,\n height: img.height,\n });\n };\n img.src = reader.result; // This is the data URL\n };\n this.propertyService.uploadMedia(this.id, formData).subscribe({\n next: (res: any) => {\n const index = findLastIndex(this.media);\n // Replace item at index using native splice\n this.media.splice(index, 1, res.data);\n },\n error: (e: any) => {},\n });\n reader.onerror = (error) => {};\n }\n }\n onMediaDelete(item: any) {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n width: '400px',\n data: {\n title: 'Delete media',\n message: 'Are you sure to delete?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyService.deleteMedia(this.id, item.id).subscribe({\n next: (res) => {\n this.media = this.media.filter((m) => m.id !== item.id);\n this.snackBar.open('Delete successfully');\n },\n error: (e) => {\n this.snackBar.open(e.message);\n },\n });\n }\n });\n }\n}\n","<rolatech-property-manage-content>\n <rolatech-toolbar title=\"Media info\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div>\n <p class=\"p-2 font-bold\" i18n>Limit 5MB per image</p>\n <rolatech-media-list (upload)=\"onMultipleFilesUpload($event)\">\n @for (item of media; track item; let i = $index) {\n <rolatech-media-list-item\n [media]=\"item\"\n (mediaItemClick)=\"onImageClick(i)\"\n (deleteMedia)=\"onMediaDelete(item)\"\n [uploading]=\"item.uploading\"\n ></rolatech-media-list-item>\n }\n </rolatech-media-list>\n </div>\n</rolatech-property-manage-content>\n","import { Component, input, OnInit, output } from '@angular/core';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { Media } from '@rolatech/angular-common';\nimport { PropertySection } from '../../interfaces';\nimport { first } from 'lodash';\nimport { MatMenu, MatMenuModule } from '@angular/material/menu';\n\n@Component({\n selector: 'rolatech-property-manage-section-item',\n imports: [\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n TextFieldModule,\n MatButtonModule,\n MatIconModule,\n MatMenuModule,\n MatProgressBarModule,\n MatDividerModule,\n ],\n templateUrl: './property-manage-section-item.component.html',\n styleUrl: './property-manage-section-item.component.scss',\n})\nexport class PropertyManageSectionItemComponent implements OnInit {\n isUploading = input<boolean>();\n section = input.required<PropertySection>();\n actions = input<boolean>(false);\n selectMedia = input<any>();\n upload = output<{ section: PropertySection; data: FormData | null }>();\n delete = output<PropertySection>();\n save = output<PropertySection>();\n deleteMedia = output<{ section: PropertySection; media: Media }>();\n selectedImg!: Media | any;\n expanded = false;\n constructor() {}\n\n ngOnInit(): void {\n this.selectedImg = this.section().media ? this.section().media[0] : null;\n }\n onUpload(data: any) {\n this.upload.emit({ section: this.section(), data });\n }\n onMediaItemClick(image: Media) {\n this.selectedImg = image;\n }\n\n select(item: any) {\n this.selectedImg = item;\n }\n deleteImage() {}\n onSave(section: PropertySection) {\n this.save.emit(section);\n }\n onDelete(section: PropertySection) {\n this.delete.emit(section);\n }\n onDeleteMedia(media: Media) {\n this.deleteMedia.emit({ section: this.section(), media });\n this.selectedImg = this.section().media ? first(this.section().media) : null;\n }\n}\n","<div class=\"px-3\">\n <div\n class=\"h-14 py-3 flex items-center justify-between cursor-pointer\"\n (click)=\"expanded = !expanded; $event.stopPropagation()\"\n >\n <div class=\"flex\">\n <div class=\"w-32 line-clamp-1\">{{ section().title }}</div>\n <div class=\"line-clamp-1\">{{ section().description }}</div>\n </div>\n <div>\n <button mat-icon-button aria-label=\"expand row\" (click)=\"expanded = !expanded; $event.stopPropagation()\">\n @if (expanded) {\n <mat-icon>keyboard_arrow_up</mat-icon>\n } @else {\n <mat-icon>keyboard_arrow_down</mat-icon>\n }\n </button>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 w-full overflow-hidden collapsed\" [class.expanded]=\"expanded\">\n <div class=\"flex flex-col lg:flex-row\">\n <div class=\"flex flex-col grow\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Title</mat-label>\n <input matInput placeholder=\"Title\" i18n-placeholder [(ngModel)]=\"section().title\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" [hideRequiredMarker]=\"true\">\n <mat-label i18n>Description</mat-label>\n <textarea\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n placeholder=\"Description\"\n [(ngModel)]=\"section().description\"\n i18n-placeholder\n ></textarea>\n </mat-form-field>\n </div>\n <!-- media -->\n <div class=\"lg:basis-1/2 px-0 lg:px-3\">\n @if (selectedImg) {\n <div class=\"flex flex-row justify-center relative aspect-video\">\n <img class=\"object-contain w-full\" [src]=\"selectedImg.url\" [alt]=\"selectedImg.alt\" />\n <div class=\"absolute z-30 right-0\">\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"beforeMenu\"\n class=\"ml-auto focus:outline-none hover:bg-(--rt-base-background) p-1\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item (click)=\"onDeleteMedia(selectedImg)\">\n <span i18n>Delete</span>\n </button>\n </mat-menu>\n </div>\n </div>\n }\n\n <!-- media -->\n <div>\n <div class=\"flex flex-row flex-wrap cursor-pointer relative box-border\" fxLayout=\"row\">\n <div class=\"progress-bar\">\n @if (section().isUploading) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </div>\n @for (media of section().media; track media) {\n <div class=\"media-list-item\">\n <img class=\"tile-media\" (click)=\"onMediaItemClick(media)\" [src]=\"media.url\" [alt]=\"media.alt\" />\n </div>\n }\n <input style=\"display: none\" type=\"file\" accept=\"image/*\" (change)=\"onUpload($event)\" #fileInput />\n <div class=\"add-button\">\n <div (click)=\"fileInput.click()\" class=\"tile-media flex justify-center items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"48px\" viewBox=\"0 -960 960 960\" width=\"48px\" fill=\"#5f6368\">\n <path d=\"M444-444H240v-72h204v-204h72v204h204v72H516v204h-72v-204Z\" />\n </svg>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button class=\"max-h-8\" (click)=\"onDelete(section())\" i18n>Delete</button>\n <button mat-flat-button class=\"max-h-8\" (click)=\"onSave(section())\" i18n>Save</button>\n </div>\n }\n </div>\n</div>\n\n<mat-divider></mat-divider>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { PropertyManageSectionItemComponent } from '../../../components/property-manage-section-item/property-manage-section-item.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ActivatedRoute } from '@angular/router';\nimport { ToolbarComponent, ConfirmationDialogComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { remove } from 'lodash';\nimport { PropertySection, PropertyStatus, PropertyType } from '../../../interfaces';\nimport { PropertyManageContentComponent } from '../property-manage-content/property-manage-content.component';\n\n@Component({\n selector: 'rolatech-property-manage-sections',\n imports: [\n MatButtonModule,\n MatIconModule,\n ToolbarComponent,\n PropertyManageContentComponent,\n PropertyManageSectionItemComponent,\n ],\n templateUrl: './property-manage-sections.component.html',\n styleUrl: './property-manage-sections.component.scss',\n})\nexport class PropertyManageSectionsComponent implements OnInit {\n route = inject(ActivatedRoute);\n propertyService = inject(PropertyService);\n dialog = inject(MatDialog);\n snackBar = inject(MatSnackBar);\n\n id: string;\n isLoading = false;\n isUploading = false;\n sections: PropertySection[] = [];\n status = PropertyStatus;\n propertyType: any = PropertyType;\n constructor() {\n this.id = this.route.parent?.snapshot.paramMap.get('id') as string;\n }\n ngOnInit(): void {\n this.find();\n }\n find() {\n this.propertyService.findSections(this.id).subscribe({\n next: (res) => {\n if (res.data) {\n this.sections = res.data;\n }\n },\n });\n }\n addSection() {\n if (!this.sections) {\n this.sections = [];\n }\n this.propertyService\n .addSection(this.id, {\n title: '',\n description: '',\n content: '',\n media: [],\n })\n .subscribe({\n next: (res: any) => {\n const section = res.data;\n this.sections.push({\n id: section.id,\n title: 'Untitled',\n description: '',\n content: '',\n media: [],\n });\n },\n error: (e) => {\n this.snackBar.open(e.message);\n },\n });\n }\n onUploadSectionMedia(event: any) {\n const section = event.section;\n const sectionId = section.id;\n const file = event.data.target.files[0];\n if (file) {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n if (!section.media) {\n section.media = [];\n }\n (section.media as any).push({\n url: reader.result,\n alt: 'upload image',\n });\n section.isUploading = true;\n const formData = new FormData();\n formData.append('file', file);\n this.propertyService.uploadSectionMedia(sectionId, formData).subscribe({\n next: (res: any) => {\n this.isUploading = false;\n section.isUploading = false;\n delete res.data.propertySection;\n section.media[section.media.length - 1].id = res.data.id;\n section.media[section.media.length - 1].url = res.data.url;\n },\n error: (e) => {\n this.isUploading = false;\n this.snackBar.open('Upload failed: ' + e.message);\n },\n });\n };\n reader.onerror = (error) => {\n this.isUploading = false;\n };\n }\n }\n onDeleteSectionMedia(event: any) {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n width: '400px',\n data: {\n title: '删除图片',\n message: `确定删除吗?`,\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n const section = event.section;\n const mediaId = event.media.id;\n remove(section.media, {\n id: mediaId,\n });\n this.propertyService.deleteSectionMedia(section.id, mediaId).subscribe({\n next: (res: any) => {\n // remove(section.media, {\n // id: mediaId,\n // });\n },\n });\n }\n });\n }\n onSectionSave(section: PropertySection) {\n delete section.isUploading;\n this.propertyService.updateSection(section.id, section).subscribe({\n next: (res: any) => {\n this.snackBar.open('Success');\n },\n error: (e) => {\n this.snackBar.open(e.message);\n },\n });\n }\n onSectionDelete(section: PropertySection) {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n width: '400px',\n data: {\n title: '删除详情',\n message: '确定删除此详情吗?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyService.deleteSection(section.id).subscribe({\n next: (res: any) => {\n this.snackBar.open(res.data);\n remove(this.sections, {\n id: section.id,\n });\n },\n error: (e) => {\n this.snackBar.open(e.message);\n },\n });\n }\n });\n }\n}\n","<rolatech-property-manage-content>\n <rolatech-toolbar title=\"Details\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div>\n <div>\n @for (section of sections; track section) {\n <rolatech-property-manage-section-item\n [section]=\"section\"\n (upload)=\"onUploadSectionMedia($event)\"\n (deleteMedia)=\"onDeleteSectionMedia($event)\"\n (save)=\"onSectionSave($event)\"\n (delete)=\"onSectionDelete($event)\"\n [actions]=\"true\"\n ></rolatech-property-manage-section-item>\n }\n </div>\n <button mat-stroked-button (click)=\"addSection()\" class=\"mt-3\">\n <mat-icon>add</mat-icon>\n <span i18n>Add</span>\n </button>\n </div>\n</rolatech-property-manage-content>\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-property-manage-pricing',\n imports: [CommonModule],\n templateUrl: './property-manage-pricing.component.html',\n styleUrl: './property-manage-pricing.component.scss',\n})\nexport class PropertyManagePricingComponent {}\n","<p>property-manage-pricing works!</p>\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-property-manage-schedule',\n imports: [CommonModule],\n templateUrl: './property-manage-schedule.component.html',\n styleUrl: './property-manage-schedule.component.scss',\n})\nexport class PropertyManageScheduleComponent {}\n","<p>property-manage-schedule works!</p>\n","import { Component, computed, inject, OnInit, Signal } from '@angular/core';\nimport { PropertyManageContentComponent } from '../property-manage-content/property-manage-content.component';\nimport { BaseComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { FeatureService, PropertyService } from '@rolatech/angular-services';\nimport { Feature } from '../../../interfaces/feature';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatButtonModule } from '@angular/material/button';\nimport { forkJoin } from 'rxjs';\nimport { PropertyFeatureOption } from '../../../interfaces';\nimport { CommonModule } from '@angular/common';\nexport interface PropertyFeatureBinding {\n [featureId: string]: string[]; // featureId -> list of valueIds\n}\n@Component({\n selector: 'rolatech-property-manage-features',\n imports: [CommonModule, PropertyManageContentComponent, ToolbarComponent, MatCheckboxModule, MatButtonModule],\n templateUrl: './property-manage-features.component.html',\n styleUrl: './property-manage-features.component.scss',\n})\nexport class PropertyManageFeaturesComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n featureService = inject(FeatureService);\n features: Feature[] = [];\n selected: PropertyFeatureBinding = {};\n\n readonly partiallyComplete = (feature: Feature) =>\n computed(() => {\n if (!feature.values) {\n return false;\n }\n return feature.values.some((t) => t.selected) && !feature.values.every((t) => t.selected);\n });\n ngOnInit(): void {\n this.id = this.route.parent?.snapshot.paramMap.get('id') as string;\n this.find();\n }\n isEmpty(obj: any): boolean {\n return obj && Object.keys(obj).length === 0;\n }\n find() {\n forkJoin({\n features: this.featureService.find<any>({}),\n options: this.propertyService.findUserFeatures<any>(this.id),\n }).subscribe(({ features, options }) => {\n this.features = features.data;\n if (options.data) {\n this.selected = this.convertToBinding(options.data);\n // ensure all features have initialized value arrays\n for (const feature of this.features) {\n if (!this.selected[feature.id]) {\n this.selected[feature.id] = [];\n }\n }\n }\n });\n }\n sectionChange(feature: Feature, selected: boolean, index?: number) {\n if (index === undefined) {\n feature.selected = selected;\n feature.values?.forEach((t) => (t.selected = selected));\n } else {\n feature.values[index].selected = selected;\n feature.selected = feature.values?.every((t) => t.selected) ?? true;\n }\n }\n toggleValue(featureId: string, valueId: string, checked: boolean) {\n const selectedValues = this.selected[featureId] || [];\n if (checked) {\n selectedValues.push(valueId);\n } else {\n const index = selectedValues.indexOf(valueId);\n if (index !== -1) selectedValues.splice(index, 1);\n }\n this.selected[featureId] = selectedValues;\n }\n save() {\n this.propertyService.updateUserFeatures(this.id, this.selected).subscribe({\n next: (res) => {\n this.snackBarService.open('Update successfully');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n convertToBinding(options: PropertyFeatureOption[]): PropertyFeatureBinding {\n const binding: PropertyFeatureBinding = {};\n\n for (const option of options) {\n const featureId = option.feature.id;\n const valueId = option.value.id;\n\n if (!binding[featureId]) {\n binding[featureId] = [];\n }\n\n // avoid duplicates just in case\n if (!binding[featureId].includes(valueId)) {\n binding[featureId].push(valueId);\n }\n }\n\n return binding;\n }\n}\n","<rolatech-property-manage-content>\n <rolatech-toolbar title=\"Features\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div>\n @for (feature of features; track $index) {\n <div>\n <h4>{{ feature.name }}</h4>\n @for (value of feature.values; track $index) {\n <mat-checkbox\n [checked]=\"selected[feature.id] ? selected[feature.id].includes(value.id) : false\"\n (change)=\"toggleValue(feature.id, value.id, $event.checked)\"\n >\n {{ value.name }}\n </mat-checkbox>\n }\n </div>\n }\n </div>\n\n <!-- @for (item of features; track item) {\n <section class=\"example-section\">\n <span class=\"example-list-section\">\n <h4>{{ item.name }}</h4>\n <mat-checkbox\n class=\"example-margin\"\n [checked]=\"item.selected\"\n [indeterminate]=\"partiallyComplete(item)()\"\n (change)=\"sectionChange(item, $event.checked)\"\n >\n {{ item.name }}\n </mat-checkbox>\n </span>\n <div class=\"example-list-section\">\n <div>\n @for (value of item.values; track value; let i = $index) {\n <mat-checkbox [checked]=\"value.selected\" (change)=\"sectionChange(item, $event.checked, i)\">\n {{ value.name }}\n </mat-checkbox>\n }\n </div>\n </div>\n </section>\n } -->\n <!-- <div class=\"px-3 mb-3\">\n @for (item of features; track $index) {\n <div class=\"text-xl font-bold py-2\">{{ item.name }}</div>\n @for (value of item.values; track value; let i = $index) {\n <mat-checkbox\n class=\"text-lg font-medium\"\n (click)=\"$event.stopPropagation()\"\n [checked]=\"value.selected\"\n (change)=\"sectionChange($event.checked, i)\"\n >\n {{ value.name }}\n </mat-checkbox>\n }\n }\n </div> -->\n <button mat-flat-button (click)=\"save()\" i18n>Save</button>\n</rolatech-property-manage-content>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n model,\n OnInit,\n PLATFORM_ID,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { PropertyManageContentComponent } from '../property-manage-content/property-manage-content.component';\nimport { BaseComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { FormGroup, FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { GoogleMap, GoogleMapsModule, MapAdvancedMarker, MapInfoWindow, MapMarker } from '@angular/google-maps';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { isPlatformBrowser } from '@angular/common';\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PropertyLocation } from '../../../interfaces';\nimport { PropertyService } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-property-manage-location',\n imports: [\n PropertyManageContentComponent,\n ToolbarComponent,\n FormsModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatInputModule,\n FormsModule,\n TextFieldModule,\n MatAutocompleteModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './property-manage-location.component.html',\n styleUrl: './property-manage-location.component.scss',\n})\nexport class PropertyManageLocationComponent extends BaseComponent implements OnInit, AfterViewInit {\n propertyService = inject(PropertyService);\n predictions: any[] = [];\n autocompleteSuggestion: any;\n titleElement;\n resultsContainerElement;\n inputElement;\n newestRequestId = 0;\n expand = false;\n request = {\n input: '',\n includedPrimaryTypes: ['restaurant'],\n language: 'en-GB',\n region: 'uk',\n };\n map!: google.maps.Map;\n placesService!: google.maps.places.PlacesService;\n sessionToken!: google.maps.places.AutocompleteSessionToken;\n autocompleteService!: google.maps.places.AutocompleteService;\n location = model<PropertyLocation>({\n flatNumber: '',\n streetNumber: '',\n name: '',\n street: '',\n town: '',\n postCode: '',\n country: '',\n longitude: '',\n latitude: '',\n });\n placeAutocompleteElement: any;\n @ViewChild('autocompleteInput', { static: false }) autocompleteInput!: ElementRef;\n ngOnInit(): void {\n this.id = this.route.parent?.snapshot.paramMap.get('id') as string;\n this.find();\n if (this.isBrowser) {\n // this.autocompleteService = new google.maps.places.AutocompleteService();\n }\n }\n find() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n // this.location = res.data.location || {};\n this.location.update((state) => {\n return { ...(res.data.location || {}) };\n });\n if (res.data.location) {\n this.expand = true;\n }\n },\n });\n }\n\n async onPlaceSelected(place) {\n await place.fetchFields({\n fields: ['displayName', 'formattedAddress'],\n });\n const placeText = document.createTextNode(`${place.displayName}: ${place.formattedAddress}`);\n this.resultsContainerElement.replaceChildren(placeText);\n this.titleElement.innerText = 'Selected Place:';\n this.inputElement.value = '';\n this.refreshToken(this.request);\n }\n displayFn(option: any): string {\n return option && option.description ? option.description : '';\n }\n onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n const prediction: google.maps.places.AutocompletePrediction = event.option.value;\n const placeId = prediction.place_id;\n // Use Places Service to get detailed information (geometry) about the selected place\n this.placesService.getDetails(\n { placeId: placeId, fields: ['name', 'formatted_address', 'geometry', 'address_components'] },\n (place: any, status: any) => {\n const components = place.address_components;\n\n const getComponent = (type: string) => components?.find((c: any) => c.types.includes(type))?.long_name || '';\n\n const streetNumber = getComponent('street_number');\n const route = getComponent('route');\n const town = getComponent('postal_town') || getComponent('locality');\n const postcode = getComponent('postal_code');\n\n if (streetNumber) {\n this.location.update((state) => {\n state.streetNumber = streetNumber;\n return { ...state };\n });\n }\n if (town) {\n this.location.update((state) => {\n state.town = town;\n return { ...state };\n });\n }\n if (postcode) {\n this.location.update((state) => {\n state.postCode = postcode;\n return { ...state };\n });\n }\n\n if (status === google.maps.places.PlacesServiceStatus.OK && place?.geometry) {\n const location = place.geometry.location;\n }\n },\n );\n }\n\n refreshToken(request) {\n // Create a new session token and add it to the request.\n request.sessionToken = new google.maps.places.AutocompleteSessionToken();\n }\n\n ngAfterViewInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n google.maps.importLibrary('places').then((res: any) => {\n const places = res as google.maps.PlacesLibrary;\n this.autocompleteService = new google.maps.places.AutocompleteService();\n this.placesService = new google.maps.places.PlacesService(document.createElement('div'));\n this.sessionToken = new google.maps.places.AutocompleteSessionToken();\n });\n }\n }\n onInputChange(e) {\n const query = e.target.value;\n if (query.length > 0) {\n const request = {\n input: e.target.value,\n sessionToken: this.sessionToken,\n includedRegionCodes: ['uk'],\n region: 'uk',\n includedPrimaryTypes: ['street_address', 'postal_code'],\n };\n this.autocompleteService.getPlacePredictions(request, (predictions, status) => {\n if (status === google.maps.places.PlacesServiceStatus.OK && predictions) {\n this.predictions = predictions;\n } else {\n this.predictions = [];\n }\n });\n } else {\n this.predictions = [];\n }\n }\n save() {\n this.propertyService.updateLocation(this.id, this.location()).subscribe({\n next: (res) => {\n this.snackBarService.open('Update successfully');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n searchSchools(lat: number, lng: number, radius = 2000) {}\n}\n","<rolatech-property-manage-content>\n <rolatech-toolbar title=\"Location\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <mat-form-field position=\"left\">\n <input\n type=\"text\"\n placeholder=\"Search for a location\"\n #searchInput\n (input)=\"onInputChange($event)\"\n matInput\n [matAutocomplete]=\"auto\"\n />\n <mat-autocomplete\n class=\"single-autocomplete\"\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onOptionSelected($event)\"\n [displayWith]=\"displayFn\"\n >\n @for (prediction of predictions; track $index) {\n <mat-option [value]=\"prediction\">\n {{ prediction.description }}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n <div class=\"border border-(--rt-border-color) px-3 rounded-md\">\n <div class=\"flex justify-between items-center py-3 cursor-pointer select-none\" i18n (click)=\"expand = !expand\">\n <span> Enter the address manually </span>\n <mat-icon>{{ expand ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}</mat-icon>\n </div>\n <div class=\"collapsed\" [class.expanded]=\"!expand\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Flat number </mat-label>\n <input matInput [(ngModel)]=\"location().flatNumber\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Street number </mat-label>\n <input matInput [(ngModel)]=\"location().streetNumber\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Building name </mat-label>\n <input matInput [(ngModel)]=\"location().name\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Street </mat-label>\n <input matInput [(ngModel)]=\"location().street\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Town </mat-label>\n <input matInput [(ngModel)]=\"location().town\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Postcode </mat-label>\n <input matInput [(ngModel)]=\"location().postCode\" required />\n </mat-form-field>\n </div>\n </div>\n <div class=\"flex justify-end items-center p-3 gap-3\">\n <button mat-flat-button i18n (click)=\"save()\">Save</button>\n </div>\n</rolatech-property-manage-content>\n","import { Component, DoCheck, OnInit, output } from '@angular/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'rolatech-property-video-youtube-add',\n imports: [CommonModule, MatFormFieldModule, MatInputModule, FormsModule],\n templateUrl: './property-video-youtube-add.component.html',\n styleUrl: './property-video-youtube-add.component.scss',\n})\nexport class PropertyVideoYoutubeAddComponent implements DoCheck {\n url = '';\n output = output<any>();\n\n getYouTubeVideoId(url) {\n const regex = /(?:youtube\\.com\\/(?:watch\\?v=|embed\\/|v\\/|shorts\\/)|youtu\\.be\\/)([a-zA-Z0-9_-]{11})/;\n const match = url.match(regex);\n return match ? match[1] : null;\n }\n ngDoCheck(): void {\n this.output.emit(this.url);\n }\n}\n","<mat-form-field appearance=\"fill\">\n <mat-label>Youtube Video URL</mat-label>\n <input matInput placeholder=\"Youtube Video URL\" type=\"text\" [(ngModel)]=\"url\" i18n />\n</mat-form-field>\n","import { Component, ElementRef, inject, input, model, output, PLATFORM_ID, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { AngularCommonModule, DurationPipe } from '@rolatech/angular-common';\nimport { AngularComponentsModule, InputComponent } from '@rolatech/angular-components';\nimport { DialogService } from '@rolatech/angular-services';\nimport { PropertyVideo } from '../../interfaces';\n@Component({\n selector: 'rolatech-property-video-item',\n imports: [\n MatIconModule,\n AngularCommonModule,\n FormsModule,\n MatButtonModule,\n MatDividerModule,\n AngularComponentsModule,\n DurationPipe,\n InputComponent\n ],\n templateUrl: './property-video-item.html',\n styleUrl: './property-video-item.scss',\n})\nexport class PropertyVideoItem {\n platformId = inject(PLATFORM_ID);\n el = inject(ElementRef);\n dialogService = inject(DialogService);\n myVideo = viewChild('video');\n progress = input<number>(0);\n video = input.required<PropertyVideo>();\n\n actions = input<boolean>(true);\n hasUnsaved = input<boolean>(false);\n editId = model<any>();\n\n save = output<PropertyVideo>();\n cancel = output<PropertyVideo>();\n delete = output<PropertyVideo>();\n edit = output<PropertyVideo>();\n upload = output<{ id: any, data: FormData | null }>();\n editTitle = false;\n editing = false;\n\n onSave(video: PropertyVideo) {\n this.editTitle = false;\n this.editId.set(null);\n this.save.emit(video);\n }\n onCancel(video: PropertyVideo) {\n this.editTitle = false;\n this.editId.set(null);\n this.cancel.emit(video);\n }\n onDelete(video: PropertyVideo) {\n this.delete.emit(video);\n }\n onEdit(video: PropertyVideo) {\n this.editId.set(video.id);\n this.editTitle = true;\n this.edit.emit(video);\n }\n onMediaEdit(video: PropertyVideo) {\n this.editId.set(video.id);\n this.editing = true;\n\n }\n\n onUpload(id: any, data: any) {\n this.video().uploading = true\n this.upload.emit({ id, data });\n }\n\n onLoadedMetadata(event: Event): void {\n if (this.video().duration) {\n return;\n }\n const videoElement: HTMLVideoElement = event.target as HTMLVideoElement;\n this.video().duration = videoElement.duration;\n }\n\n}\n","<div class=\"flex flex-col grow p-2\">\n @if (!editTitle) {\n <div class=\"w-full flex gap-3 p-3 items-center\">\n <span>{{ video().title }}</span>\n <button mat-icon-button (click)=\"onEdit(video()); $event.stopPropagation()\" class=\"max-w-8 max-h-8 !p-1\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button (click)=\"onDelete(video()); $event.stopPropagation()\" class=\"max-w-8 max-h-8 !p-1\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n } @else {\n <div class=\"flex flex-col justify-between items-center\">\n <rolatech-input [(title)]=\"video().title\" placeholder=\"Title\"></rolatech-input>\n <div class=\"w-full flex flex-row justify-end p-3 gap-3\">\n <button mat-button class=\"max-h-8\" (click)=\"onCancel(video())\" i18n>Cancel</button>\n <button mat-flat-button class=\"max-h-8\" (click)=\"onSave(video())\" i18n>Save</button>\n </div>\n </div>\n }\n\n <div>\n @if (video().url) {\n <div class=\"flex flex-col p-2 gap-3\">\n <div class=\"bg-black h-fit\">\n <video\n controls\n #videoContainer\n [src]=\"video().url\"\n class=\"w-full aspect-video\"\n (loadedmetadata)=\"onLoadedMetadata($event)\"\n [poster]=\"video().thumbnail\"\n >\n <!-- <source [src]=\"video().url\" type=\"video/mp4\" /> -->\n </video>\n </div>\n <div class=\"flex flex-col justify-between w-full\">\n <div class=\"flex justify-between items-center w-full\">\n @if (video().uploading) {\n <div>\n <span> {{ video().progress }}%</span>\n </div>\n }\n </div>\n <div class=\"flex justify-between items-center\">\n <div>\n <span>{{ video().duration | duration }}</span>\n </div>\n </div>\n </div>\n </div>\n @if (video().uploading) {\n <div class=\"p-2\">\n <mat-progress-bar mode=\"determinate\" [value]=\"video().progress\"> </mat-progress-bar>\n </div>\n } } @else {\n <div class=\"px-3\">\n <input\n class=\"ud-sr-only\"\n type=\"file\"\n accept=\".avi,.mpg,.mpeg,.flv,.mov,.m2v,.m4v,.mp4,.rm,.ram,.vob,.ogv,.webm,.wmv\"\n (change)=\"onUpload(video().id, $event)\"\n #fileInput\n />\n <div class=\"flex justify-between items-center\">\n <div i18n>No videos</div>\n <button mat-flat-button class=\"max-h-8\" (click)=\"fileInput.click()\" i18n>Upload</button>\n </div>\n </div>\n }\n </div>\n @if (!hasUnsaved()) {\n <ng-content></ng-content>\n }\n</div>\n","import { Component, computed, effect, inject, OnInit, signal } from '@angular/core';\nimport { BaseComponent, ToolbarComponent, TabsComponent, TabComponent } from '@rolatech/angular-components';\nimport { PropertyManageContentComponent } from '../property-manage-content/property-manage-content.component';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { Property, PropertyVideo, PropertyVideoProvider } from '../../../interfaces';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PropertyVideoYoutubeAddComponent } from '../../../components/property-video-youtube-add/property-video-youtube-add.component';\nimport { concatMap, from, Observable, Observer, take } from 'rxjs';\nimport { PropertyVideoItem } from '../../../components/property-video-item/property-video-item';\nimport { duration } from 'moment';\nimport { MatIcon } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { SafeUrlPipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-manage-video',\n imports: [\n CommonModule,\n ToolbarComponent,\n PropertyManageContentComponent,\n MatButtonModule,\n TabsComponent,\n TabComponent,\n SafeUrlPipe,\n PropertyVideoItem,\n MatIcon,\n ],\n templateUrl: './property-manage-video.component.html',\n styleUrl: './property-manage-video.component.scss',\n})\nexport class PropertyManageVideoComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n tabIndex = signal(0);\n videos: PropertyVideo[] = [];\n data: any;\n iframeVisible = false;\n iframeLoaded = false;\n thumbnailUrl;\n provider = PropertyVideoProvider;\n chunkSize = 5 * 1024 * 1024; // 切片大小\n selectProvider = '';\n videoEditId = '';\n get youtubeVideos(): PropertyVideo[] {\n return this.videos.filter((v) => v.provider === PropertyVideoProvider.YOUTUBE);\n }\n\n get cosVideos(): PropertyVideo[] {\n return this.videos.filter((v) => v.provider === PropertyVideoProvider.COS);\n }\n\n constructor() {\n super();\n effect(() => {\n const index = this.tabIndex();\n if (index === 0) {\n this.selectProvider = 'YOUTUBE';\n }\n if (index === 1) {\n this.selectProvider = 'COS';\n }\n });\n }\n\n ngOnInit(): void {\n this.id = this.route.parent?.snapshot.paramMap.get('id') as string;\n this.getVideos();\n }\n\n getVideos() {\n this.propertyService.getVideos(this.id).subscribe({\n next: (res: any) => {\n this.videos = Array.isArray(res.data) ? res.data : [];\n },\n });\n }\n showIframe() {\n this.iframeVisible = true;\n }\n onIframeLoad() {\n this.iframeLoaded = true;\n }\n\n addYoutubeUrl() {\n const options = {\n title: 'Add Youtube url',\n cancelText: 'Cancel',\n confirmText: 'Confirm',\n data: {\n url: '',\n },\n component: PropertyVideoYoutubeAddComponent,\n };\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe({\n next: (res) => {\n if (res) {\n const data = {\n url: res,\n title: 'Youtube',\n provider: PropertyVideoProvider.YOUTUBE,\n };\n this.propertyService.addVideo(this.id, data).subscribe({\n next: (res: any) => {\n this.videos.push(res.data);\n this.snackBarService.open('Video added');\n },\n });\n }\n },\n });\n }\n updateYoutubeUrl(video: PropertyVideo) {\n const options = {\n title: 'Update Youtube url',\n cancelText: 'Cancel',\n confirmText: 'Confirm',\n data: {\n url: video?.url || '',\n },\n component: PropertyVideoYoutubeAddComponent,\n };\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe({\n next: (res) => {\n if (res) {\n if (!video.id) {\n return;\n }\n const data = {\n url: res,\n title: video.title,\n };\n this.propertyService.updateVideo(this.id, video.id, data).subscribe({\n next: (res: any) => {\n video.url = res.data.url;\n // Force reload\n this.iframeLoaded = false;\n this.snackBarService.open('Youtube url updated');\n },\n });\n }\n },\n });\n }\n toYoutubeEmbed(urlOrId: string): string {\n const m = urlOrId.match(/(?:v=|\\/embed\\/|\\.be\\/)([A-Za-z0-9_-]{6,})/);\n const id = m ? m[1] : urlOrId;\n return `https://www.youtube-nocookie.com/embed/${id}`;\n }\n\n addCOSVideo() {\n const video = {\n provider: PropertyVideoProvider.COS,\n };\n this.propertyService.addVideo(this.id, video).subscribe({\n next: (res: any) => {\n this.videoEditId = res.data.id;\n this.videos.push(res.data);\n },\n });\n }\n onCOSVideoSave(event: any) {\n const { id, title, url } = event;\n const data = {\n title,\n url,\n };\n this.propertyService.updateVideo(this.id, id, data).subscribe({\n next: (res: any) => {\n this.snackBarService.open('Youtube url updated');\n },\n });\n }\n onCOSVideoDelete(video: PropertyVideo, event: any) {\n if (!video.id) {\n return;\n }\n const options = {\n title: 'Confirm delete',\n message: 'Are you sure?',\n cancelText: 'Cancel',\n confirmText: 'Ok',\n };\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe({\n next: (res) => {\n if (res) {\n this.propertyService.deleteVideo(this.id, video.id!).subscribe({\n next: (res) => {\n this.videos = this.videos.filter((v) => v.id !== video.id);\n this.snackBarService.open('Video deleted');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n },\n });\n }\n onVideoEdit(event: any) {}\n onMediaDelete(video: PropertyVideo, event: any) {}\n onCOSVideoUpload(video: PropertyVideo, event: any) {\n const file = event.data.target.files[0];\n\n if (!file) {\n return;\n }\n video.url = URL.createObjectURL(file);\n video.progress = 0;\n video.uploading = true;\n\n const reader = new FileReader();\n if (reader.readyState === FileReader.EMPTY) {\n reader.onload = async (e: any) => {\n const fileBuffer = e.target.result;\n crypto.subtle.digest('SHA-256', fileBuffer).then((res) => {\n const hashArray = Array.from(new Uint8Array(res));\n const hashHex = hashArray.map((byte) => byte.toString(16).padStart(2, '0')).join('');\n const data: any = { hash: hashHex, filename: file.name, fileType: file.type, type: 'COS' };\n this.propertyService.uploadVideosInit(this.id, data).subscribe({\n next: (res: any) => {\n this.uploadPart(video, res.data.uploadId, file);\n },\n error: (e) => {},\n });\n });\n };\n reader.onerror = (error) => {};\n reader.readAsArrayBuffer(file);\n }\n }\n uploadPart(video: PropertyVideo, uploadId: string, file: any) {\n let uploadedCount = 0;\n const fileChunkList = this.createFileChunk(file);\n const numberOfChunks = fileChunkList.length;\n from(fileChunkList)\n .pipe(\n concatMap((val: any, index) => this.uploadFile(video, val.file, index, uploadId)),\n take(numberOfChunks),\n )\n .subscribe((res) => {\n uploadedCount++;\n const p = ((uploadedCount / numberOfChunks) * 100).toFixed(0);\n video.progress = parseFloat(p);\n if (uploadedCount === numberOfChunks) {\n this.completePartUpload(video, { uploadId });\n }\n });\n }\n completePartUpload(video: PropertyVideo, data: any) {\n data.duration = video.duration;\n this.propertyService.completePartUpload(video.id || '', data).subscribe({\n next: (res: any) => {\n video.uploading = false;\n },\n error: (e) => {\n this.snackBarService.open('Upload failed: ' + e.message);\n },\n });\n }\n uploadFile(property: any, file: any, index: number, uploadId: string) {\n const reader = new FileReader();\n return new Observable((observer: Observer<FormData>) => {\n reader.readAsArrayBuffer(file);\n reader.onload = (e: any) => {\n const fileBuffer = e.target.result;\n crypto.subtle.digest('SHA-256', fileBuffer).then((res) => {\n const hashArray = Array.from(new Uint8Array(res));\n const hashHex = hashArray.map((byte) => byte.toString(16).padStart(2, '0')).join('');\n const formData: any = new FormData();\n formData.append('file', file);\n formData.append('uploadId', uploadId);\n formData.append('number', index + 1);\n formData.append('hash', hashHex);\n formData.append('type', 'COS');\n this.propertyService.uploadVideosPartsToProperty(property.id, formData).subscribe({\n next: (res: any) => {\n observer.next(res);\n observer.complete();\n },\n error: (e) => {\n this.snackBarService.open('Upload failed: ' + e.message);\n },\n });\n });\n };\n reader.onerror = (error) => {\n this.snackBarService.open('Upload failed: ' + error);\n };\n });\n }\n createFileChunk(file: any, size = this.chunkSize) {\n const fileChunkList: any = [];\n let count = 0;\n while (count < file.size) {\n fileChunkList.push({\n file: file.slice(count, count + size),\n });\n count += size;\n }\n return fileChunkList;\n }\n}\n","<rolatech-property-manage-content>\n <rolatech-toolbar title=\"Videos\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <rolatech-tabs [(select)]=\"tabIndex\">\n <rolatech-tab label=\"Youtube\"></rolatech-tab>\n <rolatech-tab label=\"COS\"></rolatech-tab>\n </rolatech-tabs>\n <div class=\"py-2\">\n @if (tabIndex() === 0) {\n @if (youtubeVideos.length > 0 && youtubeVideos[0].url) {\n <div class=\"relative w-full aspect-video\">\n @if (!iframeLoaded) {\n <div class=\"absolute inset-0 flex items-center justify-center bg-black/10 border border-(--rt-border-color) bg-white\">\n <span>Loading...</span>\n </div>\n }\n <iframe\n [src]=\"toYoutubeEmbed(youtubeVideos[0].url) | safeUrl\"\n frameborder=\"0\"\n allowfullscreen\n class=\"w-full h-full\"\n (load)=\"iframeLoaded = true\"\n ></iframe>\n </div>\n <button mat-flat-button (click)=\"updateYoutubeUrl(youtubeVideos[0])\" class=\"mt-3\">Update Youtube url</button>\n } @else {\n <button mat-flat-button (click)=\"addYoutubeUrl()\" class=\"mt-3\">Add Youtube url</button>\n }\n }\n @if (tabIndex() === 1) {\n @for (video of cosVideos; track $index) {\n <rolatech-property-video-item\n [video]=\"video\"\n (save)=\"onCOSVideoSave($event)\"\n (delete)=\"onCOSVideoDelete(video, $event)\"\n (edit)=\"onVideoEdit($event)\"\n (upload)=\"onCOSVideoUpload(video, $event)\"\n [editId]=\"videoEditId\"\n ></rolatech-property-video-item>\n }\n @if (cosVideos.length === 0) {\n <div class=\"p-3\">\n <button mat-flat-button class=\"max-h-8\" (click)=\"addCOSVideo()\">\n <mat-icon>add</mat-icon>\n <span>Add video</span>\n </button>\n </div>\n }\n <!-- <rolatech-video-upload (upload)=\"onMediaUploadInit($event)\"></rolatech-video-upload> -->\n }\n </div>\n</rolatech-property-manage-content>\n","import { Component, inject, OnInit, signal } from '@angular/core';\nimport { BaseComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { PropertyManageContentComponent } from '../property-manage-content/property-manage-content.component';\nimport { PropertyHighlightsService } from '@rolatech/angular-services';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatInputModule } from '@angular/material/input';\nexport type Highlight = string;\n\n@Component({\n selector: 'rolatech-property-manage-highlights',\n imports: [\n PropertyManageContentComponent,\n ToolbarComponent,\n MatButtonModule,\n MatIcon,\n MatFormFieldModule,\n CommonModule,\n FormsModule,\n DragDropModule,\n MatListModule,\n MatProgressSpinnerModule,\n MatInputModule,\n ],\n templateUrl: './property-manage-highlights.html',\n styleUrl: './property-manage-highlights.scss',\n})\nexport class PropertyManageHighlights extends BaseComponent implements OnInit {\n propertyHighlightsService = inject(PropertyHighlightsService);\n highlights = signal<string[]>([]);\n loading = signal(false);\n savingAll = signal(false);\n\n draft = '';\n editIndex = signal<number | null>(null);\n editText = '';\n editMode = signal(false);\n ngOnInit(): void {\n this.id = this.route.parent?.snapshot.paramMap.get('id') as string;\n this.reload();\n }\n toggleEdit() {\n // leaving edit mode cancels any inline edit\n if (this.editMode()) {\n this.cancelEdit();\n }\n this.editMode.update((v) => !v);\n }\n\n reload() {\n this.loading.set(true);\n this.propertyHighlightsService.getHighlights(this.id).subscribe({\n next: (res: any) => this.highlights.set(res.data ?? []),\n error: (e) => this.err('Failed to load highlights', e),\n complete: () => this.loading.set(false),\n });\n }\n\n create() {\n const text = this.draft.trim();\n if (!text) return;\n // optimistic append\n const before = this.highlights();\n this.highlights.set([...before, text]);\n this.draft = '';\n this.propertyHighlightsService.addHighlight(this.id, text).subscribe({\n next: (res: any) => this.highlights.set(res.data),\n error: (e) => {\n this.highlights.set(before);\n this.err('Add failed', e);\n },\n });\n }\n\n startEdit(index: number, value: string) {\n if (!this.editMode()) return; // only allow in edit mode\n this.editIndex.set(index);\n this.editText = value;\n }\n\n cancelEdit() {\n this.editIndex.set(null);\n this.editText = '';\n }\n saveEdit(index: number) {\n const text = this.editText.trim();\n if (!text) return;\n const before = this.highlights();\n const copy = before.slice();\n copy[index] = text;\n this.highlights.set(copy);\n this.editIndex.set(null);\n this.editText = '';\n\n this.propertyHighlightsService.updateHighlightAt(this.id, index, text).subscribe({\n next: (res: any) => this.highlights.set(res.data),\n error: (e) => {\n this.highlights.set(before);\n this.err('Update failed', e);\n },\n });\n }\n\n remove(index: number) {\n const before = this.highlights();\n const copy = before.slice();\n copy.splice(index, 1);\n this.highlights.set(copy);\n\n this.propertyHighlightsService.deleteHighlightAt(this.id, index).subscribe({\n next: (res: any) => this.highlights.set(res.data),\n error: (e) => {\n this.highlights.set(before);\n this.err('Delete failed', e);\n },\n });\n }\n\n dropped(evt: CdkDragDrop<any[]>) {\n if (!this.editMode() || evt.previousIndex === evt.currentIndex) return;\n\n const before = this.highlights();\n const copy = before.slice();\n moveItemInArray(copy, evt.previousIndex, evt.currentIndex);\n this.highlights.set(copy);\n\n this.propertyHighlightsService.reorderHighlights(this.id, evt.previousIndex, evt.currentIndex).subscribe({\n next: (res: any) => this.highlights.set(res.data),\n error: (e) => {\n this.highlights.set(before);\n this.err('Reorder failed', e);\n },\n });\n }\n\n saveAll() {\n const list = this.highlights();\n this.savingAll.set(true);\n this.propertyHighlightsService.replaceAllHighlights(this.id, list).subscribe({\n next: (res: any) => this.highlights.set(res.data),\n error: (e) => this.err('Save all failed', e),\n complete: () => this.savingAll.set(false),\n });\n }\n\n private err(msg: string, _e: unknown) {\n this.snackBarService.open(msg);\n // optionally log _e\n }\n}\n","<rolatech-property-manage-content>\n <rolatech-toolbar title=\"Highlights\" class=\"hidden md:block\" divider>\n <button mat-flat-button (click)=\"toggleEdit()\">\n <mat-icon>@if (editMode()) { done } @else { edit }</mat-icon>\n <span>@if (editMode()) { Done } @else { Edit }</span>\n </button>\n </rolatech-toolbar>\n @if (loading()) {\n <mat-progress-spinner mode=\"indeterminate\" diameter=\"20\"></mat-progress-spinner>\n }\n <div class=\"flex flex-col gap-2\" cdkDropList [cdkDropListDisabled]=\"!editMode()\" (cdkDropListDropped)=\"dropped($event)\">\n @for (h of highlights(); track $index) {\n <div class=\"item\" cdkDrag>\n @if (editMode()) {\n <div class=\"flex cursor-grab items-center\" cdkDragHandle aria-label=\"Drag to reorder\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n } @if (editIndex() === $index) {\n <mat-form-field appearance=\"fill\" class=\"grow\">\n <input matInput [(ngModel)]=\"editText\" name=\"edit-{{$index}}\" maxlength=\"200\" />\n <mat-hint align=\"end\">{{editText.length}} / 200</mat-hint>\n </mat-form-field>\n <button mat-icon-button color=\"primary\" (click)=\"saveEdit($index)\" [disabled]=\"!editText.trim()\">\n <mat-icon>check</mat-icon>\n </button>\n <button mat-icon-button (click)=\"cancelEdit()\">\n <mat-icon>close</mat-icon>\n </button>\n } @else {\n <div class=\"flex-1 select-text\" (dblclick)=\"startEdit($index, h)\">{{ h }}</div>\n @if (editMode()) {\n <button mat-icon-button color=\"primary\" (click)=\"startEdit($index, h)\" aria-label=\"Edit\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button color=\"warn\" (click)=\"remove($index)\" aria-label=\"Delete\">\n <mat-icon>delete</mat-icon>\n </button>\n } }\n </div>\n }\n </div>\n <form class=\"flex items-center gap-2 mt-2\" (ngSubmit)=\"create()\">\n <mat-form-field appearance=\"fill\" class=\"flex-1\" subscriptSizing=\"dynamic\">\n <mat-label>New highlight</mat-label>\n <input matInput [(ngModel)]=\"draft\" name=\"draft\" maxlength=\"200\" />\n <mat-hint align=\"end\">{{draft.length}} / 200</mat-hint>\n </mat-form-field>\n <button mat-flat-button type=\"submit\" [disabled]=\"!draft.trim()\">Add</button>\n </form>\n <div class=\"flex items-center\">\n <button mat-stroked-button color=\"primary\" (click)=\"saveAll()\" [disabled]=\"savingAll()\">Save All</button>\n @if (savingAll()) {\n <span class=\"ml-2\">Saving…</span>\n }\n </div>\n</rolatech-property-manage-content>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { PropertyManageContentComponent } from \"../property-manage-content/property-manage-content.component\";\nimport { BaseComponent, ToolbarComponent } from \"@rolatech/angular-components\";\nimport { EpcChart } from \"../../../components/epc-chart/epc-chart\";\nimport { PropertyService } from '@rolatech/angular-services';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'rolatech-property-manage-epc',\n imports: [PropertyManageContentComponent, ToolbarComponent, EpcChart, MatFormFieldModule, FormsModule, MatInputModule, MatButtonModule],\n templateUrl: './property-manage-epc.html',\n styleUrl: './property-manage-epc.scss',\n})\nexport class PropertyManageEpc extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService)\n currentRating = '';\n potentialRating = '';\n currentScore = 0;\n potentialScore = 0;\n ngOnInit(): void {\n this.id = this.route.parent?.snapshot.paramMap.get('id') as string;\n this.get()\n }\n get() {\n this.propertyService.getEpc(this.id).subscribe({\n next: (res: any) => {\n this.currentScore = res.data.currentScore || 0;\n this.potentialScore = res.data.potentialScore || 0;\n }\n })\n }\n\n add() {\n const data = {\n currentScore: this.currentScore,\n potentialScore: this.potentialScore\n }\n this.propertyService.addEpc(this.id, data).subscribe({\n next: res => {\n this.snackBarService.open(\"EPC Added\")\n }\n })\n }\n update() {\n const data = {\n currentScore: this.currentScore,\n potentialScore: this.potentialScore\n }\n this.propertyService.updateEpc(this.id, data).subscribe({\n next: res => {\n this.snackBarService.open(\"EPC Updated\")\n }\n })\n }\n\n\n}\n\n","<rolatech-property-manage-content>\n <rolatech-toolbar title=\"EPC\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div class=\"w-full md:max-w-[70%]\">\n <div class=\"p-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Current Score</mat-label>\n <input matInput [(ngModel)]=\"currentScore\" placeholder=\"Current Score\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>Potential Score</mat-label>\n <input matInput [(ngModel)]=\"potentialScore\" placeholder=\"Potential Score\" />\n </mat-form-field>\n <button mat-flat-button (click)=\"add()\">Save</button>\n </div>\n <div class=\"p-2\">\n <div class=\"font-bold text-lg mb-2\">Domestic EPC</div>\n <rolatech-epc-chart\n [currentScore]=\"currentScore\"\n [potentialScore]=\"potentialScore\"\n [showCaptions]=\"true\"\n ></rolatech-epc-chart>\n </div>\n </div>\n</rolatech-property-manage-content>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-property-manage-translation',\n imports: [],\n templateUrl: './property-manage-translation.html',\n styleUrl: './property-manage-translation.scss',\n})\nexport class PropertyManageTranslation {}\n","<p>property-manage-translation works!</p>\n","import { Component } from '@angular/core';\nimport { PropertyManageContentComponent } from \"../property-manage-content/property-manage-content.component\";\nimport { ToolbarComponent } from \"@rolatech/angular-components\";\n\n@Component({\n selector: 'rolatech-property-manage-keywords',\n imports: [PropertyManageContentComponent, ToolbarComponent],\n templateUrl: './property-manage-keywords.html',\n styleUrl: './property-manage-keywords.scss',\n})\nexport class PropertyManageKeywords { }\n","<rolatech-property-manage-content>\n <rolatech-toolbar title=\"Keywords\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div></div>\n</rolatech-property-manage-content>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { PropertyManageContentComponent } from '../property-manage-content/property-manage-content.component';\nimport {\n BaseComponent,\n ToolbarComponent,\n MediaListComponent,\n MediaListItemComponent,\n ImagePreviewDialogComponent,\n ConfirmationDialogComponent,\n} from '@rolatech/angular-components';\nimport { FloorplanService } from '@rolatech/angular-services';\nconst SIZE = 10 * 1024 * 1024; // file slice size 10MB\n\n@Component({\n selector: 'rolatech-property-manage-floorplan',\n imports: [PropertyManageContentComponent, ToolbarComponent, MediaListComponent, MediaListItemComponent],\n templateUrl: './property-manage-floorplan.html',\n styleUrl: './property-manage-floorplan.scss',\n})\nexport class PropertyManageFloorplan extends BaseComponent implements OnInit {\n floorplanService = inject(FloorplanService);\n floorplans: any[] = [];\n\n ngOnInit(): void {\n this.id = this.route.parent?.snapshot.paramMap.get('id') as string;\n this.listFloorplans();\n }\n listFloorplans() {\n this.floorplanService.listFloorplans(this.id).subscribe({\n next: (res) => {\n this.floorplans = res.data || [];\n },\n });\n }\n uploadFloorplan(event: any) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n const startIndex = this.floorplans.length; // Offset to preserve existing items\n Array.from(input.files).forEach((file, i) => {\n this.uploadFile(file, startIndex + i);\n });\n }\n }\n private uploadFile(file: any, index: number) {\n const reader = new FileReader();\n const formData = new FormData();\n formData.append('file', file);\n\n this.floorplans.splice(index, 0, {\n url: '',\n alt: 'Uploading...',\n width: 0,\n height: 0,\n uploading: true,\n });\n\n reader.readAsDataURL(file);\n reader.onload = () => {\n const img: any = new Image();\n img.onload = () => {\n Object.assign(this.floorplans[index], {\n url: img.src,\n width: img.width,\n height: img.height,\n });\n };\n img.src = reader.result as string;\n };\n this.floorplanService.uploadFloorplan(this.id, formData).subscribe({\n next: (res: any) => {\n // Replace item at index using native splice\n // this.media.splice(index, 1, res.data);\n this.floorplans.splice(index, 1, {\n ...res.data,\n uploading: false,\n });\n },\n error: (e: any) => {\n this.snackBarService.open('Upload failed: ' + e.message);\n this.floorplans.splice(index, 1); // remove failed placeholder\n },\n });\n reader.onerror = (error) => {};\n }\n onClick(i: any) {\n const dialogRef = this.dialog.open(ImagePreviewDialogComponent, {\n maxWidth: '80vw',\n maxHeight: '80vh',\n height: '80%',\n width: '80%',\n panelClass: 'full-screen-modal',\n data: {\n media: this.floorplans,\n selected: i,\n },\n });\n dialogRef.afterClosed().subscribe((result) => {});\n }\n onDelete(item: any) {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n width: '400px',\n data: {\n title: 'Delete media',\n message: 'Are you sure to delete?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.floorplanService.deleteFloorplan(this.id, item.id).subscribe({\n next: (res) => {\n this.floorplans = this.floorplans.filter((m) => m.id !== item.id);\n this.snackBarService.open('Delete successfully');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n}\n","<rolatech-property-manage-content>\n <rolatech-toolbar title=\"Floorplans\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div>\n <p class=\"p-2 font-bold\" i18n>Limit 5MB per image</p>\n <rolatech-media-list (upload)=\"uploadFloorplan($event)\">\n @for (item of floorplans; track item; let i = $index) {\n <rolatech-media-list-item\n [media]=\"item\"\n (mediaItemClick)=\"onClick(i)\"\n (deleteMedia)=\"onDelete(item)\"\n [uploading]=\"item.uploading\"\n ></rolatech-media-list-item>\n }\n </rolatech-media-list>\n </div>\n</rolatech-property-manage-content>\n","import { Routes } from '@angular/router';\nimport { PropertyManageIndexComponent } from './property-manage-index/property-manage-index.component';\nimport { PropertyManageCreateComponent } from './property-manage-create/property-manage-create.component';\nimport { PropertyManageLayoutComponent } from './property-manage-layout/property-manage-layout.component';\nimport { PropertyManageInfoComponent } from './property-manage-info/property-manage-info.component';\nimport { PropertyManageMediaComponent } from './property-manage-media/property-manage-media.component';\nimport { PropertyManageSectionsComponent } from './property-manage-sections/property-manage-sections.component';\nimport { PropertyManageOptionsComponent } from './property-manage-options/property-manage-options.component';\nimport { PropertyManagePricingComponent } from './property-manage-pricing/property-manage-pricing.component';\nimport { PropertyManageScheduleComponent } from './property-manage-schedule/property-manage-schedule.component';\nimport { PropertyManageAmenitiesComponent } from './property-manage-amenities/property-manage-amenities.component';\nimport { PropertyManageFeaturesComponent } from './property-manage-features/property-manage-features.component';\nimport { PropertyManageLocationComponent } from './property-manage-location/property-manage-location.component';\nimport { PropertyManageVideoComponent } from './property-manage-video/property-manage-video.component';\nimport { PropertyManageHighlights } from './property-manage-highlights/property-manage-highlights';\nimport { PropertyManageEpc } from './property-manage-epc/property-manage-epc';\nimport { PropertyManageTranslation } from './property-manage-translation/property-manage-translation';\nimport { PropertyManageKeywords } from './property-manage-keywords/property-manage-keywords';\nimport { PropertyManageFloorplan } from './property-manage-floorplan/property-manage-floorplan';\n\nexport const propertyManageRoutes: Routes = [\n {\n path: '',\n component: PropertyManageIndexComponent,\n },\n {\n path: 'create',\n component: PropertyManageCreateComponent,\n },\n {\n path: ':id/manage',\n component: PropertyManageLayoutComponent,\n children: [\n {\n path: 'info',\n component: PropertyManageInfoComponent,\n },\n {\n path: 'media',\n component: PropertyManageMediaComponent,\n },\n {\n path: 'videos',\n component: PropertyManageVideoComponent,\n },\n {\n path: 'sections',\n component: PropertyManageSectionsComponent,\n },\n {\n path: 'floorplans',\n component: PropertyManageFloorplan,\n },\n {\n path: 'location',\n component: PropertyManageLocationComponent,\n },\n {\n path: 'features',\n component: PropertyManageFeaturesComponent,\n },\n {\n path: 'keywords',\n component: PropertyManageKeywords,\n },\n {\n path: 'highlights',\n component: PropertyManageHighlights,\n },\n {\n path: 'epc',\n component: PropertyManageEpc,\n },\n {\n path: 'translation',\n component: PropertyManageTranslation,\n },\n {\n path: 'pricing',\n component: PropertyManagePricingComponent,\n },\n {\n path: 'schedule',\n component: PropertyManageScheduleComponent,\n },\n ],\n },\n];\n","import { Component, DoCheck, model, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-property-viewing-confirmation',\n imports: [CommonModule],\n templateUrl: './property-viewing-confirmation.component.html',\n styleUrl: './property-viewing-confirmation.component.scss',\n})\nexport class PropertyViewingConfirmationComponent implements DoCheck {\n output = output<any>();\n proposedTime = model<any>();\n selectedTime = model<any>();\n\n ngDoCheck(): void {\n this.output.emit(true);\n }\n}\n","<div>\n @if (proposedTime()) {\n <div class=\"flex gap-2 text-sm text-gray-700\">\n <span>{{ proposedTime().date | date: 'dd MMM yyyy' }}</span>\n <span>{{ proposedTime().time }}</span>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { AuthUserService } from '@rolatech/angular-auth';\nimport { PricePipe } from '@rolatech/angular-common';\nimport {\n BaseComponent,\n ImagePlaceholderComponent,\n Skeleton,\n ThumbnailComponent,\n ToolbarComponent,\n} from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyViewingTimeComponent } from '../../../components/property-viewing-time/property-viewing-time.component';\nimport { PropertyViewingConfirmationComponent } from '../../../components/property-viewing-confirmation/property-viewing-confirmation.component';\nimport {\n PropertyApplicantType,\n PropertyViewerCategory,\n PropertyViewing,\n ViewingProposedSlot,\n propertyViewingStatusCode,\n propertyViewingStatusLabel,\n} from '../../../interfaces';\n\n@Component({\n selector: 'rolatech-property-manage-viewings-detail',\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n ThumbnailComponent,\n ImagePlaceholderComponent,\n Skeleton,\n ToolbarComponent,\n PricePipe,\n FormsModule,\n PropertyViewingTimeComponent,\n ],\n templateUrl: './property-manage-viewings-detail.component.html',\n styleUrl: './property-manage-viewings-detail.component.scss',\n})\nexport class PropertyManageViewingsDetailComponent extends BaseComponent implements OnInit {\n readonly propertyService = inject(PropertyService);\n readonly authUserService = inject(AuthUserService);\n readonly applicantType = PropertyApplicantType;\n readonly counterMode = signal(false);\n readonly countering = signal(false);\n readonly counterSlots = signal<ViewingProposedSlot[]>(this.createCounterSlots());\n viewing!: PropertyViewing;\n agent: any;\n\n ngOnInit(): void {\n this.getViewing();\n }\n\n getViewing() {\n this.propertyService.getViewing(this.id).subscribe({\n next: (res) => {\n this.viewing = res.data;\n this.titleService.setTitle(this.viewing.item?.title || 'Manage viewing request');\n this.counterSlots.set(this.createCounterSlots(this.viewing.proposedSlots));\n\n if (this.viewing.agentId) {\n this.getAgentPublicInfo(this.viewing.agentId);\n }\n },\n });\n }\n\n getAgentPublicInfo(agentId: string) {\n this.authUserService.getPublicUserInfo(agentId).subscribe({\n next: (res) => {\n this.agent = res;\n },\n });\n }\n\n confirmViewingTime(slot: PropertyViewing['proposedSlots'][number]) {\n if (!slot?.id) {\n this.snackBarService.open('This slot cannot be confirmed because the slot id is missing.');\n return;\n }\n\n const options = {\n title: 'Confirm viewing time',\n component: PropertyViewingConfirmationComponent,\n data: {\n proposedTime: slot,\n },\n };\n\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe({\n next: (result) => {\n if (!result) {\n return;\n }\n\n this.propertyService.confirmViewing(this.id, slot.id as string).subscribe({\n next: (res) => {\n const nextStatus =\n res?.data?.status ??\n (propertyViewingStatusCode(this.viewing.status) === 'PENDING' ? 'APPROVED' : this.viewing.status);\n\n this.viewing = {\n ...this.viewing,\n ...res?.data,\n status: nextStatus,\n viewingDate: res?.data?.viewingDate ?? slot.date ?? this.viewing.viewingDate,\n viewingTime: res?.data?.viewingTime ?? slot.time ?? this.viewing.viewingTime,\n proposedSlots: res?.data?.proposedSlots ?? this.viewing.proposedSlots,\n item: res?.data?.item ?? this.viewing.item,\n };\n this.counterMode.set(false);\n this.counterSlots.set(this.createCounterSlots(this.viewing.proposedSlots));\n\n this.snackBarService.open('Viewing confirmed');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n },\n });\n }\n\n statusLabel(status: string | null | undefined) {\n return propertyViewingStatusLabel(status);\n }\n\n statusToneClass(status: string | null | undefined) {\n switch (propertyViewingStatusCode(status)) {\n case 'APPROVED':\n case 'COMPLETED':\n return 'property-manage-viewings-detail__status property-manage-viewings-detail__status--positive';\n case 'REJECTED':\n case 'CANCELLED':\n return 'property-manage-viewings-detail__status property-manage-viewings-detail__status--negative';\n default:\n return 'property-manage-viewings-detail__status property-manage-viewings-detail__status--neutral';\n }\n }\n\n statusHeadline() {\n if (this.isAwaitingAcceptance()) {\n return 'Counter slots sent. Waiting for the requester to pick one.';\n }\n\n switch (propertyViewingStatusCode(this.viewing?.status)) {\n case 'COUNTERED':\n return 'Counter slots sent. Waiting for the requester to pick one.';\n case 'APPROVED':\n return 'Viewing confirmed with the applicant.';\n case 'COMPLETED':\n return 'This viewing has already been completed.';\n case 'REJECTED':\n return 'This request was declined.';\n case 'CANCELLED':\n return 'This request has been cancelled.';\n default:\n return 'Review the applicant details and confirm the best slot.';\n }\n }\n\n statusDescription() {\n if (!this.viewing) {\n return '';\n }\n\n if (this.isAwaitingAcceptance()) {\n return 'The original requested times did not fit the diary, so three new options have been returned for the requester to accept.';\n }\n\n if (this.confirmedSlotLabel()) {\n return `The selected slot is ${this.confirmedSlotLabel()} and should now be visible across the viewing workflow.`;\n }\n\n switch (propertyViewingStatusCode(this.viewing.status)) {\n case 'COMPLETED':\n return 'Use this page as the final record of the visit, property summary, and submitted applicant details.';\n case 'REJECTED':\n case 'CANCELLED':\n return 'The original request remains here for reference, including all proposed times and requester information.';\n default:\n return 'Choose one of the proposed slots below to lock in the viewing and notify the relevant parties.';\n }\n }\n\n confirmedSlotLabel() {\n if (!this.viewing?.viewingDate) {\n return null;\n }\n\n const date = new Date(this.viewing.viewingDate);\n const hasValidDate = !Number.isNaN(date.getTime());\n const formattedDate = hasValidDate\n ? new Intl.DateTimeFormat('en-GB', { dateStyle: 'medium' }).format(date)\n : this.viewing.viewingDate;\n\n return this.viewing.viewingTime ? `${formattedDate} at ${this.viewing.viewingTime}` : formattedDate;\n }\n\n isConfirmedSlot(slot: { date?: string | null; time?: string | null }) {\n return !!this.viewing?.viewingDate && slot.date === this.viewing.viewingDate && slot.time === this.viewing.viewingTime;\n }\n\n canConfirmSlot(slot: PropertyViewing['proposedSlots'][number]) {\n return !this.viewing?.viewingDate && !!slot?.id && !this.isAwaitingAcceptance();\n }\n\n canCounterSlots() {\n const code = propertyViewingStatusCode(this.viewing?.status);\n return !this.viewing?.viewingDate && code !== 'COMPLETED' && code !== 'CANCELLED' && code !== 'REJECTED';\n }\n\n isAwaitingAcceptance() {\n return (\n !this.viewing?.viewingDate &&\n (this.viewing?.slotDecisionRequired === true ||\n this.slotProposalSource() === 'ADMIN_COUNTER' ||\n propertyViewingStatusCode(this.viewing?.status) === 'COUNTERED')\n );\n }\n\n openCounterSlots() {\n this.counterSlots.set(this.createCounterSlots(this.viewing?.proposedSlots));\n this.counterMode.set(true);\n }\n\n cancelCounterSlots() {\n this.counterMode.set(false);\n this.counterSlots.set(this.createCounterSlots(this.viewing?.proposedSlots));\n }\n\n updateCounterSlot(index: number, slot: ViewingProposedSlot) {\n this.counterSlots.update((current) =>\n current.map((item, itemIndex) =>\n itemIndex === index\n ? {\n ...item,\n ...slot,\n }\n : item,\n ),\n );\n }\n\n sendCounterSlots() {\n const counterSlots = this.counterSlots()\n .map((slot) => ({\n date: slot.date?.trim?.() ?? slot.date,\n time: slot.time?.trim?.() ?? slot.time,\n }))\n .filter((slot) => slot.date && slot.time);\n\n if (counterSlots.length !== 3) {\n this.snackBarService.open('Provide three counter slots before sending them to the requester.');\n return;\n }\n\n const uniqueSlots = new Set(counterSlots.map((slot) => `${slot.date}::${slot.time}`));\n if (uniqueSlots.size !== counterSlots.length) {\n this.snackBarService.open('Each counter slot must use a different date and time.');\n return;\n }\n\n this.countering.set(true);\n\n this.propertyService.counterViewing(this.id, { counterSlots }).subscribe({\n next: (res) => {\n const nextViewing = res?.data;\n this.viewing = {\n ...this.viewing,\n ...nextViewing,\n status: nextViewing?.status ?? 'COUNTERED',\n slotProposalSource: nextViewing?.slotProposalSource ?? 'ADMIN_COUNTER',\n slotDecisionRequired: nextViewing?.slotDecisionRequired ?? true,\n counteredAt: nextViewing?.counteredAt ?? new Date().toISOString(),\n proposedSlots:\n nextViewing?.proposedSlots ??\n counterSlots.map((slot, index) => ({\n ...slot,\n id: this.viewing.proposedSlots[index]?.id,\n source: 'ADMIN_COUNTER',\n })),\n item: nextViewing?.item ?? this.viewing.item,\n };\n this.counterMode.set(false);\n this.counterSlots.set(this.createCounterSlots(this.viewing.proposedSlots));\n this.snackBarService.open('Counter slots sent to the requester.');\n },\n error: (error) => {\n this.countering.set(false);\n this.snackBarService.open(error.message);\n },\n complete: () => {\n this.countering.set(false);\n },\n });\n }\n\n primaryMediaUrl() {\n return this.viewing?.item?.media?.[0]?.url || '';\n }\n\n viewerName() {\n const fullName = `${this.viewing?.firstName ?? ''} ${this.viewing?.lastName ?? ''}`.trim();\n return fullName || 'Viewer';\n }\n\n viewerContactSummary() {\n if (!this.viewing) {\n return 'Contact details available in the viewer profile below.';\n }\n\n if (this.viewing.email && this.viewing.phone) {\n return `${this.viewing.email} · ${this.viewing.phone}`;\n }\n\n return this.viewing.email || this.viewing.phone || 'Contact details available in the viewer profile below.';\n }\n\n viewerCategoryLabel(value: string | null | undefined) {\n if (!value) {\n return 'Not specified';\n }\n\n const normalized = value.toUpperCase();\n if (normalized in PropertyViewerCategory) {\n return this.humanize(normalized);\n }\n\n return this.humanize(value);\n }\n\n applicantTypeLabel(value: string | null | undefined) {\n if (!value) {\n return 'Not shared';\n }\n\n const normalized = value.toUpperCase();\n return this.applicantType[normalized as keyof typeof PropertyApplicantType] || this.humanize(value);\n }\n\n requesterTypeLabel(value: string | null | undefined) {\n return value ? this.humanize(value) : 'Direct request';\n }\n\n agentName() {\n return this.agent?.name || 'Assigned agent';\n }\n\n agentEmail() {\n return this.agent?.email || 'Not shared';\n }\n\n agentPhone() {\n return this.agent?.phone || 'Not shared';\n }\n\n hasAgentCard() {\n return !!this.agent || !!this.viewing?.agentId;\n }\n\n private humanize(value: string) {\n return value\n .trim()\n .replace(/[_-]+/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n\n private slotProposalSource() {\n const explicitSource = this.viewing?.slotProposalSource;\n if (explicitSource) {\n return explicitSource.toUpperCase();\n }\n\n const slotSource = this.viewing?.proposedSlots?.[0]?.source;\n return slotSource ? slotSource.toUpperCase() : 'REQUESTER';\n }\n\n private createCounterSlots(source: PropertyViewing['proposedSlots'] = []): ViewingProposedSlot[] {\n return Array.from({ length: 3 }, (_item, index) => ({\n date: source[index]?.date ?? '',\n time: source[index]?.time ?? '',\n source: source[index]?.source ?? null,\n state: source[index]?.state ?? null,\n }));\n }\n}\n","<div class=\"property-manage-viewings-detail\">\n <rolatech-toolbar\n [title]=\"viewing ? 'Manage viewing request' : 'Loading viewing'\"\n [subtitle]=\"viewing ? statusLabel(viewing.status) : ''\"\n large\n link=\"../\"\n ></rolatech-toolbar>\n\n @if (viewing) {\n <section class=\"property-manage-viewings-detail__hero\">\n <div class=\"property-manage-viewings-detail__hero-copy\">\n <span class=\"property-manage-viewings-detail__eyebrow\" i18n>Manage viewing</span>\n <div class=\"property-manage-viewings-detail__hero-heading\">\n <h1 class=\"property-manage-viewings-detail__title\">{{ viewing.item.title }}</h1>\n <span [class]=\"statusToneClass(viewing.status)\">{{ statusLabel(viewing.status) }}</span>\n </div>\n\n @if (viewing.item.address) {\n <p class=\"property-manage-viewings-detail__address\">{{ viewing.item.address }}</p>\n }\n\n <p class=\"property-manage-viewings-detail__intro\">{{ statusHeadline() }}</p>\n <p class=\"property-manage-viewings-detail__summary-note\">{{ statusDescription() }}</p>\n\n <div class=\"property-manage-viewings-detail__fact-grid\">\n <article class=\"property-manage-viewings-detail__fact\">\n <span class=\"property-manage-viewings-detail__fact-label\" i18n>Confirmed slot</span>\n <strong class=\"property-manage-viewings-detail__fact-value\">{{ confirmedSlotLabel() || 'Awaiting selection' }}</strong>\n </article>\n <article class=\"property-manage-viewings-detail__fact\">\n <span class=\"property-manage-viewings-detail__fact-label\" i18n>Applicant type</span>\n <strong class=\"property-manage-viewings-detail__fact-value\">{{ applicantTypeLabel(viewing.tenantCategory) }}</strong>\n </article>\n <article class=\"property-manage-viewings-detail__fact\">\n <span class=\"property-manage-viewings-detail__fact-label\" i18n>Monthly budget</span>\n <strong class=\"property-manage-viewings-detail__fact-value\">{{\n viewing.monthlyBudget ? (viewing.monthlyBudget | price) : 'Not shared'\n }}</strong>\n </article>\n <article class=\"property-manage-viewings-detail__fact\">\n <span class=\"property-manage-viewings-detail__fact-label\" i18n>Annual income</span>\n <strong class=\"property-manage-viewings-detail__fact-value\">{{\n viewing.annualIncome ? (viewing.annualIncome | price) : 'Not shared'\n }}</strong>\n </article>\n </div>\n </div>\n\n <div class=\"property-manage-viewings-detail__hero-side\">\n <div class=\"property-manage-viewings-detail__property-card\">\n <div class=\"property-manage-viewings-detail__media\">\n @if (primaryMediaUrl()) {\n @defer {\n <rolatech-thumbnail [src]=\"primaryMediaUrl()\" size=\"medium\" mode=\"clip\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"property-manage-viewings-detail__media-fallback\"></div>\n }\n } @else {\n <rolatech-image-placeholder></rolatech-image-placeholder>\n }\n </div>\n\n <div class=\"property-manage-viewings-detail__property-copy\">\n <div class=\"property-manage-viewings-detail__property-price\">{{ viewing.item.price | price }}</div>\n <div class=\"property-manage-viewings-detail__property-facts\">\n <span>{{ viewing.item.bedrooms }} bed</span>\n <span>{{ viewing.item.bathrooms }} bath</span>\n <span>{{ viewing.item.receptions }} reception</span>\n </div>\n </div>\n </div>\n\n <div class=\"property-manage-viewings-detail__summary-card\">\n <span class=\"property-manage-viewings-detail__summary-label\" i18n>Viewer</span>\n <strong class=\"property-manage-viewings-detail__summary-value\">{{ viewerName() }}</strong>\n <span class=\"property-manage-viewings-detail__summary-contact\">{{ viewerContactSummary() }}</span>\n </div>\n </div>\n </section>\n\n <div class=\"property-manage-viewings-detail__content\">\n <main class=\"property-manage-viewings-detail__main\">\n <section class=\"property-manage-viewings-detail__panel\">\n <div class=\"property-manage-viewings-detail__panel-head\">\n <div>\n <span class=\"property-manage-viewings-detail__panel-eyebrow\" i18n>Viewer profile</span>\n <h2 class=\"property-manage-viewings-detail__panel-title\" i18n>Applicant details and affordability</h2>\n </div>\n </div>\n\n <div class=\"property-manage-viewings-detail__info-grid\">\n <article class=\"property-manage-viewings-detail__info-card\">\n <span class=\"property-manage-viewings-detail__info-label\" i18n>Name</span>\n <strong>{{ viewerName() }}</strong>\n </article>\n <article class=\"property-manage-viewings-detail__info-card\">\n <span class=\"property-manage-viewings-detail__info-label\" i18n>Email</span>\n <strong>{{ viewing.email || 'Not shared' }}</strong>\n </article>\n <article class=\"property-manage-viewings-detail__info-card\">\n <span class=\"property-manage-viewings-detail__info-label\" i18n>Phone</span>\n <strong>{{ viewing.phone || 'Not shared' }}</strong>\n </article>\n <article class=\"property-manage-viewings-detail__info-card\">\n <span class=\"property-manage-viewings-detail__info-label\" i18n>Viewer type</span>\n <strong>{{ viewerCategoryLabel(viewing.viewerCategory) }}</strong>\n </article>\n <article class=\"property-manage-viewings-detail__info-card\">\n <span class=\"property-manage-viewings-detail__info-label\" i18n>Applicant type</span>\n <strong>{{ applicantTypeLabel(viewing.tenantCategory) }}</strong>\n </article>\n <article class=\"property-manage-viewings-detail__info-card\">\n <span class=\"property-manage-viewings-detail__info-label\" i18n>Job title</span>\n <strong>{{ viewing.jobTitle || 'Not shared' }}</strong>\n </article>\n <article class=\"property-manage-viewings-detail__info-card\">\n <span class=\"property-manage-viewings-detail__info-label\" i18n>Move-in target</span>\n <strong>{{ viewing.moveInDate ? (viewing.moveInDate | date: 'mediumDate') : 'Not shared' }}</strong>\n </article>\n <article class=\"property-manage-viewings-detail__info-card\">\n <span class=\"property-manage-viewings-detail__info-label\" i18n>Requester type</span>\n <strong>{{ requesterTypeLabel(viewing.requesterType) }}</strong>\n </article>\n </div>\n </section>\n\n <section class=\"property-manage-viewings-detail__panel\">\n <div class=\"property-manage-viewings-detail__panel-head\">\n <div>\n <span class=\"property-manage-viewings-detail__panel-eyebrow\" i18n>Preferred slots</span>\n <h2 class=\"property-manage-viewings-detail__panel-title\">\n @if (isAwaitingAcceptance()) {\n Waiting for requester acceptance\n } @else {\n Choose the slot to confirm\n }\n </h2>\n </div>\n\n @if (canCounterSlots()) {\n <button mat-stroked-button type=\"button\" (click)=\"openCounterSlots()\" i18n>Counter with 3 new slots</button>\n }\n </div>\n\n @if (counterMode()) {\n <div class=\"property-manage-viewings-detail__counter-panel\">\n <div class=\"property-manage-viewings-detail__counter-copy\">\n <strong i18n>Return three new slots</strong>\n <p i18n>\n Use this when the original request does not fit the diary. The requester will need to accept one of these\n returned options.\n </p>\n </div>\n\n <div class=\"property-manage-viewings-detail__counter-grid\">\n @for (slot of counterSlots(); track $index) {\n <div class=\"property-manage-viewings-detail__counter-card\">\n <div class=\"property-manage-viewings-detail__counter-label\">Option {{ $index + 1 }}</div>\n <rolatech-property-viewing-time\n [proposedTime]=\"slot\"\n (output)=\"updateCounterSlot($index, $event)\"\n ></rolatech-property-viewing-time>\n </div>\n }\n </div>\n\n <div class=\"property-manage-viewings-detail__counter-actions\">\n <button mat-stroked-button type=\"button\" (click)=\"cancelCounterSlots()\" i18n>Cancel</button>\n <button mat-flat-button type=\"button\" [disabled]=\"countering()\" (click)=\"sendCounterSlots()\">\n @if (countering()) {\n Sending...\n } @else {\n Send counter slots\n }\n </button>\n </div>\n </div>\n }\n\n <div class=\"property-manage-viewings-detail__slot-list\">\n @for (slot of viewing.proposedSlots; track slot.id || $index + ':' + slot.date + ':' + slot.time) {\n <article\n class=\"property-manage-viewings-detail__slot-card\"\n [class.property-manage-viewings-detail__slot-card--confirmed]=\"isConfirmedSlot(slot)\"\n >\n <div class=\"property-manage-viewings-detail__slot-copy\">\n <div class=\"property-manage-viewings-detail__slot-line\">\n <mat-icon>calendar_today</mat-icon>\n <strong>{{ slot.date | date: 'mediumDate' }}</strong>\n </div>\n <div class=\"property-manage-viewings-detail__slot-line\">\n <mat-icon>schedule</mat-icon>\n <span>{{ slot.time }}</span>\n </div>\n </div>\n\n <div class=\"property-manage-viewings-detail__slot-actions\">\n @if (isConfirmedSlot(slot)) {\n <span\n class=\"property-manage-viewings-detail__slot-state property-manage-viewings-detail__slot-state--confirmed\"\n i18n\n >\n Confirmed\n </span>\n } @else if (canConfirmSlot(slot)) {\n <button mat-flat-button type=\"button\" (click)=\"confirmViewingTime(slot)\" i18n>Confirm slot</button>\n } @else if (isAwaitingAcceptance()) {\n <span class=\"property-manage-viewings-detail__slot-state\" i18n>Sent for acceptance</span>\n } @else {\n <span class=\"property-manage-viewings-detail__slot-state\" i18n>Proposed</span>\n }\n </div>\n </article>\n } @empty {\n <div class=\"property-manage-viewings-detail__empty\" i18n>No proposed slots were attached to this request.</div>\n }\n </div>\n </section>\n </main>\n\n <aside class=\"property-manage-viewings-detail__side\">\n <div class=\"property-manage-viewings-detail__sticky\">\n <section class=\"property-manage-viewings-detail__panel property-manage-viewings-detail__panel--subtle\">\n <span class=\"property-manage-viewings-detail__panel-eyebrow\" i18n>Request context</span>\n <h2 class=\"property-manage-viewings-detail__panel-title\" i18n>Where this enquiry came from</h2>\n\n <div class=\"property-manage-viewings-detail__summary-list\">\n <div>\n <span class=\"property-manage-viewings-detail__summary-key\" i18n>Requester type</span>\n <strong>{{ requesterTypeLabel(viewing.requesterType) }}</strong>\n </div>\n <div>\n <span class=\"property-manage-viewings-detail__summary-key\" i18n>Requester app</span>\n <strong>{{ viewing.requesterAppId || viewing.appId || 'Not attached' }}</strong>\n </div>\n <div>\n <span class=\"property-manage-viewings-detail__summary-key\" i18n>Requester org</span>\n <strong>{{ viewing.requesterOrgId || viewing.orgId || 'Not attached' }}</strong>\n </div>\n <div>\n <span class=\"property-manage-viewings-detail__summary-key\" i18n>User id</span>\n <strong>{{ viewing.userId || 'Not attached' }}</strong>\n </div>\n </div>\n </section>\n\n @if (hasAgentCard()) {\n <section class=\"property-manage-viewings-detail__panel property-manage-viewings-detail__panel--subtle\">\n <span class=\"property-manage-viewings-detail__panel-eyebrow\" i18n>Viewing agent</span>\n <h2 class=\"property-manage-viewings-detail__panel-title\" i18n>Agency contact linked to this request</h2>\n\n <div class=\"property-manage-viewings-detail__summary-list\">\n <div>\n <span class=\"property-manage-viewings-detail__summary-key\" i18n>Name</span>\n <strong>{{ agentName() }}</strong>\n </div>\n <div>\n <span class=\"property-manage-viewings-detail__summary-key\" i18n>Email</span>\n <strong>{{ agentEmail() }}</strong>\n </div>\n <div>\n <span class=\"property-manage-viewings-detail__summary-key\" i18n>Phone</span>\n <strong>{{ agentPhone() }}</strong>\n </div>\n </div>\n </section>\n }\n\n <section class=\"property-manage-viewings-detail__panel property-manage-viewings-detail__panel--subtle\">\n <span class=\"property-manage-viewings-detail__panel-eyebrow\" i18n>Next step</span>\n <h2 class=\"property-manage-viewings-detail__panel-title\" i18n>Move the request forward</h2>\n <p class=\"property-manage-viewings-detail__summary-note\">\n @if (isAwaitingAcceptance()) {\n The requester now needs to accept one of the returned slots. Once they do, the accepted time becomes the source\n of truth for this viewing.\n } @else {\n Confirm one of the proposed slots to turn this request into a scheduled appointment. Once confirmed, the selected\n time becomes the source of truth for this viewing.\n }\n </p>\n </section>\n </div>\n </aside>\n </div>\n } @else {\n <section class=\"property-manage-viewings-detail__hero property-manage-viewings-detail__hero--loading\">\n <div class=\"property-manage-viewings-detail__hero-copy\">\n <rolatech-skeleton class=\"h-5 w-32\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-10 w-3/4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-5 w-full\"></rolatech-skeleton>\n <div class=\"property-manage-viewings-detail__fact-grid\">\n @for (fact of [0, 1, 2, 3]; track fact) {\n <article class=\"property-manage-viewings-detail__fact\">\n <rolatech-skeleton class=\"h-3 w-24\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-6 w-32\"></rolatech-skeleton>\n </article>\n }\n </div>\n </div>\n\n <div class=\"property-manage-viewings-detail__hero-side\">\n <article class=\"property-manage-viewings-detail__property-card property-manage-viewings-detail__property-card--loading\">\n <rolatech-skeleton class=\"h-full w-full\"></rolatech-skeleton>\n </article>\n </div>\n </section>\n }\n</div>\n","import { Routes } from '@angular/router';\nimport { PropertyLayoutComponent } from '../property/property-layout/property-layout.component';\nimport { PropertyManageViewingsDetailComponent } from './property-manage-viewings-detail/property-manage-viewings-detail.component';\n\nexport const propertyManageViewingsRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./property-manage-viewings-index/property-manage-viewings-index.component').then(\n (x) => x.PropertyManageViewingsIndexComponent,\n ),\n },\n {\n path: ':id',\n component: PropertyManageViewingsDetailComponent,\n },\n];\n","import { booleanAttribute, Component, computed, effect, ElementRef, HostBinding, inject, input, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { ThumbnailComponent, ImagePlaceholderComponent } from '@rolatech/angular-components';\nimport { Property } from '../../interfaces';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-market-item',\n imports: [CommonModule, ThumbnailComponent, ImagePlaceholderComponent, MatButtonModule, MatMenuModule, PricePipe],\n templateUrl: './property-market-item.html',\n styleUrl: './property-market-item.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyMarketItem {\n @HostBinding('class.rolatech-property-market-item') hasClass = true;\n el = inject(ElementRef);\n letting = input.required<Property>();\n thumbnail = input();\n list = input(false, { transform: booleanAttribute });\n readonly mediaItems = computed(() => {\n const property = this.letting() as Partial<Property>;\n return Array.isArray(property.media) ? property.media : [];\n });\n readonly addressLine = computed(() => {\n const location = (this.letting() as Partial<Property>).location;\n const streetLine = [location?.streetNumber, location?.street].filter(Boolean).join(' ').trim();\n return [streetLine, location?.town].filter(Boolean).join(', ') || 'Address pending';\n });\n\n constructor() {\n effect(() => {\n if (this.list()) {\n this.el.nativeElement.setAttribute('list', '');\n } else {\n this.el.nativeElement.removeAttribute('list');\n }\n });\n }\n}\n","<article class=\"property-market-item\" [class.property-market-item--list]=\"list()\">\n <div class=\"property-market-item__media\">\n @if (mediaItems().length) {\n @defer {\n <rolatech-thumbnail [src]=\"mediaItems()[0].url\" size=\"medium\" mode=\"clip\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"property-market-item__media-placeholder\"></div>\n }\n } @else {\n <rolatech-image-placeholder></rolatech-image-placeholder>\n }\n </div>\n\n <div class=\"property-market-item__content\">\n <div class=\"property-market-item__top\">\n <span class=\"property-market-item__badge\">{{ letting().market || 'Property' }}</span>\n <span class=\"property-market-item__price\">{{ letting().price | price }}</span>\n </div>\n\n <div class=\"property-market-item__title\">{{ letting().title }}</div>\n\n <p class=\"property-market-item__address\">\n {{ addressLine() }}\n </p>\n\n <div class=\"property-market-item__facts\">\n <span>{{ letting().bedrooms || 'Studio' }} bed</span>\n <span>{{ letting().bathrooms || 0 }} bath</span>\n <span>{{ letting().receptions || 0 }} reception</span>\n </div>\n </div>\n</article>\n","import { Component, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { RouterLink } from '@angular/router';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { PropertySearchService } from '@rolatech/angular-services';\nimport { BedroomRange, Market, Property } from '../../../interfaces';\nimport { PropertyMarketItem } from '../../../components/property-market-item/property-market-item';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\nimport { PropertyManageItemSkeleton } from '../../../components/property-manage-item-skeleton/property-manage-item-skeleton';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { PropertyWorkspaceShell, PropertyWorkspaceStat } from '../../../components/property-workspace-shell/property-workspace-shell';\n\n@Component({\n selector: 'rolatech-property-market-index',\n imports: [\n CommonModule,\n MatButtonModule,\n RouterLink,\n PropertyMarketItem,\n MatPaginatorModule,\n PropertyManageItemSkeleton,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n PropertyWorkspaceShell,\n ],\n templateUrl: './property-market-index.html',\n styleUrl: './property-market-index.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyMarketIndex extends BaseComponent implements OnInit {\n propertySearchService = inject(PropertySearchService);\n loading = false;\n lettings = signal<Property[]>([]);\n readonly marketOptions = [\n { label: 'All markets', value: '' },\n { label: Market.RENTAL, value: Market.RENTAL },\n { label: Market.SALE, value: Market.SALE },\n ];\n readonly bedroomOptions = BedroomRange.filter((item) => item.value !== null).map((item) => ({\n label: item.label,\n value: item.value?.toString() ?? '',\n }));\n readonly sortOptions = [\n { label: 'Newest first', value: 'updatedAt desc' },\n { label: 'Price low to high', value: 'price asc' },\n { label: 'Price high to low', value: 'price desc' },\n ];\n filters = {\n q: '',\n town: '',\n market: '',\n minBedrooms: '',\n maxPrice: '',\n sort: 'updatedAt desc',\n };\n\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n pageIndex = signal(0);\n meta: any;\n\n ngOnInit(): void {\n this.find();\n }\n\n get stats(): PropertyWorkspaceStat[] {\n return [\n { label: 'Listings', value: this.length || this.lettings().length, hint: 'Matched against your current filters' },\n { label: 'Search', value: this.filters.q || 'All properties', hint: 'Keyword or address search' },\n { label: 'Town', value: this.filters.town || 'Any town', hint: 'Focused local area' },\n { label: 'Active filters', value: this.activeFilterCount(), hint: 'Market, beds, price, and text filters' },\n ];\n }\n\n find() {\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 this.filters = {\n q: p.get('q') || '',\n town: p.get('town') || '',\n market: p.get('market') || '',\n minBedrooms: p.get('minBedrooms') || '',\n maxPrice: p.get('maxPrice') || '',\n sort: p.get('sort') || 'updatedAt desc',\n };\n\n return {\n q: this.filters.q || undefined,\n town: this.filters.town || undefined,\n market: this.filters.market || undefined,\n minBedrooms: this.filters.minBedrooms ? Number(this.filters.minBedrooms) : undefined,\n maxBedrooms: p.get('maxBedrooms') ? Number(p.get('maxBedrooms')) : undefined,\n minPrice: p.get('minPrice') ? Number(p.get('minPrice')) : undefined,\n maxPrice: this.filters.maxPrice ? Number(this.filters.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: this.filters.sort,\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 return this.propertySearchService.search<any>(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.lettings.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.lettings.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n\n applyFilters() {\n this.router.navigate([], {\n queryParams: {\n q: this.filters.q || null,\n town: this.filters.town || null,\n market: this.filters.market || null,\n minBedrooms: this.filters.minBedrooms || null,\n maxPrice: this.filters.maxPrice || null,\n sort: this.filters.sort !== 'updatedAt desc' ? this.filters.sort : null,\n page: 1,\n limit: this.pageSize,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n\n resetFilters() {\n this.filters = {\n q: '',\n town: '',\n market: '',\n minBedrooms: '',\n maxPrice: '',\n sort: 'updatedAt desc',\n };\n\n this.router.navigate([], {\n queryParams: {\n q: null,\n town: null,\n market: null,\n minBedrooms: null,\n maxPrice: null,\n sort: null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n\n activeFilterCount() {\n return [this.filters.q, this.filters.town, this.filters.market, this.filters.minBedrooms, this.filters.maxPrice].filter(Boolean)\n .length;\n }\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-property-workspace-shell\n eyebrow=\"Buyer workspace\"\n title=\"Find property opportunities fast\"\n description=\"Search the latest listings, narrow by town or market, and jump straight into viewing and offer workflows from one market-facing workspace.\"\n [stats]=\"stats\"\n>\n <div workspace-filters class=\"property-market-index__filter-grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Search</mat-label>\n <input matInput [(ngModel)]=\"filters.q\" placeholder=\"Title, keyword, or area\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Town</mat-label>\n <input matInput [(ngModel)]=\"filters.town\" placeholder=\"London, Manchester...\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Market</mat-label>\n <mat-select [(ngModel)]=\"filters.market\">\n @for (market of marketOptions; track market.value) {\n <mat-option [value]=\"market.value\">{{ market.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Minimum bedrooms</mat-label>\n <mat-select [(ngModel)]=\"filters.minBedrooms\">\n @for (bedroom of bedroomOptions; track bedroom.value) {\n <mat-option [value]=\"bedroom.value\">{{ bedroom.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Max price</mat-label>\n <span matTextPrefix>£ </span>\n <input matInput type=\"number\" min=\"0\" [(ngModel)]=\"filters.maxPrice\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Sort</mat-label>\n <mat-select [(ngModel)]=\"filters.sort\">\n @for (option of sortOptions; track option.value) {\n <mat-option [value]=\"option.value\">{{ option.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <div class=\"property-market-index__filter-actions\">\n <button mat-flat-button (click)=\"applyFilters()\" i18n>Apply filters</button>\n <button mat-stroked-button (click)=\"resetFilters()\" i18n>Reset</button>\n </div>\n </div>\n\n <section class=\"property-market-index__results\">\n <div class=\"property-market-index__results-head\">\n <div>\n <h2 i18n>Available properties</h2>\n <p i18n>{{ length }} result(s) matched your current search.</p>\n </div>\n </div>\n\n @if (loading) {\n <div class=\"property-market-index__grid\">\n @for (row of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; track row) {\n <rolatech-property-manage-item-skeleton></rolatech-property-manage-item-skeleton>\n }\n </div>\n } @else if (lettings().length) {\n <div class=\"property-market-index__grid\">\n @for (item of lettings(); track item.id) {\n <rolatech-property-market-item\n class=\"cursor-pointer\"\n [letting]=\"item\"\n [routerLink]=\"['./', item.id]\"\n ></rolatech-property-market-item>\n }\n </div>\n } @else {\n <div class=\"property-market-index__empty\">\n <h3 i18n>No properties matched</h3>\n <p i18n>Try clearing some filters or widening the town and budget range.</p>\n </div>\n }\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 </section>\n</rolatech-property-workspace-shell>\n","import { Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Property } from '../../interfaces';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-letting-actions',\n imports: [CommonModule, MatButtonModule, MatIconModule, PricePipe],\n templateUrl: './letting-actions.html',\n styleUrl: './letting-actions.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class LettingActions {\n letting = input.required<Property>();\n requestViewing = output<Property>();\n offer = output<Property>();\n deposit = output<Property>();\n\n displayDeposit = computed(() => {\n return this.letting().deposit.toFixed(2);\n });\n\n onRequestViewing(letting: Property) {\n this.requestViewing.emit(letting);\n }\n onOffer(letting: Property) {\n this.offer.emit(letting);\n }\n onDeposit(letting: Property) {\n this.deposit.emit(letting);\n }\n\n readonly isDepositFlow = computed(() => this.letting().priceType?.toString() === 'PARTIAL');\n}\n","<div class=\"letting-actions\">\n <div class=\"letting-actions__header\">\n <span class=\"letting-actions__eyebrow\" i18n>Next step</span>\n <div class=\"letting-actions__title\" i18n>Move this property forward</div>\n <p class=\"letting-actions__description\" i18n>\n Book a viewing first or go straight to terms if you already know this home is right.\n </p>\n </div>\n\n <div class=\"letting-actions__buttons\">\n <button mat-stroked-button type=\"button\" class=\"letting-actions__secondary\" (click)=\"onRequestViewing(letting())\">\n <mat-icon>event_available</mat-icon>\n <span i18n>Request viewing</span>\n </button>\n\n @if (isDepositFlow()) {\n <button mat-flat-button type=\"button\" class=\"letting-actions__primary\" (click)=\"onDeposit(letting())\">\n <mat-icon>payments</mat-icon>\n <span i18n>Pay deposit {{ displayDeposit() | price }}</span>\n </button>\n } @else {\n <button mat-flat-button type=\"button\" class=\"letting-actions__primary\" (click)=\"onOffer(letting())\">\n <mat-icon>handshake</mat-icon>\n <span i18n>Make an offer</span>\n </button>\n }\n </div>\n\n <div class=\"letting-actions__tip\" i18n>\n You can keep track of updates, confirmations, and any counter terms from your buyer dashboard.\n </div>\n\n <ng-content select=\"rolatech-letting-action-contact\"></ng-content>\n</div>\n","import { Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Property } from '../../interfaces';\n\n@Component({\n selector: 'rolatech-letting-action-contact',\n imports: [CommonModule, MatButtonModule, MatIconModule],\n templateUrl: './letting-action-contact.html',\n styleUrl: './letting-action-contact.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class LettingActionContact {\n phone = input<string>();\n callAgent = output<Property>();\n emailAgent = output<Property>();\n readonly normalisedPhone = computed(() => (this.phone() || '').replace(/[^\\d+]/g, ''));\n readonly whatsappLink = computed(() => {\n const phone = this.normalisedPhone();\n return phone ? `https://wa.me/${phone.replace(/^\\+/, '')}` : null;\n });\n readonly callLink = computed(() => {\n const phone = this.normalisedPhone();\n return phone ? `tel:${phone}` : null;\n });\n onCallAgent() {}\n onEmailAgent(property: Property) {\n this.emailAgent.emit(property);\n }\n}\n","<div class=\"letting-action-contact\">\n <div class=\"letting-action-contact__copy\">\n <div class=\"letting-action-contact__title\" i18n>Prefer a quick question?</div>\n <p class=\"letting-action-contact__description\" i18n>\n Message the marketing agent directly for viewing logistics or offer context.\n </p>\n </div>\n\n <div class=\"letting-action-contact__actions\">\n @if (whatsappLink(); as whatsappLink) {\n <a mat-stroked-button class=\"letting-action-contact__button\" [href]=\"whatsappLink\" target=\"_blank\" rel=\"noreferrer\">\n <mat-icon>chat</mat-icon>\n <span i18n>Chat with agent</span>\n </a>\n }\n\n @if (callLink(); as callLink) {\n <a class=\"letting-action-contact__phone\" [href]=\"callLink\">\n <mat-icon>call</mat-icon>\n <span>{{ phone() }}</span>\n </a>\n }\n </div>\n</div>\n","import { Component, computed, effect, inject, OnInit, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { AngularCommonModule, PricePipe } from '@rolatech/angular-common';\nimport { AngularComponentsModule, BaseComponent } from '@rolatech/angular-components';\nimport { FloorplanService, PropertyHighlightsService, PropertyService, TimeZoneService } from '@rolatech/angular-services';\nimport { PropertyPricingComponent } from '../../../components';\nimport { PropertyFeaturesComponent } from '../../../components/property-features/property-features.component';\nimport { PropertyLocationComponent } from '../../../components/property-location/property-location.component';\nimport { PropertyMediaComponent } from '../../../components/property-media/property-media.component';\nimport { PropertySectionComponent } from '../../../components/property-section/property-section.component';\nimport { PropertyVideoComponent } from '../../../components/property-video/property-video.component';\nimport {\n Property,\n PropertyVideo,\n PropertyVideoProvider,\n} from '../../../interfaces';\nimport { LettingActions } from '../../../components/letting-actions/letting-actions';\nimport { LettingActionContact } from '../../../components/letting-action-contact/letting-action-contact';\nimport { PropertyAgentRenderer } from '../../../components/property-agent-renderer/property-agent-renderer';\nimport { PropertyMediaSkeleton } from '../../../components/property-media-skeleton/property-media-skeleton';\nimport { PropertyInfoSkeleton } from '../../../components/property-info-skeleton/property-info-skeleton';\nimport { PropertyAgentSkeleton } from '../../../components/property-agent-skeleton/property-agent-skeleton';\nimport { PropertyHighlights } from '../../../components/property-highlights/property-highlights';\nimport { PropertyFloorplan } from '../../../components/property-floorplan/property-floorplan';\nimport { PropertyEpc } from '../../../components/property-epc/property-epc';\nimport {\n PropertyMarketBreadcrumbComponent,\n PropertyMarketBreadcrumbItem,\n} from '../../../components/property-market-breadcrumb/property-market-breadcrumb';\nimport { RouterLink } from '@angular/router';\n\n@Component({\n selector: 'rolatech-property-market-detail',\n imports: [\n AngularCommonModule,\n AngularComponentsModule,\n MatButtonModule,\n RouterLink,\n PricePipe,\n PropertyMediaComponent,\n PropertyPricingComponent,\n PropertySectionComponent,\n LettingActions,\n LettingActionContact,\n PropertyLocationComponent,\n PropertyFeaturesComponent,\n PropertyVideoComponent,\n PropertyAgentRenderer,\n PropertyMediaSkeleton,\n PropertyInfoSkeleton,\n PropertyAgentSkeleton,\n PropertyHighlights,\n PropertyFloorplan,\n PropertyEpc,\n PropertyMarketBreadcrumbComponent,\n ],\n templateUrl: './property-market-detail.html',\n styleUrl: './property-market-detail.scss',\n})\nexport class PropertyMarketDetail extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n propertyService = inject(PropertyService);\n floorplanService = inject(FloorplanService);\n propertyHighlightsService = inject(PropertyHighlightsService);\n timezoneService = inject(TimeZoneService);\n\n authenticated = this.authService.authenticated;\n readonly property = signal<Property | null>(null);\n loading = signal<boolean>(true);\n\n features: any[] = [];\n allVideos = signal<PropertyVideo[]>([]);\n highlights: any[] = [];\n floorplans: any[] = [];\n epc: any;\n timezone = signal<string>('');\n\n fullname = '';\n username = '';\n user: any;\n inWishList = false;\n readonly breadcrumbs = computed<PropertyMarketBreadcrumbItem[]>(() => [\n { label: 'Properties', link: '/properties' },\n { label: this.property()?.title || 'Property detail' },\n ]);\n readonly heroFacts = computed(() => {\n const property = this.property();\n if (!property) {\n return [];\n }\n\n return [\n { label: 'Bedrooms', value: property.bedrooms || 'Studio' },\n { label: 'Bathrooms', value: property.bathrooms || 0 },\n { label: 'Receptions', value: property.receptions || 0 },\n { label: 'Size', value: property.size ? `${property.size} sq ft` : 'TBC' },\n ];\n });\n readonly addressLine = computed(() => {\n const location = this.property()?.location;\n if (!location) {\n return '';\n }\n\n return [location.flatNumber, location.streetNumber, location.street, location.town, location.postCode]\n .filter(Boolean)\n .join(', ');\n });\n readonly marketLabel = computed(() => {\n const market = this.property()?.market?.toString()?.toUpperCase();\n return market === 'SALE' ? 'For sale' : 'To rent';\n });\n readonly descriptionPreview = computed(() => {\n const description = this.property()?.description ?? '';\n const plainText = description.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n if (!plainText) {\n return 'A guided property journey with pricing, highlights, and next steps in one place.';\n }\n return plainText.length > 180 ? `${plainText.slice(0, 177).trim()}...` : plainText;\n });\n readonly contentSections = computed(() => this.property()?.sections ?? []);\n readonly mediaCount = computed(() => this.property()?.media?.length ?? 0);\n\n videos = computed(() => {\n const v = this.allVideos();\n if (!v) return [];\n const tz = this.timezone();\n const provider = tz === 'Asia/Shanghai' ? PropertyVideoProvider.COS : PropertyVideoProvider.YOUTUBE;\n return v.filter((v) => v.provider === provider);\n });\n constructor() {\n super();\n effect(() => {\n if (this.authenticated()) {\n this.wishListCheck();\n }\n });\n }\n ngOnInit(): void {\n this.getProperty();\n this.getVideos();\n this.getFeatures();\n this.getHighlights();\n this.getFloorplans();\n this.getEpc();\n const timezone = this.timezoneService.getBrowserTimeZone() ?? '';\n this.timezone.set(timezone);\n }\n getProperty() {\n this.loading.set(true);\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n const p = res.data as Property | null;\n this.property.set(p);\n\n if (p?.agentId) {\n this.findUserBaseInfo(p.agentId);\n }\n this.titleService.setTitle(`${p?.title}`);\n this.loading.set(false);\n },\n error: () => {\n this.loading.set(false);\n },\n });\n }\n private getVideos() {\n this.propertyService.getVideos(this.id).subscribe({\n next: (res: any) => {\n this.allVideos.set(res.data);\n },\n });\n }\n getFeatures() {\n this.propertyService.getFeatures(this.id).subscribe({\n next: (res: any) => {\n this.features = res.data || [];\n },\n });\n }\n getHighlights() {\n this.propertyHighlightsService.getHighlights(this.id).subscribe({\n next: (res: any) => {\n this.highlights = res.data || [];\n },\n });\n }\n getFloorplans() {\n this.floorplanService.listFloorplans(this.id).subscribe({\n next: (res: any) => {\n this.floorplans = res.data || [];\n },\n });\n }\n getEpc() {\n this.propertyService.getEpc(this.id).subscribe({\n next: (res: any) => {\n this.epc = res.data;\n },\n });\n }\n\n findUserBaseInfo(userId: string) {\n this.authUserService.getPublicUserInfo(userId).subscribe({\n next: (res) => {\n this.fullname = res.name;\n this.username = res.username;\n this.user = res;\n },\n });\n }\n private wishListCheck() {\n this.propertyService.wishListCheck(this.id).subscribe({\n next: (res: any) => {\n this.inWishList = res.data;\n },\n });\n }\n onWish(e: any) {\n if (this.authenticated()) {\n if (this.inWishList) {\n this.removeFromWishlist();\n } else {\n this.addToWishlist();\n }\n } else {\n this.snackBarService.open('Please sign in');\n }\n }\n onRequestViewing(e: any) {\n this.router.navigate(['viewing/application'], {\n relativeTo: this.route,\n });\n }\n private removeFromWishlist() {\n this.propertyService.removeFromWishlist(this.id).subscribe({\n next: (res) => {\n this.inWishList = false;\n this.snackBarService.open('Removed');\n },\n });\n }\n private addToWishlist() {\n this.propertyService.addToWishlist(this.id).subscribe({\n next: (res) => {\n this.inWishList = true;\n this.snackBarService.open('Added');\n },\n });\n }\n onOffer(e: any) {\n if (this.authenticated()) {\n this.router.navigate(['offer'], {\n relativeTo: this.route,\n });\n } else {\n this.snackBarService.open('Please sign in');\n }\n }\n\n overviewLine(property: Property) {\n const type = property.type?.toString();\n const market = property.market?.toString().toLowerCase();\n if (type && type !== 'NOT_SPECIFIED') {\n return `${property.size} sq ft · ${property.bedrooms} beds · ${property.bathrooms} bathrooms · ${type.toLowerCase()} ${market}`;\n }\n return `${property.size} sq ft · ${property.bedrooms} beds · ${property.bathrooms} bathrooms · ${market}`;\n }\n\n hasAgentPhone() {\n return Boolean(this.user?.phone);\n }\n}\n","<div class=\"property-market-detail\">\n @if (loading()) {\n <div class=\"property-market-detail__hero property-market-detail__hero--loading\">\n <rolatech-property-info-skeleton class=\"property-market-detail__hero-copy\"></rolatech-property-info-skeleton>\n <rolatech-property-agent-skeleton class=\"property-market-detail__hero-side\"></rolatech-property-agent-skeleton>\n </div>\n\n <rolatech-property-media-skeleton></rolatech-property-media-skeleton>\n\n <div class=\"property-market-detail__content\">\n <rolatech-property-info-skeleton class=\"property-market-detail__main\"></rolatech-property-info-skeleton>\n <rolatech-property-agent-skeleton class=\"property-market-detail__side\"></rolatech-property-agent-skeleton>\n </div>\n } @else {\n @if (property(); as property) {\n <section class=\"property-market-detail__hero\">\n <div class=\"property-market-detail__hero-copy\">\n <rolatech-property-market-breadcrumb [items]=\"breadcrumbs()\"></rolatech-property-market-breadcrumb>\n\n <span class=\"property-market-detail__eyebrow\">{{ marketLabel() }}</span>\n <h1 class=\"property-market-detail__title\">{{ property.title }}</h1>\n\n @if (addressLine()) {\n <p class=\"property-market-detail__address\">{{ addressLine() }}</p>\n }\n\n <p class=\"property-market-detail__intro\">{{ descriptionPreview() }}</p>\n\n <div class=\"property-market-detail__fact-grid\">\n @for (fact of heroFacts(); track fact.label) {\n <div class=\"property-market-detail__fact\">\n <span class=\"property-market-detail__fact-value\">{{ fact.value }}</span>\n <span class=\"property-market-detail__fact-label\">{{ fact.label }}</span>\n </div>\n }\n </div>\n\n <div class=\"property-market-detail__hero-actions\">\n <button mat-flat-button type=\"button\" (click)=\"onRequestViewing(property)\" i18n>Request viewing</button>\n <button mat-stroked-button type=\"button\" (click)=\"onOffer(property)\" i18n>Make an offer</button>\n <a mat-stroked-button [routerLink]=\"['..', 'viewings']\" i18n>My viewings</a>\n <a mat-stroked-button [routerLink]=\"['..', 'offers']\" i18n>My offers</a>\n </div>\n </div>\n\n <div class=\"property-market-detail__hero-side\">\n <div class=\"property-market-detail__summary-card\">\n <span class=\"property-market-detail__summary-label\" i18n>Guide price</span>\n <span class=\"property-market-detail__summary-value\">{{ property.price | price }}</span>\n <span class=\"property-market-detail__summary-note\" i18n>\n Transparent pricing, agent contact, and next steps in one buyer-friendly view.\n </span>\n </div>\n\n <div class=\"property-market-detail__summary-strip\">\n <div>\n <span class=\"property-market-detail__summary-label\" i18n>Availability</span>\n <span class=\"property-market-detail__summary-inline\">{{ property.availableDate | date: 'mediumDate' }}</span>\n </div>\n <div>\n <span class=\"property-market-detail__summary-label\" i18n>Media</span>\n <span class=\"property-market-detail__summary-inline\">{{ mediaCount() }} assets</span>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"property-market-detail__media\">\n <rolatech-property-media [media]=\"property.media\"></rolatech-property-media>\n </section>\n\n <div class=\"property-market-detail__content\">\n <main class=\"property-market-detail__main\">\n <section class=\"property-market-detail__panel\">\n <div class=\"property-market-detail__panel-head\">\n <div>\n <span class=\"property-market-detail__panel-eyebrow\" i18n>Overview</span>\n <h2 class=\"property-market-detail__panel-title\" i18n>Why this property stands out</h2>\n </div>\n\n <button mat-stroked-button type=\"button\" (click)=\"onWish(property)\">\n {{ inWishList ? 'Saved' : 'Save property' }}\n </button>\n </div>\n\n <p class=\"property-market-detail__overview-line\">{{ overviewLine(property) }}</p>\n <div class=\"property-market-detail__description\" [innerHTML]=\"property.description\"></div>\n </section>\n\n @if (features.length > 0) {\n <section class=\"property-market-detail__panel\">\n <rolatech-property-features [features]=\"features\"></rolatech-property-features>\n </section>\n }\n\n @if (highlights.length > 0) {\n <section class=\"property-market-detail__panel\">\n <rolatech-property-highlights [highlights]=\"highlights\"></rolatech-property-highlights>\n </section>\n }\n\n @if (floorplans.length > 0) {\n <section class=\"property-market-detail__panel\">\n <rolatech-property-floorplan [floorplans]=\"floorplans\"></rolatech-property-floorplan>\n </section>\n }\n\n @if (property.location) {\n <section class=\"property-market-detail__panel\">\n <rolatech-property-location [location]=\"property.location\"></rolatech-property-location>\n </section>\n }\n\n @if (videos() && videos().length > 0) {\n <section class=\"property-market-detail__stack\">\n @for (item of videos(); track $index) {\n <div class=\"property-market-detail__panel\">\n <rolatech-property-video [video]=\"item\"></rolatech-property-video>\n </div>\n }\n </section>\n }\n\n @if (epc && epc.currentScore) {\n <section class=\"property-market-detail__panel\">\n <rolatech-property-epc [epc]=\"epc\"></rolatech-property-epc>\n </section>\n }\n\n @if (contentSections().length > 0) {\n <section class=\"property-market-detail__panel\">\n <div class=\"property-market-detail__panel-head property-market-detail__panel-head--compact\">\n <div>\n <span class=\"property-market-detail__panel-eyebrow\" i18n>Walkthrough</span>\n <h2 class=\"property-market-detail__panel-title\" i18n>Explore the space in detail</h2>\n </div>\n </div>\n\n <div class=\"property-market-detail__stack\">\n @for (section of contentSections(); track $index) {\n <rolatech-property-section [section]=\"section\"></rolatech-property-section>\n }\n </div>\n </section>\n }\n </main>\n\n <aside class=\"property-market-detail__side\">\n <div class=\"property-market-detail__sticky\">\n <section class=\"property-market-detail__panel property-market-detail__panel--subtle\">\n <rolatech-property-agent-renderer\n [name]=\"fullname\"\n [avatar]=\"user?.avatar\"\n [username]=\"username\"\n subtitle=\"PrimeCase Agent\"\n ></rolatech-property-agent-renderer>\n </section>\n\n <section class=\"property-market-detail__panel property-market-detail__panel--subtle\">\n <rolatech-property-pricing [property]=\"property\"></rolatech-property-pricing>\n </section>\n\n <rolatech-letting-actions\n [letting]=\"property\"\n (offer)=\"onOffer($event)\"\n (deposit)=\"onOffer($event)\"\n (requestViewing)=\"onRequestViewing($event)\"\n >\n @if (hasAgentPhone()) {\n <rolatech-letting-action-contact [phone]=\"user.phone\"></rolatech-letting-action-contact>\n }\n </rolatech-letting-actions>\n\n <section class=\"property-market-detail__panel property-market-detail__journey\">\n <span class=\"property-market-detail__panel-eyebrow\" i18n>Buyer dashboard</span>\n <h2 class=\"property-market-detail__panel-title\" i18n>Stay close to every update</h2>\n <p class=\"property-market-detail__journey-copy\" i18n>\n Review confirmed viewing times, watch counter-offers land, and come back here whenever you need the full\n property context.\n </p>\n\n <div class=\"property-market-detail__journey-actions\">\n <a mat-stroked-button [routerLink]=\"['..', 'saved']\" i18n>Open saved homes</a>\n <a mat-stroked-button [routerLink]=\"['..', 'viewings']\" i18n>Open viewings</a>\n <a mat-stroked-button [routerLink]=\"['..', 'offers']\" i18n>Open offers</a>\n </div>\n </section>\n </div>\n </aside>\n </div>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport {\n PropertyMarketBreadcrumbComponent,\n PropertyMarketBreadcrumbItem,\n} from '../../../components/property-market-breadcrumb/property-market-breadcrumb';\nimport { PropertyViewingItemComponent } from '../../../components/property-viewing-item/property-viewing-item.component';\nimport { PropertyViewing, propertyViewingStatusCode } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\nimport {\n PropertyWorkspaceShell,\n PropertyWorkspaceStat,\n} from '../../../components/property-workspace-shell/property-workspace-shell';\n\n@Component({\n selector: 'rolatech-property-market-viewing-index',\n imports: [\n CommonModule,\n RouterModule,\n PropertyMarketBreadcrumbComponent,\n PropertyViewingItemComponent,\n MatPaginatorModule,\n PropertyWorkspaceShell,\n ],\n templateUrl: './property-market-viewing-index.html',\n styleUrl: './property-market-viewing-index.scss',\n})\nexport class PropertyMarketViewingIndex extends BaseComponent implements OnInit {\n readonly propertyService = inject(PropertyService);\n readonly breadcrumbs: PropertyMarketBreadcrumbItem[] = [\n { label: 'Properties', link: '/properties' },\n { label: 'Viewing requests' },\n ];\n select = 0;\n links = [\n { name: 'All', status: '' },\n { name: 'Pending', status: 'pending' },\n { name: 'Approved', status: 'approved' },\n { name: 'Completed', status: 'completed' },\n { name: 'Cancelled', status: 'cancelled' },\n ];\n loading = false;\n readonly viewings = signal<PropertyViewing[]>([]);\n meta: any;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n readonly pageIndex = signal(0);\n\n readonly stats = computed<PropertyWorkspaceStat[]>(() => {\n const viewings = this.viewings();\n return [\n { label: 'Requests', value: this.length || viewings.length, hint: 'Visits requested while you are acting as a buyer' },\n {\n label: 'Pending',\n value: viewings.filter((item) => propertyViewingStatusCode(item.status) === 'PENDING').length,\n hint: 'Waiting for listing-side review',\n },\n {\n label: 'Approved',\n value: viewings.filter((item) => propertyViewingStatusCode(item.status) === 'APPROVED').length,\n hint: 'Confirmed appointments in your buyer workspace',\n },\n {\n label: 'Completed',\n value: viewings.filter((item) => propertyViewingStatusCode(item.status) === 'COMPLETED').length,\n hint: 'Finished visits linked to saved market activity',\n },\n ];\n });\n\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((params) => {\n const page = params.get('page') ? Number(params.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = params.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 } else {\n this.select = 0;\n }\n\n return {\n page,\n filter,\n limit: params.get('limit') ? Number(params.get('limit')) : 15,\n sort: params.get('sort') || undefined,\n };\n }),\n map((value) => JSON.stringify(value)),\n distinctUntilChanged(),\n map((value) => JSON.parse(value)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.propertyService.findViewingsByUser(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\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 this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n\n onPage(event: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: event.pageIndex + 1, limit: event.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n}\n","<div class=\"property-market-page\">\n <rolatech-property-market-breadcrumb [items]=\"breadcrumbs\"></rolatech-property-market-breadcrumb>\n\n <rolatech-property-workspace-shell\n eyebrow=\"workspace\"\n title=\"viewing requests\"\n description=\"Track every market-side viewing request you made as an agent buyer, keep approval changes visible, and jump back into the property journey when needed.\"\n [stats]=\"stats()\"\n >\n <nav workspace-filters class=\"property-market-viewing-index__status-nav\" aria-label=\"viewing status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"property-market-viewing-index__status-link\"\n [class.property-market-viewing-index__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n\n <section class=\"property-market-viewing-index__list\">\n @if (loading) { @for (row of [0, 1, 2, 3]; track row) {\n <div class=\"property-market-viewing-index__placeholder\"></div>\n } } @else if (viewings().length) { @for (item of viewings(); track item.id) {\n <rolatech-property-viewing-item\n class=\"cursor-pointer\"\n [routerLink]=\"['./', item.id]\"\n [viewing]=\"item\"\n ></rolatech-property-viewing-item>\n } } @else {\n <div class=\"property-market-viewing-index__empty\">\n <h3>No buyer viewings yet</h3>\n <p>Your market-side viewing requests will appear here once you start booking visits as a buyer.</p>\n </div>\n }\n\n <mat-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 </section>\n </rolatech-property-workspace-shell>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { PropertyMarketBreadcrumbComponent, PropertyMarketBreadcrumbItem } from '../../../components/property-market-breadcrumb/property-market-breadcrumb';\nimport { PropertyViewingDetailComponent } from '../../property/property-viewing-detail/property-viewing-detail.component';\n\n@Component({\n selector: 'rolatech-property-market-viewing-detail',\n imports: [CommonModule, PropertyMarketBreadcrumbComponent, PropertyViewingDetailComponent],\n templateUrl: './property-market-viewing-detail.html',\n styleUrl: './property-market-viewing-detail.scss',\n})\nexport class PropertyMarketViewingDetail {\n readonly breadcrumbs: PropertyMarketBreadcrumbItem[] = [\n { label: 'Properties', link: '/properties' },\n { label: 'Viewing requests', link: '/properties/viewings' },\n { label: 'Viewing detail' },\n ];\n}\n","<div class=\"property-market-page\">\n <rolatech-property-market-breadcrumb [items]=\"breadcrumbs\"></rolatech-property-market-breadcrumb>\n <rolatech-property-viewing-detail></rolatech-property-viewing-detail>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { PropertyOfferService } from '@rolatech/angular-services';\nimport {\n PropertyMarketBreadcrumbComponent,\n PropertyMarketBreadcrumbItem,\n} from '../../../components/property-market-breadcrumb/property-market-breadcrumb';\nimport { PropertyOfferItemComponent } from '../../../components/property-offer-item/property-offer-item.component';\nimport { PropertyOffer, PropertyOfferStatus } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\nimport { OfferItemSkeleton } from '../../../components/offer-item-skeleton/offer-item-skeleton';\nimport {\n PropertyWorkspaceShell,\n PropertyWorkspaceStat,\n} from '../../../components/property-workspace-shell/property-workspace-shell';\n\n@Component({\n selector: 'rolatech-property-market-offer-index',\n imports: [\n CommonModule,\n RouterModule,\n PropertyMarketBreadcrumbComponent,\n PropertyOfferItemComponent,\n MatPaginatorModule,\n OfferItemSkeleton,\n PropertyWorkspaceShell,\n ],\n templateUrl: './property-market-offer-index.html',\n styleUrl: './property-market-offer-index.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyMarketOfferIndex extends BaseComponent implements OnInit {\n readonly propertyOfferService = inject(PropertyOfferService);\n readonly breadcrumbs: PropertyMarketBreadcrumbItem[] = [{ label: 'Properties', link: '/properties' }, { label: 'Offers' }];\n select = 0;\n links = [\n { name: 'All', status: '' },\n { name: 'Submitted', status: 'submitted' },\n { name: 'Accepted', status: 'accepted' },\n { name: 'Rejected', status: 'rejected' },\n { name: 'Cancelled', status: 'cancelled' },\n ];\n loading = false;\n readonly offers = signal<PropertyOffer[]>([]);\n meta: any;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n readonly pageIndex = signal(0);\n\n readonly stats = computed<PropertyWorkspaceStat[]>(() => {\n const offers = this.offers();\n return [\n { label: 'Offers', value: this.length || offers.length, hint: 'Offers you submitted while acting as a buyer agent' },\n {\n label: 'Submitted',\n value: offers.filter((item) => item.status === PropertyOfferStatus.SUBMITTED).length,\n hint: 'Waiting for listing-side review or response',\n },\n {\n label: 'Accepted',\n value: offers.filter((item) => item.status === PropertyOfferStatus.ACCEPTED).length,\n hint: 'Offers moved forward in the negotiation flow',\n },\n {\n label: 'Cancelled',\n value: offers.filter((item) => item.status === PropertyOfferStatus.CANCELLED).length,\n hint: 'Closed or withdrawn buyer negotiations',\n },\n ];\n });\n\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((params) => {\n const page = params.get('page') ? Number(params.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = params.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 } else {\n this.select = 0;\n }\n\n return {\n page,\n filter,\n limit: params.get('limit') ? Number(params.get('limit')) : 15,\n sort: params.get('sort') || undefined,\n };\n }),\n map((value) => JSON.stringify(value)),\n distinctUntilChanged(),\n map((value) => JSON.parse(value)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.propertyOfferService.findOffersByUser(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.offers.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.offers.set([]);\n this.length = 0;\n },\n });\n\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n\n onPage(event: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: event.pageIndex + 1, limit: event.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n}\n","<div class=\"property-market-page\">\n <rolatech-property-market-breadcrumb [items]=\"breadcrumbs\"></rolatech-property-market-breadcrumb>\n\n <rolatech-property-workspace-shell\n eyebrow=\"Buyer workspace\"\n title=\"offers\"\n description=\"Follow every market-side offer you submitted as an agent buyer, keep counter-offers readable, and move into each negotiation without dropping the buyer context.\"\n [stats]=\"stats()\"\n >\n <nav workspace-filters class=\"property-market-offer-index__status-nav\" aria-label=\"Buyer offer status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"property-market-offer-index__status-link\"\n [class.property-market-offer-index__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n\n <section class=\"property-market-offer-index__list\">\n @if (loading) { @for (row of [0, 1, 2, 3]; track row) {\n <rolatech-offer-item-skeleton></rolatech-offer-item-skeleton>\n } } @else if (offers().length > 0) { @for (item of offers(); track item.id) {\n <rolatech-property-offer-item\n class=\"cursor-pointer\"\n [routerLink]=\"['./', item.id]\"\n [offer]=\"item\"\n ></rolatech-property-offer-item>\n } } @else {\n <div class=\"property-market-offer-index__empty\">\n <h3>No buyer offers yet</h3>\n <p>Your market-side offers and any counter-offers will appear here once you start negotiating as a buyer.</p>\n </div>\n }\n\n <mat-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 </section>\n </rolatech-property-workspace-shell>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { PropertyMarketBreadcrumbComponent, PropertyMarketBreadcrumbItem } from '../../../components/property-market-breadcrumb/property-market-breadcrumb';\nimport { PropertyOfferDetailComponent } from '../../property/property-offer-detail/property-offer-detail.component';\n\n@Component({\n selector: 'rolatech-property-market-offer-detail',\n imports: [CommonModule, PropertyMarketBreadcrumbComponent, PropertyOfferDetailComponent],\n templateUrl: './property-market-offer-detail.html',\n styleUrl: './property-market-offer-detail.scss',\n})\nexport class PropertyMarketOfferDetail {\n readonly breadcrumbs: PropertyMarketBreadcrumbItem[] = [\n { label: 'Properties', link: '/properties' },\n { label: 'Offers', link: '/properties/offers' },\n { label: 'Offer detail' },\n ];\n}\n","<div class=\"property-market-page\">\n <rolatech-property-market-breadcrumb [items]=\"breadcrumbs\"></rolatech-property-market-breadcrumb>\n <rolatech-property-offer-detail\n [mode]=\"'agent'\"\n [market]=\"'tenant'\"\n eyebrow=\"Market workflow\"\n title=\"Offer detail\"\n description=\"Track buyer-side negotiations, compare counter-offers, and keep every response in the same market workspace.\"\n backLabel=\"Back to buyer offers\"\n ></rolatech-property-offer-detail>\n</div>\n","import { Component, computed, effect, inject, OnInit, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { ThumbnailComponent, BaseComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { Property, PropertyApplicantType, PropertyViewingRequest, PropertyViewerCategory } from '../../../interfaces';\nimport { PropertyViewingTimeComponent } from '../../../components/property-viewing-time/property-viewing-time.component';\nimport { PropertyPricingComponent } from '../../../components';\nimport {\n PropertyMarketBreadcrumbComponent,\n PropertyMarketBreadcrumbItem,\n} from '../../../components/property-market-breadcrumb/property-market-breadcrumb';\nimport { finalize } from 'rxjs';\n@Component({\n selector: 'rolatech-letting-viewing-request',\n imports: [\n CommonModule,\n MatFormFieldModule,\n FormsModule,\n MatInputModule,\n TextFieldModule,\n MatButtonModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatProgressSpinner,\n ThumbnailComponent,\n PropertyViewingTimeComponent,\n PropertyPricingComponent,\n PropertyMarketBreadcrumbComponent,\n MatSelectModule,\n ],\n templateUrl: './property-market-viewing-request.html',\n styleUrl: './property-market-viewing-request.scss',\n})\nexport class PropertyMarketViewingRequest extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n propertyService = inject(PropertyService);\n readonly property = signal<Property | null>(null);\n sending = false;\n readonly minMoveInDate = new Date();\n moveInDate: Date | null = null;\n viewing: PropertyViewingRequest = {\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n jobTitle: '',\n viewerCategory: PropertyViewerCategory.AGENT,\n proposedSlots: [\n { date: '', time: '' },\n { date: '', time: '' },\n { date: '', time: '' },\n ],\n };\n readonly applicantTypes = PropertyApplicantType;\n\n readonly breadcrumbs = computed<PropertyMarketBreadcrumbItem[]>(() => [\n { label: 'Properties', link: '/properties' },\n { label: this.property()?.title || 'Property detail', link: ['/properties', this.id] },\n { label: 'Request viewing' },\n ]);\n\n readonly heroFacts = computed(() => {\n const property = this.property();\n if (!property) {\n return [];\n }\n\n return [\n { label: 'Bedrooms', value: property.bedrooms || 'Studio' },\n { label: 'Bathrooms', value: property.bathrooms || 0 },\n { label: 'Receptions', value: property.receptions || 0 },\n { label: 'Available', value: property.availableDate },\n ];\n });\n\n constructor() {\n super();\n\n effect(() => {\n const user = this.authService.user();\n if (!user) {\n return;\n }\n\n this.viewing.firstName = this.viewing.firstName || user.firstName || user.name?.split(' ')[0] || '';\n this.viewing.lastName = this.viewing.lastName || user.lastName || user.name?.split(' ').slice(1).join(' ') || '';\n this.viewing.email = this.viewing.email || user.email || '';\n this.viewing.phone = this.viewing.phone || user.phone || '';\n this.viewing.viewerCategory = PropertyViewerCategory.AGENT;\n });\n }\n\n ngOnInit(): void {\n this.getProperty();\n }\n getProperty() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property.set(res.data);\n this.titleService.setTitle(`${res.data.title}`);\n },\n });\n }\n\n sendRequest() {\n this.sending = true;\n this.viewing.viewerCategory = PropertyViewerCategory.AGENT;\n this.propertyService\n .requestViewing(this.id, this.viewing)\n .pipe(finalize(() => (this.sending = false)))\n .subscribe({\n next: (res) => {\n this.snackBarService.open('Request viewing successfully');\n this.router.navigate(['/properties/viewings', res.data.id]);\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n\n private formatDateInput(date: Date) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n setMoveInDate(date: Date | null) {\n this.moveInDate = date;\n this.viewing.moveInDate = date ? this.formatDateInput(date) : undefined;\n }\n}\n","<div class=\"property-market-viewing-request\">\n @if (property(); as property) {\n <section class=\"property-market-viewing-request__hero\">\n <rolatech-property-market-breadcrumb [items]=\"breadcrumbs()\"></rolatech-property-market-breadcrumb>\n\n <div class=\"property-market-viewing-request__hero-copy\">\n <span class=\"property-market-viewing-request__eyebrow\" i18n>Market workflow</span>\n <h1 class=\"property-market-viewing-request__title\" i18n>Request a viewing for {{ property.title }}</h1>\n <p class=\"property-market-viewing-request__description\" i18n>\n This request is submitted as an agent enquiry. Share your buyer profile, preferred move-in window, and three viewing\n options so the listing team can confirm the best slot quickly.\n </p>\n </div>\n\n <div class=\"property-market-viewing-request__fact-grid\">\n @for (fact of heroFacts(); track fact.label) {\n <div class=\"property-market-viewing-request__fact\">\n <span class=\"property-market-viewing-request__fact-value\">\n @if (fact.label === 'Available') { {{ fact.value | date: 'mediumDate' }} } @else { {{ fact.value }} }\n </span>\n <span class=\"property-market-viewing-request__fact-label\">{{ fact.label }}</span>\n </div>\n }\n </div>\n </section>\n\n <div class=\"property-market-viewing-request__content\">\n <main class=\"property-market-viewing-request__main\">\n <section class=\"property-market-viewing-request__panel\">\n <div class=\"property-market-viewing-request__panel-head\">\n <div>\n <span class=\"property-market-viewing-request__panel-eyebrow\" i18n>Viewing brief</span>\n <h2 class=\"property-market-viewing-request__panel-title\" i18n>Tell the listing team about this buyer</h2>\n </div>\n </div>\n\n <div class=\"property-market-viewing-request__grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>First name</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"viewing.firstName\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Last name</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"viewing.lastName\" />\n </mat-form-field>\n </div>\n\n <div class=\"property-market-viewing-request__grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Email</mat-label>\n <input matInput type=\"email\" [(ngModel)]=\"viewing.email\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Phone</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"viewing.phone\" />\n </mat-form-field>\n </div>\n\n <div class=\"property-market-viewing-request__grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Applicant type</mat-label>\n <mat-select [(ngModel)]=\"viewing.applicantType\">\n @for (applicantType of applicantTypes | keyvalue; track applicantType.key) {\n <mat-option [value]=\"applicantType.key\"> {{ applicantType.value }} </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Job title</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"viewing.jobTitle\" />\n </mat-form-field>\n </div>\n\n <div class=\"property-market-viewing-request__grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Annual income</mat-label>\n <span matTextPrefix>£ </span>\n <input matInput type=\"number\" min=\"0\" [(ngModel)]=\"viewing.annualIncome\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Budget - per month</mat-label>\n <span matTextPrefix>£ </span>\n <input matInput type=\"number\" min=\"0\" [(ngModel)]=\"viewing.monthlyBudget\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Move in date</mat-label>\n <input\n matInput\n [matDatepicker]=\"moveInDatePicker\"\n [min]=\"minMoveInDate\"\n [ngModel]=\"moveInDate\"\n (dateChange)=\"setMoveInDate($event.value)\"\n (focus)=\"moveInDatePicker.open()\"\n (click)=\"moveInDatePicker.open()\"\n readonly\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"moveInDatePicker\"></mat-datepicker-toggle>\n <mat-datepicker #moveInDatePicker></mat-datepicker>\n </mat-form-field>\n </div>\n\n <div class=\"property-market-viewing-request__slot-section\">\n <div class=\"property-market-viewing-request__slot-head\">\n <h3 i18n>Preferred viewing slots</h3>\n <p i18n>Choose three options across at least two different days so the seller can confirm quickly.</p>\n </div>\n\n <div class=\"property-market-viewing-request__slots\">\n @for (item of viewing.proposedSlots; track $index) {\n <div class=\"property-market-viewing-request__slot-card\">\n <div class=\"property-market-viewing-request__slot-label\">Option {{ $index + 1 }}</div>\n <rolatech-property-viewing-time [proposedTime]=\"item\"></rolatech-property-viewing-time>\n </div>\n }\n </div>\n </div>\n\n <button mat-flat-button class=\"property-market-viewing-request__submit\" (click)=\"sendRequest()\" [disabled]=\"sending\">\n <span class=\"property-market-viewing-request__submit-content\">\n @if (sending) {\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\"></mat-progress-spinner>\n }\n <span i18n>{{ sending ? 'Sending request...' : 'Send request' }}</span>\n </span>\n </button>\n </section>\n </main>\n\n <aside class=\"property-market-viewing-request__side\">\n <section class=\"property-market-viewing-request__panel property-market-viewing-request__panel--summary\">\n <div class=\"property-market-viewing-request__summary-head\">\n <span class=\"property-market-viewing-request__panel-eyebrow\" i18n>Property snapshot</span>\n <h2 class=\"property-market-viewing-request__panel-title\">{{ property.title }}</h2>\n </div>\n\n <rolatech-thumbnail [src]=\"property.media[0]?.url ?? ''\" size=\"small\"></rolatech-thumbnail>\n <rolatech-property-pricing [property]=\"property\"></rolatech-property-pricing>\n </section>\n\n <section class=\"property-market-viewing-request__panel property-market-viewing-request__panel--summary\">\n <span class=\"property-market-viewing-request__panel-eyebrow\" i18n>What happens next</span>\n <h2 class=\"property-market-viewing-request__panel-title\" i18n>Updates appear in your viewings inbox</h2>\n <p class=\"property-market-viewing-request__description\" i18n>\n Once admin confirms a slot, you will see the approved time in the viewing detail page and can jump back to this\n property from the breadcrumb trail.\n </p>\n </section>\n </aside>\n </div>\n } @else {\n <div class=\"property-market-viewing-request__loading\" i18n>Loading property details...</div>\n }\n</div>\n","import { Component, computed, effect, inject, OnInit, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { ThumbnailComponent, BaseComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { Property } from '../../../interfaces';\nimport { PropertyPricingComponent } from '../../../components';\nimport {\n PropertyMarketBreadcrumbComponent,\n PropertyMarketBreadcrumbItem,\n} from '../../../components/property-market-breadcrumb/property-market-breadcrumb';\nimport { OfferFormFacade } from '../../../offer-data-access/offer-form.facade';\nimport { PropertyOfferRentalForm } from '../../../components/property-offer-rental-form/property-offer-rental-form';\nimport { PropertyOfferSaleForm } from '../../../components/property-offer-sale-form/property-offer-sale-form';\n\n@Component({\n selector: 'rolatech-property-market-offer-request',\n imports: [\n CommonModule,\n MatButtonModule,\n ThumbnailComponent,\n MatProgressSpinnerModule,\n PropertyPricingComponent,\n PropertyMarketBreadcrumbComponent,\n PropertyOfferRentalForm,\n PropertyOfferSaleForm,\n ],\n templateUrl: './property-market-offer-request.html',\n styleUrl: './property-market-offer-request.scss',\n providers: [OfferFormFacade],\n})\nexport class PropertyMarketOfferRequest extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n propertyService = inject(PropertyService);\n readonly facade = inject(OfferFormFacade);\n readonly property = signal<Property | null>(null);\n readonly breadcrumbs = computed<PropertyMarketBreadcrumbItem[]>(() => [\n { label: 'Properties', link: '/properties' },\n { label: this.property()?.title || 'Property detail', link: ['/properties', this.id] },\n { label: 'Make an offer' },\n ]);\n readonly offerTypeLabel = computed(() => (this.facade.offerType() === 'RENTAL' ? 'rental offer' : 'sale offer'));\n readonly heroFacts = computed(() => {\n const property = this.property();\n if (!property) {\n return [];\n }\n\n return [\n { label: 'Bedrooms', value: property.bedrooms || 'Studio' },\n { label: 'Bathrooms', value: property.bathrooms || 0 },\n { label: 'Receptions', value: property.receptions || 0 },\n { label: 'Available', value: property.availableDate },\n ];\n });\n\n constructor() {\n super();\n\n effect(() => {\n this.facade.setOfferType(this.resolveOfferType());\n this.facade.setPropertyId(this.id);\n\n const user = this.authService.user();\n if (user) {\n this.prefillRequester(user);\n }\n\n const property = this.property();\n if (property) {\n this.titleService.setTitle(property.title);\n }\n });\n }\n\n ngOnInit(): void {\n this.getProperty();\n }\n getProperty() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property.set(res.data);\n },\n });\n }\n\n async submit() {\n const res = await this.facade.submit();\n if (!res) return;\n this.snackBarService.open('Offer submitted');\n await this.router.navigate(['/properties/offers', res.id]);\n }\n\n private resolveOfferType(): 'RENTAL' | 'SALE' {\n const market = this.property()?.market?.toString().toUpperCase();\n return market === 'SALE' ? 'SALE' : 'RENTAL';\n }\n\n private prefillRequester(user: { name?: string; firstName?: string; lastName?: string; email?: string; phone?: string }) {\n const fullName = `${user.firstName ?? ''} ${user.lastName ?? ''}`.trim() || user.name || null;\n const saleGroup = this.facade.saleGroup();\n\n if (!saleGroup.get('buyerName')?.value && fullName) {\n saleGroup.patchValue({ buyerName: fullName }, { emitEvent: false });\n }\n if (!saleGroup.get('email')?.value && user.email) {\n saleGroup.patchValue({ email: user.email }, { emitEvent: false });\n }\n if (!saleGroup.get('phone')?.value && user.phone) {\n saleGroup.patchValue({ phone: user.phone }, { emitEvent: false });\n }\n\n if (this.facade.isRental()) {\n if (this.facade.tenantsArray().length === 0) {\n this.facade.addTenant();\n }\n\n const leadTenant = this.facade.tenantsArray().at(0);\n if (!leadTenant) {\n return;\n }\n\n const patch: Record<string, string> = {};\n\n if (!leadTenant.get('fullName')?.value && fullName) {\n patch['fullName'] = fullName;\n }\n if (!leadTenant.get('email')?.value && user.email) {\n patch['email'] = user.email;\n }\n if (!leadTenant.get('phone')?.value && user.phone) {\n patch['phone'] = user.phone;\n }\n\n if (Object.keys(patch).length > 0) {\n leadTenant.patchValue(patch, { emitEvent: false });\n }\n }\n }\n}\n","<div class=\"property-market-offer-request\">\n @if (property(); as property) {\n <section class=\"property-market-offer-request__hero\">\n <rolatech-property-market-breadcrumb [items]=\"breadcrumbs()\"></rolatech-property-market-breadcrumb>\n\n <div class=\"property-market-offer-request__hero-copy\">\n <span class=\"property-market-offer-request__eyebrow\" i18n>Market workflow</span>\n <h1 class=\"property-market-offer-request__title\">Create {{ offerTypeLabel() }} for {{ property.title }}</h1>\n <p class=\"property-market-offer-request__description\" i18n>\n Share your terms in a buyer-facing flow that matches the property detail experience, then track any review, approval, or\n counter-offer inside your offers inbox.\n </p>\n </div>\n\n <div class=\"property-market-offer-request__fact-grid\">\n @for (fact of heroFacts(); track fact.label) {\n <div class=\"property-market-offer-request__fact\">\n <span class=\"property-market-offer-request__fact-value\">\n @if (fact.label === 'Available') { {{ fact.value | date: 'mediumDate' }} } @else { {{ fact.value }} }\n </span>\n <span class=\"property-market-offer-request__fact-label\">{{ fact.label }}</span>\n </div>\n }\n </div>\n </section>\n\n <div class=\"property-market-offer-request__content\">\n <main class=\"property-market-offer-request__main\">\n <section class=\"property-market-offer-request__panel\">\n <div class=\"property-market-offer-request__panel-head\">\n <div>\n <span class=\"property-market-offer-request__panel-eyebrow\" i18n>Offer terms</span>\n <h2 class=\"property-market-offer-request__panel-title\" i18n>Present a clean, review-ready offer</h2>\n </div>\n </div>\n\n <div class=\"property-market-offer-request__form\">\n @if (facade.isRental()) {\n <rolatech-property-offer-rental-form [agentWorkflow]=\"true\" />\n } @else {\n <rolatech-property-offer-sale-form />\n }\n </div>\n\n <div class=\"property-market-offer-request__actions\">\n <button\n mat-flat-button\n class=\"property-market-offer-request__submit\"\n [disabled]=\"facade.submitting()\"\n (click)=\"submit()\"\n >\n <span class=\"property-market-offer-request__submit-content\">\n @if (facade.submitting()) {\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\"></mat-progress-spinner>\n }\n <span>{{ facade.submitting() ? 'Submitting offer...' : 'Submit offer' }}</span>\n </span>\n </button>\n </div>\n\n @if (facade.submitError()) {\n <p class=\"property-market-offer-request__error\">{{ facade.submitError() }}</p>\n }\n </section>\n </main>\n\n <aside class=\"property-market-offer-request__side\">\n <section class=\"property-market-offer-request__panel property-market-offer-request__panel--summary\">\n <div class=\"property-market-offer-request__summary-head\">\n <span class=\"property-market-offer-request__panel-eyebrow\" i18n>Property snapshot</span>\n <h2 class=\"property-market-offer-request__panel-title\">{{ property.title }}</h2>\n </div>\n\n <rolatech-thumbnail [src]=\"property.media[0]?.url ?? ''\" size=\"small\"></rolatech-thumbnail>\n <rolatech-property-pricing [property]=\"property\"></rolatech-property-pricing>\n </section>\n\n <section class=\"property-market-offer-request__panel property-market-offer-request__panel--summary\">\n <span class=\"property-market-offer-request__panel-eyebrow\" i18n>After submission</span>\n <h2 class=\"property-market-offer-request__panel-title\" i18n>Keep negotiations in one place</h2>\n <p class=\"property-market-offer-request__description\" i18n>\n Admin review, agent confirmation, and counter-offers all flow back into the offer detail page, with breadcrumbs that\n take you straight back to this property when needed.\n </p>\n </section>\n </aside>\n </div>\n } @else {\n <div class=\"property-market-offer-request__loading\" i18n>Loading property details...</div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { RouterLink } from '@angular/router';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyMarketItem } from '../../../components/property-market-item/property-market-item';\nimport { PropertyWorkspaceShell, PropertyWorkspaceStat } from '../../../components/property-workspace-shell/property-workspace-shell';\nimport { Property } from '../../../interfaces';\n\n@Component({\n selector: 'rolatech-property-market-saved-index',\n imports: [CommonModule, FormsModule, RouterLink, MatFormFieldModule, MatInputModule, PropertyWorkspaceShell, PropertyMarketItem],\n templateUrl: './property-market-saved-index.html',\n styleUrl: './property-market-saved-index.scss',\n})\nexport class PropertyMarketSavedIndex implements OnInit {\n private readonly propertyService = inject(PropertyService);\n\n readonly loading = signal(false);\n readonly savedProperties = signal<Property[]>([]);\n searchText = '';\n\n readonly visibleProperties = computed(() => {\n const query = this.searchText.trim().toLowerCase();\n if (!query) {\n return this.savedProperties();\n }\n\n return this.savedProperties().filter((property) =>\n [property.title, property.location?.town, property.location?.street, property.location?.postCode]\n .filter(Boolean)\n .some((value) => value!.toLowerCase().includes(query)),\n );\n });\n\n readonly stats = computed<PropertyWorkspaceStat[]>(() => {\n const items = this.savedProperties();\n return [\n { label: 'Saved homes', value: items.length, hint: 'Shortlisted properties you can revisit quickly' },\n { label: 'To rent', value: items.filter((item) => item.market?.toString().toUpperCase() !== 'SALE').length, hint: 'Rental opportunities in your shortlist' },\n { label: 'For sale', value: items.filter((item) => item.market?.toString().toUpperCase() === 'SALE').length, hint: 'Sale opportunities in your shortlist' },\n { label: 'Visible now', value: this.visibleProperties().length, hint: 'Results after your current search filter' },\n ];\n });\n\n ngOnInit(): void {\n this.loadWishlist();\n }\n\n private loadWishlist(): void {\n this.loading.set(true);\n this.propertyService.findWishlist({}).subscribe({\n next: (res: any) => {\n this.savedProperties.set(res.data ?? []);\n this.loading.set(false);\n },\n error: () => {\n this.savedProperties.set([]);\n this.loading.set(false);\n },\n });\n }\n}\n","<rolatech-property-workspace-shell\n eyebrow=\"Buyer shortlist\"\n title=\"Saved properties\"\n description=\"Keep every shortlisted home in one place, compare opportunities quickly, and jump back into the full detail page when a property moves.\"\n [stats]=\"stats()\"\n>\n <div workspace-filters class=\"property-market-saved-index__filters\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Search saved properties</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"searchText\" placeholder=\"Search by title, town, street, or postcode\" />\n </mat-form-field>\n </div>\n\n <section class=\"property-market-saved-index__list\">\n @if (loading()) {\n @for (item of [0, 1, 2]; track item) {\n <div class=\"property-market-saved-index__placeholder\"></div>\n }\n } @else if (visibleProperties().length > 0) {\n @for (property of visibleProperties(); track property.id) {\n <rolatech-property-market-item class=\"cursor-pointer\" [routerLink]=\"['/properties', property.id]\" [letting]=\"property\" />\n }\n } @else {\n <div class=\"property-market-saved-index__empty\">\n <h3>No saved properties yet</h3>\n <p>Use the save action on any property detail page and your shortlist will appear here.</p>\n <a mat-stroked-button routerLink=\"/properties\">Browse market</a>\n </div>\n }\n </section>\n</rolatech-property-workspace-shell>\n","import { Routes } from '@angular/router';\nimport { PropertyMarketIndex } from './property-market-index/property-market-index';\nimport { PropertyMarketDetail } from './property-market-detail/property-market-detail';\nimport { PropertyMarketViewingIndex } from './property-market-viewing-index/property-market-viewing-index';\nimport { PropertyMarketViewingDetail } from './property-market-viewing-detail/property-market-viewing-detail';\nimport { PropertyMarketOfferIndex } from './property-market-offer-index/property-market-offer-index';\nimport { PropertyMarketOfferDetail } from './property-market-offer-detail/property-market-offer-detail';\nimport { PropertyMarketViewingRequest } from './property-market-viewing-request/property-market-viewing-request';\nimport { PropertyMarketOfferRequest } from './property-market-offer-request/property-market-offer-request';\nimport { PropertyMarketSavedIndex } from './property-market-saved-index/property-market-saved-index';\n\nexport const propertyMarketRoutes: Routes = [\n {\n path: '',\n component: PropertyMarketIndex,\n },\n {\n path: 'invoices',\n loadChildren: () => import('@rolatech/angular-billing').then((m) => m.agentInvoiceRoutes),\n data: {\n invoiceBaseLink: '/properties/invoices',\n invoiceEyebrow: 'Buyer billing',\n invoiceCollectionTitle: 'Property invoices',\n invoiceCollectionDescription: 'Track every invoice created from your property-side actions, including deposits, rent, and move-in charges.',\n },\n },\n {\n path: 'saved',\n component: PropertyMarketSavedIndex,\n },\n {\n path: 'viewings',\n component: PropertyMarketViewingIndex,\n },\n {\n path: 'viewings/:id',\n component: PropertyMarketViewingDetail,\n },\n {\n path: 'offers',\n component: PropertyMarketOfferIndex,\n },\n {\n path: 'offers/:id',\n component: PropertyMarketOfferDetail,\n },\n {\n path: ':id/viewing/application',\n component: PropertyMarketViewingRequest,\n },\n {\n path: ':id/offer',\n component: PropertyMarketOfferRequest,\n },\n {\n path: ':id',\n component: PropertyMarketDetail,\n },\n];\n","import { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpinnerComponent } from '@rolatech/angular-components';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { TenantItem } from \"../../../components/tenant-item/tenant-item\";\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyWorkspaceShell, PropertyWorkspaceStat } from '../../../components/property-workspace-shell/property-workspace-shell';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'rolatech-tenant-manage-index',\n imports: [\n CommonModule,\n SpinnerComponent,\n MatButtonModule,\n MatIcon,\n RouterLink,\n TenantItem,\n PropertyWorkspaceShell,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n ],\n templateUrl: './tenant-manage-index.html',\n styleUrl: './tenant-manage-index.scss',\n})\nexport class TenantManageIndex implements OnInit {\n private propertyService = inject(PropertyService);\n loading = false;\n tenants = signal<any[]>([]);\n searchText = '';\n\n readonly visibleTenants = computed(() => {\n const query = this.searchText.trim().toLowerCase();\n if (!query) {\n return this.tenants();\n }\n\n return this.tenants().filter((tenant) =>\n [tenant.firstName, tenant.lastName, tenant.email, tenant.phone].some((value: string | undefined) =>\n value?.toLowerCase().includes(query),\n ),\n );\n });\n\n readonly stats = computed<PropertyWorkspaceStat[]>(() => {\n const tenants = this.tenants();\n return [\n { label: 'Tenants', value: tenants.length, hint: 'Profiles currently managed in your workspace' },\n { label: 'Employed', value: tenants.filter((tenant) => tenant.employmentStatus === 'Employed').length, hint: 'Applicants with employed status' },\n { label: 'Students', value: tenants.filter((tenant) => tenant.employmentStatus === 'Student').length, hint: 'Student-led applications' },\n { label: 'With income', value: tenants.filter((tenant) => !!tenant.income).length, hint: 'Profiles with affordability details' },\n ];\n });\n\n ngOnInit(): void {\n this.find()\n }\n find() {\n this.loading = true\n this.propertyService.findTenants({}).subscribe({\n next: (res: any) => {\n this.tenants.set(res.data || [])\n this.loading = false\n },\n error: error => {\n this.loading = false\n }\n })\n\n }\n}\n","<rolatech-property-workspace-shell\n eyebrow=\"Agent workspace\"\n title=\"Tenants\"\n description=\"Keep applicant profiles readable, search contact details quickly, and jump from the tenant list into the profile that needs follow-up.\"\n [stats]=\"stats()\"\n>\n <div workspace-actions class=\"tenant-manage-index__actions\">\n <button class=\"cursor-pointer\" mat-flat-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n <span i18n>Add tenant</span>\n </button>\n </div>\n\n <div workspace-filters class=\"tenant-manage-index__filters\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Search tenants</mat-label>\n <input matInput [(ngModel)]=\"searchText\" placeholder=\"Name, email, or phone\" />\n </mat-form-field>\n </div>\n\n <section class=\"tenant-manage-index__list\">\n @if (loading) {\n <div class=\"tenant-manage-index__loading\">\n <rolatech-spinner></rolatech-spinner>\n </div>\n } @else if (visibleTenants().length) {\n @for (item of visibleTenants(); track item.id ?? item.email) {\n <rolatech-tenant-item class=\"cursor-pointer\" [tenant]=\"item\" [routerLink]=\"['./', item.id]\"></rolatech-tenant-item>\n }\n } @else {\n <div class=\"tenant-manage-index__empty\">\n <h3 i18n>No tenants matched</h3>\n <p i18n>Try another search term or add a new tenant profile to start the pipeline.</p>\n </div>\n }\n </section>\n</rolatech-property-workspace-shell>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseComponent, RichLabelComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { AdverseCreditStatus, EmploymentStatus, PropertyApplicantType, ResidencyStatus } from '../../../interfaces';\n\n@Component({\n selector: 'rolatech-tenant-manage-detail',\n imports: [CommonModule, ToolbarComponent, RichLabelComponent, ToolbarComponent],\n templateUrl: './tenant-manage-detail.html',\n styleUrl: './tenant-manage-detail.scss',\n})\nexport class TenantManageDetail extends BaseComponent implements OnInit {\n private propertyService = inject(PropertyService);\n tenant: any;\n employmentStatus = EmploymentStatus;\n tenantCategory = PropertyApplicantType;\n residencyStatus = ResidencyStatus;\n adverseCreditStatus = AdverseCreditStatus;\n ngOnInit(): void {\n this.getTenant()\n }\n getTenant() {\n this.propertyService.getTenant(this.id).subscribe({\n next: (res: any) => {\n this.tenant = res.data;\n }\n })\n }\n}\n","<rolatech-toolbar title=\"Tenant details\" large link=\"../\"> </rolatech-toolbar>\n@if (tenant) {\n<div class=\"px-4\">\n <div>\n <div class=\"text-lg font-bold py-2\">Tenant</div>\n <hr class=\"mb-2\" />\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-4\">\n <rolatech-rich-label label=\"First Name\" [title]=\"tenant.firstName\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Last Name\" [title]=\"tenant.lastName\"></rolatech-rich-label>\n </div>\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-4\">\n <rolatech-rich-label label=\"Email\" [title]=\"tenant.email\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Phone\" [title]=\"tenant.phone\"></rolatech-rich-label>\n </div>\n <div>\n <div class=\"text-lg font-bold py-2\">Qualification</div>\n <hr class=\"mb-2\" />\n <rolatech-rich-label label=\"Annual income\" [title]=\"tenant.income\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Number of tenants\" [title]=\"tenant.numberOfTenants\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Tenant category\" [title]=\"tenantCategory[tenant.tenantCategory]\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Employment status\" [title]=\"employmentStatus[tenant.employmentStatus]\"></rolatech-rich-label>\n <rolatech-rich-label\n label=\"AdverseCredit Status\"\n [title]=\"adverseCreditStatus[tenant.adverseCreditStatus]\"\n ></rolatech-rich-label>\n <rolatech-rich-label label=\"Residency status\" [title]=\"residencyStatus[tenant.residencyStatus]\"></rolatech-rich-label>\n </div>\n </div>\n</div>\n}\n","import { Component, computed, effect, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { RouterLink } from '@angular/router';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { OfferFormFacade } from '../../../offer-data-access/offer-form.facade';\nimport { PropertyWorkspaceShell } from '../../../components/property-workspace-shell/property-workspace-shell';\nimport { TenantCard } from '../../../components/tenant-card/tenant-card';\n\n@Component({\n selector: 'rolatech-tenant-manage-create',\n imports: [\n CommonModule,\n MatButtonModule,\n RouterLink,\n PropertyWorkspaceShell,\n TenantCard,\n ],\n templateUrl: './tenant-manage-create.html',\n styleUrl: './tenant-manage-create.scss',\n providers: [OfferFormFacade],\n})\nexport class TenantManageCreate extends BaseComponent {\n private propertyService = inject(PropertyService);\n readonly facade = inject(OfferFormFacade);\n readonly tenantKey = computed(() => this.facade.tenantClientKeys()[0] ?? null);\n\n constructor() {\n super();\n\n effect(() => {\n if (this.facade.tenantsArray().length === 0) {\n this.facade.addTenant();\n }\n });\n }\n\n create() {\n const key = this.tenantKey();\n if (!key) {\n return;\n }\n\n this.facade.applyTenantDynamicValidators();\n const tenantGroup = this.facade.tenantGroupByClientKey(key);\n tenantGroup.markAllAsTouched();\n tenantGroup.updateValueAndValidity();\n\n if (tenantGroup.invalid) {\n this.snackBarService.open('Please complete the tenant profile before saving.');\n return;\n }\n\n const data = this.facade.toTenantPayloadByClientKey(key);\n this.propertyService.createTenant(data).subscribe({\n next: (res: any) => {\n this.router.navigate([`../${res.data.id}`], {\n relativeTo: this.route,\n });\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<rolatech-property-workspace-shell\n eyebrow=\"Tenant registry\"\n title=\"Add tenant\"\n description=\"Create a reusable tenant profile with the same fields used in rental offers, so the profile can be pulled straight into future negotiations.\"\n [stats]=\"[]\"\n>\n <div workspace-actions class=\"tenant-manage-create__actions\">\n <a mat-stroked-button routerLink=\"../\">Back to tenants</a>\n <button mat-flat-button type=\"button\" (click)=\"create()\">Save tenant</button>\n </div>\n\n <section class=\"tenant-manage-create__panel\">\n @if (tenantKey(); as key) {\n <rolatech-tenant-card [clientKey]=\"key\"></rolatech-tenant-card>\n }\n </section>\n</rolatech-property-workspace-shell>\n","import { Routes } from \"@angular/router\";\nimport { TenantManageIndex } from \"./tenant-manage-index/tenant-manage-index\";\nimport { TenantManageDetail } from \"./tenant-manage-detail/tenant-manage-detail\";\nimport { TenantManageCreate } from \"./tenant-manage-create/tenant-manage-create\";\n\nexport const tenantManageRoutes: Routes = [\n {\n path: '',\n component: TenantManageIndex,\n },\n {\n path: 'create',\n component: TenantManageCreate,\n },\n {\n path: ':id',\n component: TenantManageDetail,\n }\n]\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyViewingItemComponent } from '../../../components/property-viewing-item/property-viewing-item.component';\nimport { PropertyViewing, propertyViewingStatusCode } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\nimport { PropertyWorkspaceShell, PropertyWorkspaceStat } from '../../../components/property-workspace-shell/property-workspace-shell';\n\n@Component({\n selector: 'rolatech-property-listing-viewing-index',\n imports: [\n CommonModule,\n RouterModule,\n PropertyViewingItemComponent,\n MatPaginatorModule,\n PropertyWorkspaceShell,\n ],\n templateUrl: './property-listing-viewing-index.html',\n styleUrl: './property-listing-viewing-index.scss',\n})\nexport class PropertyListingViewingIndex extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n select = 0;\n links = [\n {\n name: 'All',\n status: '',\n },\n {\n name: 'Pending',\n status: 'pending',\n },\n {\n name: 'Approved',\n status: 'approved',\n },\n {\n name: 'Completed',\n status: 'completed',\n },\n {\n name: 'Cancelled',\n status: 'cancelled',\n },\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 readonly stats = computed<PropertyWorkspaceStat[]>(() => {\n const viewings = this.viewings();\n return [\n { label: 'Viewings', value: this.length || viewings.length, hint: 'Appointments across your listings' },\n { label: 'Pending', value: viewings.filter((item) => propertyViewingStatusCode(item.status) === 'PENDING').length, hint: 'Awaiting confirmation or review' },\n { label: 'Approved', value: viewings.filter((item) => propertyViewingStatusCode(item.status) === 'APPROVED').length, hint: 'Ready to attend' },\n { label: 'Completed', value: viewings.filter((item) => propertyViewingStatusCode(item.status) === 'COMPLETED').length, hint: 'Closed appointments' },\n ];\n });\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.findViewingsByAgent(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.viewings.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n this.loading = false;\n },\n error: () => {\n this.viewings.set([]);\n this.length = 0;\n this.loading = false;\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-property-workspace-shell\n eyebrow=\"Agent workspace\"\n title=\"Listing viewings\"\n description=\"Keep buyer appointments organized across your managed listings, review the latest requests, and move straight into viewing detail when something changes.\"\n [stats]=\"stats()\"\n>\n <nav workspace-filters class=\"property-listing-viewing-index__status-nav\" aria-label=\"Listing viewing status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"property-listing-viewing-index__status-link\"\n [class.property-listing-viewing-index__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n\n <section class=\"property-listing-viewing-index__list\">\n @if (loading) {\n @for (row of [0, 1, 2, 3]; track row) {\n <div class=\"property-listing-viewing-index__placeholder\"></div>\n }\n } @else if (viewings().length) {\n @for (item of viewings(); track item.id) {\n <rolatech-property-viewing-item class=\"cursor-pointer\" [routerLink]=\"['./', item.id]\" [viewing]=\"item\"></rolatech-property-viewing-item>\n }\n } @else {\n <div class=\"property-listing-viewing-index__empty\">\n <h3 i18n>No viewing activity yet</h3>\n <p i18n>Incoming listing appointments will appear here once buyers or partner agents send requests.</p>\n </div>\n }\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 </section>\n</rolatech-property-workspace-shell>\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { PropertyManageViewingsDetailComponent } from '../../property-manage/property-manage-viewings-detail/property-manage-viewings-detail.component';\n\n@Component({\n selector: 'rolatech-property-listing-viewing-detail',\n imports: [CommonModule, PropertyManageViewingsDetailComponent],\n templateUrl: './property-listing-viewing-detail.html',\n styleUrl: './property-listing-viewing-detail.scss',\n})\nexport class PropertyListingViewingDetail {}\n","<rolatech-property-manage-viewings-detail></rolatech-property-manage-viewings-detail>\n","import { Routes } from '@angular/router';\nimport { PropertyListingViewingIndex } from './property-listing-viewing-index/property-listing-viewing-index';\nimport { PropertyListingViewingDetail } from './property-listing-viewing-detail/property-listing-viewing-detail';\n\nexport const propertyListingViewingRoutes: Routes = [\n {\n path: '',\n component: PropertyListingViewingIndex,\n },\n {\n path: ':id',\n component: PropertyListingViewingDetail,\n },\n];\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AuthUserService } from '@rolatech/angular-auth';\nimport {\n ToolbarComponent,\n ThumbnailComponent,\n BaseComponent,\n ImagePlaceholderComponent,\n AcceptDialogComponent,\n RejectDialogComponent,\n} from '@rolatech/angular-components';\nimport {\n PropertyService,\n InvoiceService,\n PropertyOfferService,\n PropertyOfferResponse,\n OfferInvoiceOption,\n offerStatusLabel,\n PropertyOfferCounterService,\n} from '@rolatech/angular-services';\nimport { PropertyOffer, Property, PropertyOfferStatus, EmploymentStatus } from '../../../interfaces';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { MatIcon } from '@angular/material/icon';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { OfferDetailContext } from '../../../offer-data-access/offer-detail.context';\nimport { OfferManageFacade } from '../../../offer-data-access/offer-manage.facade';\nimport { PropertyOfferNegotiationFacade } from '../../../offer-data-access/property-offer-negotiation.facade';\nimport { FormsModule } from '@angular/forms';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { OfferCounterLatestCard } from '../../../components/offer-counter-latest-card/offer-counter-latest-card';\nimport { OfferCounterPreviousCard } from '../../../components/offer-counter-previous-card/offer-counter-previous-card';\nimport { OfferHistoryAccordion } from '../../../components/offer-history-accordion/offer-history-accordion';\nimport { OfferInternalNoteCard } from '../../../components/offer-internal-note-card/offer-internal-note-card';\nimport { OfferItemCard } from '../../../components/offer-item-card/offer-item-card';\nimport { OfferNegotiationSection } from '../../../components/offer-negotiation-section/offer-negotiation-section';\nimport { OfferReferenceProvider } from '../../../components/offer-reference-provider/offer-reference-provider';\nimport { OfferRentalTermsCard } from '../../../components/offer-rental-terms-card/offer-rental-terms-card';\nimport { OfferSaleDetailsCard } from '../../../components/offer-sale-details-card/offer-sale-details-card';\nimport { OfferTenantsAccordion } from '../../../components/offer-tenants-accordion/offer-tenants-accordion';\nimport { OfferInternalNoteFacade } from '../../../offer-data-access/offer-internal-note.facade';\n\n@Component({\n selector: 'rolatech-property-listing-offer-detail',\n imports: [\n CommonModule,\n ToolbarComponent,\n ThumbnailComponent,\n ImagePlaceholderComponent,\n MatButtonModule,\n MatIcon,\n MatMenuModule,\n MatRadioModule,\n FormsModule,\n PricePipe,\n OfferRentalTermsCard,\n OfferTenantsAccordion,\n OfferItemCard,\n OfferSaleDetailsCard,\n OfferReferenceProvider,\n OfferHistoryAccordion,\n OfferInternalNoteCard,\n OfferCounterLatestCard,\n OfferCounterPreviousCard,\n OfferNegotiationSection,\n ],\n templateUrl: './property-listing-offer-detail.html',\n styleUrl: './property-listing-offer-detail.scss',\n providers: [OfferDetailContext, PropertyOfferNegotiationFacade, OfferInternalNoteFacade],\n})\nexport class PropertyListingOfferDetail extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n propertyOfferService = inject(PropertyOfferService);\n propertyOfferCounterService = inject(PropertyOfferCounterService);\n readonly f = inject(PropertyOfferNegotiationFacade);\n\n authUserService = inject(AuthUserService);\n invoiceService = inject(InvoiceService);\n readonly ctx = inject(OfferDetailContext);\n private readonly facade = inject(OfferManageFacade);\n clipboard = inject(Clipboard);\n\n readonly invoiceOptionDraft = signal<OfferInvoiceOption | null>(null);\n readonly invoiceOptionLabel: Record<OfferInvoiceOption, string> = {\n COMBINED: 'Combined',\n SEPARATE: 'Separate',\n };\n\n offer!: PropertyOfferResponse;\n name = '';\n property!: Property;\n status = PropertyOfferStatus;\n readonly statusLabel = computed(() => offerStatusLabel(this.offer.status));\n\n employmentStatus = EmploymentStatus;\n agent: any;\n readonly isRental = computed(() => this.offer.type.toString() === 'RENTAL');\n readonly isSale = computed(() => this.offer.type.toString() === 'SALE');\n\n ngOnInit(): void {\n this.getOffer();\n this.ctx.init(this.id);\n this.facade.offerId.set(this.id);\n this.facade.loadReferencing();\n if (this.id) this.f.load(this.id, 'agent');\n }\n getOffer() {\n this.propertyOfferService.getOffer(this.id).subscribe({\n next: (res) => {\n this.offer = res.data;\n this.name = this.applicantName();\n this.getProperty(this.offer.propertyId);\n },\n });\n }\n getProperty(propertyId: string) {\n this.propertyService.get(propertyId).subscribe({\n next: (res: any) => {\n this.property = res.data;\n this.getAgentPublicInfo(this.property.agentId);\n },\n });\n }\n getAgentPublicInfo(agentId: string) {\n this.authUserService.getPublicUserInfo(agentId).subscribe({\n next: (res) => {\n this.agent = res;\n },\n });\n }\n underOffer() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'Confirm under offer',\n message: 'Set status to Under offer. Continue?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.underOffer(this.id).subscribe({\n next: (res) => {\n this.offer.status = 'UNDER_OFFER' as PropertyOfferStatus;\n this.snackBarService.open('Status changed to Under Offer');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n accept() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'Accept offer',\n message: 'Accept this offer?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.acceptOffer(this.id).subscribe({\n next: (res) => {\n this.offer.status = 'ACCEPTED' as PropertyOfferStatus;\n this.snackBarService.open('Accepted');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n reject() {\n const dialogRef = this.dialog.open(RejectDialogComponent, {\n width: '400px',\n data: {\n content: '',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.rejectOffer(this.id, { notes: result.content }).subscribe({\n next: (res) => {\n this.offer.status = 'REJECTED' as PropertyOfferStatus;\n this.snackBarService.open('Rejected');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n counter() {\n this.f.enterEdit();\n }\n rfPassed() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'References passed',\n message: 'References passed for this offer?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.referencesPassed(this.id).subscribe({\n next: (res) => {\n this.offer.status = 'REFERENCES_PASSED' as PropertyOfferStatus;\n this.snackBarService.open('Passed');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n rfFailed() {\n const dialogRef = this.dialog.open(RejectDialogComponent, {\n width: '400px',\n data: {\n content: '',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.referencesFailed(this.id, { reason: result.content }).subscribe({\n next: (res) => {\n this.offer.status = 'REFERENCES_FAILED' as PropertyOfferStatus;\n this.snackBarService.open('Failed');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n completed() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'Complete offer',\n message: 'Are you sure you want to complete this offer and finalise the tenancy?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.complete(this.id).subscribe({\n next: (res) => {\n // this.offer.status = 'COMPLETED' as PropertyOfferStatus;\n this.offer.status = PropertyOfferStatus.COMPLETED;\n\n this.snackBarService.open('Offer completed successfully.');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n fail() {\n const dialogRef = this.dialog.open(AcceptDialogComponent, {\n width: '400px',\n data: {\n title: 'Mark offer as unsuccessful',\n message: 're you sure you want to mark this offer as unsuccessful?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.propertyOfferService.fail(this.id).subscribe({\n next: (res) => {\n this.offer.status = 'FAILED' as PropertyOfferStatus;\n this.snackBarService.open('Offer marked as unsuccessful');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n setInvoiceOption(v: OfferInvoiceOption) {\n this.invoiceOptionDraft.set(v);\n }\n saveInvoiceOption(id: any) {\n const draft = this.invoiceOptionDraft();\n\n this.propertyOfferService.updateInvoiceOption(this.id, { invoiceOption: draft }).subscribe({\n next: (res: any) => {\n this.snackBarService.open('Offer invoice option updated');\n },\n error: (error) => this.snackBarService.open(error.message),\n });\n }\n emailApplicant(email: string) {}\n callApplicant(phone: string) {}\n copyText(redactContact: boolean) {\n this.propertyOfferService.getCopyText(this.id).subscribe({\n next: (res) => {\n this.clipboard.copy(res.data.text);\n this.snackBarService.open('Copied');\n },\n });\n }\n\n applicantName() {\n const primaryTenant = this.offer?.tenants?.[0];\n\n return primaryTenant?.fullName || this.offer?.sale?.buyerName || this.name || 'Applicant';\n }\n\n applicantContactSummary() {\n if (!this.offer) {\n return 'Contact details appear here once the offer loads.';\n }\n\n const email = this.applicantEmail();\n const phone = this.applicantPhone();\n\n if (email && phone) {\n return `${email} · ${phone}`;\n }\n\n return email || phone || 'Contact details not shared';\n }\n\n agentName() {\n return this.agent?.name || 'Assigned agent';\n }\n\n agentEmail() {\n return this.agent?.email || 'Not shared';\n }\n\n agentPhone() {\n return this.agent?.phone || 'Not shared';\n }\n\n propertyMediaUrl() {\n return this.property?.media?.[0]?.url || '';\n }\n\n applicantEmail() {\n return this.offer?.tenants?.[0]?.email || this.offer?.sale?.email || '';\n }\n\n applicantPhone() {\n return this.offer?.tenants?.[0]?.phone || this.offer?.sale?.phone || '';\n }\n\n targetDate() {\n return this.offer?.rentalTerms?.moveInDate || this.offer?.sale?.proposedExchangeDate || null;\n }\n}\n","@if (offer) {\n<div class=\"property-listing-offer-detail\">\n <rolatech-toolbar [title]=\"'Offer detail'\" [subtitle]=\"statusLabel()\" large link=\"../\">\n <div class=\"hidden md:flex gap-2\">\n <button mat-flat-button type=\"button\" (click)=\"copyText(true)\">\n <mat-icon>content_copy</mat-icon>\n <span i18n>Copy</span>\n </button>\n </div>\n <div class=\"block md:hidden\">\n <button mat-icon-button [matMenuTriggerFor]=\"moreMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </rolatech-toolbar>\n\n <section class=\"property-listing-offer-detail__hero\">\n <div class=\"property-listing-offer-detail__hero-copy\">\n <span class=\"property-listing-offer-detail__eyebrow\" i18n>Agent workspace</span>\n\n <div class=\"property-listing-offer-detail__hero-heading\">\n <h1 class=\"property-listing-offer-detail__title\">{{ property.title || 'Offer detail' }}</h1>\n <span class=\"property-listing-offer-detail__status\">{{ statusLabel() }}</span>\n </div>\n\n <p class=\"property-listing-offer-detail__intro\" i18n>\n Keep negotiation, billing, referencing, and applicant coordination aligned from one offer workspace.\n </p>\n\n <div class=\"property-listing-offer-detail__fact-grid\">\n <article class=\"property-listing-offer-detail__fact\">\n <span class=\"property-listing-offer-detail__fact-label\" i18n>Offer amount</span>\n <strong class=\"property-listing-offer-detail__fact-value\">{{ offer.item.amount | price }}</strong>\n </article>\n\n <article class=\"property-listing-offer-detail__fact\">\n <span class=\"property-listing-offer-detail__fact-label\" i18n>Move-in target</span>\n <strong class=\"property-listing-offer-detail__fact-value\"\n >{{ targetDate() ? (targetDate() | date: 'mediumDate') : 'Not shared' }}</strong\n >\n </article>\n\n <article class=\"property-listing-offer-detail__fact\">\n <span class=\"property-listing-offer-detail__fact-label\" i18n>Invoice option</span>\n <strong class=\"property-listing-offer-detail__fact-value\"\n >{{ invoiceOptionLabel[invoiceOptionDraft() || offer.invoiceOption] }}</strong\n >\n </article>\n\n <article class=\"property-listing-offer-detail__fact\">\n <span class=\"property-listing-offer-detail__fact-label\" i18n>Applicants</span>\n <strong class=\"property-listing-offer-detail__fact-value\">{{ offer.tenants?.length ?? 1 }}</strong>\n </article>\n </div>\n </div>\n\n <div class=\"property-listing-offer-detail__hero-side\">\n <article class=\"property-listing-offer-detail__property-card\">\n <div class=\"property-listing-offer-detail__media\">\n @if (propertyMediaUrl()) { @defer {\n <rolatech-thumbnail [src]=\"propertyMediaUrl()\" size=\"medium\" mode=\"clip\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"property-listing-offer-detail__media-fallback\"></div>\n } } @else {\n <rolatech-image-placeholder></rolatech-image-placeholder>\n }\n </div>\n\n <div class=\"property-listing-offer-detail__property-copy\">\n <div class=\"property-listing-offer-detail__property-price\">{{ (property.price || offer.item.amount) | price }}</div>\n @if (property) {\n <div class=\"property-listing-offer-detail__property-facts\">\n <span>{{ property.bedrooms }} bed</span>\n <span>{{ property.bathrooms }} bath</span>\n <span>{{ property.receptions }} reception</span>\n </div>\n }\n </div>\n </article>\n\n <article class=\"property-listing-offer-detail__summary-card\">\n <span class=\"property-listing-offer-detail__summary-label\" i18n>Applicant</span>\n <strong class=\"property-listing-offer-detail__summary-value\">{{ applicantName() }}</strong>\n <span class=\"property-listing-offer-detail__summary-contact\">{{ applicantContactSummary() }}</span>\n </article>\n </div>\n </section>\n\n <div class=\"property-listing-offer-detail__content\">\n <main class=\"property-listing-offer-detail__main\">\n <rolatech-offer-negotiation-section />\n <rolatech-offer-item-card />\n\n @if (ctx.isRental()) { @if (!f.latest()) {\n <rolatech-offer-rental-terms-card />\n } @else {\n <rolatech-offer-counter-latest-card />\n <rolatech-offer-counter-previous-card />\n }\n\n <rolatech-offer-tenants-accordion />\n } @if (ctx.isSale()) {\n <rolatech-offer-sale-details-card />\n }\n\n <rolatech-offer-history-accordion />\n <rolatech-offer-internal-note-card />\n </main>\n\n <aside class=\"property-listing-offer-detail__side\">\n <div class=\"property-listing-offer-detail__sticky\">\n <section class=\"property-listing-offer-detail__panel\">\n <div class=\"property-listing-offer-detail__panel-head\">\n <div>\n <span class=\"property-listing-offer-detail__panel-eyebrow\" i18n>Billing</span>\n <h2 class=\"property-listing-offer-detail__panel-title\" i18n>Move-in invoice handling</h2>\n </div>\n\n <button mat-flat-button type=\"button\" (click)=\"saveInvoiceOption(offer.id)\">Save</button>\n </div>\n\n <p class=\"property-listing-offer-detail__summary-note\" i18n>\n Choose whether security deposit and first rent land on a combined invoice or separate invoices.\n </p>\n\n <div class=\"property-listing-offer-detail__radio-grid\">\n <mat-radio-group\n class=\"block\"\n [value]=\"invoiceOptionDraft() || offer.invoiceOption\"\n (change)=\"setInvoiceOption($event.value)\"\n >\n <div class=\"grid gap-3\">\n <label class=\"property-listing-offer-detail__radio-card\">\n <div class=\"flex items-start gap-3\">\n <mat-radio-button value=\"COMBINED\"></mat-radio-button>\n <div class=\"min-w-0\">\n <div class=\"text-sm font-semibold\">Combined</div>\n <div class=\"mt-1 text-xs text-(--rt-text-secondary)\">\n One invoice with security deposit and first rent on separate lines.\n </div>\n </div>\n </div>\n </label>\n\n <label class=\"property-listing-offer-detail__radio-card\">\n <div class=\"flex items-start gap-3\">\n <mat-radio-button value=\"SEPARATE\"></mat-radio-button>\n <div class=\"min-w-0\">\n <div class=\"text-sm font-semibold\">Separate</div>\n <div class=\"mt-1 text-xs text-(--rt-text-secondary)\">\n Issue separate invoices so move-in payments can be tracked independently.\n </div>\n </div>\n </div>\n </label>\n </div>\n </mat-radio-group>\n </div>\n </section>\n\n <rolatech-offer-reference-provider />\n\n <section class=\"property-listing-offer-detail__panel property-listing-offer-detail__panel--subtle\">\n <span class=\"property-listing-offer-detail__panel-eyebrow\" i18n>Applicant contact</span>\n <h2 class=\"property-listing-offer-detail__panel-title\">{{ applicantName() }}</h2>\n\n <div class=\"property-listing-offer-detail__summary-list\">\n <div>\n <span class=\"property-listing-offer-detail__summary-key\" i18n>Email</span>\n <strong>{{ applicantEmail() || 'Not shared' }}</strong>\n </div>\n <div>\n <span class=\"property-listing-offer-detail__summary-key\" i18n>Phone</span>\n <strong>{{ applicantPhone() || 'Not shared' }}</strong>\n </div>\n <div>\n <span class=\"property-listing-offer-detail__summary-key\" i18n>User id</span>\n <strong>{{ offer.userId || 'Not attached' }}</strong>\n </div>\n </div>\n\n <div class=\"property-listing-offer-detail__action-row\">\n <button mat-stroked-button type=\"button\" [disabled]=\"!applicantEmail()\" (click)=\"emailApplicant(applicantEmail())\">\n Email\n </button>\n <button mat-stroked-button type=\"button\" [disabled]=\"!applicantPhone()\" (click)=\"callApplicant(applicantPhone())\">\n Call\n </button>\n </div>\n </section>\n\n <section class=\"property-listing-offer-detail__panel property-listing-offer-detail__panel--subtle\">\n <span class=\"property-listing-offer-detail__panel-eyebrow\" i18n>Listing agent</span>\n <h2 class=\"property-listing-offer-detail__panel-title\">{{ agentName() }}</h2>\n\n <div class=\"property-listing-offer-detail__summary-list\">\n <div>\n <span class=\"property-listing-offer-detail__summary-key\" i18n>Email</span>\n <strong>{{ agentEmail() }}</strong>\n </div>\n <div>\n <span class=\"property-listing-offer-detail__summary-key\" i18n>Phone</span>\n <strong>{{ agentPhone() }}</strong>\n </div>\n <div>\n <span class=\"property-listing-offer-detail__summary-key\" i18n>Agent id</span>\n <strong>{{ offer.agentId || 'Not attached' }}</strong>\n </div>\n </div>\n </section>\n\n <section class=\"property-listing-offer-detail__panel property-listing-offer-detail__panel--subtle\">\n <span class=\"property-listing-offer-detail__panel-eyebrow\" i18n>Quick actions</span>\n <h2 class=\"property-listing-offer-detail__panel-title\" i18n>Move the negotiation forward</h2>\n\n <div class=\"property-listing-offer-detail__stack-actions\">\n @if (offer.status.toString() === 'SUBMITTED') {\n <button mat-flat-button type=\"button\" (click)=\"accept()\">Accept</button>\n <button mat-stroked-button type=\"button\" (click)=\"counter()\">Counter</button>\n <button mat-stroked-button type=\"button\" (click)=\"reject()\">Reject</button>\n } @if (offer.status.toString() === 'UNDER_OFFER') {\n <button mat-flat-button type=\"button\" (click)=\"rfPassed()\">References passed</button>\n <button mat-stroked-button type=\"button\" (click)=\"rfFailed()\">References failed</button>\n }\n </div>\n </section>\n </div>\n </aside>\n </div>\n\n <mat-menu #moreMenu=\"matMenu\" xPosition=\"after\" class=\"divide-y divide-light-900\">\n <button mat-menu-item (click)=\"copyText(true)\">\n <span i18n>Copy</span>\n </button>\n @if (f.permissions()?.canCounter) {\n <button mat-menu-item class=\"rounded-full border border-(--rt-border-color) px-4 py-2\" (click)=\"f.enterEdit()\">\n Counter Offer\n </button>\n } @if (offer.status.toString() === 'SUBMITTED') {\n <button mat-menu-item (click)=\"accept()\" i18n>Accept</button>\n <button mat-menu-item (click)=\"reject()\" i18n>Reject</button>\n } @if (offer.status.toString() === 'UNDER_OFFER') {\n <button mat-menu-item (click)=\"rfPassed()\" i18n>References passed</button>\n <button mat-menu-item (click)=\"rfFailed()\" i18n>References failed</button>\n }\n </mat-menu>\n</div>\n}\n","import { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport {\n BaseComponent,\n SearchBar,\n} from '@rolatech/angular-components';\nimport { PropertyOfferService } from '@rolatech/angular-services';\nimport { PropertyOffer, PropertyOfferStatus } from '../../../interfaces';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { PropertyOfferItemComponent } from '../../../components/property-offer-item/property-offer-item.component';\nimport { OfferItemSkeleton } from '../../../components/offer-item-skeleton/offer-item-skeleton';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\nimport { PropertyWorkspaceShell, PropertyWorkspaceStat } from '../../../components/property-workspace-shell/property-workspace-shell';\n\n@Component({\n selector: 'rolatech-property-listing-offer-index',\n imports: [\n CommonModule,\n RouterModule,\n PropertyOfferItemComponent,\n OfferItemSkeleton,\n MatPaginatorModule,\n SearchBar,\n PropertyWorkspaceShell,\n ],\n templateUrl: './property-listing-offer-index.html',\n styleUrl: './property-listing-offer-index.scss',\n})\nexport class PropertyListingOfferIndex extends BaseComponent implements OnInit {\n propertyOfferService = inject(PropertyOfferService);\n\n select = 0;\n links = [\n {\n name: 'All',\n status: '',\n },\n {\n name: 'Submitted',\n status: 'submitted',\n },\n {\n name: 'Accepted',\n status: 'accepted',\n },\n {\n name: 'Rejected',\n icon: 'category',\n status: 'rejected',\n },\n {\n name: 'Cancelled',\n icon: 'category',\n status: 'cancelled',\n },\n ];\n offers = signal<PropertyOffer[]>([]);\n meta: any;\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n pageIndex = signal(0);\n loading = false;\n\n readonly stats = computed<PropertyWorkspaceStat[]>(() => {\n const offers = this.offers();\n return [\n { label: 'Offers', value: this.length || offers.length, hint: 'Negotiations across all managed listings' },\n { label: 'Submitted', value: offers.filter((item) => item.status === PropertyOfferStatus.SUBMITTED).length, hint: 'Freshly submitted buyer terms' },\n { label: 'Accepted', value: offers.filter((item) => item.status === PropertyOfferStatus.ACCEPTED).length, hint: 'Offers moved beyond review' },\n { label: 'Cancelled', value: offers.filter((item) => item.status === PropertyOfferStatus.CANCELLED).length, hint: 'Stopped or withdrawn negotiations' },\n ];\n });\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 q: p.get('q') || undefined,\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.propertyOfferService.findOffersByAgent(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.offers.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.offers.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 searchByText(event: any) {\n this.router.navigate([], {\n queryParams: { q: event, page: 1, limit: 15 },\n queryParamsHandling: 'merge', // keep other params like sort, etc.\n });\n }\n onCloseSearch() {\n this.router.navigate(['/offers']);\n }\n}\n","<rolatech-property-workspace-shell\n eyebrow=\"Agent workspace\"\n title=\"Listing offers\"\n description=\"Review active negotiations, search by offer or property context, and keep the commercial pipeline visible across every managed listing.\"\n [stats]=\"stats()\"\n>\n <div workspace-filters class=\"property-listing-offer-index__filters\">\n <rolatech-search-bar\n [show]=\"true\"\n placeholder=\"Search offer by offer id or property\"\n (search)=\"searchByText($event)\"\n (close)=\"onCloseSearch()\"\n ></rolatech-search-bar>\n\n <nav class=\"property-listing-offer-index__status-nav\" aria-label=\"Listing offer status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"property-listing-offer-index__status-link\"\n [class.property-listing-offer-index__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n </div>\n\n <section class=\"property-listing-offer-index__list\">\n @if (loading) {\n @for (row of [0, 1, 2, 3]; track row) {\n <rolatech-offer-item-skeleton></rolatech-offer-item-skeleton>\n }\n } @else if (offers().length > 0) {\n @for (item of offers(); track item.id) {\n <rolatech-property-offer-item class=\"cursor-pointer\" [routerLink]=\"['./', item.id]\" [offer]=\"item\"></rolatech-property-offer-item>\n }\n } @else {\n <div class=\"property-listing-offer-index__empty\">\n <h3 i18n>No offers yet</h3>\n <p i18n>Your listing offer pipeline will appear here once buyers start submitting terms.</p>\n </div>\n }\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 </section>\n</rolatech-property-workspace-shell>\n","import { Routes } from '@angular/router';\nimport { PropertyListingOfferDetail } from './property-listing-offer-detail/property-listing-offer-detail';\nimport { PropertyListingOfferIndex } from './property-listing-offer-index/property-listing-offer-index';\n\nexport const propertyListingOfferRoutes: Routes = [\n {\n path: '',\n component: PropertyListingOfferIndex,\n },\n {\n path: ':id',\n component: PropertyListingOfferDetail,\n },\n];\n","import { Routes } from '@angular/router';\n\nexport const propertyAgentOverviewRoutes: Routes = [\n {\n path: '',\n loadComponent: () => import('./property-manage-overview/property-manage-overview').then((x) => x.PropertyManageOverview),\n },\n];\n","import { Routes } from '@angular/router';\n\nexport const propertyManageOverviewRoutes: Routes = [\n {\n path: '',\n loadComponent: () => import('./property-agent-overview/property-agent-overview').then((x) => x.PropertyAgentOverview),\n },\n];\n","import { Component, HostBinding, inject, OnInit, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatTableModule } from '@angular/material/table';\nimport { RouterLink } from '@angular/router';\nimport { ToolbarComponent, SearchBar, BaseComponent } from '@rolatech/angular-components';\nimport { PropertySearchService, PropertyService } from '@rolatech/angular-services';\nimport { Property } from '../../../interfaces';\nimport { PropertyManageItemComponent } from '../../../components/property-manage-item/property-manage-item.component';\nimport { distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\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-listing-index',\n imports: [\n MatButtonModule,\n RouterLink,\n MatIconModule,\n MatTableModule,\n MatMenuModule,\n MatPaginatorModule,\n ToolbarComponent,\n PropertyManageItemComponent,\n SearchBar,\n PropertyManageItemSkeleton,\n ],\n templateUrl: './property-listing-index.html',\n styleUrl: './property-listing-index.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyListingIndex extends BaseComponent implements OnInit {\n @HostBinding('class.rolatech-property-manage-index') hasClass = true;\n propertyService = inject(PropertyService);\n propertySearchService = inject(PropertySearchService);\n util = inject(PropertyUtil);\n paginator = viewChild(MatPaginator);\n snackBar = inject(MatSnackBar);\n gridView = true;\n\n isSearch = false;\n // properties: Property[] = [];\n properties = signal<Property[]>([]);\n\n exporting = false;\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n pageIndex = signal(0);\n open = signal(false);\n meta: any;\n loading = false;\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\n return {\n q: p.get('q') || undefined,\n town: p.get('town') || 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.propertyService.byAgent(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 toggleSearch() {\n this.open.update((v) => !v);\n }\n toggleView() {\n if (this.gridView) {\n this.gridView = false;\n this.util.viewEvent.emit(PropertyViewType.LIST);\n } else {\n this.gridView = true;\n this.util.viewEvent.emit(PropertyViewType.GRID);\n }\n }\n searchByText(event: any) {\n this.router.navigate([], {\n queryParams: { q: event, page: 1, limit: 15 },\n queryParamsHandling: 'merge', // keep other params like sort, etc.\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 // this.pageIndex.set(Math.max(page - 1, 0));\n },\n error: (error) => {\n this.loading = false;\n },\n });\n }\n onCloseSearch() {\n this.router.navigate(['/listings']);\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=\"My Listings\">\n <div class=\"flex items-center gap-2\">\n <button class=\"cursor-pointer\" mat-stroked-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n <span i18n>Add property</span>\n </button>\n </div>\n</rolatech-toolbar>\n<div class=\"p-2\">\n <rolatech-search-bar [show]=\"true\" #searchBar (search)=\"searchByText($event)\" (close)=\"onCloseSearch()\"></rolatech-search-bar>\n</div>\n@if (loading) {\n<div class=\"bg-(--rt-rasised-background) h-full\">\n <div class=\"flex flex-wrap px-2\">\n @for (row of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; track row) {\n <rolatech-property-manage-item-skeleton></rolatech-property-manage-item-skeleton>\n }\n </div>\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 px-2\">\n @for (item of properties(); track $index) {\n <rolatech-property-manage-item class=\"cursor-pointer\" [property]=\"item\" routerLink=\"./{{ item.id }}/manage/info\"></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","import { TextFieldModule } from '@angular/cdk/text-field';\nimport { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ToolbarComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-property-listing-create',\n imports: [\n ToolbarComponent,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n TextFieldModule,\n MatSelectModule,\n MatOptionModule,\n MatButtonModule,\n ],\n templateUrl: './property-listing-create.html',\n styleUrl: './property-listing-create.scss',\n})\nexport class PropertyListingCreate {\n private propertyService = inject(PropertyService);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private snackBar = inject(MatSnackBar);\n property: any = {};\n create() {\n const data = {\n ...this.property,\n };\n this.propertyService.create(data).subscribe({\n next: (res) => {\n this.router.navigate([`../${res.data.id}/manage/info`], {\n relativeTo: this.route,\n });\n },\n error: (e) => {\n this.snackBar.open(e.message);\n },\n });\n }\n}\n","<rolatech-toolbar title=\"Add property\" link=\"../\"> </rolatech-toolbar>\n<div class=\"p-3\">\n <section>\n <form #productForm=\"ngForm\">\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Title </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"property.title\" name=\"title\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Description </mat-label>\n <textarea\n matInput\n type=\"text\"\n [(ngModel)]=\"property.description\"\n name=\"description\"\n required\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n ></textarea>\n </mat-form-field>\n </div>\n </form>\n </section>\n <div i18n>* items are required</div>\n <div class=\"mt-3\">\n <button mat-flat-button class=\"w-28\" (click)=\"create()\" i18n>Create</button>\n </div>\n</div>\n","import { Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { Property, PropertyStatus } from '../../../interfaces';\n\n@Component({\n selector: 'rolatech-property-listing-layout',\n imports: [RouterLink, RouterLinkActive, MatButtonModule, RouterOutlet],\n templateUrl: './property-listing-layout.html',\n styleUrl: './property-listing-layout.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PropertyListingLayout extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n property!: Property;\n submitted = false;\n accepted = false;\n isDraft = false;\n ngOnInit(): void {\n this.id = this.route.snapshot.paramMap.get('id') as string;\n this.get();\n }\n get() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property = res.data;\n },\n });\n }\n submit() {\n this.propertyService.submitForReview(this.id).subscribe({\n next: (res) => {\n this.snackBarService.open('Submit successfully');\n\n this.property.status = PropertyStatus['Pending' as keyof typeof PropertyStatus];\n this.updateStatus();\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n updateStatus() {\n this.isDraft = this.property.status.toString() === 'DRAFT' || this.property.status.toString() === 'PENDING';\n this.accepted = this.property.status.toString() === 'ACCEPTED';\n }\n publish() {\n this.propertyService.publish(this.id).subscribe({\n next: (res) => {\n this.snackBarService.open('Publish successfully');\n this.property.status = PropertyStatus['Available' as keyof typeof PropertyStatus];\n this.updateStatus();\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<div class=\"flex flex-col md:flex-row m-auto\">\n <div\n class=\"min-w-[256px] px-3 md:px-0 flex flex-row md:flex-col md:h-full items-center md:items-start h-16 overflow-x-scroll overflow-y-hidden scrollbar-hide whitespace-pre\"\n >\n <div class=\"flex flex-row md:flex-col md:w-full\">\n <div class=\"hidden md:flex text-xl font-bold h-14 items-center px-1\" i18n>Property</div>\n <a routerLink=\"./info\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Basic info</a>\n <a routerLink=\"./media\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Media</a>\n <a routerLink=\"./videos\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Videos</a>\n <a routerLink=\"./sections\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Details</a>\n <a routerLink=\"./floorplans\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Floorplans</a>\n <a routerLink=\"./location\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Location</a>\n <a routerLink=\"./features\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Features</a>\n <a routerLink=\"./keywords\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Keywords</a>\n <a routerLink=\"./highlights\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>Highlights</a>\n <a routerLink=\"./epc\" routerLinkActive=\"manage-active\" class=\"p-2 cursor-pointer\" i18n>EPC</a>\n </div>\n @if (property) { @if (property.status.toString() === 'DRAFT') {\n <div class=\"md:mt-6 md:ml-2 flex items-center\">\n <button mat-flat-button (click)=\"submit()\" i18n>Submit for review</button>\n </div>\n } @if (property.status.toString() === 'PENDING') {\n <div class=\"md:mt-6 md:ml-2 flex items-center\">\n <button mat-flat-button disabled i18n>Pending</button>\n </div>\n } @if (property.status.toString() === 'APPROVED') {\n <div class=\"md:mt-6 md:ml-2 flex items-center\">\n <button mat-flat-button (click)=\"publish()\" i18n>Publish</button>\n </div>\n } }\n </div>\n <div class=\"w-full\">\n <router-outlet></router-outlet>\n </div>\n</div>\n","import { Route, Routes } from '@angular/router';\n\nexport interface FeatureAvailabilityAction {\n label: string;\n href?: string;\n routerLink?: string | readonly string[];\n target?: '_self' | '_blank';\n actionType?: 'joinWaitlist';\n featureCode?: string;\n featureLabel?: string;\n}\n\nexport interface FeatureAvailabilityHighlight {\n icon: string;\n title: string;\n detail: string;\n}\n\nexport interface FeatureAvailabilityData {\n status: 'enabled' | 'disabled';\n badge?: string;\n title: string;\n message: string;\n highlights?: FeatureAvailabilityHighlight[];\n primaryAction?: FeatureAvailabilityAction;\n secondaryAction?: FeatureAvailabilityAction;\n}\n\nconst unavailableComponent = () =>\n import('../pages/feature-unavailable/feature-unavailable').then((m) => m.FeatureUnavailable);\n\nfunction createUnavailableRoute(path: string, featureAvailability: FeatureAvailabilityData): Route {\n return {\n path,\n data: {\n featureAvailability,\n },\n loadComponent: unavailableComponent,\n };\n}\n\nexport function withFeatureAvailability(routes: Routes, featureAvailability?: FeatureAvailabilityData): Routes {\n if (!featureAvailability || featureAvailability.status !== 'disabled') {\n return routes;\n }\n\n return [createUnavailableRoute('', featureAvailability), createUnavailableRoute('**', featureAvailability)];\n}\n","import { FeatureAvailabilityData } from '../../routing/feature-availability';\n\nexport const propertyListingFeatureAvailability: FeatureAvailabilityData = {\n status: 'disabled',\n badge: 'Coming soon',\n title: 'Listings are opening in stages',\n message:\n 'The listing workspace is still in limited release while publishing, edits, and organisation access are finalised. You can keep using properties, viewings, and offers in the meantime.',\n highlights: [\n {\n icon: 'inventory_2',\n title: 'Publishing flow',\n detail: 'Create, edit, and publish actions are still being validated for live agent organisations.',\n },\n {\n icon: 'groups',\n title: 'Organisation rollout',\n detail: 'Owner, admin, and member access are being enabled together so the workflow stays consistent for every team.',\n },\n {\n icon: 'notifications_active',\n title: 'Waitlist updates',\n detail: 'Join the rollout queue and we will notify your team as soon as listings are enabled.',\n },\n ],\n primaryAction: {\n label: 'Join waitlist',\n actionType: 'joinWaitlist',\n featureCode: 'listings',\n featureLabel: 'Listings workspace',\n },\n};\n","import { Routes } from '@angular/router';\nimport { PropertyListingIndex } from './property-listing-index/property-listing-index';\nimport { PropertyListingCreate } from './property-listing-create/property-listing-create';\nimport { PropertyManageEpc } from '../property-manage/property-manage-epc/property-manage-epc';\nimport { PropertyManageFeaturesComponent } from '../property-manage/property-manage-features/property-manage-features.component';\nimport { PropertyManageFloorplan } from '../property-manage/property-manage-floorplan/property-manage-floorplan';\nimport { PropertyManageHighlights } from '../property-manage/property-manage-highlights/property-manage-highlights';\nimport { PropertyManageInfoComponent } from '../property-manage/property-manage-info/property-manage-info.component';\nimport { PropertyManageKeywords } from '../property-manage/property-manage-keywords/property-manage-keywords';\nimport { PropertyManageLocationComponent } from '../property-manage/property-manage-location/property-manage-location.component';\nimport { PropertyManageMediaComponent } from '../property-manage/property-manage-media/property-manage-media.component';\nimport { PropertyManageScheduleComponent } from '../property-manage/property-manage-schedule/property-manage-schedule.component';\nimport { PropertyManageSectionsComponent } from '../property-manage/property-manage-sections/property-manage-sections.component';\nimport { PropertyManageVideoComponent } from '../property-manage/property-manage-video/property-manage-video.component';\nimport { PropertyListingLayout } from './property-listing-layout/property-listing-layout';\nimport { withFeatureAvailability } from '../../routing/feature-availability';\nimport { propertyListingFeatureAvailability } from './property-listing-feature';\nimport { PropertyListingViewingIndex } from './property-listing-viewing-index/property-listing-viewing-index';\nimport { PropertyListingViewingDetail } from './property-listing-viewing-detail/property-listing-viewing-detail';\nimport { PropertyListingOfferIndex } from './property-listing-offer-index/property-listing-offer-index';\nimport { PropertyListingOfferDetail } from './property-listing-offer-detail/property-listing-offer-detail';\n\nconst enabledPropertyListingRoutes: Routes = [\n {\n path: '',\n component: PropertyListingIndex,\n },\n {\n path: 'viewings',\n children: [\n {\n path: '',\n component: PropertyListingViewingIndex,\n },\n {\n path: ':id',\n component: PropertyListingViewingDetail,\n },\n ],\n },\n {\n path: 'offers',\n children: [\n {\n path: '',\n component: PropertyListingOfferIndex,\n },\n {\n path: ':id',\n component: PropertyListingOfferDetail,\n },\n ],\n },\n {\n path: 'invoices',\n loadChildren: () => import('@rolatech/angular-billing').then((m) => m.agentInvoiceRoutes),\n data: {\n invoiceBaseLink: '/listings/invoices',\n invoiceEyebrow: 'Agent workspace',\n invoiceCollectionTitle: 'Listing invoices',\n invoiceCollectionDescription: 'Monitor billing, deposits, and payment progress tied to your managed listings from one workspace.',\n },\n },\n {\n path: 'create',\n component: PropertyListingCreate,\n },\n {\n path: ':id/manage',\n component: PropertyListingLayout,\n children: [\n {\n path: 'info',\n component: PropertyManageInfoComponent,\n },\n {\n path: 'media',\n component: PropertyManageMediaComponent,\n },\n {\n path: 'videos',\n component: PropertyManageVideoComponent,\n },\n {\n path: 'sections',\n component: PropertyManageSectionsComponent,\n },\n {\n path: 'floorplans',\n component: PropertyManageFloorplan,\n },\n {\n path: 'location',\n component: PropertyManageLocationComponent,\n },\n {\n path: 'features',\n component: PropertyManageFeaturesComponent,\n },\n {\n path: 'keywords',\n component: PropertyManageKeywords,\n },\n {\n path: 'highlights',\n component: PropertyManageHighlights,\n },\n {\n path: 'epc',\n component: PropertyManageEpc,\n },\n {\n path: 'schedule',\n component: PropertyManageScheduleComponent,\n },\n ],\n },\n];\n\nexport const propertyListingRoutes: Routes = withFeatureAvailability(\n enabledPropertyListingRoutes,\n propertyListingFeatureAvailability,\n);\n","import { CommonModule } from '@angular/common';\nimport { EnvironmentProviders, Provider, importProvidersFrom, makeEnvironmentProviders } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport {\n APPLICATION_ADMIN_ROLES,\n APPLICATION_OWNER_ROLES,\n ORGANIZATION_ADMIN_ROLES,\n ORGANIZATION_MEMBER_ROLES,\n ORGANIZATION_OWNER_ROLES,\n ORGANIZATION_STAFF_ROLES,\n PLATFORM_ADMIN_ROLES,\n accessMatchGuard,\n provideRoleAwareFeature,\n} from '@rolatech/angular-auth';\n\nconst PROPERTY_CONSOLE_ACCESS = {\n authenticated: true,\n anyPlatformRole: [...PLATFORM_ADMIN_ROLES],\n anyApplicationRole: [...APPLICATION_OWNER_ROLES, ...APPLICATION_ADMIN_ROLES],\n anyOrganizationRole: [\n ...ORGANIZATION_OWNER_ROLES,\n ...ORGANIZATION_ADMIN_ROLES,\n ...ORGANIZATION_MEMBER_ROLES,\n ...ORGANIZATION_STAFF_ROLES,\n ],\n};\n\nexport function provideAngularProperty(): EnvironmentProviders {\n const providers: (Provider | EnvironmentProviders)[] = [\n importProvidersFrom(CommonModule, ReactiveFormsModule, FormsModule, RouterModule),\n ];\n\n return makeEnvironmentProviders(providers);\n}\n\nexport function provideAngularPropertyFeature(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideAngularProperty(),\n provideRoleAwareFeature({\n routes: [\n {\n path: 'properties',\n canMatch: [accessMatchGuard(PROPERTY_CONSOLE_ACCESS)],\n loadChildren: () => import('./lib/pages/property-manage/property-mange.routes').then((m) => m.propertyManageRoutes),\n },\n {\n path: 'reviews',\n canMatch: [accessMatchGuard(PROPERTY_CONSOLE_ACCESS)],\n loadChildren: () => import('./lib/pages/property-review/property-review.routes').then((m) => m.propertyReviewRoutes),\n },\n {\n path: 'lettings',\n canMatch: [accessMatchGuard(PROPERTY_CONSOLE_ACCESS)],\n loadChildren: () => import('./lib/pages/property-market/property-market.routes').then((m) => m.propertyMarketRoutes),\n },\n {\n path: 'listings',\n canMatch: [accessMatchGuard(PROPERTY_CONSOLE_ACCESS)],\n loadChildren: () => import('./lib/pages/property-listing/property-listing.routes').then((m) => m.propertyListingRoutes),\n },\n {\n path: 'tenants',\n canMatch: [accessMatchGuard(PROPERTY_CONSOLE_ACCESS)],\n loadChildren: () => import('./lib/pages/tenant-manage/tenant-manage.routes').then((m) => m.tenantManageRoutes),\n },\n {\n path: 'features',\n canMatch: [accessMatchGuard(PROPERTY_CONSOLE_ACCESS)],\n loadChildren: () => import('./lib/pages/feature-manage/feature-manage.routes').then((m) => m.featureManageRoutes),\n },\n {\n path: 'viewings',\n canMatch: [accessMatchGuard(PROPERTY_CONSOLE_ACCESS)],\n loadChildren: () =>\n import('./lib/pages/property-manage/property-manage-viewings.routes').then((m) => m.propertyManageViewingsRoutes),\n },\n {\n path: 'agent-offers',\n canMatch: [accessMatchGuard(PROPERTY_CONSOLE_ACCESS)],\n loadChildren: () =>\n import('./lib/pages/property-listing/property-listing-offer.routes').then((m) => m.propertyListingOfferRoutes),\n },\n {\n path: 'offers',\n canMatch: [accessMatchGuard(PROPERTY_CONSOLE_ACCESS)],\n loadChildren: () =>\n import('./lib/pages/property-manage/property-manage-offers.routes').then((m) => m.propertyManageOffersRoutes),\n },\n ],\n navigation: [\n {\n id: 'property',\n title: 'Property',\n icon: 'apartment',\n order: 350,\n access: PROPERTY_CONSOLE_ACCESS,\n children: [\n {\n id: 'property-list',\n title: 'Properties',\n icon: 'home_work',\n routerLink: '/properties',\n access: PROPERTY_CONSOLE_ACCESS,\n },\n {\n id: 'property-reviews',\n title: 'Reviews',\n icon: 'rate_review',\n routerLink: '/reviews',\n access: PROPERTY_CONSOLE_ACCESS,\n },\n {\n id: 'property-lettings',\n title: 'Lettings',\n icon: 'location_home',\n routerLink: '/lettings',\n access: PROPERTY_CONSOLE_ACCESS,\n },\n {\n id: 'property-listings',\n title: 'Listings',\n icon: 'storefront',\n routerLink: '/listings',\n access: PROPERTY_CONSOLE_ACCESS,\n },\n {\n id: 'property-tenants',\n title: 'Tenants',\n icon: 'group',\n routerLink: '/tenants',\n access: PROPERTY_CONSOLE_ACCESS,\n },\n {\n id: 'property-features',\n title: 'Features',\n icon: 'featured_play_list',\n routerLink: '/features',\n access: PROPERTY_CONSOLE_ACCESS,\n },\n {\n id: 'property-viewings',\n title: 'Viewings',\n icon: 'event',\n routerLink: '/viewings',\n access: PROPERTY_CONSOLE_ACCESS,\n },\n {\n id: 'property-listing-offers',\n title: 'Agent Offers',\n icon: 'contract',\n routerLink: '/agent-offers',\n access: PROPERTY_CONSOLE_ACCESS,\n },\n {\n id: 'property-offers',\n title: 'Offers',\n icon: 'sell',\n routerLink: '/offers',\n access: PROPERTY_CONSOLE_ACCESS,\n },\n ],\n },\n ],\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","MY_FORMATS","i5","i6","i7","i8","i9","PropertyOfferStatus","SIZE"],"mappings":"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IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,YAAY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"}
|