@rolatech/angular-property 20.2.9-beta.5 → 20.2.9-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{rolatech-angular-property-property-index.component-DpBSSKtG.mjs → rolatech-angular-property-property-index.component-C7LqE1e4.mjs} +2 -2
- package/fesm2022/{rolatech-angular-property-property-index.component-DpBSSKtG.mjs.map → rolatech-angular-property-property-index.component-C7LqE1e4.mjs.map} +1 -1
- package/fesm2022/{rolatech-angular-property-property-manage-viewings-index.component-B5lCZM1L.mjs → rolatech-angular-property-property-manage-viewings-index.component-BOPuOSdS.mjs} +2 -2
- package/fesm2022/{rolatech-angular-property-property-manage-viewings-index.component-B5lCZM1L.mjs.map → rolatech-angular-property-property-manage-viewings-index.component-BOPuOSdS.mjs.map} +1 -1
- package/fesm2022/{rolatech-angular-property-rolatech-angular-property-nHa2eV9i.mjs → rolatech-angular-property-rolatech-angular-property-CG60ZNTz.mjs} +93 -82
- package/fesm2022/rolatech-angular-property-rolatech-angular-property-CG60ZNTz.mjs.map +1 -0
- package/fesm2022/rolatech-angular-property.mjs +1 -1
- package/package.json +6 -6
- package/themes/_default.scss +1 -1
- package/fesm2022/rolatech-angular-property-rolatech-angular-property-nHa2eV9i.mjs.map +0 -1
|
@@ -34,7 +34,7 @@ import { ENTER, COMMA } from '@angular/cdk/keycodes';
|
|
|
34
34
|
import * as i4$2 from '@angular/material/autocomplete';
|
|
35
35
|
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
36
36
|
import { MatOptionModule, MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS, MatNativeDateModule } from '@angular/material/core';
|
|
37
|
-
import
|
|
37
|
+
import { findIndex, findLastIndex, first, remove } from 'lodash';
|
|
38
38
|
import * as i2$2 from '@angular/material/divider';
|
|
39
39
|
import { MatDividerModule } from '@angular/material/divider';
|
|
40
40
|
import { MomentDateAdapter } from '@angular/material-moment-adapter';
|
|
@@ -2001,7 +2001,7 @@ class OfferCounterDialog {
|
|
|
2001
2001
|
deps: [MAT_DATE_LOCALE],
|
|
2002
2002
|
},
|
|
2003
2003
|
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS$a },
|
|
2004
|
-
], ngImport: i0, template: "<div class=\"grid\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Offer amount (PCM)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().amount\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Move-in date</mat-label>\n <input matInput [min]=\"minDate\" (focus)=\"dp.open()\" [matDatepicker]=\"dp\" [(ngModel)]=\"term().moveInDate\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Payment frequency</mat-label>\n <mat-select [(ngModel)]=\"term().paymentFrequency\">\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Tenancy length (months)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().tenancyLengthMonths\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Break clause (months)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().breakClauseMonths\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Furniture</mat-label>\n <mat-select [(ngModel)]=\"term().furniture\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>{{ petsInputFocused() ? 'Pets' : 'Add a pet (e.g., Dog, Cat
|
|
2004
|
+
], ngImport: i0, template: "<div class=\"grid\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Offer amount (PCM)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().amount\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Move-in date</mat-label>\n <input matInput [min]=\"minDate\" (focus)=\"dp.open()\" [matDatepicker]=\"dp\" [(ngModel)]=\"term().moveInDate\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Payment frequency</mat-label>\n <mat-select [(ngModel)]=\"term().paymentFrequency\">\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Tenancy length (months)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().tenancyLengthMonths\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Break clause (months)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().breakClauseMonths\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Furniture</mat-label>\n <mat-select [(ngModel)]=\"term().furniture\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>{{ petsInputFocused() ? 'Pets' : 'Add a pet (e.g., Dog, Cat)' }}</mat-label>\n\n <mat-chip-grid #chipGrid aria-label=\"Pets\">\n @for (p of (term().pets); track p) {\n <mat-chip-row (removed)=\"removePet(p)\">\n {{ p }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + p\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n\n <input\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (focus)=\"petsInputFocused.set(true)\"\n (blur)=\"petsInputFocused.set(false)\"\n (matChipInputTokenEnd)=\"addPet($event)\"\n />\n </mat-chip-grid>\n\n @if ((term().pets).length <= 0) {\n <mat-error>At least one pet or none is required</mat-error>\n }\n <mat-hint>Press Enter or comma to add multiple pets.</mat-hint>\n </mat-form-field>\n\n <mat-slide-toggle labelPosition=\"before\" class=\"py-3\" [(ngModel)]=\"term().smoker\">\n <span class=\"text-lg font-bold\">Smoker</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"span2\">\n <mat-label>Additional requests</mat-label>\n <textarea matInput rows=\"3\" [(ngModel)]=\"term().additionalRequests\"></textarea>\n </mat-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
2005
2005
|
}
|
|
2006
2006
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: OfferCounterDialog, decorators: [{
|
|
2007
2007
|
type: Component,
|
|
@@ -2023,7 +2023,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
2023
2023
|
deps: [MAT_DATE_LOCALE],
|
|
2024
2024
|
},
|
|
2025
2025
|
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS$a },
|
|
2026
|
-
], template: "<div class=\"grid\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Offer amount (PCM)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().amount\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Move-in date</mat-label>\n <input matInput [min]=\"minDate\" (focus)=\"dp.open()\" [matDatepicker]=\"dp\" [(ngModel)]=\"term().moveInDate\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Payment frequency</mat-label>\n <mat-select [(ngModel)]=\"term().paymentFrequency\">\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Tenancy length (months)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().tenancyLengthMonths\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Break clause (months)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().breakClauseMonths\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Furniture</mat-label>\n <mat-select [(ngModel)]=\"term().furniture\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>{{ petsInputFocused() ? 'Pets' : 'Add a pet (e.g., Dog, Cat
|
|
2026
|
+
], template: "<div class=\"grid\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Offer amount (PCM)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().amount\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Move-in date</mat-label>\n <input matInput [min]=\"minDate\" (focus)=\"dp.open()\" [matDatepicker]=\"dp\" [(ngModel)]=\"term().moveInDate\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Payment frequency</mat-label>\n <mat-select [(ngModel)]=\"term().paymentFrequency\">\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Tenancy length (months)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().tenancyLengthMonths\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Break clause (months)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"term().breakClauseMonths\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Furniture</mat-label>\n <mat-select [(ngModel)]=\"term().furniture\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>{{ petsInputFocused() ? 'Pets' : 'Add a pet (e.g., Dog, Cat)' }}</mat-label>\n\n <mat-chip-grid #chipGrid aria-label=\"Pets\">\n @for (p of (term().pets); track p) {\n <mat-chip-row (removed)=\"removePet(p)\">\n {{ p }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + p\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n\n <input\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (focus)=\"petsInputFocused.set(true)\"\n (blur)=\"petsInputFocused.set(false)\"\n (matChipInputTokenEnd)=\"addPet($event)\"\n />\n </mat-chip-grid>\n\n @if ((term().pets).length <= 0) {\n <mat-error>At least one pet or none is required</mat-error>\n }\n <mat-hint>Press Enter or comma to add multiple pets.</mat-hint>\n </mat-form-field>\n\n <mat-slide-toggle labelPosition=\"before\" class=\"py-3\" [(ngModel)]=\"term().smoker\">\n <span class=\"text-lg font-bold\">Smoker</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"span2\">\n <mat-label>Additional requests</mat-label>\n <textarea matInput rows=\"3\" [(ngModel)]=\"term().additionalRequests\"></textarea>\n </mat-form-field>\n</div>\n" }]
|
|
2027
2027
|
}], propDecorators: { term: [{ type: i0.Input, args: [{ isSignal: true, alias: "term", required: true }] }, { type: i0.Output, args: ["termChange"] }], output: [{ type: i0.Output, args: ["output"] }] } });
|
|
2028
2028
|
|
|
2029
2029
|
class OfferInternalNoteFacade {
|
|
@@ -2823,7 +2823,7 @@ class OfferCounterEdit {
|
|
|
2823
2823
|
this.f.setField('pets', current.filter((x) => x !== p));
|
|
2824
2824
|
}
|
|
2825
2825
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: OfferCounterEdit, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2826
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: OfferCounterEdit, isStandalone: true, selector: "rolatech-offer-counter-edit", ngImport: i0, template: "<!-- offer-counter-edit.component.html (Angular Material + Tailwind grid) -->\n\n<div class=\"grid gap-4\">\n <!-- Row 1 -->\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Offer amount (PCM) @if (f.isEdited('amount')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n inputmode=\"decimal\"\n [ngModel]=\"this.term().amount\"\n (ngModelChange)=\"setAmountPounds($event)\"\n />\n <mat-hint>\n Deposit:\n <span class=\"font-medium\">{{ depositPence() ?? 0 | price }}</span>\n </mat-hint>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Move-in date @if (f.isEdited('moveInDate')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n\n <input\n matInput\n [min]=\"minDate\"\n (focus)=\"dp.open()\"\n [matDatepicker]=\"dp\"\n [ngModel]=\"term().moveInDate\"\n (ngModelChange)=\"setField('moveInDate', $event)\"\n readonly\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Payment frequency @if (f.isEdited('paymentFrequency')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <mat-select [ngModel]=\"term().paymentFrequency\" (ngModelChange)=\"setField('paymentFrequency', $event)\">\n <mat-option [value]=\"null\">\u2014</mat-option>\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Row 2 -->\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Tenancy length (months) @if (f.isEdited('tenancyLengthMonths')) {\n <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"term().tenancyLengthMonths\"\n (ngModelChange)=\"setFieldNumber('tenancyLengthMonths', $event)\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Break clause (months) @if (f.isEdited('breakClauseMonths')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"term().breakClauseMonths\"\n (ngModelChange)=\"setFieldNumber('breakClauseMonths', $event)\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Furniture @if (f.isEdited('furniture')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <mat-select [ngModel]=\"term().furniture\" (ngModelChange)=\"setField('furniture', $event)\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Pets -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>\n {{ petsInputFocused() ? 'Pets' : 'Add a pet (e.g., Dog, Cat or None)' }} @if (f.isEdited('pets')) {\n <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n\n <mat-chip-grid #chipGrid aria-label=\"Pets\">\n @for (p of term().pets; track p) {\n <mat-chip-row (removed)=\"removePet(p)\">\n {{ p }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + p\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n\n <input\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (focus)=\"petsInputFocused.set(true)\"\n (blur)=\"petsInputFocused.set(false)\"\n (matChipInputTokenEnd)=\"addPet($event)\"\n />\n </mat-chip-grid>\n\n @if (term().pets.length <= 0) {\n <mat-error>At least one pet or \u201CNone\u201D is required</mat-error>\n }\n <mat-hint>Press Enter or comma to add multiple pets.</mat-hint>\n </mat-form-field>\n\n <!-- Smoker -->\n <div class=\"flex items-center justify-between rounded-xl border border-[--rt-border-color] bg-[--rt-base-background] p-3\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-sm text-[--rt-text-secondary]\">Smoker</span>\n @if (f.isEdited('smoker')) { <span class=\"text-xs text-orange-500\">Edited</span> }\n </div>\n\n <mat-slide-toggle labelPosition=\"before\" [ngModel]=\"term().smoker\" (ngModelChange)=\"setField('smoker', $event)\">\n <span class=\"font-medium\">{{ term().smoker ? 'Yes' : 'No' }}</span>\n </mat-slide-toggle>\n </div>\n\n <!-- Additional requests -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>\n Additional requests @if (f.isEdited('additionalRequests')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <textarea\n matInput\n rows=\"3\"\n [ngModel]=\"term().additionalRequests\"\n (ngModelChange)=\"setField('additionalRequests', $event)\"\n ></textarea>\n </mat-form-field>\n\n <!-- Actions -->\n <div class=\"flex justify-end gap-2 pt-2\">\n <button mat-stroked-button type=\"button\" (click)=\"f.cancelEdit()\" [disabled]=\"f.loading()\">Cancel</button>\n <button mat-flat-button type=\"button\" (click)=\"f.sendCounter()\" [disabled]=\"f.loading()\">Save & Send</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: PricePipe, name: "price" }] });
|
|
2826
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: OfferCounterEdit, isStandalone: true, selector: "rolatech-offer-counter-edit", ngImport: i0, template: "<!-- offer-counter-edit.component.html (Angular Material + Tailwind grid) -->\n\n<div class=\"grid gap-4\">\n <!-- Row 1 -->\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Offer amount (PCM) @if (f.isEdited('amount')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n inputmode=\"decimal\"\n [ngModel]=\"this.term().amount\"\n (ngModelChange)=\"setAmountPounds($event)\"\n />\n <mat-hint>\n Deposit:\n <span class=\"font-medium\">{{ depositPence() ?? 0 | price }}</span>\n </mat-hint>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Move-in date @if (f.isEdited('moveInDate')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n\n <input\n matInput\n [min]=\"minDate\"\n (focus)=\"dp.open()\"\n [matDatepicker]=\"dp\"\n [ngModel]=\"term().moveInDate\"\n (ngModelChange)=\"setField('moveInDate', $event)\"\n readonly\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Payment frequency @if (f.isEdited('paymentFrequency')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <mat-select [ngModel]=\"term().paymentFrequency\" (ngModelChange)=\"setField('paymentFrequency', $event)\">\n <mat-option [value]=\"null\">\u2014</mat-option>\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Row 2 -->\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Tenancy length (months) @if (f.isEdited('tenancyLengthMonths')) {\n <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"term().tenancyLengthMonths\"\n (ngModelChange)=\"setFieldNumber('tenancyLengthMonths', $event)\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Break clause (months) @if (f.isEdited('breakClauseMonths')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"term().breakClauseMonths\"\n (ngModelChange)=\"setFieldNumber('breakClauseMonths', $event)\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Furniture @if (f.isEdited('furniture')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <mat-select [ngModel]=\"term().furniture\" (ngModelChange)=\"setField('furniture', $event)\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Pets -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>\n {{ petsInputFocused() ? 'Pets' : 'Add a pet (e.g., Dog, Cat)' }} @if (f.isEdited('pets')) {\n <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n\n <mat-chip-grid #chipGrid aria-label=\"Pets\">\n @for (p of term().pets; track p) {\n <mat-chip-row (removed)=\"removePet(p)\">\n {{ p }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + p\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n\n <input\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (focus)=\"petsInputFocused.set(true)\"\n (blur)=\"petsInputFocused.set(false)\"\n (matChipInputTokenEnd)=\"addPet($event)\"\n />\n </mat-chip-grid>\n\n @if (term().pets.length <= 0) {\n <mat-error>At least one pet or \u201CNone\u201D is required</mat-error>\n }\n <mat-hint>Press Enter or comma to add multiple pets.</mat-hint>\n </mat-form-field>\n\n <!-- Smoker -->\n <div class=\"flex items-center justify-between rounded-xl border border-[--rt-border-color] bg-[--rt-base-background] p-3\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-sm text-[--rt-text-secondary]\">Smoker</span>\n @if (f.isEdited('smoker')) { <span class=\"text-xs text-orange-500\">Edited</span> }\n </div>\n\n <mat-slide-toggle labelPosition=\"before\" [ngModel]=\"term().smoker\" (ngModelChange)=\"setField('smoker', $event)\">\n <span class=\"font-medium\">{{ term().smoker ? 'Yes' : 'No' }}</span>\n </mat-slide-toggle>\n </div>\n\n <!-- Additional requests -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>\n Additional requests @if (f.isEdited('additionalRequests')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <textarea\n matInput\n rows=\"3\"\n [ngModel]=\"term().additionalRequests\"\n (ngModelChange)=\"setField('additionalRequests', $event)\"\n ></textarea>\n </mat-form-field>\n\n <!-- Actions -->\n <div class=\"flex justify-end gap-2 pt-2\">\n <button mat-stroked-button type=\"button\" (click)=\"f.cancelEdit()\" [disabled]=\"f.loading()\">Cancel</button>\n <button mat-flat-button type=\"button\" (click)=\"f.sendCounter()\" [disabled]=\"f.loading()\">Save & Send</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: PricePipe, name: "price" }] });
|
|
2827
2827
|
}
|
|
2828
2828
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: OfferCounterEdit, decorators: [{
|
|
2829
2829
|
type: Component,
|
|
@@ -2840,7 +2840,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
2840
2840
|
MatIconModule,
|
|
2841
2841
|
MatButtonModule,
|
|
2842
2842
|
PricePipe,
|
|
2843
|
-
], template: "<!-- offer-counter-edit.component.html (Angular Material + Tailwind grid) -->\n\n<div class=\"grid gap-4\">\n <!-- Row 1 -->\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Offer amount (PCM) @if (f.isEdited('amount')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n inputmode=\"decimal\"\n [ngModel]=\"this.term().amount\"\n (ngModelChange)=\"setAmountPounds($event)\"\n />\n <mat-hint>\n Deposit:\n <span class=\"font-medium\">{{ depositPence() ?? 0 | price }}</span>\n </mat-hint>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Move-in date @if (f.isEdited('moveInDate')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n\n <input\n matInput\n [min]=\"minDate\"\n (focus)=\"dp.open()\"\n [matDatepicker]=\"dp\"\n [ngModel]=\"term().moveInDate\"\n (ngModelChange)=\"setField('moveInDate', $event)\"\n readonly\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Payment frequency @if (f.isEdited('paymentFrequency')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <mat-select [ngModel]=\"term().paymentFrequency\" (ngModelChange)=\"setField('paymentFrequency', $event)\">\n <mat-option [value]=\"null\">\u2014</mat-option>\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Row 2 -->\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Tenancy length (months) @if (f.isEdited('tenancyLengthMonths')) {\n <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"term().tenancyLengthMonths\"\n (ngModelChange)=\"setFieldNumber('tenancyLengthMonths', $event)\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Break clause (months) @if (f.isEdited('breakClauseMonths')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"term().breakClauseMonths\"\n (ngModelChange)=\"setFieldNumber('breakClauseMonths', $event)\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Furniture @if (f.isEdited('furniture')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <mat-select [ngModel]=\"term().furniture\" (ngModelChange)=\"setField('furniture', $event)\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Pets -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>\n {{ petsInputFocused() ? 'Pets' : 'Add a pet (e.g., Dog, Cat
|
|
2843
|
+
], template: "<!-- offer-counter-edit.component.html (Angular Material + Tailwind grid) -->\n\n<div class=\"grid gap-4\">\n <!-- Row 1 -->\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Offer amount (PCM) @if (f.isEdited('amount')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n inputmode=\"decimal\"\n [ngModel]=\"this.term().amount\"\n (ngModelChange)=\"setAmountPounds($event)\"\n />\n <mat-hint>\n Deposit:\n <span class=\"font-medium\">{{ depositPence() ?? 0 | price }}</span>\n </mat-hint>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Move-in date @if (f.isEdited('moveInDate')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n\n <input\n matInput\n [min]=\"minDate\"\n (focus)=\"dp.open()\"\n [matDatepicker]=\"dp\"\n [ngModel]=\"term().moveInDate\"\n (ngModelChange)=\"setField('moveInDate', $event)\"\n readonly\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Payment frequency @if (f.isEdited('paymentFrequency')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <mat-select [ngModel]=\"term().paymentFrequency\" (ngModelChange)=\"setField('paymentFrequency', $event)\">\n <mat-option [value]=\"null\">\u2014</mat-option>\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Row 2 -->\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Tenancy length (months) @if (f.isEdited('tenancyLengthMonths')) {\n <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"term().tenancyLengthMonths\"\n (ngModelChange)=\"setFieldNumber('tenancyLengthMonths', $event)\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Break clause (months) @if (f.isEdited('breakClauseMonths')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <input\n matInput\n type=\"number\"\n [ngModel]=\"term().breakClauseMonths\"\n (ngModelChange)=\"setFieldNumber('breakClauseMonths', $event)\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-12 sm:col-span-4\" appearance=\"fill\">\n <mat-label>\n Furniture @if (f.isEdited('furniture')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <mat-select [ngModel]=\"term().furniture\" (ngModelChange)=\"setField('furniture', $event)\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Pets -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>\n {{ petsInputFocused() ? 'Pets' : 'Add a pet (e.g., Dog, Cat)' }} @if (f.isEdited('pets')) {\n <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n\n <mat-chip-grid #chipGrid aria-label=\"Pets\">\n @for (p of term().pets; track p) {\n <mat-chip-row (removed)=\"removePet(p)\">\n {{ p }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + p\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n\n <input\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (focus)=\"petsInputFocused.set(true)\"\n (blur)=\"petsInputFocused.set(false)\"\n (matChipInputTokenEnd)=\"addPet($event)\"\n />\n </mat-chip-grid>\n\n @if (term().pets.length <= 0) {\n <mat-error>At least one pet or \u201CNone\u201D is required</mat-error>\n }\n <mat-hint>Press Enter or comma to add multiple pets.</mat-hint>\n </mat-form-field>\n\n <!-- Smoker -->\n <div class=\"flex items-center justify-between rounded-xl border border-[--rt-border-color] bg-[--rt-base-background] p-3\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-sm text-[--rt-text-secondary]\">Smoker</span>\n @if (f.isEdited('smoker')) { <span class=\"text-xs text-orange-500\">Edited</span> }\n </div>\n\n <mat-slide-toggle labelPosition=\"before\" [ngModel]=\"term().smoker\" (ngModelChange)=\"setField('smoker', $event)\">\n <span class=\"font-medium\">{{ term().smoker ? 'Yes' : 'No' }}</span>\n </mat-slide-toggle>\n </div>\n\n <!-- Additional requests -->\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>\n Additional requests @if (f.isEdited('additionalRequests')) { <span class=\"ml-2 text-xs text-orange-500\">Edited</span> }\n </mat-label>\n <textarea\n matInput\n rows=\"3\"\n [ngModel]=\"term().additionalRequests\"\n (ngModelChange)=\"setField('additionalRequests', $event)\"\n ></textarea>\n </mat-form-field>\n\n <!-- Actions -->\n <div class=\"flex justify-end gap-2 pt-2\">\n <button mat-stroked-button type=\"button\" (click)=\"f.cancelEdit()\" [disabled]=\"f.loading()\">Cancel</button>\n <button mat-flat-button type=\"button\" (click)=\"f.sendCounter()\" [disabled]=\"f.loading()\">Save & Send</button>\n </div>\n</div>\n" }]
|
|
2844
2844
|
}] });
|
|
2845
2845
|
|
|
2846
2846
|
class OfferCounterLatestCard {
|
|
@@ -5229,7 +5229,7 @@ class OfferFormFacade {
|
|
|
5229
5229
|
rental.get('paymentFrequency')?.setValidators([Validators.required]);
|
|
5230
5230
|
rental.get('tenancyLengthMonths')?.setValidators([Validators.required, Validators.min(1)]);
|
|
5231
5231
|
rental.get('breakClauseMonths')?.setValidators([Validators.required, Validators.min(0)]);
|
|
5232
|
-
rental.get('pets')?.setValidators([Validators.required]);
|
|
5232
|
+
// rental.get('pets')?.setValidators([Validators.required]);
|
|
5233
5233
|
rental.get('smoker')?.setValidators([Validators.required]);
|
|
5234
5234
|
rental.get('furnitureRequirement')?.setValidators([Validators.required]);
|
|
5235
5235
|
this.applyTenantDynamicValidators();
|
|
@@ -6013,7 +6013,7 @@ class RentalOfferTermsSection {
|
|
|
6013
6013
|
deps: [MAT_DATE_LOCALE],
|
|
6014
6014
|
},
|
|
6015
6015
|
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS$5 },
|
|
6016
|
-
], ngImport: i0, template: "<div class=\"grid\" [formGroup]=\"rental\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Offer amount (PCM)</mat-label>\n <input matInput type=\"number\" formControlName=\"amount\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Move-in date</mat-label>\n <input matInput [min]=\"minDate\" (focus)=\"dp.open()\" [matDatepicker]=\"dp\" formControlName=\"moveInDate\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Payment frequency</mat-label>\n <mat-select formControlName=\"paymentFrequency\">\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Tenancy length (months)</mat-label>\n <input matInput type=\"number\" formControlName=\"tenancyLengthMonths\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Break clause (months)</mat-label>\n <input matInput type=\"number\" formControlName=\"breakClauseMonths\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Furniture</mat-label>\n <mat-select formControlName=\"furnitureRequirement\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>{{petsInputFocused() ? 'Pets' :'Add a pet (e.g., Dog, Cat
|
|
6016
|
+
], ngImport: i0, template: "<div class=\"grid\" [formGroup]=\"rental\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Offer amount (PCM)</mat-label>\n <input matInput type=\"number\" formControlName=\"amount\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Move-in date</mat-label>\n <input matInput [min]=\"minDate\" (focus)=\"dp.open()\" [matDatepicker]=\"dp\" formControlName=\"moveInDate\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Payment frequency</mat-label>\n <mat-select formControlName=\"paymentFrequency\">\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Tenancy length (months)</mat-label>\n <input matInput type=\"number\" formControlName=\"tenancyLengthMonths\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Break clause (months)</mat-label>\n <input matInput type=\"number\" formControlName=\"breakClauseMonths\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Furniture</mat-label>\n <mat-select formControlName=\"furnitureRequirement\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>{{petsInputFocused() ? 'Pets' :'Add a pet (e.g., Dog, Cat)'}} </mat-label>\n <mat-chip-grid #chipGrid aria-label=\"Pets\" formControlName=\"pets\">\n @for (p of pets(); track p) {\n <mat-chip-row (removed)=\"removePet(p)\">\n {{ p }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + p\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n\n <input\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (focus)=\"petsInputFocused.set(true)\"\n (blur)=\"petsInputFocused.set(false)\"\n (matChipInputTokenEnd)=\"addPet($event)\"\n />\n </mat-chip-grid>\n <!-- \u2705 Required error -->\n @if (petsControl().touched && petsControl().hasError('required')) {\n <mat-error>At least one pet or none is required</mat-error>\n }\n <mat-hint>Press Enter or comma to add multiple pets.</mat-hint>\n </mat-form-field>\n\n @if (petsControl().value.length) {\n <p class=\"hint\">Landlord approval may still be required.</p>\n }\n\n <mat-slide-toggle labelPosition=\"before\" class=\"py-3\" formControlName=\"smoker\">\n <span class=\"text-lg font-bold\">Smoker</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"span2\">\n <mat-label>Additional requests</mat-label>\n <textarea matInput rows=\"3\" formControlName=\"additionalRequests\"></textarea>\n </mat-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: AngularComponentsModule }] });
|
|
6017
6017
|
}
|
|
6018
6018
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: RentalOfferTermsSection, decorators: [{
|
|
6019
6019
|
type: Component,
|
|
@@ -6035,7 +6035,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
6035
6035
|
deps: [MAT_DATE_LOCALE],
|
|
6036
6036
|
},
|
|
6037
6037
|
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS$5 },
|
|
6038
|
-
], template: "<div class=\"grid\" [formGroup]=\"rental\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Offer amount (PCM)</mat-label>\n <input matInput type=\"number\" formControlName=\"amount\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Move-in date</mat-label>\n <input matInput [min]=\"minDate\" (focus)=\"dp.open()\" [matDatepicker]=\"dp\" formControlName=\"moveInDate\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Payment frequency</mat-label>\n <mat-select formControlName=\"paymentFrequency\">\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Tenancy length (months)</mat-label>\n <input matInput type=\"number\" formControlName=\"tenancyLengthMonths\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Break clause (months)</mat-label>\n <input matInput type=\"number\" formControlName=\"breakClauseMonths\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Furniture</mat-label>\n <mat-select formControlName=\"furnitureRequirement\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>{{petsInputFocused() ? 'Pets' :'Add a pet (e.g., Dog, Cat
|
|
6038
|
+
], template: "<div class=\"grid\" [formGroup]=\"rental\">\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Offer amount (PCM)</mat-label>\n <input matInput type=\"number\" formControlName=\"amount\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Move-in date</mat-label>\n <input matInput [min]=\"minDate\" (focus)=\"dp.open()\" [matDatepicker]=\"dp\" formControlName=\"moveInDate\" readonly />\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\"></mat-datepicker-toggle>\n <mat-datepicker #dp></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Payment frequency</mat-label>\n <mat-select formControlName=\"paymentFrequency\">\n <mat-option value=\"MONTHLY\">Monthly</mat-option>\n <mat-option value=\"QUARTERLY\">Quarterly</mat-option>\n <mat-option value=\"SEMI_ANNUALLY\">Semi-annually</mat-option>\n <mat-option value=\"ANNUALLY\">Annually</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"grid grid-cols-12 gap-3\">\n <mat-form-field class=\"col-span-4\">\n <mat-label>Tenancy length (months)</mat-label>\n <input matInput type=\"number\" formControlName=\"tenancyLengthMonths\" />\n </mat-form-field>\n\n <mat-form-field class=\"col-span-4\">\n <mat-label>Break clause (months)</mat-label>\n <input matInput type=\"number\" formControlName=\"breakClauseMonths\" />\n </mat-form-field>\n <mat-form-field class=\"col-span-4\">\n <mat-label>Furniture</mat-label>\n <mat-select formControlName=\"furnitureRequirement\">\n <mat-option value=\"FURNISHED\">Furnished</mat-option>\n <mat-option value=\"UNFURNISHED\">Unfurnished</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\" class=\"w-full\">\n <mat-label>{{petsInputFocused() ? 'Pets' :'Add a pet (e.g., Dog, Cat)'}} </mat-label>\n <mat-chip-grid #chipGrid aria-label=\"Pets\" formControlName=\"pets\">\n @for (p of pets(); track p) {\n <mat-chip-row (removed)=\"removePet(p)\">\n {{ p }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + p\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n\n <input\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (focus)=\"petsInputFocused.set(true)\"\n (blur)=\"petsInputFocused.set(false)\"\n (matChipInputTokenEnd)=\"addPet($event)\"\n />\n </mat-chip-grid>\n <!-- \u2705 Required error -->\n @if (petsControl().touched && petsControl().hasError('required')) {\n <mat-error>At least one pet or none is required</mat-error>\n }\n <mat-hint>Press Enter or comma to add multiple pets.</mat-hint>\n </mat-form-field>\n\n @if (petsControl().value.length) {\n <p class=\"hint\">Landlord approval may still be required.</p>\n }\n\n <mat-slide-toggle labelPosition=\"before\" class=\"py-3\" formControlName=\"smoker\">\n <span class=\"text-lg font-bold\">Smoker</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"span2\">\n <mat-label>Additional requests</mat-label>\n <textarea matInput rows=\"3\" formControlName=\"additionalRequests\"></textarea>\n </mat-form-field>\n</div>\n" }]
|
|
6039
6039
|
}] });
|
|
6040
6040
|
|
|
6041
6041
|
class TenantRegistryService {
|
|
@@ -6510,7 +6510,7 @@ const propertyRoutes = [
|
|
|
6510
6510
|
children: [
|
|
6511
6511
|
{
|
|
6512
6512
|
path: '',
|
|
6513
|
-
loadComponent: () => import('./rolatech-angular-property-property-index.component-
|
|
6513
|
+
loadComponent: () => import('./rolatech-angular-property-property-index.component-C7LqE1e4.mjs').then((x) => x.PropertyIndexComponent),
|
|
6514
6514
|
},
|
|
6515
6515
|
],
|
|
6516
6516
|
},
|
|
@@ -8416,7 +8416,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
8416
8416
|
const propertyManageViewingsRoutes = [
|
|
8417
8417
|
{
|
|
8418
8418
|
path: '',
|
|
8419
|
-
loadComponent: () => import('./rolatech-angular-property-property-manage-viewings-index.component-
|
|
8419
|
+
loadComponent: () => import('./rolatech-angular-property-property-manage-viewings-index.component-BOPuOSdS.mjs').then((x) => x.PropertyManageViewingsIndexComponent),
|
|
8420
8420
|
},
|
|
8421
8421
|
{
|
|
8422
8422
|
path: ':id',
|
|
@@ -8467,16 +8467,6 @@ class LettingManageIndex extends BaseComponent {
|
|
|
8467
8467
|
this.find();
|
|
8468
8468
|
}
|
|
8469
8469
|
find() {
|
|
8470
|
-
this.loading = true;
|
|
8471
|
-
this.propertyService.find({}).subscribe({
|
|
8472
|
-
next: (res) => {
|
|
8473
|
-
this.lettings = res.data;
|
|
8474
|
-
this.loading = false;
|
|
8475
|
-
},
|
|
8476
|
-
error: (error) => {
|
|
8477
|
-
this.loading = false;
|
|
8478
|
-
},
|
|
8479
|
-
});
|
|
8480
8470
|
const sub = this.route.queryParamMap
|
|
8481
8471
|
.pipe(map((p) => {
|
|
8482
8472
|
const page = p.get('page') ? Number(p.get('page')) : 1;
|
|
@@ -8524,7 +8514,7 @@ class LettingManageIndex extends BaseComponent {
|
|
|
8524
8514
|
});
|
|
8525
8515
|
}
|
|
8526
8516
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: LettingManageIndex, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
8527
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: LettingManageIndex, isStandalone: true, selector: "rolatech-letting-manage-index", usesInheritance: true, ngImport: i0, template: "<rolatech-toolbar title=\"
|
|
8517
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: LettingManageIndex, isStandalone: true, selector: "rolatech-letting-manage-index", usesInheritance: true, ngImport: i0, template: "<rolatech-toolbar title=\"Properties\"> </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", styles: ["rolatech-letting-manage-index{display:flex;flex-direction:column;--rt-letting-view-items-per-row: 1;--rt-property-view-items-per-row: 1}@media(min-width:600px){rolatech-letting-manage-index{--rt-letting-view-items-per-row: 2;--rt-property-view-items-per-row: 2}}@media(min-width:768px){rolatech-letting-manage-index{--rt-letting-view-items-per-row: 3;--rt-property-view-items-per-row: 3}}@media(min-width:1280px){rolatech-letting-manage-index{--rt-letting-view-items-per-row: 3;--rt-property-view-items-per-row: 3}}@media(min-width:1536px){rolatech-letting-manage-index{--rt-letting-view-items-per-row: 4;--rt-property-view-items-per-row: 4}}@media(min-width:1920px){rolatech-letting-manage-index{--rt-letting-view-items-per-row: 5;--rt-property-view-items-per-row: 5}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: LettingManageItem, selector: "rolatech-letting-manage-item", inputs: ["letting", "thumbnail", "list"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i2$3.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: PropertyManageItemSkeleton, selector: "rolatech-property-manage-item-skeleton", inputs: ["loading", "list"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
8528
8518
|
}
|
|
8529
8519
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: LettingManageIndex, decorators: [{
|
|
8530
8520
|
type: Component,
|
|
@@ -8536,7 +8526,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
8536
8526
|
LettingManageItem,
|
|
8537
8527
|
MatPaginatorModule,
|
|
8538
8528
|
PropertyManageItemSkeleton,
|
|
8539
|
-
], encapsulation: ViewEncapsulation.None, template: "<rolatech-toolbar title=\"
|
|
8529
|
+
], encapsulation: ViewEncapsulation.None, template: "<rolatech-toolbar title=\"Properties\"> </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", styles: ["rolatech-letting-manage-index{display:flex;flex-direction:column;--rt-letting-view-items-per-row: 1;--rt-property-view-items-per-row: 1}@media(min-width:600px){rolatech-letting-manage-index{--rt-letting-view-items-per-row: 2;--rt-property-view-items-per-row: 2}}@media(min-width:768px){rolatech-letting-manage-index{--rt-letting-view-items-per-row: 3;--rt-property-view-items-per-row: 3}}@media(min-width:1280px){rolatech-letting-manage-index{--rt-letting-view-items-per-row: 3;--rt-property-view-items-per-row: 3}}@media(min-width:1536px){rolatech-letting-manage-index{--rt-letting-view-items-per-row: 4;--rt-property-view-items-per-row: 4}}@media(min-width:1920px){rolatech-letting-manage-index{--rt-letting-view-items-per-row: 5;--rt-property-view-items-per-row: 5}}\n"] }]
|
|
8540
8530
|
}] });
|
|
8541
8531
|
|
|
8542
8532
|
class LettingActions {
|
|
@@ -8584,21 +8574,32 @@ class LettingManageDetail extends BaseComponent {
|
|
|
8584
8574
|
authService = inject(AuthService);
|
|
8585
8575
|
authUserService = inject(AuthUserService);
|
|
8586
8576
|
propertyService = inject(PropertyService);
|
|
8577
|
+
floorplanService = inject(FloorplanService);
|
|
8578
|
+
propertyHighlightsService = inject(PropertyHighlightsService);
|
|
8579
|
+
timezoneService = inject(TimeZoneService);
|
|
8587
8580
|
authenticated = this.authService.authenticated;
|
|
8588
|
-
property;
|
|
8581
|
+
property = signal(null, ...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
8582
|
+
loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
8583
|
+
features = [];
|
|
8584
|
+
allVideos = signal([], ...(ngDevMode ? [{ debugName: "allVideos" }] : []));
|
|
8585
|
+
highlights = [];
|
|
8586
|
+
floorplans = [];
|
|
8587
|
+
epc;
|
|
8588
|
+
timezone = signal('', ...(ngDevMode ? [{ debugName: "timezone" }] : []));
|
|
8589
8589
|
fullname = '';
|
|
8590
8590
|
username = '';
|
|
8591
8591
|
user;
|
|
8592
8592
|
inWishList = false;
|
|
8593
8593
|
purchased = false;
|
|
8594
8594
|
selectedOption;
|
|
8595
|
-
|
|
8596
|
-
|
|
8597
|
-
|
|
8598
|
-
|
|
8599
|
-
|
|
8600
|
-
|
|
8601
|
-
|
|
8595
|
+
videos = computed(() => {
|
|
8596
|
+
const v = this.allVideos(); // read signal once
|
|
8597
|
+
if (!v)
|
|
8598
|
+
return [];
|
|
8599
|
+
const tz = this.timezone();
|
|
8600
|
+
const provider = tz === 'Asia/Shanghai' ? PropertyVideoProvider.COS : PropertyVideoProvider.YOUTUBE;
|
|
8601
|
+
return v.filter((v) => v.provider === provider);
|
|
8602
|
+
}, ...(ngDevMode ? [{ debugName: "videos" }] : []));
|
|
8602
8603
|
constructor() {
|
|
8603
8604
|
super();
|
|
8604
8605
|
effect(() => {
|
|
@@ -8609,30 +8610,67 @@ class LettingManageDetail extends BaseComponent {
|
|
|
8609
8610
|
}
|
|
8610
8611
|
ngOnInit() {
|
|
8611
8612
|
this.getProperty();
|
|
8613
|
+
this.getVideos();
|
|
8614
|
+
this.getFeatures();
|
|
8615
|
+
this.getHighlights();
|
|
8616
|
+
this.getFloorplans();
|
|
8617
|
+
this.getEpc();
|
|
8618
|
+
const timezone = this.timezoneService.getBrowserTimeZone() ?? '';
|
|
8619
|
+
this.timezone.set(timezone);
|
|
8612
8620
|
}
|
|
8613
8621
|
getProperty() {
|
|
8622
|
+
this.loading.set(true);
|
|
8614
8623
|
this.propertyService.get(this.id).subscribe({
|
|
8615
8624
|
next: (res) => {
|
|
8616
|
-
|
|
8617
|
-
|
|
8618
|
-
|
|
8619
|
-
|
|
8620
|
-
|
|
8621
|
-
|
|
8622
|
-
|
|
8625
|
+
const p = res.data;
|
|
8626
|
+
this.property.set(p);
|
|
8627
|
+
const description = p?.description ?? '';
|
|
8628
|
+
const firstPart = description.split(/<br\s*\/?>/i)[0]?.trim() ?? '';
|
|
8629
|
+
const arr = firstPart.split('|').map((s) => s.trim());
|
|
8630
|
+
if (p?.agentId) {
|
|
8631
|
+
this.findUserBaseInfo(p.agentId);
|
|
8623
8632
|
}
|
|
8624
|
-
this.
|
|
8625
|
-
this.
|
|
8633
|
+
this.titleService.setTitle(`${p?.title}`);
|
|
8634
|
+
this.loading.set(false);
|
|
8635
|
+
},
|
|
8636
|
+
error: () => {
|
|
8637
|
+
this.loading.set(false);
|
|
8626
8638
|
},
|
|
8627
8639
|
});
|
|
8628
8640
|
}
|
|
8629
|
-
|
|
8630
|
-
|
|
8631
|
-
|
|
8632
|
-
|
|
8633
|
-
|
|
8634
|
-
|
|
8635
|
-
|
|
8641
|
+
getVideos() {
|
|
8642
|
+
this.propertyService.getVideos(this.id).subscribe({
|
|
8643
|
+
next: (res) => {
|
|
8644
|
+
this.allVideos.set(res.data);
|
|
8645
|
+
},
|
|
8646
|
+
});
|
|
8647
|
+
}
|
|
8648
|
+
getFeatures() {
|
|
8649
|
+
this.propertyService.getFeatures(this.id).subscribe({
|
|
8650
|
+
next: (res) => {
|
|
8651
|
+
this.features = res.data || [];
|
|
8652
|
+
},
|
|
8653
|
+
});
|
|
8654
|
+
}
|
|
8655
|
+
getHighlights() {
|
|
8656
|
+
this.propertyHighlightsService.getHighlights(this.id).subscribe({
|
|
8657
|
+
next: (res) => {
|
|
8658
|
+
this.highlights = res.data || [];
|
|
8659
|
+
},
|
|
8660
|
+
});
|
|
8661
|
+
}
|
|
8662
|
+
getFloorplans() {
|
|
8663
|
+
this.floorplanService.listFloorplans(this.id).subscribe({
|
|
8664
|
+
next: (res) => {
|
|
8665
|
+
this.floorplans = res.data || [];
|
|
8666
|
+
},
|
|
8667
|
+
});
|
|
8668
|
+
}
|
|
8669
|
+
getEpc() {
|
|
8670
|
+
this.propertyService.getEpc(this.id).subscribe({
|
|
8671
|
+
next: (res) => {
|
|
8672
|
+
this.epc = res.data;
|
|
8673
|
+
},
|
|
8636
8674
|
});
|
|
8637
8675
|
}
|
|
8638
8676
|
findUserBaseInfo(userId) {
|
|
@@ -8691,40 +8729,8 @@ class LettingManageDetail extends BaseComponent {
|
|
|
8691
8729
|
this.snackBarService.open('Please sign in');
|
|
8692
8730
|
}
|
|
8693
8731
|
}
|
|
8694
|
-
onOptionChange(e) {
|
|
8695
|
-
const criteria = [];
|
|
8696
|
-
this.selectedVariant.options.map((item) => {
|
|
8697
|
-
criteria.push({
|
|
8698
|
-
optionId: item.option.id === e.option.id ? e.option.id : item.option.id,
|
|
8699
|
-
valueId: item.option.id === e.option.id ? e.value.id : item.value.id,
|
|
8700
|
-
});
|
|
8701
|
-
});
|
|
8702
|
-
// const criteria = [
|
|
8703
|
-
// { optionId: '249008855294545920', valueId: '249008855298740224' }, // color: red
|
|
8704
|
-
// { optionId: '248661715955355648', valueId: '249001130061860865' }, // size: 256GB
|
|
8705
|
-
// ];
|
|
8706
|
-
// Function to check if a variant matches all the criteria
|
|
8707
|
-
const matchesAllCriteria = (variant, criteria) => {
|
|
8708
|
-
return _.every(criteria, (criterion) => {
|
|
8709
|
-
return _.some(variant.options, (o) => o.option.id === criterion.optionId && o.value.id === criterion.valueId);
|
|
8710
|
-
});
|
|
8711
|
-
};
|
|
8712
|
-
// Function to update the criteria based on a matching variant
|
|
8713
|
-
const updateCriteriaFromVariant = (variant) => {
|
|
8714
|
-
return _.map(variant.options, (o) => ({
|
|
8715
|
-
optionId: o.option.id,
|
|
8716
|
-
valueId: o.value.id,
|
|
8717
|
-
}));
|
|
8718
|
-
};
|
|
8719
|
-
// Find the variant that matches all the criteria
|
|
8720
|
-
const matchingVariant = _.find(this.variants, (variant) => matchesAllCriteria(variant, criteria));
|
|
8721
|
-
if (matchingVariant) {
|
|
8722
|
-
this.selectedVariant = matchingVariant;
|
|
8723
|
-
}
|
|
8724
|
-
// const updatedCriteria = matchingVariant ? updateCriteriaFromVariant(matchingVariant) : [];
|
|
8725
|
-
}
|
|
8726
8732
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: LettingManageDetail, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8727
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: LettingManageDetail, isStandalone: true, selector: "rolatech-letting-manage-detail", usesInheritance: true, ngImport: i0, template: "@if (
|
|
8733
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: LettingManageDetail, isStandalone: true, selector: "rolatech-letting-manage-detail", usesInheritance: true, ngImport: i0, template: "<div class=\"flex flex-col w-full p-3\">\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 { @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\"> </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 } @if (highlights.length > 0) {\n <rolatech-property-highlights [highlights]=\"highlights\"></rolatech-property-highlights>\n } @if (floorplans.length > 0) {\n <rolatech-property-floorplan [floorplans]=\"floorplans\"></rolatech-property-floorplan>\n } @if (property.location) {\n <rolatech-property-location [location]=\"property.location\"></rolatech-property-location>\n } @if (videos() && videos().length > 0) { @for (item of videos(); track $index) {\n <rolatech-property-video [video]=\"item\"></rolatech-property-video>\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 </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 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 } }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: PropertyInfoComponent, selector: "rolatech-property-info", inputs: ["property", "inWishList"], outputs: ["wish"] }, { kind: "component", type: PropertyMediaComponent, selector: "rolatech-property-media", inputs: ["media", "min"] }, { kind: "component", type: PropertyPricingComponent, selector: "rolatech-property-pricing", inputs: ["property", "price"] }, { kind: "component", type: PropertySectionComponent, selector: "rolatech-property-section", inputs: ["section", "user", "username"] }, { kind: "component", type: LettingActions, selector: "rolatech-letting-actions", inputs: ["letting"], outputs: ["requestViewing", "offer", "deposit"] }, { kind: "component", type: LettingActionContact, selector: "rolatech-letting-action-contact", inputs: ["phone"], outputs: ["callAgent", "emailAgent"] }, { kind: "component", type: PropertyLocationComponent, selector: "rolatech-property-location", inputs: ["location"] }, { kind: "component", type: PropertyFeaturesComponent, selector: "rolatech-property-features", inputs: ["features"] }, { kind: "component", type: PropertyVideoComponent, selector: "rolatech-property-video", inputs: ["video"] }, { kind: "component", type: PropertyAgentRenderer, selector: "rolatech-property-agent-renderer", inputs: ["name", "avatar", "username", "subtitle"] }, { kind: "component", type: PropertyMediaSkeleton, selector: "rolatech-property-media-skeleton" }, { kind: "component", type: PropertyInfoSkeleton, selector: "rolatech-property-info-skeleton" }, { kind: "component", type: PropertyAgentSkeleton, selector: "rolatech-property-agent-skeleton" }, { kind: "component", type: PropertyHighlights, selector: "rolatech-property-highlights", inputs: ["highlights"] }, { kind: "component", type: PropertyFloorplan, selector: "rolatech-property-floorplan", inputs: ["floorplans"] }, { kind: "component", type: PropertyEpc, selector: "rolatech-property-epc", inputs: ["epc"] }] });
|
|
8728
8734
|
}
|
|
8729
8735
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: LettingManageDetail, decorators: [{
|
|
8730
8736
|
type: Component,
|
|
@@ -8741,7 +8747,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
8741
8747
|
PropertyFeaturesComponent,
|
|
8742
8748
|
PropertyVideoComponent,
|
|
8743
8749
|
PropertyAgentRenderer,
|
|
8744
|
-
|
|
8750
|
+
PropertyMediaSkeleton,
|
|
8751
|
+
PropertyInfoSkeleton,
|
|
8752
|
+
PropertyAgentSkeleton,
|
|
8753
|
+
PropertyHighlights,
|
|
8754
|
+
PropertyFloorplan,
|
|
8755
|
+
PropertyEpc,
|
|
8756
|
+
], template: "<div class=\"flex flex-col w-full p-3\">\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 { @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\"> </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 } @if (highlights.length > 0) {\n <rolatech-property-highlights [highlights]=\"highlights\"></rolatech-property-highlights>\n } @if (floorplans.length > 0) {\n <rolatech-property-floorplan [floorplans]=\"floorplans\"></rolatech-property-floorplan>\n } @if (property.location) {\n <rolatech-property-location [location]=\"property.location\"></rolatech-property-location>\n } @if (videos() && videos().length > 0) { @for (item of videos(); track $index) {\n <rolatech-property-video [video]=\"item\"></rolatech-property-video>\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 </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 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 } }\n</div>\n" }]
|
|
8745
8757
|
}], ctorParameters: () => [] });
|
|
8746
8758
|
|
|
8747
8759
|
const MY_FORMATS$1 = {
|
|
@@ -9689,7 +9701,6 @@ class PropertyAgentListingIndex extends BaseComponent {
|
|
|
9689
9701
|
meta;
|
|
9690
9702
|
loading = false;
|
|
9691
9703
|
ngOnInit() {
|
|
9692
|
-
// this.findProperties();
|
|
9693
9704
|
const sub = this.route.queryParamMap
|
|
9694
9705
|
.pipe(map((p) => {
|
|
9695
9706
|
const page = p.get('page') ? Number(p.get('page')) : 1;
|
|
@@ -9951,4 +9962,4 @@ const propertyAgentListingRoutes = [
|
|
|
9951
9962
|
*/
|
|
9952
9963
|
|
|
9953
9964
|
export { PropertyViewerCategory as A, PropertyOfferTimelineStatus as B, PropertyOfferType as C, PropertyOfferStatus as D, EmploymentStatus as E, ResidencyStatus as F, PropertyApplicantType as G, AdverseCreditStatus as H, BedroomRange as I, PriceRange as J, Market as M, PropertyUtil as P, RentFrequency as R, ViewingTime as V, PropertyViewType as a, PropertyManageItemSkeleton as b, PropertyViewingItemComponent as c, propertyManageOffersRoutes as d, propertyRoutes as e, featureManageRoutes as f, propertyManageRoutes as g, propertyManageViewingsRoutes as h, propertyAgentViewingRoutes as i, propertyAgentOfferRoutes as j, propertyAgentOverviewRoutes as k, lettingManageRoutes as l, propertyManageOverviewRoutes as m, propertyAgentListingRoutes as n, PropertyActionsComponent as o, propertyReviewRoutes as p, PropertyItemComponent as q, PropertyPricingComponent as r, PropertyPriceType as s, tenantManageRoutes as t, PropertyVideoProvider as u, PropertyStatus as v, PropertyType as w, PropertyInventoryStatus as x, PropertyScope as y, PropertyViewingStatus as z };
|
|
9954
|
-
//# sourceMappingURL=rolatech-angular-property-rolatech-angular-property-
|
|
9965
|
+
//# sourceMappingURL=rolatech-angular-property-rolatech-angular-property-CG60ZNTz.mjs.map
|