@rolatech/angular-property 20.2.7-beta.2 → 20.2.8-bete.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"rolatech-angular-property-rolatech-angular-property-Du0qae4S.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/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/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/property-offer.component.ts","../../../../packages/angular-property/src/lib/pages/property/property-offer/property-offer.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/pipes/due.pipe.ts","../../../../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/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/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/letting-manage-item/letting-manage-item.ts","../../../../packages/angular-property/src/lib/components/letting-manage-item/letting-manage-item.html","../../../../packages/angular-property/src/lib/pages/letting-manage/letting-manage-index/letting-manage-index.ts","../../../../packages/angular-property/src/lib/pages/letting-manage/letting-manage-index/letting-manage-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/letting-manage/letting-manage-detail/letting-manage-detail.ts","../../../../packages/angular-property/src/lib/pages/letting-manage/letting-manage-detail/letting-manage-detail.html","../../../../packages/angular-property/src/lib/pages/letting-manage/letting-manage-viewing-request/letting-manage-viewing-request.ts","../../../../packages/angular-property/src/lib/pages/letting-manage/letting-manage-viewing-request/letting-manage-viewing-request.html","../../../../packages/angular-property/src/lib/pages/letting-manage/letting-manage-offer-request/letting-manage-offer-request.ts","../../../../packages/angular-property/src/lib/pages/letting-manage/letting-manage-offer-request/letting-manage-offer-request.html","../../../../packages/angular-property/src/lib/pages/letting-manage/letting-manage.routes.ts","../../../../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/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-agent/property-agent-viewing-index/property-agent-viewing-index.ts","../../../../packages/angular-property/src/lib/pages/property-agent/property-agent-viewing-index/property-agent-viewing-index.html","../../../../packages/angular-property/src/lib/pages/property-agent/property-agent-viewing-detail/property-agent-viewing-detail.ts","../../../../packages/angular-property/src/lib/pages/property-agent/property-agent-viewing-detail/property-agent-viewing-detail.html","../../../../packages/angular-property/src/lib/pages/property-agent/property-agent-viewing.routes.ts","../../../../packages/angular-property/src/lib/pages/property-agent/property-agent-offer-detail/property-agent-offer-detail.ts","../../../../packages/angular-property/src/lib/pages/property-agent/property-agent-offer-detail/property-agent-offer-detail.html","../../../../packages/angular-property/src/lib/pages/property-agent/property-agent-offer-index/property-agent-offer-index.ts","../../../../packages/angular-property/src/lib/pages/property-agent/property-agent-offer-index/property-agent-offer-index.html","../../../../packages/angular-property/src/lib/pages/property-agent/property-agent-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/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 SALES = 'Sales',\n LETTINGS = 'Lettings',\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 NOT_SPECIFIED = 'Not specified',\n HOUSE = 'House',\n APARTMENT = 'Apartment',\n ROOM = 'Room',\n HOUSE_DETACHED = 'House detached',\n HOUSE_TERRACED = 'House terraced',\n HOUSE_SEMI_DETACHED = 'House semi detached',\n FLAT = 'Flat',\n STUDIO = 'Studio',\n MAISONETTE = 'Maisonette',\n BUNGALOW = 'Bungalow',\n PENTHOUSE = 'Penthouse',\n TOWNHOUSE = 'Townhourse',\n OTHER = 'Other',\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 viewerCategory?: PropertyViewerCategory;\n tenantCategory?: PropertyApplicantType;\n startDate?: string;\n numberOfTenants?: number;\n tenancyDuration?: number;\n applicantType?: PropertyApplicantType;\n income?: number;\n employmentStatus?: EmploymentStatus;\n adverseCreditStatus?: AdverseCreditStatus;\n proposedSlots: ViewingProposedSlot[];\n tenantId?: string;\n}\nexport interface ViewingProposedSlot {\n date: string;\n time: string;\n}\nexport interface PropertyViewing {\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 viewingDate: string;\n viewingTime: string;\n status: PropertyViewingStatus;\n viewerCategory: PropertyViewerCategory;\n tenantCategory: PropertyApplicantType;\n property: Property;\n numberOfTenants?: number;\n tenancyDuration?: number;\n applicantType?: PropertyApplicantType;\n income?: number;\n employmentStatus: EmploymentStatus;\n adverseCreditStatus?: AdverseCreditStatus;\n proposedSlots: ViewingProposedSlot[];\n createdAt: string;\n item: PropertyViewingItem;\n}\nexport interface PropertyViewingItem {\n propertyId: string;\n title: string;\n description: 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}\nexport enum PropertyViewingStatus {\n PENDING = 'Pending',\n APPROVED = 'Approved',\n REJECTED = 'Rejected',\n CANCELLED = 'Cancelled',\n COMPLETED = 'Completed',\n}\nexport enum PropertyViewerCategory {\n TENANT = 'Tenant',\n AGENT = 'Agent',\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 price: 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 price: 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 SALES = 'Sales',\n LETTINGS = 'Lettings',\n NOT_SPECIFIED = 'Not specified',\n}\nexport enum PropertyOfferStatus {\n // ── Applicant action ─────────────────────\n SUBMITTED = 'Submitted',\n\n // ── Decision / negotiation ───────────────\n ACCEPTED = 'Accepted',\n COUNTERED = 'Countered',\n REJECTED = 'Rejected',\n\n // ── Market / listing state ───────────────\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 // ── Financial & checks ───────────────────\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 / cancellation ──────────────\n FAILED = 'Failed',\n WITHDRAWN = 'Withdrawn',\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 UK_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 SUBLETTING_COMPANY = 'Subletting Company',\n}\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 '00:00',\n '00:15',\n '00:30',\n '00:45',\n\n '01:00',\n '01:15',\n '01:30',\n '01:45',\n\n '02:00',\n '02:15',\n '02:30',\n '02:45',\n '03:00',\n '03:15',\n '03:30',\n '03:45',\n\n '04:00',\n '04:15',\n '04:30',\n '04:45',\n '05:00',\n '05:15',\n '05:30',\n '05:45',\n\n '06:00',\n '06:15',\n '06:30',\n '06:45',\n '07:00',\n '07:15',\n '07:30',\n '07:45',\n\n '08:00',\n '08:15',\n '08:30',\n '08:45',\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 '18:15',\n '18:30',\n '18:45',\n '19:00',\n '19:15',\n '19:30',\n '19:45',\n\n '20:00',\n '20:15',\n '20:30',\n '20:45',\n '21:00',\n '21:15',\n '21:30',\n '21:45',\n\n '22:00',\n '22:15',\n '22:30',\n '22:45',\n '23:00',\n '23:15',\n '23:30',\n '23:45',\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\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 [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 console.log(res);\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 console.log(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 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 { Component, computed, input } from '@angular/core';\nimport { PropertyOffer, PropertyOfferStatus } from '../../interfaces';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ThumbnailComponent, ImagePlaceholderComponent } from '@rolatech/angular-components';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-offer-item',\n imports: [MatIconModule, ThumbnailComponent, ImagePlaceholderComponent, PricePipe],\n templateUrl: './property-offer-item.component.html',\n styleUrl: './property-offer-item.component.scss',\n})\nexport class PropertyOfferItemComponent {\n offer = input.required<PropertyOffer>();\n status: any = PropertyOfferStatus;\n total = computed(() => {\n return this.offer().price.toFixed(2);\n });\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>Offer ID: {{ offer().id }}</span>\n </a>\n <span class=\"font-medium text-sm text-[--rt-brand-color]\">{{ status[offer().status] }}</span>\n </div>\n @if (offer().item) {\n <div class=\"flex flex-row py-2\">\n @if (offer().item.media) {\n <div class=\"min-w-24 w-36 object-cover aspect-video rounded-lg mr-3\">\n @defer {\n <rolatech-thumbnail [src]=\"offer().item.media ? offer().item.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=\"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 class=\"font-bold\">{{ offer().item.title }}</div>\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span class=\"mr-1\">{{ offer().item.bedrooms }}</span>\n <span i18n>Bedrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ offer().item.bathrooms }}</span>\n <span i18n>Bathrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ offer().item.receptions }}</span>\n <span i18n>Receptions</span>\n </div>\n </div>\n </div>\n <div class=\"text-right\">\n <div class=\"text-sm\">{{ offer().item.amount | price }}</div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n</div>\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 ListComponent,\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';\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 ListComponent,\n MatPaginatorModule,\n OfferItemSkeleton,\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: 'Created',\n icon: 'category',\n status: 'created',\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\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.findOffers(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}\n","<rolatech-toolbar title=\"Offers\">\n <div class=\"flex items-center gap-2\"></div>\n</rolatech-toolbar>\n<rolatech-tabs [select]=\"select\">\n @for (item of links; track item) {\n @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n }\n }\n</rolatech-tabs>\n@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 <rolatech-list>\n @if (offers() && offers().length > 0) {\n @for (item of offers(); track item) {\n <rolatech-property-offer-item [routerLink]=\"['./', item.id]\" [offer]=\"item\"></rolatech-property-offer-item>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n </rolatech-list>\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 Price</mat-label>\n <input matInput [(ngModel)]=\"offer().price\" />\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 { Component, inject, OnInit, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n AcceptDialogComponent,\n BaseComponent,\n RejectDialogComponent,\n ThumbnailComponent,\n ToolbarComponent,\n} from '@rolatech/angular-components';\nimport { EmploymentStatus, OfferInvoiceOption, Property, PropertyOffer, PropertyOfferStatus } from '../../../interfaces';\nimport { InvoiceService, PropertyOfferService, PropertyService } 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';\n\n@Component({\n selector: 'rolatech-property-manage-offer-detail',\n imports: [\n CommonModule,\n ToolbarComponent,\n ThumbnailComponent,\n MatButtonModule,\n MatIcon,\n MatMenuModule,\n PricePipe,\n MatRadioModule,\n FormsModule,\n ],\n templateUrl: './property-manage-offer-detail.component.html',\n styleUrl: './property-manage-offer-detail.component.scss',\n})\nexport class PropertyManageOfferDetailComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n propertyOfferService = inject(PropertyOfferService);\n authUserService = inject(AuthUserService);\n invoiceService = inject(InvoiceService);\n readonly invoiceOptionDraft = signal<OfferInvoiceOption | null>(null);\n\n offer!: PropertyOffer;\n name = '';\n property!: Property;\n status = PropertyOfferStatus;\n employmentStatus = EmploymentStatus;\n agent: any;\n ngOnInit(): void {\n this.getOffer();\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 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 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 price: res.price,\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}\n","@if (offer) {\n <rolatech-toolbar [title]=\"status[offer.status]\" large link=\"../\">\n <div class=\"hidden md:flex gap-2\">\n @if (offer.status.toString() === 'SUBMITTED') {\n <button mat-flat-button (click)=\"accept()\" i18n>Accept</button>\n <button mat-flat-button (click)=\"counter()\" i18n>Counter offer</button>\n <button mat-button (click)=\"reject()\" i18n>Reject</button>\n <button mat-button (click)=\"edit()\" i18n>Edit</button>\n }\n <!-- References -->\n @if (offer.status.toString() === 'HOLDING_DEPOSIT_PAID') {\n <button mat-flat-button (click)=\"underOffer()\" i18n>Under offer</button>\n }\n @if (offer.status.toString() === 'UNDER_OFFER') {\n <button mat-flat-button (click)=\"rfPassed()\" i18n>References passed</button>\n <button mat-flat-button (click)=\"rfFailed()\" i18n>References failed</button>\n }\n <!-- Completed -->\n @if (offer.status.toString() === 'MOVE_IN_PAYMENT_PAID') {\n <button mat-flat-button (click)=\"completed()\" i18n>Completed</button>\n }\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 <div class=\"grid gap-4 lg:grid-cols-12 p-4\">\n <!-- Main column -->\n <div class=\"lg:col-span-8 space-y-4\">\n <!-- Summary 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 gap-3\">\n <div>\n <div class=\"text-sm font-semibold\">Offer summary</div>\n <div class=\"mt-1 text-xs text-[--rt-text-secondary]\">Key details for pricing, move-in, and terms.</div>\n </div>\n </div>\n\n <div class=\"mt-4 grid gap-3 sm:grid-cols-2\">\n <div class=\"rounded-xl border border-[--rt-border-color] p-3\">\n <div class=\"text-xs text-[--rt-text-secondary]\">Offer price</div>\n <div class=\"mt-1 text-lg font-semibold\">\n {{ offer.price | price }}\n <span class=\"text-sm font-medium text-[--rt-text-secondary]\">pcm</span>\n </div>\n </div>\n\n <div class=\"rounded-xl border border-[--rt-border-color] p-3\">\n <div class=\"text-xs text-[--rt-text-secondary]\">Move-in date</div>\n <div class=\"mt-1 text-lg font-semibold\">{{ offer.startDate | date: 'mediumDate' }}</div>\n </div>\n\n <div class=\"rounded-xl border border-[--rt-border-color] p-3\">\n <div class=\"text-xs text-[--rt-text-secondary]\">Tenancy term</div>\n <div class=\"mt-1 text-lg font-semibold\">\n {{ offer.tenancyDuration }} <span class=\"text-sm font-medium text-[--rt-text-secondary]\">months</span>\n </div>\n </div>\n <div class=\"rounded-xl border border-[--rt-border-color] p-3\">\n <div class=\"text-xs text-[--rt-text-secondary]\">Number of tenants</div>\n <div class=\"mt-1 text-lg font-semibold\">\n {{ offer.numberOfTenants }} <span class=\"text-sm font-medium text-[--rt-text-secondary]\"></span>\n </div>\n </div>\n <div class=\"rounded-xl border border-[--rt-border-color] p-3\">\n <div class=\"text-xs text-[--rt-text-secondary]\">Employment status</div>\n <div class=\"mt-1 text-lg font-semibold\">\n {{ offer.employmentStatus }} <span class=\"text-sm font-medium text-[--rt-text-secondary]\"></span>\n </div>\n </div>\n </div>\n </section>\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 gap-2 sm:grid-cols-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 <!-- Property 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 gap-3\">\n <div>\n <div class=\"text-sm font-semibold\">Property</div>\n <div class=\"mt-1 text-xs text-[--rt-text-secondary]\">Offer property snapshot.</div>\n </div>\n </div>\n <div class=\"flex items-center py-2\">\n <div class=\"min-w-24 w-24 object-cover aspect-video rounded-md mr-3\">\n @defer {\n <rolatech-thumbnail [src]=\"offer.item.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 <div class=\"flex w-full justify-between\">\n <div class=\"flex justify-between w-full\">\n <div class=\"flex flex-col\">\n <div>{{ offer.item.title }}</div>\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span class=\"mr-1\">{{ offer.item.bedrooms }}</span>\n <span i18n>Bedrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ offer.item.bathrooms }}</span>\n <span i18n>Bathrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ offer.item.receptions }}</span>\n <span i18n>Receptions</span>\n </div>\n </div>\n </div>\n <div class=\"text-right\">\n <div class=\"text-sm\">{{ offer.item.amount | price }}</div>\n </div>\n </div>\n </div>\n </div>\n </section>\n </div>\n\n <!-- Right rail -->\n <div class=\"lg:col-span-4 space-y-4\">\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 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.userId }}</div>\n </div>\n </div>\n\n <div class=\"mt-4 space-y-2\">\n @if (offer.email) {\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.email }}</span>\n </div>\n }\n @if (offer.phone) {\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.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.email\" (click)=\"emailApplicant(offer.email!)\">\n Email\n </button>\n <button mat-stroked-button type=\"button\" [disabled]=\"!offer.phone\" (click)=\"callApplicant(offer.phone!)\">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 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.email) {\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.email }}</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.email\" (click)=\"emailApplicant(offer.email!)\">\n Email\n </button>\n <button mat-stroked-button type=\"button\" [disabled]=\"!offer.phone\" (click)=\"callApplicant(offer.phone!)\">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 @if (offer.status.toString() === 'SUBMITTED') {\n <button mat-menu-item (click)=\"accept()\" i18n>Accept</button>\n <button mat-menu-item (click)=\"counter()\" i18n>Counter offer</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'];\n market: string[] = ['Sales', 'Lettings'];\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 console.log(qp);\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() === 'LETTINGS' && rentFrequency() === 'MONTHLY') {\n <div class=\"text-lg font-bold\" i18n>Rent per month</div>\n }\n @if (market() === 'LETTINGS' && rentFrequency() === 'WEEKLY') {\n <div class=\"text-lg font-bold\" i18n>Rent per week</div>\n }\n @if (market() === 'LETTINGS' && rentFrequency() === 'NOT_SPECIFIED') {\n <div class=\"text-lg font-bold\" i18n>Rent price</div>\n }\n @if (market() === 'SALES') {\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() === 'LETTINGS') {\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() === 'SALES') {\n @if (property().type !== 'NOT_SPECIFIED') {\n {{ type[property().type].toLowerCase() }}\n }\n <span> for sale</span>\n }\n @if (property().market.toString() === 'LETTINGS') {\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 [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 { CommentsComponent } from '@rolatech/angular-comment';\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 CommentsComponent,\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 // console.log(v);\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 if (this.authenticated()) {\n this.router.navigate([`/properties/${this.id}/offer`]);\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, DoCheck, input, model, 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, DoCheck {\n minDate = new Date();\n maxDate = new Date();\n output = output<any>();\n select = output<any>();\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 ngDoCheck(): void {\n this.output.emit(this.proposedTime());\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\"\n (dateInput)=\"proposedTime()!.date = $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 <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\" required readonly>\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 { Component, computed, inject, model, OnInit, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseComponent, ContainerComponent, ThumbnailComponent } from '@rolatech/angular-components';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormsModule } from '@angular/forms';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { PropertyService } from '@rolatech/angular-services';\nimport {\n AdverseCreditStatus,\n PropertyApplicantType,\n EmploymentStatus,\n Property,\n PropertyViewerCategory,\n PropertyViewing,\n PropertyViewingRequest,\n ResidencyStatus,\n} from '../../../interfaces';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatRadioChange, MatRadioModule } from '@angular/material/radio';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { PropertyViewingTimeComponent } from '../../../components/property-viewing-time/property-viewing-time.component';\nimport { AvailableDatePipe } from '../../../pipes/property-available.pipe';\nimport { PricePipe } from '@rolatech/angular-common';\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-viewing-request',\n imports: [\n CommonModule,\n ContainerComponent,\n MatFormFieldModule,\n FormsModule,\n MatInputModule,\n TextFieldModule,\n MatButtonModule,\n ThumbnailComponent,\n MatSelectModule,\n MatDatepickerModule,\n MatRadioModule,\n PropertyViewingTimeComponent,\n AvailableDatePipe,\n PricePipe,\n ],\n templateUrl: './property-viewing-request.component.html',\n styleUrl: './property-viewing-request.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 PropertyViewingRequestComponent extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n propertyService = inject(PropertyService);\n property!: Property;\n minDate = new Date();\n viewing: PropertyViewingRequest = {\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n viewerCategory: PropertyViewerCategory.TENANT,\n // tenantCategory: PropertyApplicantType.INDIVIDUAL,\n proposedSlots: [\n { date: '', time: '' },\n { date: '', time: '' },\n { date: '', time: '' },\n ],\n };\n selectedViewerCategory = 'TENANT';\n viewerCategory = PropertyViewerCategory;\n applicantTypes = PropertyApplicantType;\n residencyStatus = ResidencyStatus;\n employmentStatus = EmploymentStatus;\n adverseCreditStatus = AdverseCreditStatus;\n countries: string[] = ['United Kingdom', 'China'];\n selectedCountry;\n displayPrice = computed(() => {\n return this.property ? this.property.price.toFixed(2) : 0;\n });\n ngOnInit(): void {\n this.getProperty();\n // this.viewing['country'] = this.countries[0];\n }\n getProperty() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property = res.data;\n this.titleService.setTitle(`${this.property.title}`);\n },\n });\n }\n onCountrySelect(event: any) {\n this.viewing['country'] = event.value;\n }\n onViewerSelectionChange(event: MatRadioChange) {\n this.selectedViewerCategory = event.value;\n }\n sendRequest() {\n this.propertyService.requestViewing(this.id, this.viewing).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","<rolatech-container>\n <div class=\"flex flex-col-reverse md:flex-row w-full py-2 mb-3 gap-3\">\n <div class=\"w-full md:w-2/3\">\n <div>\n <div class=\"text-xl font-bold py-2 mb-3\" i18n>Request a viewing</div>\n <div class=\"mb-3\">\n <mat-radio-group\n aria-label=\"Select an option\"\n [(ngModel)]=\"viewing.viewerCategory\"\n (change)=\"onViewerSelectionChange($event)\"\n >\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 @if (selectedViewerCategory === 'Tenant') {\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 <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 <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 <mat-form-field>\n <mat-label i18n>Tenant type</mat-label>\n <mat-select placeholder=\"Tenant 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 } @else {\n <div class=\"flex flex-col md:flex-row gap-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Your email</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"viewing.email\" />\n </mat-form-field>\n </div>\n <div class=\"flex flex-col md:flex-row gap-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Number of tenants</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"viewing.numberOfTenants\" />\n </mat-form-field>\n </div>\n <mat-form-field>\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 <mat-form-field appearance=\"fill\">\n <input\n matInput\n placeholder=\"Start date\"\n [matDatepicker]=\"startDatePicker\"\n [min]=\"minDate\"\n (focus)=\"startDatePicker.open()\"\n name=\"startDate\"\n [(ngModel)]=\"viewing.startDate\"\n (dateInput)=\"viewing.startDate = $event.value.format('YYYY-MM-DD')\"\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 class=\"flex flex-col md:flex-row gap-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Tenancy length</mat-label>\n <span matTextSuffix>months</span>\n <input matInput type=\"number\" [(ngModel)]=\"viewing.tenancyDuration\" />\n </mat-form-field>\n </div>\n <mat-form-field appearance=\"fill\" floatLabel=\"always\">\n <mat-label i18n>Annual income(All tenants combined)</mat-label>\n <span matTextPrefix>£&nbsp;</span>\n <input matInput type=\"text\" placeholder=\"00.00\" [(ngModel)]=\"viewing.income\" />\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Employment Status</mat-label>\n <mat-select placeholder=\"Employment Status\" [(ngModel)]=\"viewing.employmentStatus\">\n @for (item of employmentStatus | keyvalue; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>AdverseCredit Status</mat-label>\n <mat-select placeholder=\"AdverseCredit Status\" [(ngModel)]=\"viewing.adverseCreditStatus\">\n @for (item of adverseCreditStatus | keyvalue; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <div>\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 @for (item of viewing.proposedSlots; track $index) {\n <rolatech-property-viewing-time [proposedTime]=\"item\"></rolatech-property-viewing-time>\n }\n </div>\n </div>\n <button mat-flat-button (click)=\"sendRequest()\" i18n>Send request</button>\n </div>\n <div class=\"w-full md:w-1/2 py-2 mb-3\">\n @if (property) {\n <div class=\"text-xl font-bold py-2 mb-3\" i18n>Property info</div>\n <div>\n <rolatech-thumbnail [src]=\"property ? property.media[0].url : ''\" size=\"small\"></rolatech-thumbnail>\n </div>\n <div class=\"text-xl font-bold\">{{ property.title }}</div>\n <div class=\"\">Available: {{ property.availableDate | availableDate }}</div>\n @if (property.market.toString() === 'LETTINGS' && property.rentFrequency.toString() === 'MONTHLY') {\n <div class=\"py-3 text-xl font-bold\">{{ property.price | price }}pcm</div>\n } @else {\n <div class=\"py-3 text-xl font-bold\">{{ property.price | price }}</div>\n }\n }\n </div>\n </div>\n</rolatech-container>\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, OnInit, signal } from '@angular/core';\nimport { CommonModule, KeyValuePipe } from '@angular/common';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { BaseComponent, ContainerComponent, ThumbnailComponent } from '@rolatech/angular-components';\nimport { PropertyOfferService, PropertyService } from '@rolatech/angular-services';\nimport {\n AdverseCreditStatus,\n PropertyApplicantType,\n EmploymentStatus,\n Property,\n PropertyOffer,\n PropertyOfferRequest,\n ResidencyStatus,\n} from '../../../interfaces';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { AvailableDatePipe } from '../../../pipes/property-available.pipe';\nimport { PricePipe } from '@rolatech/angular-common';\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-offer',\n imports: [\n CommonModule,\n ContainerComponent,\n MatFormFieldModule,\n FormsModule,\n MatInputModule,\n TextFieldModule,\n MatButtonModule,\n ThumbnailComponent,\n MatSelectModule,\n KeyValuePipe,\n MatDatepickerModule,\n MatProgressSpinner,\n AvailableDatePipe,\n PricePipe,\n ],\n templateUrl: './property-offer.component.html',\n styleUrl: './property-offer.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 PropertyOfferComponent extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n propertyService = inject(PropertyService);\n propertyOfferService = inject(PropertyOfferService);\n offer: PropertyOfferRequest = {\n firstName: '',\n lastName: '',\n phone: '',\n email: '',\n applicantType: '',\n residencyStatus: '',\n employmentStatus: '',\n adverseCreditStatus: '',\n startDate: '',\n notes: '',\n price: 0,\n };\n get formattedAmount(): string {\n return this.offer.price.toFixed(2); // equivalent to | number:'1.2-2'\n } // applicantTypes = PropertyApplicantType;\n applicantTypes = Object.keys(PropertyApplicantType); // ['INDIVIDUAL', 'CORPORATE', ...]\n PropertyApplicantType = PropertyApplicantType;\n residencyStatus = ResidencyStatus;\n employmentStatus = EmploymentStatus;\n adverseCreditStatus = AdverseCreditStatus;\n selectedCountry;\n // property!: Property;\n // displayPrice = computed(() => {\n // return (this.property?.price).toFixed(2);\n // });\n property = signal<Property | null>(null);\n\n displayPrice = computed(() => {\n const p = this.property();\n return p ? p.price.toFixed(2) : '0.00';\n });\n readonly firstImageUrl = computed(() => {\n const p = this.property();\n return p?.media?.[0]?.url || '';\n });\n minDate = new Date();\n sending = false;\n constructor() {\n super();\n effect(() => {\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 onAmountChange(event: Event) {\n const inputValue: any = (event.target as HTMLInputElement).value;\n console.log(inputValue);\n const regex = /^\\d*\\.?\\d{0,2}$/;\n\n if (regex.test(inputValue)) {\n this.offer.price = inputValue;\n }\n }\n getProperty() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property.set(res.data);\n // this.titleService.setTitle(`${this.property.title}`);\n },\n });\n }\n onCategorySelect(event: any) {\n this.offer['category'] = event.value;\n }\n onResidencyStatusSelect(event: any) {}\n sendRequest() {\n this.sending = true;\n this.propertyOfferService.makeOffer(this.id, this.offer).subscribe({\n next: (res) => {\n this.sending = false;\n this.snackBarService.open('Sent successfully');\n this.router.navigate([`/properties/offers/${res.data.id}`]);\n },\n error: (error) => {\n this.sending = false;\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<rolatech-container>\n <div class=\"flex flex-col-reverse md:flex-row w-full py-2 mb-3 gap-3\">\n <div class=\"w-full md:w-2/3\">\n <div>\n <div class=\"text-xl font-bold py-2 mb-3\">\n <!-- <span i18n>Offer for </span><span>{{ property()?.title : '' }}</span> -->\n <span i18n=\"@@offerFor\">Offer for {{ property()?.title }}</span>\n </div>\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)]=\"offer.firstName\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Last name</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"offer.lastName\" required />\n </mat-form-field>\n </div>\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)]=\"offer.phone\" required />\n </mat-form-field>\n </div>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Email</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"offer.email\" required />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\" floatLabel=\"always\">\n <mat-label i18n>Offer price</mat-label>\n <span matTextPrefix>£&nbsp;</span>\n <input matInput type=\"text\" placeholder=\"0.00\" [(ngModel)]=\"offer.price\" required />\n <!-- <input\n matInput\n type=\"number\"\n placeholder=\"0.00\"\n [value]=\"formattedAmount\"\n (input)=\"onAmountChange($event)\"\n required\n /> -->\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Tenancy Length</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"offer.tenancyDuration\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Number Of Tenants</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"offer.numberOfTenants\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>Start date</mat-label>\n <input\n matInput\n placeholder=\"Start date\"\n [matDatepicker]=\"startDatePicker\"\n [min]=\"minDate\"\n (focus)=\"startDatePicker.open()\"\n name=\"startDate\"\n [(ngModel)]=\"offer.startDate\"\n (dateInput)=\"offer.startDate = $event.value.format('YYYY-MM-DD')\"\n readonly\n required\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>\n <mat-label i18n>Applicant type</mat-label>\n <mat-select placeholder=\"Applicant type\" [(ngModel)]=\"offer.applicantType\" required>\n @for (key of applicantTypes; track key) {\n <mat-option [value]=\"key\">\n {{ PropertyApplicantType[key] }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <!-- subscriptSizing=\"dynamic\" -->\n <mat-form-field>\n <mat-label i18n>Residency status</mat-label>\n <mat-select placeholder=\"Residency status\" [(ngModel)]=\"offer.residencyStatus\" required>\n @for (status of residencyStatus | keyvalue; track status) {\n <mat-option [value]=\"status.key\">\n {{ status.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Employment Status</mat-label>\n <mat-select placeholder=\"Employment Status\" [(ngModel)]=\"offer.employmentStatus\" required>\n @for (item of employmentStatus | keyvalue; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>AdverseCredit Status</mat-label>\n <mat-select placeholder=\"AdverseCredit Status\" [(ngModel)]=\"offer.adverseCreditStatus\" required>\n @for (item of adverseCreditStatus | keyvalue; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n <div>\n <div class=\"text-md py-2\" i18n>Your message(Optional)</div>\n <mat-form-field appearance=\"fill\">\n <textarea matInput type=\"text\" [(ngModel)]=\"offer.notes\" cdkTextareaAutosize cdkAutosizeMinRows=\"3\"></textarea>\n </mat-form-field>\n </div>\n <!-- <button mat-flat-button (click)=\"sendRequest()\" i18n>Send request</button> -->\n <button mat-flat-button (click)=\"sendRequest()\" [disabled]=\"sending\">\n <span style=\"display: flex; align-items: center\">\n @if (sending) {\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\" [style.marginRight.px]=\"8\"></mat-progress-spinner>\n }\n {{ sending ? 'Requesting...' : 'Send request' }}\n </span>\n </button>\n </div>\n <div class=\"w-full md:w-1/2 py-2 mb-3\">\n @if (property()) {\n <div class=\"text-xl font-bold py-2 mb-3\" i18n>Property info</div>\n <div>\n <rolatech-thumbnail [src]=\"firstImageUrl()\" size=\"small\"></rolatech-thumbnail>\n </div>\n <div class=\"text-xl font-bold\">{{ property()!.title }}</div>\n <div class=\"\">Available: {{ property()!.availableDate | availableDate }}</div>\n @if (property()!.market.toString() === 'LETTINGS' && property()!.rentFrequency.toString() === 'MONTHLY') {\n <div class=\"py-3 text-xl font-bold\">{{ property()!.price | price }}pcm</div>\n } @else {\n <div class=\"py-3 text-xl font-bold\">{{ property()!.price | price }}</div>\n }\n }\n </div>\n </div>\n</rolatech-container>\n","import { Component, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { CommonModule, KeyValuePipe } from '@angular/common';\nimport { PropertyOfferService, PropertyService } from '@rolatech/angular-services';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } 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 {\n ContainerComponent,\n TabsComponent,\n TabComponent,\n ToolbarComponent,\n ListComponent,\n EmptyComponent,\n FilterComponent,\n BaseComponent,\n} 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 ContainerComponent,\n RouterModule,\n TabsComponent,\n TabComponent,\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 PropertyOfferItemComponent,\n MatPaginatorModule,\n OfferItemSkeleton,\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 propertyService = inject(PropertyService);\n propertyOfferService = inject(PropertyOfferService);\n\n offerType = PropertyOfferType;\n offerStatus = PropertyOfferStatus;\n filter = false;\n select = 0;\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Created',\n icon: 'category',\n status: 'created',\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 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 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.findOffers(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-container>\n <rolatech-toolbar title=\"Offers\" large> </rolatech-toolbar>\n <rolatech-tabs [select]=\"select\">\n @for (item of links; track item) {\n @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n }\n }\n </rolatech-tabs>\n @if (loading) {\n <div class=\"divide-y divide-[--rt-10-percent-layer] flex flex-col\">\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 <rolatech-list>\n @if (offers() && offers().length > 0) {\n @for (item of offers(); track item) {\n <rolatech-property-offer-item [routerLink]=\"['./', item.id]\" [offer]=\"item\"></rolatech-property-offer-item>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n </rolatech-list>\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</rolatech-container>\n","import { Component, computed, input } from '@angular/core';\nimport { PropertyViewing, PropertyViewingStatus } from '../../interfaces';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ThumbnailComponent, ImagePlaceholderComponent, Loading, Skeleton } from '@rolatech/angular-components';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-viewing-item',\n imports: [MatIconModule, 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 status: any = PropertyViewingStatus;\n}\n","@if (loading()) {\n <div class=\"flex flex-col p-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} @else {\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>Viewing ID: {{ viewing().id }}</span>\n </a>\n <span class=\"text-sm text-[--rt-brand-color] font-bold\">{{ status[viewing().status] }}</span>\n </div>\n @if (viewing().item) {\n <div class=\"flex flex-col overflow-x-scroll scrollbar-hide\">\n <div class=\"flex flex-row py-2\">\n @if (viewing().item.media) {\n <div class=\"min-w-24 w-36 object-cover aspect-video rounded-lg mr-3\">\n @defer {\n <rolatech-thumbnail [src]=\"viewing().item.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 class=\"font-bold\">{{ viewing().item.title }}</div>\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span class=\"mr-1\">{{ viewing().item.bedrooms }}</span>\n <span i18n>Bedrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ viewing().item.bathrooms }}</span>\n <span i18n>Bathrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ viewing().item.receptions }}</span>\n <span i18n>Receptions</span>\n </div>\n </div>\n </div>\n <div class=\"text-right\">\n <div class=\"text-sm\">{{ viewing().item.price | price }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n}\n","import { Component, inject, OnInit, signal } from '@angular/core';\nimport { CommonModule, KeyValuePipe } from '@angular/common';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } 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 { RouterModule } from '@angular/router';\nimport {\n ContainerComponent,\n TabsComponent,\n TabComponent,\n ToolbarComponent,\n ListComponent,\n EmptyComponent,\n BaseComponent,\n} from '@rolatech/angular-components';\nimport { PropertyViewingItemComponent } from '../../../components/property-viewing-item/property-viewing-item.component';\nimport { PropertyApplicantType, PropertyViewerCategory, PropertyViewing, PropertyViewingStatus } 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 ContainerComponent,\n RouterModule,\n TabsComponent,\n TabComponent,\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 PropertyViewingItemComponent,\n MatPaginatorModule,\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 viewerCategory = PropertyViewerCategory;\n tenantCategory = PropertyApplicantType;\n viewingStatus = PropertyViewingStatus;\n filter = false;\n filterOptions: any = {\n type: '',\n category: '',\n status: '',\n };\n select = 0;\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Completed',\n icon: 'category',\n status: 'completed',\n },\n {\n name: 'Cancelled',\n icon: 'category',\n status: 'cancelled',\n },\n ];\n 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 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-container>\n <rolatech-toolbar title=\"Viewings\" large> </rolatech-toolbar>\n <rolatech-tabs [select]=\"select\">\n @for (item of links; track item) {\n @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n }\n }\n </rolatech-tabs>\n <rolatech-list>\n @if (viewings(); as viewings) {\n @for (item of viewings; track item) {\n <rolatech-property-viewing-item\n [loading]=\"loading\"\n [routerLink]=\"['./', item.id]\"\n [viewing]=\"item\"\n ></rolatech-property-viewing-item>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n </rolatech-list>\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n</rolatech-container>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'due',\n})\nexport class DuePipe implements PipeTransform {\n transform(value: any, ...args: any[]): any {\n if (value) {\n const date = new Date(value);\n date.setDate(date.getDate() - 3);\n return date.toISOString().split('T')[0];\n } else {\n return '';\n }\n }\n}\n","import { Component, computed, inject, OnDestroy, OnInit } from '@angular/core';\nimport { Location, NgClass } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { APP_CONFIG, PricePipe } from '@rolatech/angular-common';\nimport {\n SpinnerComponent,\n ContainerComponent,\n ToolbarComponent,\n BaseComponent,\n ThumbnailComponent,\n} from '@rolatech/angular-components';\nimport { PaymentService, PropertyOfferService, PropertyService } from '@rolatech/angular-services';\nimport { Property, PropertyOffer, PropertyOfferStatus, PropertyOfferTimelineStatus } from '../../../interfaces';\nimport { AuthUserService } from '@rolatech/angular-auth';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { RouterLink } from '@angular/router';\nimport { DuePipe } from '../../../pipes/due.pipe';\nimport { switchMap } from 'rxjs';\nimport { OfferUser } from '../../../components/offer-user/offer-user';\n\n@Component({\n selector: 'rolatech-property-offer-detail',\n imports: [\n MatButtonModule,\n MatIconModule,\n NgClass,\n ThumbnailComponent,\n SpinnerComponent,\n ContainerComponent,\n ToolbarComponent,\n MatProgressSpinnerModule,\n RouterLink,\n DuePipe,\n PricePipe,\n ],\n templateUrl: './property-offer-detail.component.html',\n styleUrl: './property-offer-detail.component.scss',\n})\nexport class PropertyOfferDetailComponent extends BaseComponent implements OnInit, OnDestroy {\n propertyService = inject(PropertyService);\n propertyOfferService = inject(PropertyOfferService);\n authUserService = inject(AuthUserService);\n paymentService = inject(PaymentService);\n\n offer!: PropertyOffer;\n info = false;\n loadingTimeline = false;\n timelineData: any;\n status: any = PropertyOfferStatus;\n timelineStatus: any = PropertyOfferTimelineStatus;\n env = inject(APP_CONFIG);\n location = inject(Location);\n property!: Property;\n agent: any;\n checkouting = false;\n holdingDeposit;\n securityDeposit;\n type = computed(() => {\n return this.offer.type.toString();\n });\n async ngOnInit() {\n this.route.params.subscribe((params) => {\n const id = params['id'];\n this.get(id);\n });\n this.route.queryParams.subscribe(async (params) => {\n const sessionId = params['session_id'];\n if (sessionId) {\n this.propertyOfferService.checkOfferPaymentStatus(this.id, sessionId).subscribe({\n next: (res) => {\n if (res.status === 'paid') {\n this.offer.status = PropertyOfferStatus.HOLDING_DEPOSIT_PAID;\n // Show success UI\n }\n },\n });\n }\n });\n }\n ngOnDestroy(): void {\n this.checkouting = false;\n }\n get(id: string) {\n this.propertyOfferService.getOffer(id).subscribe({\n next: (res: any) => {\n this.offer = res.data;\n this.getProperty(this.offer.propertyId);\n this.calculateDeposit();\n // this.findAgentInfo();\n },\n });\n }\n timeline() {\n this.info = true;\n this.loadingTimeline = true;\n this.propertyOfferService.offerTimeline(this.id).subscribe({\n next: (res) => {\n this.timelineData = res.data;\n this.loadingTimeline = false;\n },\n error: (error) => {\n this.loadingTimeline = false;\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 cancel() {\n this.propertyOfferService.cancelOffer(this.id).subscribe({\n next: (res) => {\n this.offer.status = 'CANCELLED' as PropertyOfferStatus;\n this.snackBarService.open('Cancelled');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n calculateDeposit() {\n const price = this.offer.item.amount;\n this.holdingDeposit = ((price * 12) / 52).toFixed(2);\n this.securityDeposit = (((price * 12) / 52) * 5).toFixed(2);\n }\n holdingDepositCheckout() {\n this.checkouting = true;\n const data = {\n businessType: 'OFFER',\n businessId: this.id,\n provider: 'STRIPE',\n method: 'STRIPE_CHECKOUT',\n purpose: 'HOLDING_DEPOSIT',\n };\n\n this.paymentService\n .createPaymentIntent(data)\n .pipe(\n switchMap((res: any) => {\n const intent = {\n intentId: res.data.id,\n provider: 'STRIPE',\n method: 'STRIPE_CHECKOUT',\n successUrl: window.location.href + '?session_id={CHECKOUT_SESSION_ID}',\n cancelUrl: window.location.href,\n };\n return this.paymentService.createPayment(intent);\n }),\n )\n .subscribe({\n next: (res) => {\n this.checkouting = false;\n const { checkoutUrl } = res.data;\n window.open(checkoutUrl, '_blank');\n },\n error: (error) => {\n this.checkouting = false;\n },\n });\n }\n securityDepositCheckout() {\n this.checkouting = true;\n const data = {\n successUrl: window.location.href + '?session_id={CHECKOUT_SESSION_ID}',\n cancelUrl: window.location.href,\n };\n this.propertyOfferService.createSecurityDepositCheckout(this.id, data).subscribe({\n next: (res) => {\n window.location.href = res.data.checkoutUrl;\n },\n error: (error) => {\n this.checkouting = false;\n },\n });\n }\n}\n","@if (offer) {\n <rolatech-container>\n <rolatech-toolbar [title]=\"status[offer.status]\" large link=\"../\">\n <button mat-flat-button (click)=\"timeline()\">\n <mat-icon>history</mat-icon>\n <span i18n>Offer status</span>\n </button>\n </rolatech-toolbar>\n <div>\n <div class=\"flex justify-between items-center py-2\">\n <a class=\"text-xl font-bold\">Offer ID: {{ offer.id }}</a>\n </div>\n\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Property details</div>\n <hr class=\"mb-2\" />\n <div\n class=\"flex items-center py-2 cursor-pointer hover:bg-[--rt-raised-background]\"\n [routerLink]=\"['../../', offer.item.propertyId]\"\n >\n <div class=\"min-w-24 w-24 object-cover aspect-video rounded-md\">\n @defer {\n <rolatech-thumbnail [src]=\"offer.item.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 <div class=\"flex w-full justify-between\">\n <div class=\"flex justify-between w-full px-2\">\n <div class=\"flex flex-col\">\n <div>{{ offer.item.title }}</div>\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span class=\"mr-1\">{{ offer.item.bedrooms }}</span>\n <span i18n>Bedrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ offer.item.bathrooms }}</span>\n <span i18n>Bathrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ offer.item.receptions }}</span>\n <span i18n>Receptions</span>\n </div>\n </div>\n </div>\n <div class=\"text-right\">\n <div class=\"text-sm\">{{ offer.item.amount | price }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div>\n <div class=\"mt-3\">\n <div class=\"text-lg py-2 font-bold\" i18n>Offer info</div>\n <div class=\"flex items-center justify-between py-1\">\n <span class=\"font-medium\" i18n>Created at</span>\n <span class=\"text-sm\"> {{ offer.createdAt }}</span>\n </div>\n <div class=\"flex items-center justify-between py-1\">\n <span class=\"font-medium\" i18n>Start date</span>\n <span class=\"text-sm\"> {{ offer.startDate }}</span>\n </div>\n <div class=\"flex items-center justify-between py-1\">\n <span class=\"font-medium\" i18n>Offer price</span>\n <span class=\"text-sm\" i18n>{{ offer.price | price }}</span>\n </div>\n @if (type() === 'LETTINGS') {\n @if (property) {\n <div class=\"flex items-center justify-between py-1\">\n <span class=\"font-medium\" i18n>Deposit due date</span>\n <span class=\"text-sm\"> {{ offer.startDate | due }}</span>\n </div>\n <div class=\"flex items-center justify-between py-1\">\n <span class=\"font-medium\" i18n>Holding deposit</span>\n <span class=\"text-sm\">{{ holdingDeposit | price }}</span>\n </div>\n <div class=\"flex items-center justify-between py-1\">\n <span class=\"font-medium\" i18n>Security deposit</span>\n <span class=\"text-sm\">{{ securityDeposit | price }}</span>\n </div>\n }\n }\n <div class=\"flex items-baseline justify-between py-1\">\n <span class=\"font-medium min-w-20\" i18n>Note</span>\n <!-- <span class=\"text-sm\">{{ offer.note || '' }}</span> -->\n </div>\n </div>\n </div>\n <!-- safe area -->\n <div class=\"pb-16 sm:pb-3\"></div>\n <div class=\"\">\n <div class=\"flex items-center justify-end\">\n @if (offer.status.toString() === 'SUBMITTED') {\n <span\n class=\"underline text-sm underline-offset-4 mr-6 cursor-pointer hover:text-[--rt-brand-color]\"\n (click)=\"cancel()\"\n i18n\n >Cancel</span\n >\n }\n <!-- @if (offer.status.toString() === 'ACCEPTED') {\n <button mat-flat-button class=\"min-h-11\" (click)=\"holdingDepositCheckout()\" [disabled]=\"checkouting\">\n <span style=\"display: flex; align-items: center\">\n @if (checkouting) {\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\" [style.marginRight.px]=\"8\"></mat-progress-spinner>\n }\n {{ checkouting ? 'Processing...' : 'Pay holding deposit' }}\n </span>\n </button>\n } -->\n <!-- @if (offer.status.toString() === 'ACCEPTED') {\n <button mat-flat-button class=\"min-h-11\" (click)=\"securityDepositCheckout()\" [disabled]=\"checkouting\">\n <span style=\"display: flex; align-items: center\">\n @if (checkouting) {\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\" [style.marginRight.px]=\"8\"></mat-progress-spinner>\n }\n {{ checkouting ? 'Processing...' : 'Pay security deposit' }}\n </span>\n </button>\n } -->\n <!-- <button mat-flat-button class=\"w-32 min-h-11\" (click)=\"securityDepositCheckout()\" i18n>Pay security deposit</button> -->\n </div>\n </div>\n </div>\n </rolatech-container>\n}\n@if (info) {\n <div\n [ngClass]=\"loadingTimeline ? 'translate-x-full' : 'translate-none'\"\n class=\"fixed top-0 right-0 z-[1001] h-screen p-4 overflow-y-auto transition-transform bg-[--rt-raised-background] w-80 sm:w-[300px] shadow-xl\"\n >\n <div class=\"flex justify-between items-center sm:p-4\">\n <div class=\"text-xl font-bold\" i18n>Status</div>\n <button mat-icon-button (click)=\"info = !info\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n @if (loadingTimeline) {\n <div>\n <rolatech-spinner></rolatech-spinner>\n </div>\n } @else {\n <div class=\"mt-3 p-1 sm:p-4\">\n <ol class=\"relative boffer-l boffer-[--rt-boffer-color]\">\n @for (item of timelineData; track item) {\n <li class=\"mb-8 ml-4\">\n <div\n class=\"absolute w-3 h-3 rounded-full mt-1.5 -left-1.5 boffer boffer-[--rt-raised-background] bg-[--rt-text-primary]\"\n ></div>\n <div class=\"text-md font-bold mb-1\">{{ timelineStatus[item.status] }}</div>\n @if (item.status === 'OFFER_RETURN_REJECTED') {\n <div class=\"text-sm mb-1\">{{ item.return.note }}</div>\n }\n @if (item.status === 'OFFER_RETURN_REQUESTED') {\n <div class=\"text-sm mb-1\">{{ item.return.reason }}</div>\n }\n <div class=\"text-sm text-[--rt-text-secondary]\">{{ item.date }}</div>\n </li>\n }\n </ol>\n </div>\n }\n </div>\n}\n\n<div\n (click)=\"info = !info\"\n [ngClass]=\"info ? 'visible' : 'invisible'\"\n class=\"bg-[--rt-10-percent-layer] fixed inset-0 z-[1000]\"\n></div>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { APP_CONFIG, PricePipe } from '@rolatech/angular-common';\nimport {\n ContainerComponent,\n ToolbarComponent,\n BaseComponent,\n RichLabelComponent,\n ThumbnailComponent,\n} from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Property, PropertyViewing, PropertyViewingStatus } from '../../../interfaces';\nimport { AuthUserService } from '@rolatech/angular-auth';\nimport { RouterLink } from '@angular/router';\n\n@Component({\n selector: 'rolatech-property-viewing-detail',\n imports: [\n MatButtonModule,\n MatIconModule,\n NgClass,\n ThumbnailComponent,\n RichLabelComponent,\n ContainerComponent,\n ToolbarComponent,\n RouterLink,\n PricePipe,\n ],\n templateUrl: './property-viewing-detail.component.html',\n styleUrl: './property-viewing-detail.component.scss',\n})\nexport class PropertyViewingDetailComponent extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n authUserService = inject(AuthUserService);\n agent: any;\n viewing!: PropertyViewing;\n info = false;\n loadingTimeline = false;\n status: any = PropertyViewingStatus;\n env = inject(APP_CONFIG);\n\n async ngOnInit() {\n this.route.params.subscribe((params) => {\n const id = params['id'];\n this.get(id);\n });\n }\n get(id: string) {\n this.propertyService.getViewing(id).subscribe({\n next: (res: any) => {\n this.viewing = res.data;\n // this.findAgentInfo();\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 cancel() {\n this.propertyService.cancelViewing(this.id).subscribe({\n next: (res) => {\n this.viewing.status = 'CANCELLED' as PropertyViewingStatus;\n this.snackBarService.open('Cancelled');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","@if (viewing) {\n <rolatech-container>\n <rolatech-toolbar [title]=\"status[viewing.status]\" large link=\"../\"> </rolatech-toolbar>\n <div>\n @if (viewing.item) {\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Property details</div>\n <hr class=\"mb-2\" />\n <div\n class=\"flex items-center py-2 cursor-pointer hover:bg-[--rt-raised-background]\"\n [routerLink]=\"['../../', viewing.item.propertyId]\"\n >\n <div class=\"min-w-24 w-24 object-cover aspect-video rounded-md mr-3\">\n @defer {\n <rolatech-thumbnail [src]=\"viewing.item.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 <div class=\"flex w-full justify-between\">\n <div class=\"flex justify-between w-full\">\n <div class=\"flex flex-col\">\n <div>{{ viewing.item.title }}</div>\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span class=\"mr-1\">{{ viewing.item.bedrooms }}</span>\n <span i18n>Bedrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ viewing.item.bathrooms }}</span>\n <span i18n>Bathrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ viewing.item.receptions }}</span>\n <span i18n>Receptions</span>\n </div>\n </div>\n </div>\n <div class=\"text-right\">\n <div class=\"text-sm\">{{ viewing.item.price | price }}</div>\n </div>\n </div>\n </div>\n <div class=\"hidden md:flex flex-col px-3\"></div>\n </div>\n </div>\n }\n\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Proposed times</div>\n <hr class=\"mb-2\" />\n @for (item of viewing.proposedSlots; track $index) {\n <div class=\"flex flex-row items-center gap-3 py-3\">\n <rolatech-rich-label label=\"Date\" [title]=\"item.date\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Time\" [title]=\"item.time\"></rolatech-rich-label>\n @if (viewing.viewingDate && viewing.viewingTime) {\n @if (item.date === viewing.viewingDate && item.time === viewing.viewingTime) {\n <div class=\"ml-3\"><button mat-flat-button i18n disabled=\"\">Confirmed</button></div>\n }\n }\n </div>\n }\n </div>\n <!-- safe area -->\n <div class=\"pb-16 sm:pb-3\"></div>\n <div class=\"\">\n <div class=\"flex items-center justify-end\">\n @if (viewing.status.toString() !== 'CANCELLED') {\n <button mat-flat-button class=\"min-h-11\" (click)=\"cancel()\" i18n>Cancel</button>\n }\n </div>\n </div>\n </div>\n </rolatech-container>\n}\n@if (info) {\n <div\n [ngClass]=\"loadingTimeline ? 'translate-x-full' : 'translate-none'\"\n class=\"fixed top-0 right-0 z-[1001] h-screen p-4 overflow-y-auto transition-transform bg-[--rt-raised-background] w-80 sm:w-[300px] shadow-xl\"\n >\n <div class=\"flex justify-between items-center sm:p-4\">\n <div class=\"text-xl font-bold\" i18n>Status</div>\n <button mat-icon-button (click)=\"info = !info\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n}\n\n<div\n (click)=\"info = !info\"\n [ngClass]=\"info ? 'visible' : 'invisible'\"\n class=\"bg-[--rt-10-percent-layer] fixed inset-0 z-[1000]\"\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 [routerLink]=\"['../', item.id]\" [property]=\"item\"></rolatech-property-item>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n </rolatech-list>\n</rolatech-container>\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 { PropertyOfferComponent } from './property-offer/property-offer.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';\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: '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 component: PropertyViewingRequestComponent,\n },\n {\n path: ':id/offer',\n canActivate: [AuthGuard],\n component: PropertyOfferComponent,\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 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\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 { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\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\" i18n>Basic info</a>\n <a routerLink=\"./media\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Media</a>\n <a routerLink=\"./videos\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Videos</a>\n <a routerLink=\"./sections\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Details</a>\n <a routerLink=\"./floorplans\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Floorplans</a>\n <a routerLink=\"./location\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Location</a>\n <a routerLink=\"./features\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Features</a>\n <a routerLink=\"./keywords\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Keywords</a>\n <a routerLink=\"./highlights\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>Highlights</a>\n <a routerLink=\"./epc\" routerLinkActive=\"manage-active\" class=\"p-2\" i18n>EPC</a>\n <a routerLink=\"./translation\" routerLinkActive=\"manage-active\" class=\"p-2\" 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\" i18n>Schedule</a>\n <a routerLink=\"./pricing\" routerLinkActive=\"manage-active\" class=\"p-2\" 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 console.log(predictions);\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 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 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 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>\n <div class=\"font-bold text-lg p-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: 'amenities',\n // component: PropertyManageAmenitiesComponent,\n // },\n // {\n // path: 'options',\n // component: PropertyManageOptionsComponent,\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 { Component, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToolbarComponent, BaseComponent, RichLabelComponent, ThumbnailComponent } from '@rolatech/angular-components';\nimport { AuthUserService } from '@rolatech/angular-auth';\nimport { PropertyService } from '@rolatech/angular-services';\nimport {\n Property,\n PropertyViewingStatus,\n EmploymentStatus,\n PropertyViewing,\n PropertyViewerCategory,\n} from '../../../interfaces';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PropertyViewingConfirmationComponent } from '../../../components/property-viewing-confirmation/property-viewing-confirmation.component';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-manage-viewings-detail',\n imports: [CommonModule, ToolbarComponent, RichLabelComponent, ThumbnailComponent, MatButtonModule, PricePipe],\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 propertyService = inject(PropertyService);\n authUserService = inject(AuthUserService);\n viewing!: PropertyViewing;\n name = '';\n property!: Property;\n status = PropertyViewingStatus;\n employmentStatus = EmploymentStatus;\n propertyViewerCategory = PropertyViewerCategory;\n agent: any;\n viewingTimeConfirmed = false;\n selectedSlotId = '';\n ngOnInit(): void {\n this.getViewing();\n }\n getViewing() {\n this.propertyService.getViewing(this.id).subscribe({\n next: (res) => {\n this.viewing = res.data;\n this.name = this.viewing.firstName + ', ' + this.viewing.lastName;\n this.viewingTimeConfirmed = this.viewing.viewingDate ? true : false;\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 findConfirmedViewingTime() {\n const viewingProposedSlot: any = this.viewing.proposedSlots.find((item) => {\n return item.date === this.viewing.viewingDate && item.time === this.viewing.viewingTime;\n });\n this.selectedSlotId = viewingProposedSlot.id;\n }\n confirmViewingTime(item: any) {\n const options = {\n title: 'Confirm viewing time',\n component: PropertyViewingConfirmationComponent,\n data: {\n proposedTime: item,\n },\n };\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe({\n next: (result) => {\n if (result) {\n console.log(result);\n this.propertyService.confirmViewing(this.id, item.id).subscribe({\n next: (res) => {\n this.viewingTimeConfirmed = true;\n },\n });\n }\n },\n });\n }\n}\n","@if (viewing) {\n <rolatech-toolbar [title]=\"status[viewing.status]\" large link=\"../\"></rolatech-toolbar>\n <div class=\"px-4\">\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Viewer</div>\n <hr class=\"mb-2\" />\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-3\">\n <rolatech-rich-label label=\"Name\" [title]=\"name\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Email\" [title]=\"viewing.email\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Phone\" [title]=\"viewing.phone\"></rolatech-rich-label>\n </div>\n </div>\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Proposed times</div>\n <hr class=\"mb-2\" />\n @for (item of viewing.proposedSlots; track $index) {\n <div class=\"flex flex-row items-center gap-3 py-3\">\n <rolatech-rich-label label=\"Date\" [title]=\"item.date\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Time\" [title]=\"item.time\"></rolatech-rich-label>\n @if (viewing.viewingDate && viewing.viewingTime) {\n @if (item.date === viewing.viewingDate && item.time === viewing.viewingTime) {\n <div class=\"ml-3\"><button mat-flat-button i18n disabled=\"\">Confirmed</button></div>\n }\n }\n @if (!viewingTimeConfirmed) {\n <div class=\"ml-3\"><button mat-flat-button (click)=\"confirmViewingTime(item)\" i18n>Confirm</button></div>\n }\n </div>\n }\n </div>\n <!-- Introducing agent -->\n @if (viewing.viewerCategory.toString() === 'AGENT') {\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Qualification</div>\n <hr class=\"mb-2\" />\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-3\">\n <!-- <rolatech-rich-label label=\"Move-in date\" [title]=\"viewing.startDate\"></rolatech-rich-label> -->\n <rolatech-rich-label label=\"Tenancy duration\" [title]=\"viewing.tenancyDuration\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Number of tenants\" [title]=\"viewing.numberOfTenants\"></rolatech-rich-label>\n </div>\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-3\">\n <rolatech-rich-label\n label=\"Employment status\"\n [title]=\"employmentStatus[viewing.employmentStatus]\"\n ></rolatech-rich-label>\n <!-- <rolatech-rich-label label=\"Employer\" [title]=\"viewing.startDate\"></rolatech-rich-label> -->\n <rolatech-rich-label label=\"Annual income\" [title]=\"viewing.income\"></rolatech-rich-label>\n </div>\n </div>\n }\n\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Property details</div>\n <hr class=\"mb-2\" />\n @if (viewing.item) {\n <div class=\"flex items-center py-2\">\n <div class=\"min-w-24 w-24 object-cover aspect-video rounded-md mr-3\">\n @defer {\n <rolatech-thumbnail [src]=\"viewing.item.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 <div class=\"flex w-full justify-between\">\n <div class=\"flex justify-between w-full\">\n <div class=\"flex flex-col\">\n <div class=\"font-bold\">{{ viewing.item.title }}</div>\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span class=\"mr-1\">{{ viewing.item.bedrooms }}</span>\n <span i18n>Bedrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ viewing.item.bathrooms }}</span>\n <span i18n>Bathrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ viewing.item.receptions }}</span>\n <span i18n>Receptions</span>\n </div>\n </div>\n </div>\n <div class=\"text-right\">\n <div class=\"text-sm\">{{ viewing.item.price | price }}</div>\n </div>\n </div>\n </div>\n <div class=\"hidden md:flex flex-col px-3\"></div>\n </div>\n }\n </div>\n\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Viewing agent</div>\n <hr class=\"mb-2\" />\n @if (agent) {\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-3\">\n <rolatech-rich-label label=\"Name\" [title]=\"agent.name\"></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 }\n </div>\n </div>\n}\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, 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-letting-manage-item',\n imports: [CommonModule, ThumbnailComponent, ImagePlaceholderComponent, MatButtonModule, MatMenuModule, PricePipe],\n templateUrl: './letting-manage-item.html',\n styleUrl: './letting-manage-item.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class LettingManageItem {\n @HostBinding('class.rolatech-letting-manage-item') hasClass = true;\n el = inject(ElementRef);\n letting = 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}\n","<div\n class=\"flex p-3 bg-[--rt-raised-background] hover:bg-[--rt-raised-background] cursor-pointer rounded-md\"\n [ngClass]=\"list() ? 'w-full flex-row' : 'flex-col h-full'\"\n>\n <div>\n @if (letting().media) {\n <div class=\"object-cover aspect-video rounded-lg\" [ngClass]=\"list() ? 'w-32 mr-3' : ''\">\n @defer {\n <rolatech-thumbnail [src]=\"letting().media.length > 0 ? letting().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=\"py-2\">\n <div class=\"text-lg font-bold\">{{ letting().title }}</div>\n </div>\n <div class=\"flex-1\"></div>\n <div class=\"\">{{ letting().price | price }}</div>\n</div>\n","import { Component, DestroyRef, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\nimport { BaseComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { PropertySearchService, PropertyService } from '@rolatech/angular-services';\nimport { Property } from '../../../interfaces';\nimport { LettingManageItem } from '../../../components/letting-manage-item/letting-manage-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';\n\n@Component({\n selector: 'rolatech-letting-manage-index',\n imports: [\n CommonModule,\n ToolbarComponent,\n MatButtonModule,\n RouterLink,\n LettingManageItem,\n MatPaginatorModule,\n PropertyManageItemSkeleton,\n ],\n templateUrl: './letting-manage-index.html',\n styleUrl: './letting-manage-index.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class LettingManageIndex extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n propertySearchService = inject(PropertySearchService);\n loading = false;\n lettings = signal<Property[]>([]);\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 find() {\n this.loading = true;\n this.propertyService.find({}).subscribe({\n next: (res: any) => {\n this.lettings = res.data;\n this.loading = false;\n },\n error: (error) => {\n this.loading = false;\n },\n });\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n\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.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 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\"> </rolatech-toolbar>\n@if (loading) {\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 (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 px-2\">\n @for (item of lettings(); track $index) {\n <rolatech-letting-manage-item [letting]=\"item\" routerLink=\"./{{ item.id }}\"></rolatech-letting-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, 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 { MatMenuModule } from '@angular/material/menu';\nimport { Property } from '../../interfaces';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-letting-actions',\n imports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule, 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","<div class=\"flex flex-col gap-3\">\n <a mat-stroked-button class=\"\" (click)=\"onRequestViewing(letting())\" i18n>Request viewing</a>\n @if (letting().priceType && letting().priceType.toString() === 'PARTIAL') {\n <a mat-flat-button class=\"\" (click)=\"onDeposit(letting())\" i18n>Pay deposit {{ displayDeposit() | price}}</a>\n } @else {\n <a mat-flat-button class=\"\" (click)=\"onOffer(letting())\" i18n>Make an offer</a>\n }\n <ng-content select=\"rolatech-letting-action-contact\"></ng-content>\n</div>\n","import { Component, input, output, 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-letting-action-contact',\n imports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule],\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 onCallAgent() { }\n onEmailAgent(property: Property) {\n this.emailAgent.emit(property);\n }\n}\n","<a mat-stroked-button class=\"w-full\" [href]=\"'https://wa.me/' + phone()\" target=\"_blank\">\n <span i18n>Chat With Agent</span>\n</a>\n","import { Component, computed, effect, inject, OnInit, signal } from '@angular/core';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, BaseComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport _ from 'lodash';\nimport { PropertyPricingComponent } from '../../../components';\nimport { PropertyFeaturesComponent } from '../../../components/property-features/property-features.component';\nimport { PropertyInfoComponent } from '../../../components/property-info/property-info.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 { Property, PropertyOption, PropertyVariant, PropertyVariantOption } 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';\n\n@Component({\n selector: 'rolatech-letting-manage-detail',\n imports: [\n AngularCommonModule,\n AngularComponentsModule,\n PropertyInfoComponent,\n PropertyMediaComponent,\n PropertyPricingComponent,\n PropertySectionComponent,\n LettingActions,\n LettingActionContact,\n PropertyLocationComponent,\n PropertyFeaturesComponent,\n PropertyVideoComponent,\n PropertyAgentRenderer,\n ],\n templateUrl: './letting-manage-detail.html',\n styleUrl: './letting-manage-detail.scss',\n})\nexport class LettingManageDetail extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n propertyService = inject(PropertyService);\n authenticated = this.authService.authenticated;\n property!: Property;\n fullname = '';\n username = '';\n user: any;\n inWishList = false;\n purchased = false;\n selectedOption!: PropertyOption;\n variants: PropertyVariant[] = [];\n selectedVariant!: PropertyVariant;\n variantOption = signal<PropertyVariantOption | undefined>(undefined);\n variantOptionChanged = computed(() => {\n return this.variantOption();\n });\n\n // results: any[] = [];\n constructor() {\n super();\n effect(() => {\n if (this.authenticated()) {\n this.wishListCheck();\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 = res.data;\n if (this.property.variants) {\n this.variants = this.property.variants;\n this.selectedVariant = this.variants[0];\n // this.selectedVariant.options.forEach((item) => {\n // this.results.push([item.option.id, item.value.id]);\n // });\n }\n this.findUserBaseInfo(this.property.agentId);\n this.titleService.setTitle(`${this.property.title}`);\n },\n });\n }\n private findVariant(optionId: string, valueId: string): PropertyVariant | undefined {\n return this.variants.find((item) => {\n const exist = item.options.some((i: PropertyVariantOption) => i.option.id === optionId && i.value.id === valueId);\n if (exist) {\n return item;\n }\n return null;\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([`/lettings/${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 if (this.authenticated()) {\n this.router.navigate([`/lettings/${this.id}/offer`]);\n } else {\n this.snackBarService.open('Please sign in');\n }\n }\n\n onOptionChange(e) {\n const criteria: any = [];\n this.selectedVariant.options.map((item) => {\n criteria.push({\n optionId: item.option.id === e.option.id ? e.option.id : item.option.id,\n valueId: item.option.id === e.option.id ? e.value.id : item.value.id,\n });\n });\n\n // const criteria = [\n // { optionId: '249008855294545920', valueId: '249008855298740224' }, // color: red\n // { optionId: '248661715955355648', valueId: '249001130061860865' }, // size: 256GB\n // ];\n\n // Function to check if a variant matches all the criteria\n const matchesAllCriteria = (variant, criteria) => {\n return _.every(criteria, (criterion) => {\n return _.some(variant.options, (o) => o.option.id === criterion.optionId && o.value.id === criterion.valueId);\n });\n };\n // Function to update the criteria based on a matching variant\n const updateCriteriaFromVariant = (variant) => {\n return _.map(variant.options, (o) => ({\n optionId: o.option.id,\n valueId: o.value.id,\n }));\n };\n\n // Find the variant that matches all the criteria\n const matchingVariant = _.find(this.variants, (variant) => matchesAllCriteria(variant, criteria));\n this.selectedVariant = matchingVariant!;\n // const updatedCriteria = matchingVariant ? updateCriteriaFromVariant(matchingVariant) : [];\n }\n}\n","@if (property) {\n<div class=\"flex flex-col w-full\">\n <div class=\"py-3\">\n <rolatech-property-media [media]=\"property.media\"></rolatech-property-media>\n </div>\n <div class=\"flex flex-col md:flex-row gap-3 w-full\">\n <div class=\"w-full md:w-2/3\">\n <rolatech-property-info [property]=\"property\" (wish)=\"onWish($event)\" [inWishList]=\"inWishList\"> </rolatech-property-info>\n <rolatech-property-agent-renderer\n [name]=\"fullname\"\n [avatar]=\"user?.avatar\"\n [username]=\"username\"\n ></rolatech-property-agent-renderer>\n <rolatech-property-features [features]=\"property.userFeatures\"></rolatech-property-features>\n <rolatech-property-location [location]=\"property.location\"></rolatech-property-location>\n @if (property.videos) {\n <rolatech-property-video [video]=\"property.videos[0]\"></rolatech-property-video>\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 </div>\n </div>\n <div class=\"w-full h-fit md:w-1/3 rounded-md border shadow p-3\">\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 <rolatech-property-pricing (wish)=\"onWish($event)\" [property]=\"property\"></rolatech-property-pricing>\n <rolatech-letting-actions\n [letting]=\"property\"\n (offer)=\"onOffer($event)\"\n (deposit)=\"onOffer($event)\"\n (requestViewing)=\"onRequestViewing($event)\"\n >\n @if (user) {\n <rolatech-letting-action-contact [phone]=\"user.phone\"></rolatech-letting-action-contact>\n }\n </rolatech-letting-actions>\n </div>\n </div>\n</div>\n}\n","import { Component, computed, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport { FormsModule } from '@angular/forms';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatButtonModule } from '@angular/material/button';\nimport { 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 { MatInputModule } from '@angular/material/input';\nimport { MatRadioModule, MatRadioChange } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { ThumbnailComponent, BaseComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport {\n Property,\n PropertyViewingRequest,\n PropertyViewerCategory,\n PropertyApplicantType,\n ResidencyStatus,\n EmploymentStatus,\n AdverseCreditStatus,\n} from '../../../interfaces';\nimport { PropertyViewingTimeComponent } from '../../../components/property-viewing-time/property-viewing-time.component';\nimport { PropertyPricingComponent } from '../../../components';\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-letting-viewing-request',\n imports: [\n CommonModule,\n MatFormFieldModule,\n FormsModule,\n MatInputModule,\n TextFieldModule,\n MatButtonModule,\n ThumbnailComponent,\n MatSelectModule,\n MatDatepickerModule,\n MatRadioModule,\n PropertyViewingTimeComponent,\n PropertyPricingComponent,\n ],\n templateUrl: './letting-manage-viewing-request.html',\n styleUrl: './letting-manage-viewing-request.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 LettingManageViewingRequest extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n propertyService = inject(PropertyService);\n property!: Property;\n minDate = new Date();\n viewing: PropertyViewingRequest = {\n proposedSlots: [\n { date: '', time: '' },\n { date: '', time: '' },\n { date: '', time: '' },\n ],\n };\n tenants: any;\n countries: string[] = ['United Kingdom', 'China'];\n selectedCountry;\n ngOnInit(): void {\n this.getProperty();\n this.findTenants();\n }\n getProperty() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property = res.data;\n this.titleService.setTitle(`${this.property.title}`);\n },\n });\n }\n findTenants() {\n this.propertyService.findTenants({}).subscribe({\n next: (res: any) => {\n this.tenants = res.data;\n },\n });\n }\n onCountrySelect(event: any) {\n this.viewing['country'] = event.value;\n }\n\n sendRequest() {\n this.propertyService.requestViewing(this.id, this.viewing).subscribe({\n next: (res) => {\n this.snackBarService.open('Request viewing successfully');\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<div class=\"flex flex-col-reverse md:flex-row w-full p-4 mb-3 gap-3\">\n <div class=\"w-full md:w-2/3\">\n <div>\n <div class=\"text-xl font-bold py-2 mb-3\" i18n>Request a viewing</div>\n <mat-form-field appearance=\"fill\">\n <mat-label>Select tenant</mat-label>\n <mat-select [(ngModel)]=\"viewing.tenantId\">\n @for (item of tenants; 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 <mat-form-field appearance=\"fill\">\n <input\n matInput\n placeholder=\"Start date\"\n [matDatepicker]=\"startDatePicker\"\n [min]=\"minDate\"\n (focus)=\"startDatePicker.open()\"\n name=\"startDate\"\n [(ngModel)]=\"viewing.startDate\"\n (dateInput)=\"viewing.startDate = $event.value.format('YYYY-MM-DD')\"\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 class=\"flex flex-col md:flex-row gap-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Tenancy length</mat-label>\n <span matTextSuffix>months</span>\n <input matInput type=\"number\" [(ngModel)]=\"viewing.tenancyDuration\" />\n </mat-form-field>\n </div>\n\n <div>\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 @for (item of viewing.proposedSlots; track $index) {\n <rolatech-property-viewing-time [proposedTime]=\"item\"></rolatech-property-viewing-time>\n }\n </div>\n </div>\n <button mat-flat-button (click)=\"sendRequest()\" i18n>Send request</button>\n </div>\n @if (property) {\n <div class=\"w-full md:w-1/2 py-2 mb-3\">\n <div class=\"text-xl font-bold py-2 mb-3\" i18n>Property info</div>\n <div>\n <rolatech-thumbnail [src]=\"property ? property.media[0].url : ''\" size=\"small\"></rolatech-thumbnail>\n </div>\n <rolatech-property-pricing [property]=\"property\"></rolatech-property-pricing>\n </div>\n }\n</div>\n","import { Component, inject, OnInit } 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 { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { ContainerComponent, ThumbnailComponent, BaseComponent } from '@rolatech/angular-components';\nimport { PropertyOfferService, PropertyService } from '@rolatech/angular-services';\nimport { PropertyOfferRequest, Property } from '../../../interfaces';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { PropertyPricingComponent } from '../../../components';\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-letting-manage-offer-request',\n imports: [\n CommonModule,\n ContainerComponent,\n MatFormFieldModule,\n FormsModule,\n MatInputModule,\n TextFieldModule,\n MatButtonModule,\n ThumbnailComponent,\n MatSelectModule,\n MatDatepickerModule,\n MatProgressSpinner,\n PropertyPricingComponent,\n ],\n templateUrl: './letting-manage-offer-request.html',\n styleUrl: './letting-manage-offer-request.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 LettingManageOfferRequest extends BaseComponent implements OnInit {\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n propertyService = inject(PropertyService);\n propertyOfferService = inject(PropertyOfferService);\n\n offer: PropertyOfferRequest = {\n startDate: '',\n notes: '',\n price: 0,\n };\n get formattedAmount(): string {\n return this.offer.price.toFixed(2); // equivalent to | number:'1.2-2'\n }\n property!: Property;\n minDate = new Date();\n sending = false;\n tenants: any;\n ngOnInit(): void {\n this.getProperty();\n this.findTenants();\n }\n onAmountChange(event: Event) {\n const inputValue: any = (event.target as HTMLInputElement).value;\n console.log(inputValue);\n const regex = /^\\d*\\.?\\d{0,2}$/;\n\n if (regex.test(inputValue)) {\n this.offer.price = inputValue;\n }\n }\n getProperty() {\n this.propertyService.get(this.id).subscribe({\n next: (res: any) => {\n this.property = res.data;\n this.titleService.setTitle(`${this.property.title}`);\n },\n });\n }\n findTenants() {\n this.propertyService.findTenants({}).subscribe({\n next: (res: any) => {\n this.tenants = res.data;\n },\n });\n }\n onCategorySelect(event: any) {\n this.offer['category'] = event.value;\n }\n onResidencyStatusSelect(event: any) {}\n sendRequest() {\n this.sending = true;\n this.propertyOfferService.makeOffer(this.id, this.offer).subscribe({\n next: (res) => {\n this.sending = false;\n this.snackBarService.open('Sent successfully');\n this.router.navigate([`/properties/offers/${res.data.id}`]);\n },\n error: (error) => {\n this.sending = false;\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<rolatech-container>\n <div class=\"flex flex-col-reverse md:flex-row w-full py-2 mb-3 gap-3\">\n <div class=\"w-full md:w-2/3\">\n <div>\n <div class=\"text-xl font-bold py-2 mb-3\">\n <!-- <span i18n>Offer for </span><span>{{ property()?.title : '' }}</span> -->\n @if (property) {\n <span i18n=\"@@offerFor\">Offer for {{ property.title }}</span>\n\n }\n </div>\n <mat-form-field appearance=\"fill\">\n <mat-label>Select tenant</mat-label>\n <mat-select [(ngModel)]=\"offer.tenantId\">\n @for (item of tenants; 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 <mat-form-field appearance=\"fill\" floatLabel=\"always\">\n <mat-label i18n>Offer price</mat-label>\n <span matTextPrefix>£&nbsp;</span>\n <input matInput type=\"text\" placeholder=\"0.00\" [(ngModel)]=\"offer.price\" required />\n <!-- <input\n matInput\n type=\"number\"\n placeholder=\"0.00\"\n [value]=\"formattedAmount\"\n (input)=\"onAmountChange($event)\"\n required\n /> -->\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Tenancy Length</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"offer.tenancyDuration\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>Start date</mat-label>\n <input\n matInput\n placeholder=\"Start date\"\n [matDatepicker]=\"startDatePicker\"\n [min]=\"minDate\"\n (focus)=\"startDatePicker.open()\"\n name=\"startDate\"\n [(ngModel)]=\"offer.startDate\"\n (dateInput)=\"offer.startDate = $event.value.format('YYYY-MM-DD')\"\n readonly\n required\n />\n <mat-datepicker-toggle matIconPrefix [for]=\"startDatePicker\"></mat-datepicker-toggle>\n <mat-datepicker #startDatePicker></mat-datepicker>\n </mat-form-field>\n </div>\n <div>\n <div class=\"text-md py-2\" i18n>Your message(Optional)</div>\n <mat-form-field appearance=\"fill\">\n <textarea matInput type=\"text\" [(ngModel)]=\"offer.notes\" cdkTextareaAutosize cdkAutosizeMinRows=\"3\"></textarea>\n </mat-form-field>\n </div>\n <!-- <button mat-flat-button (click)=\"sendRequest()\" i18n>Send request</button> -->\n <button mat-flat-button (click)=\"sendRequest()\" [disabled]=\"sending\">\n <span style=\"display: flex; align-items: center\">\n @if (sending) {\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\" [style.marginRight.px]=\"8\"></mat-progress-spinner>\n } {{ sending ? 'Requesting...' : 'Send request' }}\n </span>\n </button>\n </div>\n @if (property) {\n <div class=\"w-full md:w-1/2 py-2 mb-3\">\n <div class=\"text-xl font-bold py-2 mb-3\" i18n>Property info</div>\n <div>\n <rolatech-thumbnail [src]=\"property ? property.media[0].url : ''\" size=\"small\"></rolatech-thumbnail>\n </div>\n <rolatech-property-pricing [property]=\"property\"></rolatech-property-pricing>\n </div>\n }\n </div>\n</rolatech-container>\n","import { Routes } from \"@angular/router\";\nimport { LettingManageIndex } from \"./letting-manage-index/letting-manage-index\";\nimport { LettingManageDetail } from \"./letting-manage-detail/letting-manage-detail\";\nimport { LettingManageViewingRequest } from \"./letting-manage-viewing-request/letting-manage-viewing-request\";\nimport { LettingManageOfferRequest } from \"./letting-manage-offer-request/letting-manage-offer-request\";\n\nexport const lettingManageRoutes: Routes = [\n {\n path: '',\n component: LettingManageIndex\n },\n {\n path: ':id',\n component: LettingManageDetail\n },\n {\n path: ':id/viewing/application',\n component: LettingManageViewingRequest,\n },\n {\n path: ':id/offer',\n component: LettingManageOfferRequest,\n },\n]\n","import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Tenant } from '../../interfaces';\n\n@Component({\n selector: 'rolatech-tenant-item',\n imports: [CommonModule],\n templateUrl: './tenant-item.html',\n styleUrl: './tenant-item.scss',\n})\nexport class TenantItem {\n tenant = input.required<Tenant>();\n}\n","<div class=\"flex items-center justify-between px-2 h-11 cursor-pointer hover:bg-[--rt-raised-background]\">\n <div>{{tenant().firstName}}, {{tenant().lastName}}</div>\n <div class=\"flex flex-row items-center\">\n <div>{{tenant().email}}</div>\n </div>\n</div>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToolbarComponent, 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';\n\n@Component({\n selector: 'rolatech-tenant-manage-index',\n imports: [CommonModule, ToolbarComponent, SpinnerComponent, MatButtonModule, MatIcon, RouterLink, TenantItem],\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: any\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 = res.data\n this.loading = false\n },\n error: error => {\n this.loading = false\n }\n })\n\n }\n}\n","<rolatech-toolbar title=\"Tenants\">\n <div class=\"flex items-center gap-2\">\n <button mat-flat-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n <span i18n>Add tenant</span>\n </button>\n </div>\n</rolatech-toolbar>\n@if (loading) {\n<div class=\"flex justify-center items-center\">\n <rolatech-spinner></rolatech-spinner>\n</div>\n} @else {\n<div class=\"bg-[--rt-rasised-background] h-full\">\n <div class=\"flex flex-col p-2\">\n <div class=\"flex px-2 h-11 items-center justify-between\">\n <div class=\"text-lg font-bold\">Name</div>\n <div class=\"text-lg font-bold\">Email</div>\n </div>\n @for (item of tenants; track $index) {\n <rolatech-tenant-item [tenant]=\"item\" routerLink=\"./{{ item.id }}\"></rolatech-tenant-item>\n <hr />\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, 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, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToolbarComponent } from '@rolatech/angular-components';\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 { PropertyService } from '@rolatech/angular-services';\nimport { PropertyViewerCategory, PropertyApplicantType, ResidencyStatus, EmploymentStatus, AdverseCreditStatus } from '../../../interfaces';\n\n@Component({\n selector: 'rolatech-tenant-manage-create',\n imports: [\n CommonModule,\n ToolbarComponent,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n TextFieldModule,\n MatSelectModule,\n MatOptionModule,\n MatButtonModule],\n templateUrl: './tenant-manage-create.html',\n styleUrl: './tenant-manage-create.scss',\n})\nexport class TenantManageCreate {\n private propertyService = inject(PropertyService);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private snackBar = inject(MatSnackBar);\n tenant: any = {};\n tenantCategory = PropertyApplicantType;\n residencyStatus = ResidencyStatus;\n employmentStatus = EmploymentStatus;\n adverseCreditStatus = AdverseCreditStatus;\n create() {\n const data = {\n ...this.tenant,\n };\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: (e) => {\n this.snackBar.open(e.message);\n },\n });\n }\n}\n","<rolatech-toolbar title=\"Add tenant\" link=\"../\"> </rolatech-toolbar>\n<div class=\"p-3\">\n <div class=\"flex flex-col md:w-2/3\">\n <div class=\"flex w-full gap-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>First name</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"tenant.firstName\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Last name</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"tenant.lastName\" required />\n </mat-form-field>\n </div>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Email</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"tenant.email\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Phone</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"tenant.phone\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" floatLabel=\"always\">\n <mat-label i18n>Annual income(All tenants combined)</mat-label>\n <span matTextPrefix>£&nbsp;</span>\n <input matInput type=\"text\" placeholder=\"00.00\" [(ngModel)]=\"tenant.income\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Number Of Tenants</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"tenant.numberOfTenants\" required />\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Tenant category</mat-label>\n <mat-select placeholder=\"Applicant type\" [(ngModel)]=\"tenant.tenantCategory\" required>\n @for (tenantCategory of tenantCategory | keyvalue; track tenantCategory) {\n <mat-option [value]=\"tenantCategory.key\"> {{ tenantCategory.value }} </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Employment Status</mat-label>\n <mat-select placeholder=\"Employment Status\" [(ngModel)]=\"tenant.employmentStatus\" required>\n @for (item of employmentStatus | keyvalue; track item) {\n <mat-option [value]=\"item.key\"> {{ item.value }} </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>AdverseCredit Status</mat-label>\n <mat-select placeholder=\"AdverseCredit Status\" [(ngModel)]=\"tenant.adverseCreditStatus\" required>\n @for (item of adverseCreditStatus | keyvalue; track item) {\n <mat-option [value]=\"item.key\"> {{ item.value }} </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Residency status</mat-label>\n <mat-select placeholder=\"Residency status\" [(ngModel)]=\"tenant.residencyStatus\" required>\n @for (status of residencyStatus | keyvalue; track status) {\n <mat-option [value]=\"status.key\"> {{ status.value }} </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n <div i18n>* items are required</div>\n <div class=\"mt-3\">\n <button mat-flat-button class=\"w-28\" (click)=\"create()\" i18n>Save</button>\n </div>\n</div>\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, inject, OnInit, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { RouterModule } from '@angular/router';\nimport { ToolbarComponent, TabsComponent, TabComponent, EmptyComponent, BaseComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyViewingItemComponent } from '../../../components/property-viewing-item/property-viewing-item.component';\nimport { PropertyViewing } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\n\n@Component({\n selector: 'rolatech-property-agent-viewing-index',\n imports: [\n CommonModule,\n ToolbarComponent,\n MatButtonModule,\n TabsComponent,\n TabComponent,\n RouterModule,\n EmptyComponent,\n PropertyViewingItemComponent,\n MatPaginatorModule,\n ],\n templateUrl: './property-agent-viewing-index.html',\n styleUrl: './property-agent-viewing-index.scss',\n})\nexport class PropertyAgentViewingIndex extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n select = 0;\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Completed',\n icon: 'category',\n status: 'completed',\n },\n {\n name: 'Cancelled',\n icon: 'category',\n status: 'cancelled',\n },\n ];\n filterOptions: any = {\n type: '',\n status: '',\n };\n loading = false;\n viewings = signal<PropertyViewing[]>([]);\n meta: any;\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n pageIndex = signal(0);\n\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n\n let filter = '';\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filter = `status:${status?.toUpperCase()}`;\n }\n return {\n page,\n filter,\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.propertyService.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-toolbar title=\"Viewings\">\n <div class=\"flex items-center gap-2\"></div>\n</rolatech-toolbar>\n<rolatech-tabs [select]=\"select\">\n @for (item of links; track item) { @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n } }\n</rolatech-tabs>\n<div>\n @if (viewings(); as viewings) { @for (item of viewings; track $index) {\n <rolatech-property-viewing-item\n [loading]=\"loading\"\n [routerLink]=\"['./', item.id]\"\n [viewing]=\"item\"\n ></rolatech-property-viewing-item>\n } } @else {\n <rolatech-empty></rolatech-empty>\n }\n</div>\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, inject, OnInit } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AuthUserService } from '@rolatech/angular-auth';\nimport { ToolbarComponent, RichLabelComponent, ThumbnailComponent, BaseComponent } from '@rolatech/angular-components';\nimport { PropertyService } from '@rolatech/angular-services';\nimport { PropertyViewingConfirmationComponent } from '../../../components/property-viewing-confirmation/property-viewing-confirmation.component';\nimport {\n PropertyViewing,\n Property,\n PropertyViewingStatus,\n EmploymentStatus,\n PropertyViewerCategory,\n} from '../../../interfaces';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-agent-viewing-detail',\n imports: [CommonModule, ToolbarComponent, RichLabelComponent, ThumbnailComponent, MatButtonModule, PricePipe],\n templateUrl: './property-agent-viewing-detail.html',\n styleUrl: './property-agent-viewing-detail.scss',\n})\nexport class PropertyAgentViewingDetail extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n authUserService = inject(AuthUserService);\n viewing!: PropertyViewing;\n name = '';\n property!: Property;\n status = PropertyViewingStatus;\n employmentStatus = EmploymentStatus;\n propertyViewerCategory = PropertyViewerCategory;\n agent: any;\n viewingTimeConfirmed = false;\n selectedSlotId = '';\n ngOnInit(): void {\n this.getViewing();\n }\n getViewing() {\n this.propertyService.getViewing(this.id).subscribe({\n next: (res) => {\n this.viewing = res.data;\n this.name = this.viewing.firstName + ', ' + this.viewing.lastName;\n this.getProperty(this.viewing.propertyId);\n this.viewingTimeConfirmed = this.viewing.viewingDate ? true : false;\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 findConfirmedViewingTime() {\n const viewingProposedSlot: any = this.viewing.proposedSlots.find((item) => {\n return item.date === this.viewing.viewingDate && item.time === this.viewing.viewingTime;\n });\n this.selectedSlotId = viewingProposedSlot.id;\n }\n confirmViewingTime(item: any) {\n const options = {\n title: 'Confirm viewing time',\n component: PropertyViewingConfirmationComponent,\n data: {\n proposedTime: item,\n },\n };\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe({\n next: (result) => {\n if (result) {\n console.log(result);\n this.propertyService.confirmViewing(this.id, item.id).subscribe({\n next: (res) => {\n this.viewingTimeConfirmed = true;\n },\n });\n }\n },\n });\n }\n}\n","@if (viewing) {\n<rolatech-toolbar [title]=\"status[viewing.status]\" large link=\"../\"></rolatech-toolbar>\n<div class=\"px-4\">\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Viewer</div>\n <hr class=\"mb-2\" />\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-3\">\n <rolatech-rich-label label=\"Name\" [title]=\"name\"></rolatech-rich-label>\n </div>\n </div>\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Proposed times</div>\n <hr class=\"mb-2\" />\n @for (item of viewing.proposedSlots; track $index) {\n <div class=\"flex flex-row items-center gap-3 py-3\">\n <rolatech-rich-label label=\"Date\" [title]=\"item.date\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Time\" [title]=\"item.time\"></rolatech-rich-label>\n @if (viewing.viewingDate && viewing.viewingTime) { @if (item.date === viewing.viewingDate && item.time ===\n viewing.viewingTime) {\n <div class=\"ml-3\"><button mat-flat-button i18n disabled=\"\">Confirmed</button></div>\n } } @if (!viewingTimeConfirmed) {\n <div class=\"ml-3\"><button mat-flat-button (click)=\"confirmViewingTime(item)\" i18n>Confirm</button></div>\n }\n </div>\n }\n </div>\n <!-- Introducing agent -->\n @if (viewing.viewerCategory.toString() === 'AGENT') {\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Qualification</div>\n <hr class=\"mb-2\" />\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-3\">\n <!-- <rolatech-rich-label label=\"Move-in date\" [title]=\"viewing.startDate\"></rolatech-rich-label> -->\n <rolatech-rich-label label=\"Tenancy duration\" [title]=\"viewing.tenancyDuration\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Number of tenants\" [title]=\"viewing.numberOfTenants\"></rolatech-rich-label>\n </div>\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-3\">\n <rolatech-rich-label label=\"Employment status\" [title]=\"employmentStatus[viewing.employmentStatus]\"></rolatech-rich-label>\n <!-- <rolatech-rich-label label=\"Employer\" [title]=\"viewing.startDate\"></rolatech-rich-label> -->\n <rolatech-rich-label label=\"Annual income\" [title]=\"viewing.income\"></rolatech-rich-label>\n </div>\n </div>\n }\n\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Property details</div>\n <hr class=\"mb-2\" />\n @if (property) {\n <div class=\"flex items-center py-2\">\n <div class=\"min-w-24 w-24 object-cover aspect-video rounded-md 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 <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 class=\"hidden md:flex flex-col px-3\"></div>\n </div>\n }\n </div>\n\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Viewing agent</div>\n <hr class=\"mb-2\" />\n @if (agent) {\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-3\">\n <rolatech-rich-label label=\"Name\" [title]=\"agent.name\"></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 }\n </div>\n</div>\n}\n","import { Routes } from '@angular/router';\nimport { PropertyAgentViewingIndex } from './property-agent-viewing-index/property-agent-viewing-index';\nimport { PropertyAgentViewingDetail } from './property-agent-viewing-detail/property-agent-viewing-detail';\n\nexport const propertyAgentViewingRoutes: Routes = [\n {\n path: '',\n component: PropertyAgentViewingIndex,\n },\n {\n path: ':id',\n component: PropertyAgentViewingDetail,\n },\n];\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AuthUserService } from '@rolatech/angular-auth';\nimport {\n ToolbarComponent,\n RichLabelComponent,\n ThumbnailComponent,\n BaseComponent,\n AcceptDialogComponent,\n RejectDialogComponent,\n} from '@rolatech/angular-components';\nimport { PropertyService, InvoiceService, PropertyOfferService } from '@rolatech/angular-services';\nimport { PropertyOffer, Property, PropertyOfferStatus, EmploymentStatus } from '../../../interfaces';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-property-agent-offer-detail',\n imports: [CommonModule, ToolbarComponent, RichLabelComponent, ThumbnailComponent, MatButtonModule, PricePipe],\n templateUrl: './property-agent-offer-detail.html',\n styleUrl: './property-agent-offer-detail.scss',\n})\nexport class PropertyAgentOfferDetail extends BaseComponent implements OnInit {\n propertyService = inject(PropertyService);\n propertyOfferService = inject(PropertyOfferService);\n authUserService = inject(AuthUserService);\n invoiceService = inject(InvoiceService);\n offer!: PropertyOffer;\n name = '';\n property!: Property;\n status = PropertyOfferStatus;\n employmentStatus = EmploymentStatus;\n agent: any;\n ngOnInit(): void {\n this.getOffer();\n }\n getOffer() {\n this.propertyOfferService.getOffer(this.id).subscribe({\n next: (res) => {\n this.offer = res.data;\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, { 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 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.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}\n","@if (offer) {\n<rolatech-toolbar [title]=\"status[offer.status]\" large link=\"../\">\n @if (offer.status.toString() === 'SUBMITTED') {\n <button mat-flat-button (click)=\"accept()\" i18n>Accept</button>\n <button mat-flat-button (click)=\"counter()\" i18n>Counter offer</button>\n <button mat-button (click)=\"reject()\" i18n>Reject</button>\n }\n <!-- References -->\n @if (offer.status.toString() === 'HOLDING_DEPOSIT_PAID') {\n <button mat-flat-button (click)=\"underOffer()\" i18n>Under offer</button>\n } @if (offer.status.toString() === 'UNDER_OFFER') {\n <button mat-flat-button (click)=\"rfPassed()\" i18n>References passed</button>\n <button mat-flat-button (click)=\"rfFailed()\" i18n>References failed</button>\n }\n <!-- Completed -->\n @if (offer.status.toString() === 'MOVE_IN_PAYMENT_PAID') {\n <button mat-flat-button (click)=\"completed()\" i18n>Completed</button>\n }\n</rolatech-toolbar>\n<div class=\"px-4\">\n <div>\n <div class=\"text-lg font-bold py-2\">Viewer</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=\"Name\" [title]=\"name\"></rolatech-rich-label>\n </div>\n </div>\n <div>\n <div class=\"text-lg font-bold py-2\">Qualification</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=\"Move-in date\" [title]=\"offer.startDate\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Tenancy duration\" [title]=\"offer.tenancyDuration\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Number of tenants\" [title]=\"offer.numberOfTenants\"></rolatech-rich-label>\n </div>\n <div class=\"flex flex-col md:flex-row gap-1 md:gap-4\">\n <rolatech-rich-label label=\"Employment status\" [title]=\"employmentStatus[offer.employmentStatus]\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Employer\" [title]=\"offer.startDate\"></rolatech-rich-label>\n @if (offer.income) {\n <rolatech-rich-label label=\"Annual income\" [title]=\"offer.income\"></rolatech-rich-label>\n }\n </div>\n </div>\n <div>\n <div class=\"text-lg font-bold py-2\">Property details</div>\n <hr class=\"mb-2\" />\n <div class=\"flex items-center py-2\">\n <div class=\"min-w-24 w-24 object-cover aspect-video rounded-md mr-3\">\n @defer {\n <rolatech-thumbnail [src]=\"offer.item.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 <div class=\"flex w-full justify-between\">\n <div class=\"flex justify-between w-full\">\n <div class=\"flex flex-col\">\n <div>{{ offer.item.title }}</div>\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span class=\"mr-1\">{{ offer.item.bedrooms }}</span>\n <span i18n>Bedrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ offer.item.bathrooms }}</span>\n <span i18n>Bathrooms</span>\n </div>\n <div>\n <span class=\"mr-1\">{{ offer.item.receptions }}</span>\n <span i18n>Receptions</span>\n </div>\n </div>\n </div>\n <div class=\"text-right\">\n <div class=\"text-sm\">{{ offer.item.amount.toFixed(2) | price}}</div>\n </div>\n </div>\n </div>\n <div class=\"hidden md:flex flex-col px-3\"></div>\n </div>\n </div>\n\n <div>\n <div class=\"text-lg font-bold py-2\">Viewing agent</div>\n <hr class=\"mb-2\" />\n @if (agent) {\n <div>\n <rolatech-rich-label label=\"Move-in date\" [title]=\"offer.startDate\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Tenancy duration\" [title]=\"offer.tenancyDuration\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Phone\" [title]=\"agent.phone\"></rolatech-rich-label>\n </div>\n }\n </div>\n</div>\n}\n","import { Component, inject, OnInit, signal } from '@angular/core';\nimport {\n BaseComponent,\n EmptyComponent,\n ListComponent,\n TabComponent,\n TabsComponent,\n ToolbarComponent,\n} from '@rolatech/angular-components';\nimport { PropertyOfferService, PropertyService } from '@rolatech/angular-services';\nimport { PropertyOffer } 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';\n\n@Component({\n selector: 'rolatech-property-agent-offer-index',\n imports: [\n CommonModule,\n ToolbarComponent,\n TabsComponent,\n TabComponent,\n RouterModule,\n PropertyOfferItemComponent,\n EmptyComponent,\n ListComponent,\n OfferItemSkeleton,\n MatPaginatorModule,\n ],\n templateUrl: './property-agent-offer-index.html',\n styleUrl: './property-agent-offer-index.scss',\n})\nexport class PropertyAgentOfferIndex 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: 'Created',\n icon: 'category',\n status: 'created',\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 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 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.findOffers(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}\n","<rolatech-toolbar title=\"Offers\">\n <div class=\"flex items-center gap-2\"></div>\n</rolatech-toolbar>\n<rolatech-tabs [select]=\"select\">\n @for (item of links; track item) { @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n } }\n</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<rolatech-list>\n @if (offers()&& offers().length> 0) { @for (item of offers(); track item) {\n <rolatech-property-offer-item [routerLink]=\"['./', item.id]\" [offer]=\"item\"></rolatech-property-offer-item>\n } } @else {\n <rolatech-empty></rolatech-empty>\n }\n</rolatech-list>\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","import { Routes } from '@angular/router';\nimport { PropertyAgentOfferDetail } from './property-agent-offer-detail/property-agent-offer-detail';\nimport { PropertyAgentOfferIndex } from './property-agent-offer-index/property-agent-offer-index';\n\nexport const propertyAgentOfferRoutes: Routes = [\n {\n path: '',\n component: PropertyAgentOfferIndex,\n },\n {\n path: ':id',\n component: PropertyAgentOfferDetail,\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","MY_FORMATS","i7","i8","i5","i6","SIZE","i9"],"mappings":"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C,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;AACjC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;AACjC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;AACjC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;AACjC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;AACjC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;AACjC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;AACjC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;AACjC,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,YA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"}