@mj-biz-apps/common-ng 5.33.2 → 5.35.0
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/LICENSE +183 -0
- package/README.md +12 -2
- package/dist/lib/components/address-editor/address-editor.component.d.ts +23 -0
- package/dist/lib/components/address-editor/address-editor.component.d.ts.map +1 -1
- package/dist/lib/components/address-editor/address-editor.component.js +207 -140
- package/dist/lib/components/address-editor/address-editor.component.js.map +1 -1
- package/dist/lib/components/contact-method-list/contact-method-list.component.d.ts +17 -10
- package/dist/lib/components/contact-method-list/contact-method-list.component.d.ts.map +1 -1
- package/dist/lib/components/contact-method-list/contact-method-list.component.js +104 -39
- package/dist/lib/components/contact-method-list/contact-method-list.component.js.map +1 -1
- package/dist/lib/components/identity-header/activity-identity.component.d.ts +36 -0
- package/dist/lib/components/identity-header/activity-identity.component.d.ts.map +1 -0
- package/dist/lib/components/identity-header/activity-identity.component.js +387 -0
- package/dist/lib/components/identity-header/activity-identity.component.js.map +1 -0
- package/dist/lib/components/identity-header/organization-identity.component.d.ts +26 -0
- package/dist/lib/components/identity-header/organization-identity.component.d.ts.map +1 -0
- package/dist/lib/components/identity-header/organization-identity.component.js +304 -0
- package/dist/lib/components/identity-header/organization-identity.component.js.map +1 -0
- package/dist/lib/components/identity-header/person-identity.component.d.ts +27 -0
- package/dist/lib/components/identity-header/person-identity.component.d.ts.map +1 -0
- package/dist/lib/components/identity-header/person-identity.component.js +330 -0
- package/dist/lib/components/identity-header/person-identity.component.js.map +1 -0
- package/dist/lib/components/org-hierarchy-tree/org-hierarchy-tree.component.d.ts +14 -82
- package/dist/lib/components/org-hierarchy-tree/org-hierarchy-tree.component.d.ts.map +1 -1
- package/dist/lib/components/org-hierarchy-tree/org-hierarchy-tree.component.js +138 -151
- package/dist/lib/components/org-hierarchy-tree/org-hierarchy-tree.component.js.map +1 -1
- package/dist/lib/components/relationship-graph/common-relationship-graph.component.d.ts +40 -0
- package/dist/lib/components/relationship-graph/common-relationship-graph.component.d.ts.map +1 -0
- package/dist/lib/components/relationship-graph/common-relationship-graph.component.js +403 -0
- package/dist/lib/components/relationship-graph/common-relationship-graph.component.js.map +1 -0
- package/dist/lib/components/relationship-list/relationship-list.component.d.ts +25 -55
- package/dist/lib/components/relationship-list/relationship-list.component.d.ts.map +1 -1
- package/dist/lib/components/relationship-list/relationship-list.component.js +509 -483
- package/dist/lib/components/relationship-list/relationship-list.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +29 -11
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +101 -29
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/panels/__tests__/activity-header.panel.test.d.ts +3 -0
- package/dist/lib/custom/panels/__tests__/activity-header.panel.test.d.ts.map +1 -0
- package/dist/lib/custom/panels/__tests__/activity-header.panel.test.js +123 -0
- package/dist/lib/custom/panels/__tests__/activity-header.panel.test.js.map +1 -0
- package/dist/lib/custom/panels/activity-content.panel.d.ts +30 -0
- package/dist/lib/custom/panels/activity-content.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/activity-content.panel.js +309 -0
- package/dist/lib/custom/panels/activity-content.panel.js.map +1 -0
- package/dist/lib/custom/panels/activity-files.panel.d.ts +33 -0
- package/dist/lib/custom/panels/activity-files.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/activity-files.panel.js +222 -0
- package/dist/lib/custom/panels/activity-files.panel.js.map +1 -0
- package/dist/lib/custom/panels/activity-header.panel.d.ts +11 -0
- package/dist/lib/custom/panels/activity-header.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/activity-header.panel.js +54 -0
- package/dist/lib/custom/panels/activity-header.panel.js.map +1 -0
- package/dist/lib/custom/panels/activity-hierarchy.panel.d.ts +22 -0
- package/dist/lib/custom/panels/activity-hierarchy.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/activity-hierarchy.panel.js +120 -0
- package/dist/lib/custom/panels/activity-hierarchy.panel.js.map +1 -0
- package/dist/lib/custom/panels/activity-links.panel.d.ts +33 -0
- package/dist/lib/custom/panels/activity-links.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/activity-links.panel.js +210 -0
- package/dist/lib/custom/panels/activity-links.panel.js.map +1 -0
- package/dist/lib/custom/panels/activity-type-hierarchy.panel.d.ts +22 -0
- package/dist/lib/custom/panels/activity-type-hierarchy.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/activity-type-hierarchy.panel.js +113 -0
- package/dist/lib/custom/panels/activity-type-hierarchy.panel.js.map +1 -0
- package/dist/lib/custom/panels/bizapps-form-panel.d.ts +19 -0
- package/dist/lib/custom/panels/bizapps-form-panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/bizapps-form-panel.js +29 -0
- package/dist/lib/custom/panels/bizapps-form-panel.js.map +1 -0
- package/dist/lib/custom/panels/organization-addresses.panel.d.ts +12 -0
- package/dist/lib/custom/panels/organization-addresses.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/organization-addresses.panel.js +57 -0
- package/dist/lib/custom/panels/organization-addresses.panel.js.map +1 -0
- package/dist/lib/custom/panels/organization-contact-methods.panel.d.ts +11 -0
- package/dist/lib/custom/panels/organization-contact-methods.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/organization-contact-methods.panel.js +56 -0
- package/dist/lib/custom/panels/organization-contact-methods.panel.js.map +1 -0
- package/dist/lib/custom/panels/organization-header.panel.d.ts +11 -0
- package/dist/lib/custom/panels/organization-header.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/organization-header.panel.js +54 -0
- package/dist/lib/custom/panels/organization-header.panel.js.map +1 -0
- package/dist/lib/custom/panels/organization-hierarchy.panel.d.ts +12 -0
- package/dist/lib/custom/panels/organization-hierarchy.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/organization-hierarchy.panel.js +57 -0
- package/dist/lib/custom/panels/organization-hierarchy.panel.js.map +1 -0
- package/dist/lib/custom/panels/organization-relationships.panel.d.ts +17 -0
- package/dist/lib/custom/panels/organization-relationships.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/organization-relationships.panel.js +163 -0
- package/dist/lib/custom/panels/organization-relationships.panel.js.map +1 -0
- package/dist/lib/custom/panels/person-addresses.panel.d.ts +12 -0
- package/dist/lib/custom/panels/person-addresses.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/person-addresses.panel.js +57 -0
- package/dist/lib/custom/panels/person-addresses.panel.js.map +1 -0
- package/dist/lib/custom/panels/person-contact-methods.panel.d.ts +11 -0
- package/dist/lib/custom/panels/person-contact-methods.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/person-contact-methods.panel.js +56 -0
- package/dist/lib/custom/panels/person-contact-methods.panel.js.map +1 -0
- package/dist/lib/custom/panels/person-header.panel.d.ts +12 -0
- package/dist/lib/custom/panels/person-header.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/person-header.panel.js +55 -0
- package/dist/lib/custom/panels/person-header.panel.js.map +1 -0
- package/dist/lib/custom/panels/person-relationships.panel.d.ts +17 -0
- package/dist/lib/custom/panels/person-relationships.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/person-relationships.panel.js +163 -0
- package/dist/lib/custom/panels/person-relationships.panel.js.map +1 -0
- package/dist/lib/data/__tests__/directory-stats.test.d.ts +2 -0
- package/dist/lib/data/__tests__/directory-stats.test.d.ts.map +1 -0
- package/dist/lib/data/__tests__/directory-stats.test.js +79 -0
- package/dist/lib/data/__tests__/directory-stats.test.js.map +1 -0
- package/dist/lib/data/directory-queries.d.ts +10 -0
- package/dist/lib/data/directory-queries.d.ts.map +1 -0
- package/dist/lib/data/directory-queries.js +104 -0
- package/dist/lib/data/directory-queries.js.map +1 -0
- package/dist/lib/data/directory-stats.d.ts +24 -0
- package/dist/lib/data/directory-stats.d.ts.map +1 -0
- package/dist/lib/data/directory-stats.js +137 -0
- package/dist/lib/data/directory-stats.js.map +1 -0
- package/dist/lib/data/directory-types.d.ts +33 -0
- package/dist/lib/data/directory-types.d.ts.map +1 -0
- package/dist/lib/data/directory-types.js +2 -0
- package/dist/lib/data/directory-types.js.map +1 -0
- package/dist/lib/data/entity-names.d.ts +21 -0
- package/dist/lib/data/entity-names.d.ts.map +1 -0
- package/dist/lib/data/entity-names.js +21 -0
- package/dist/lib/data/entity-names.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivity/mjbizappscommonactivity.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivity/mjbizappscommonactivity.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivity/mjbizappscommonactivity.form.component.js +210 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivity/mjbizappscommonactivity.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityFile/mjbizappscommonactivityfile.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityFile/mjbizappscommonactivityfile.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityFile/mjbizappscommonactivityfile.form.component.js +63 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityFile/mjbizappscommonactivityfile.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityLink/mjbizappscommonactivitylink.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityLink/mjbizappscommonactivitylink.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityLink/mjbizappscommonactivitylink.form.component.js +69 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityLink/mjbizappscommonactivitylink.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncConnection/mjbizappscommonactivitysyncconnection.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncConnection/mjbizappscommonactivitysyncconnection.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncConnection/mjbizappscommonactivitysyncconnection.form.component.js +112 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncConnection/mjbizappscommonactivitysyncconnection.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncRule/mjbizappscommonactivitysyncrule.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncRule/mjbizappscommonactivitysyncrule.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncRule/mjbizappscommonactivitysyncrule.form.component.js +77 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncRule/mjbizappscommonactivitysyncrule.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityType/mjbizappscommonactivitytype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityType/mjbizappscommonactivitytype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityType/mjbizappscommonactivitytype.form.component.js +156 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonActivityType/mjbizappscommonactivitytype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.js +24 -6
- package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.js +2 -2
- package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.js +5 -9
- package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.js +2 -2
- package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.js +83 -37
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.js +2 -2
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.js +73 -35
- package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.js +5 -9
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.js +2 -2
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +22 -16
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +19 -1
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/open-record.d.ts +5 -0
- package/dist/lib/open-record.d.ts.map +1 -0
- package/dist/lib/open-record.js +15 -0
- package/dist/lib/open-record.js.map +1 -0
- package/dist/lib/pages/activities-dashboard.page.d.ts +53 -0
- package/dist/lib/pages/activities-dashboard.page.d.ts.map +1 -0
- package/dist/lib/pages/activities-dashboard.page.js +663 -0
- package/dist/lib/pages/activities-dashboard.page.js.map +1 -0
- package/dist/lib/pages/common-dashboard.page.d.ts +42 -0
- package/dist/lib/pages/common-dashboard.page.d.ts.map +1 -0
- package/dist/lib/pages/common-dashboard.page.js +662 -0
- package/dist/lib/pages/common-dashboard.page.js.map +1 -0
- package/dist/lib/pages/organizations-list.page.d.ts +19 -0
- package/dist/lib/pages/organizations-list.page.d.ts.map +1 -0
- package/dist/lib/pages/organizations-list.page.js +202 -0
- package/dist/lib/pages/organizations-list.page.js.map +1 -0
- package/dist/lib/pages/people-list.page.d.ts +21 -0
- package/dist/lib/pages/people-list.page.d.ts.map +1 -0
- package/dist/lib/pages/people-list.page.js +209 -0
- package/dist/lib/pages/people-list.page.js.map +1 -0
- package/dist/lib/sections/common-sections.component.d.ts +43 -0
- package/dist/lib/sections/common-sections.component.d.ts.map +1 -0
- package/dist/lib/sections/common-sections.component.js +167 -0
- package/dist/lib/sections/common-sections.component.js.map +1 -0
- package/dist/public-api.d.ts +16 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +20 -2
- package/dist/public-api.js.map +1 -1
- package/package.json +19 -12
- package/dist/lib/custom/Organization/organization-form.component.d.ts +0 -24
- package/dist/lib/custom/Organization/organization-form.component.d.ts.map +0 -1
- package/dist/lib/custom/Organization/organization-form.component.js +0 -244
- package/dist/lib/custom/Organization/organization-form.component.js.map +0 -1
- package/dist/lib/custom/Person/person-form.component.d.ts +0 -24
- package/dist/lib/custom/Person/person-form.component.d.ts.map +0 -1
- package/dist/lib/custom/Person/person-form.component.js +0 -229
- package/dist/lib/custom/Person/person-form.component.js.map +0 -1
|
@@ -21,47 +21,57 @@ function AddressEditorComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
|
21
21
|
function AddressEditorComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
22
22
|
i0.ɵɵelementStart(0, "div", 4)(1, "div", 5);
|
|
23
23
|
i0.ɵɵelement(2, "i", 6);
|
|
24
|
+
i0.ɵɵtext(3);
|
|
25
|
+
i0.ɵɵelementEnd()();
|
|
26
|
+
} if (rf & 2) {
|
|
27
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
28
|
+
i0.ɵɵadvance(3);
|
|
29
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.LoadError, " ");
|
|
30
|
+
} }
|
|
31
|
+
function AddressEditorComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
i0.ɵɵelementStart(0, "div", 4)(1, "div", 7);
|
|
33
|
+
i0.ɵɵelement(2, "i", 8);
|
|
24
34
|
i0.ɵɵtext(3, " Loading addresses... ");
|
|
25
35
|
i0.ɵɵelementEnd()();
|
|
26
36
|
} }
|
|
27
|
-
function
|
|
28
|
-
i0.ɵɵelementStart(0, "div",
|
|
37
|
+
function AddressEditorComponent_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
+
i0.ɵɵelementStart(0, "div", 9);
|
|
29
39
|
i0.ɵɵelement(1, "i", 2);
|
|
30
40
|
i0.ɵɵtext(2, " No addresses linked yet ");
|
|
31
41
|
i0.ɵɵelementEnd();
|
|
32
42
|
} }
|
|
33
|
-
function
|
|
34
|
-
i0.ɵɵelementStart(0, "span",
|
|
35
|
-
i0.ɵɵelement(1, "i",
|
|
43
|
+
function AddressEditorComponent_Conditional_7_For_3_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
45
|
+
i0.ɵɵelement(1, "i", 21);
|
|
36
46
|
i0.ɵɵtext(2, " Primary");
|
|
37
47
|
i0.ɵɵelementEnd();
|
|
38
48
|
} }
|
|
39
|
-
function
|
|
49
|
+
function AddressEditorComponent_Conditional_7_For_3_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
40
50
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
41
|
-
i0.ɵɵelementStart(0, "button",
|
|
42
|
-
i0.ɵɵlistener("click", function
|
|
43
|
-
i0.ɵɵelement(1, "i",
|
|
51
|
+
i0.ɵɵelementStart(0, "button", 27);
|
|
52
|
+
i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_For_3_Conditional_12_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ɵ$index_37_r4 = i0.ɵɵnextContext(2).$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSetPrimary(ɵ$index_37_r4)); });
|
|
53
|
+
i0.ɵɵelement(1, "i", 28);
|
|
44
54
|
i0.ɵɵelementEnd();
|
|
45
55
|
} }
|
|
46
|
-
function
|
|
56
|
+
function AddressEditorComponent_Conditional_7_For_3_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
47
57
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
48
|
-
i0.ɵɵelementStart(0, "div",
|
|
49
|
-
i0.ɵɵconditionalCreate(1,
|
|
50
|
-
i0.ɵɵelementStart(2, "button",
|
|
51
|
-
i0.ɵɵlistener("click", function
|
|
52
|
-
i0.ɵɵelement(3, "i",
|
|
53
|
-
i0.ɵɵelementEnd();
|
|
54
|
-
i0.ɵɵelementStart(4, "button",
|
|
55
|
-
i0.ɵɵlistener("click", function
|
|
56
|
-
i0.ɵɵelement(5, "i",
|
|
58
|
+
i0.ɵɵelementStart(0, "div", 20);
|
|
59
|
+
i0.ɵɵconditionalCreate(1, AddressEditorComponent_Conditional_7_For_3_Conditional_12_Conditional_1_Template, 2, 0, "button", 22);
|
|
60
|
+
i0.ɵɵelementStart(2, "button", 23);
|
|
61
|
+
i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_For_3_Conditional_12_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r2); const ɵ$index_37_r4 = i0.ɵɵnextContext().$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onEdit(ɵ$index_37_r4)); });
|
|
62
|
+
i0.ɵɵelement(3, "i", 24);
|
|
63
|
+
i0.ɵɵelementEnd();
|
|
64
|
+
i0.ɵɵelementStart(4, "button", 25);
|
|
65
|
+
i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_For_3_Conditional_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r2); const ɵ$index_37_r4 = i0.ɵɵnextContext().$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onDelete(ɵ$index_37_r4)); });
|
|
66
|
+
i0.ɵɵelement(5, "i", 26);
|
|
57
67
|
i0.ɵɵelementEnd()();
|
|
58
68
|
} if (rf & 2) {
|
|
59
69
|
const item_r5 = i0.ɵɵnextContext().$implicit;
|
|
60
70
|
i0.ɵɵadvance();
|
|
61
71
|
i0.ɵɵconditional(!item_r5.Link.IsPrimary ? 1 : -1);
|
|
62
72
|
} }
|
|
63
|
-
function
|
|
64
|
-
i0.ɵɵelementStart(0, "option",
|
|
73
|
+
function AddressEditorComponent_Conditional_7_For_3_Conditional_13_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
+
i0.ɵɵelementStart(0, "option", 32);
|
|
65
75
|
i0.ɵɵtext(1);
|
|
66
76
|
i0.ɵɵelementEnd();
|
|
67
77
|
} if (rf & 2) {
|
|
@@ -70,16 +80,16 @@ function AddressEditorComponent_Conditional_6_For_3_Conditional_13_For_7_Templat
|
|
|
70
80
|
i0.ɵɵadvance();
|
|
71
81
|
i0.ɵɵtextInterpolate(t_r7.Name);
|
|
72
82
|
} }
|
|
73
|
-
function
|
|
74
|
-
i0.ɵɵelement(0, "i",
|
|
83
|
+
function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵelement(0, "i", 37);
|
|
75
85
|
} }
|
|
76
|
-
function
|
|
77
|
-
i0.ɵɵelementStart(0, "span",
|
|
86
|
+
function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
87
|
+
i0.ɵɵelementStart(0, "span", 38);
|
|
78
88
|
i0.ɵɵtext(1, "not found");
|
|
79
89
|
i0.ɵɵelementEnd();
|
|
80
90
|
} }
|
|
81
|
-
function
|
|
82
|
-
i0.ɵɵelementStart(0, "option",
|
|
91
|
+
function AddressEditorComponent_Conditional_7_For_3_Conditional_13_For_36_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
+
i0.ɵɵelementStart(0, "option", 32);
|
|
83
93
|
i0.ɵɵtext(1);
|
|
84
94
|
i0.ɵɵelementEnd();
|
|
85
95
|
} if (rf & 2) {
|
|
@@ -88,75 +98,75 @@ function AddressEditorComponent_Conditional_6_For_3_Conditional_13_For_36_Templa
|
|
|
88
98
|
i0.ɵɵadvance();
|
|
89
99
|
i0.ɵɵtextInterpolate2("", c_r8.Code, " - ", c_r8.Name);
|
|
90
100
|
} }
|
|
91
|
-
function
|
|
92
|
-
i0.ɵɵelement(0, "i",
|
|
101
|
+
function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
102
|
+
i0.ɵɵelement(0, "i", 50);
|
|
93
103
|
} }
|
|
94
|
-
function
|
|
104
|
+
function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
95
105
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
96
|
-
i0.ɵɵelementStart(0, "div",
|
|
106
|
+
i0.ɵɵelementStart(0, "div", 10)(1, "div", 29)(2, "div", 30)(3, "label");
|
|
97
107
|
i0.ɵɵtext(4, "Type");
|
|
98
108
|
i0.ɵɵelementEnd();
|
|
99
|
-
i0.ɵɵelementStart(5, "select",
|
|
100
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
101
|
-
i0.ɵɵrepeaterCreate(6,
|
|
109
|
+
i0.ɵɵelementStart(5, "select", 31);
|
|
110
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_select_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.TypeID, $event) || (ctx_r0.EditForm.TypeID = $event); return i0.ɵɵresetView($event); });
|
|
111
|
+
i0.ɵɵrepeaterCreate(6, AddressEditorComponent_Conditional_7_For_3_Conditional_13_For_7_Template, 2, 2, "option", 32, _forTrack1);
|
|
102
112
|
i0.ɵɵelementEnd()();
|
|
103
|
-
i0.ɵɵelementStart(8, "div",
|
|
113
|
+
i0.ɵɵelementStart(8, "div", 33)(9, "label");
|
|
104
114
|
i0.ɵɵtext(10, "Line 1");
|
|
105
115
|
i0.ɵɵelementEnd();
|
|
106
|
-
i0.ɵɵelementStart(11, "input",
|
|
107
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
116
|
+
i0.ɵɵelementStart(11, "input", 34);
|
|
117
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line1, $event) || (ctx_r0.EditForm.Line1 = $event); return i0.ɵɵresetView($event); });
|
|
108
118
|
i0.ɵɵelementEnd()();
|
|
109
|
-
i0.ɵɵelementStart(12, "div",
|
|
119
|
+
i0.ɵɵelementStart(12, "div", 35)(13, "label");
|
|
110
120
|
i0.ɵɵtext(14, "Line 2");
|
|
111
121
|
i0.ɵɵelementEnd();
|
|
112
|
-
i0.ɵɵelementStart(15, "input",
|
|
113
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
122
|
+
i0.ɵɵelementStart(15, "input", 36);
|
|
123
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line2, $event) || (ctx_r0.EditForm.Line2 = $event); return i0.ɵɵresetView($event); });
|
|
114
124
|
i0.ɵɵelementEnd()()();
|
|
115
|
-
i0.ɵɵelementStart(16, "div",
|
|
125
|
+
i0.ɵɵelementStart(16, "div", 29)(17, "div", 33)(18, "label");
|
|
116
126
|
i0.ɵɵtext(19, " City ");
|
|
117
|
-
i0.ɵɵconditionalCreate(20,
|
|
118
|
-
i0.ɵɵconditionalCreate(21,
|
|
127
|
+
i0.ɵɵconditionalCreate(20, AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_20_Template, 1, 0, "i", 37);
|
|
128
|
+
i0.ɵɵconditionalCreate(21, AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_21_Template, 2, 0, "span", 38);
|
|
119
129
|
i0.ɵɵelementEnd();
|
|
120
|
-
i0.ɵɵelementStart(22, "input",
|
|
121
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
130
|
+
i0.ɵɵelementStart(22, "input", 39);
|
|
131
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.City, $event) || (ctx_r0.EditForm.City = $event); return i0.ɵɵresetView($event); });
|
|
122
132
|
i0.ɵɵelementEnd()();
|
|
123
|
-
i0.ɵɵelementStart(23, "div",
|
|
133
|
+
i0.ɵɵelementStart(23, "div", 40)(24, "label");
|
|
124
134
|
i0.ɵɵtext(25, "State");
|
|
125
135
|
i0.ɵɵelementEnd();
|
|
126
|
-
i0.ɵɵelementStart(26, "input",
|
|
127
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
136
|
+
i0.ɵɵelementStart(26, "input", 41);
|
|
137
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.StateProvince, $event) || (ctx_r0.EditForm.StateProvince = $event); return i0.ɵɵresetView($event); });
|
|
128
138
|
i0.ɵɵelementEnd()();
|
|
129
|
-
i0.ɵɵelementStart(27, "div",
|
|
139
|
+
i0.ɵɵelementStart(27, "div", 42)(28, "label");
|
|
130
140
|
i0.ɵɵtext(29, "Postal");
|
|
131
141
|
i0.ɵɵelementEnd();
|
|
132
|
-
i0.ɵɵelementStart(30, "input",
|
|
133
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
134
|
-
i0.ɵɵlistener("blur", function
|
|
142
|
+
i0.ɵɵelementStart(30, "input", 43);
|
|
143
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_30_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.PostalCode, $event) || (ctx_r0.EditForm.PostalCode = $event); return i0.ɵɵresetView($event); });
|
|
144
|
+
i0.ɵɵlistener("blur", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_blur_30_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onPostalCodeBlur()); });
|
|
135
145
|
i0.ɵɵelementEnd()();
|
|
136
|
-
i0.ɵɵelementStart(31, "div",
|
|
146
|
+
i0.ɵɵelementStart(31, "div", 44)(32, "label");
|
|
137
147
|
i0.ɵɵtext(33, "Country");
|
|
138
148
|
i0.ɵɵelementEnd();
|
|
139
|
-
i0.ɵɵelementStart(34, "select",
|
|
140
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
141
|
-
i0.ɵɵrepeaterCreate(35,
|
|
149
|
+
i0.ɵɵelementStart(34, "select", 31);
|
|
150
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_select_ngModelChange_34_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Country, $event) || (ctx_r0.EditForm.Country = $event); return i0.ɵɵresetView($event); });
|
|
151
|
+
i0.ɵɵrepeaterCreate(35, AddressEditorComponent_Conditional_7_For_3_Conditional_13_For_36_Template, 2, 3, "option", 32, _forTrack2);
|
|
142
152
|
i0.ɵɵelementEnd()();
|
|
143
|
-
i0.ɵɵelementStart(37, "div",
|
|
144
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
153
|
+
i0.ɵɵelementStart(37, "div", 45)(38, "input", 46);
|
|
154
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_38_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.IsPrimary, $event) || (ctx_r0.EditForm.IsPrimary = $event); return i0.ɵɵresetView($event); });
|
|
145
155
|
i0.ɵɵelementEnd();
|
|
146
|
-
i0.ɵɵelementStart(39, "label",
|
|
156
|
+
i0.ɵɵelementStart(39, "label", 47);
|
|
147
157
|
i0.ɵɵtext(40, "Primary");
|
|
148
158
|
i0.ɵɵelementEnd()()();
|
|
149
|
-
i0.ɵɵelementStart(41, "div",
|
|
150
|
-
i0.ɵɵlistener("click", function
|
|
151
|
-
i0.ɵɵconditionalCreate(43,
|
|
159
|
+
i0.ɵɵelementStart(41, "div", 48)(42, "button", 49);
|
|
160
|
+
i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onSave()); });
|
|
161
|
+
i0.ɵɵconditionalCreate(43, AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_43_Template, 1, 0, "i", 50);
|
|
152
162
|
i0.ɵɵtext(44, " Save ");
|
|
153
163
|
i0.ɵɵelementEnd();
|
|
154
|
-
i0.ɵɵelementStart(45, "button",
|
|
155
|
-
i0.ɵɵlistener("click", function
|
|
164
|
+
i0.ɵɵelementStart(45, "button", 51);
|
|
165
|
+
i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onCancelEdit()); });
|
|
156
166
|
i0.ɵɵtext(46, "Cancel");
|
|
157
167
|
i0.ɵɵelementEnd()()();
|
|
158
168
|
} if (rf & 2) {
|
|
159
|
-
const ɵ$
|
|
169
|
+
const ɵ$index_37_r4 = i0.ɵɵnextContext().$index;
|
|
160
170
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
161
171
|
i0.ɵɵadvance(5);
|
|
162
172
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.EditForm.TypeID);
|
|
@@ -181,36 +191,36 @@ function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template(rf,
|
|
|
181
191
|
i0.ɵɵadvance();
|
|
182
192
|
i0.ɵɵrepeater(ctx_r0.Countries);
|
|
183
193
|
i0.ɵɵadvance(3);
|
|
184
|
-
i0.ɵɵproperty("id", "primary-edit-" + ɵ$
|
|
194
|
+
i0.ɵɵproperty("id", "primary-edit-" + ɵ$index_37_r4);
|
|
185
195
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.EditForm.IsPrimary);
|
|
186
196
|
i0.ɵɵadvance();
|
|
187
|
-
i0.ɵɵproperty("for", "primary-edit-" + ɵ$
|
|
197
|
+
i0.ɵɵproperty("for", "primary-edit-" + ɵ$index_37_r4);
|
|
188
198
|
i0.ɵɵadvance(3);
|
|
189
199
|
i0.ɵɵproperty("disabled", ctx_r0.Saving);
|
|
190
200
|
i0.ɵɵadvance();
|
|
191
201
|
i0.ɵɵconditional(ctx_r0.Saving ? 43 : -1);
|
|
192
202
|
} }
|
|
193
|
-
function
|
|
194
|
-
i0.ɵɵelementStart(0, "div",
|
|
203
|
+
function AddressEditorComponent_Conditional_7_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
204
|
+
i0.ɵɵelementStart(0, "div", 12)(1, "div", 13);
|
|
195
205
|
i0.ɵɵelement(2, "i");
|
|
196
206
|
i0.ɵɵelementEnd();
|
|
197
|
-
i0.ɵɵelementStart(3, "div",
|
|
207
|
+
i0.ɵɵelementStart(3, "div", 14)(4, "div", 15);
|
|
198
208
|
i0.ɵɵtext(5);
|
|
199
209
|
i0.ɵɵelementEnd();
|
|
200
|
-
i0.ɵɵelementStart(6, "div",
|
|
210
|
+
i0.ɵɵelementStart(6, "div", 16);
|
|
201
211
|
i0.ɵɵtext(7);
|
|
202
212
|
i0.ɵɵelementEnd()();
|
|
203
|
-
i0.ɵɵelementStart(8, "div",
|
|
213
|
+
i0.ɵɵelementStart(8, "div", 17)(9, "span", 18);
|
|
204
214
|
i0.ɵɵtext(10);
|
|
205
215
|
i0.ɵɵelementEnd();
|
|
206
|
-
i0.ɵɵconditionalCreate(11,
|
|
216
|
+
i0.ɵɵconditionalCreate(11, AddressEditorComponent_Conditional_7_For_3_Conditional_11_Template, 3, 0, "span", 19);
|
|
207
217
|
i0.ɵɵelementEnd();
|
|
208
|
-
i0.ɵɵconditionalCreate(12,
|
|
218
|
+
i0.ɵɵconditionalCreate(12, AddressEditorComponent_Conditional_7_For_3_Conditional_12_Template, 6, 1, "div", 20);
|
|
209
219
|
i0.ɵɵelementEnd();
|
|
210
|
-
i0.ɵɵconditionalCreate(13,
|
|
220
|
+
i0.ɵɵconditionalCreate(13, AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template, 47, 14, "div", 10);
|
|
211
221
|
} if (rf & 2) {
|
|
212
222
|
const item_r5 = ctx.$implicit;
|
|
213
|
-
const ɵ$
|
|
223
|
+
const ɵ$index_37_r4 = ctx.$index;
|
|
214
224
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
215
225
|
i0.ɵɵclassProp("primary", item_r5.Link.IsPrimary);
|
|
216
226
|
i0.ɵɵadvance(2);
|
|
@@ -226,10 +236,10 @@ function AddressEditorComponent_Conditional_6_For_3_Template(rf, ctx) { if (rf &
|
|
|
226
236
|
i0.ɵɵadvance();
|
|
227
237
|
i0.ɵɵconditional(ctx_r0.EditMode ? 12 : -1);
|
|
228
238
|
i0.ɵɵadvance();
|
|
229
|
-
i0.ɵɵconditional(ctx_r0.EditingIndex === ɵ$
|
|
239
|
+
i0.ɵɵconditional(ctx_r0.EditingIndex === ɵ$index_37_r4 ? 13 : -1);
|
|
230
240
|
} }
|
|
231
|
-
function
|
|
232
|
-
i0.ɵɵelementStart(0, "option",
|
|
241
|
+
function AddressEditorComponent_Conditional_7_Conditional_4_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
242
|
+
i0.ɵɵelementStart(0, "option", 32);
|
|
233
243
|
i0.ɵɵtext(1);
|
|
234
244
|
i0.ɵɵelementEnd();
|
|
235
245
|
} if (rf & 2) {
|
|
@@ -238,16 +248,16 @@ function AddressEditorComponent_Conditional_6_Conditional_4_For_7_Template(rf, c
|
|
|
238
248
|
i0.ɵɵadvance();
|
|
239
249
|
i0.ɵɵtextInterpolate(t_r10.Name);
|
|
240
250
|
} }
|
|
241
|
-
function
|
|
242
|
-
i0.ɵɵelement(0, "i",
|
|
251
|
+
function AddressEditorComponent_Conditional_7_Conditional_4_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
252
|
+
i0.ɵɵelement(0, "i", 37);
|
|
243
253
|
} }
|
|
244
|
-
function
|
|
245
|
-
i0.ɵɵelementStart(0, "span",
|
|
254
|
+
function AddressEditorComponent_Conditional_7_Conditional_4_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
255
|
+
i0.ɵɵelementStart(0, "span", 38);
|
|
246
256
|
i0.ɵɵtext(1, "not found");
|
|
247
257
|
i0.ɵɵelementEnd();
|
|
248
258
|
} }
|
|
249
|
-
function
|
|
250
|
-
i0.ɵɵelementStart(0, "option",
|
|
259
|
+
function AddressEditorComponent_Conditional_7_Conditional_4_For_36_Template(rf, ctx) { if (rf & 1) {
|
|
260
|
+
i0.ɵɵelementStart(0, "option", 32);
|
|
251
261
|
i0.ɵɵtext(1);
|
|
252
262
|
i0.ɵɵelementEnd();
|
|
253
263
|
} if (rf & 2) {
|
|
@@ -256,71 +266,71 @@ function AddressEditorComponent_Conditional_6_Conditional_4_For_36_Template(rf,
|
|
|
256
266
|
i0.ɵɵadvance();
|
|
257
267
|
i0.ɵɵtextInterpolate2("", c_r11.Code, " - ", c_r11.Name);
|
|
258
268
|
} }
|
|
259
|
-
function
|
|
260
|
-
i0.ɵɵelement(0, "i",
|
|
269
|
+
function AddressEditorComponent_Conditional_7_Conditional_4_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
270
|
+
i0.ɵɵelement(0, "i", 50);
|
|
261
271
|
} }
|
|
262
|
-
function
|
|
272
|
+
function AddressEditorComponent_Conditional_7_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
263
273
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
264
|
-
i0.ɵɵelementStart(0, "div",
|
|
274
|
+
i0.ɵɵelementStart(0, "div", 10)(1, "div", 29)(2, "div", 30)(3, "label");
|
|
265
275
|
i0.ɵɵtext(4, "Type");
|
|
266
276
|
i0.ɵɵelementEnd();
|
|
267
|
-
i0.ɵɵelementStart(5, "select",
|
|
268
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
269
|
-
i0.ɵɵrepeaterCreate(6,
|
|
277
|
+
i0.ɵɵelementStart(5, "select", 31);
|
|
278
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_select_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.TypeID, $event) || (ctx_r0.EditForm.TypeID = $event); return i0.ɵɵresetView($event); });
|
|
279
|
+
i0.ɵɵrepeaterCreate(6, AddressEditorComponent_Conditional_7_Conditional_4_For_7_Template, 2, 2, "option", 32, _forTrack1);
|
|
270
280
|
i0.ɵɵelementEnd()();
|
|
271
|
-
i0.ɵɵelementStart(8, "div",
|
|
281
|
+
i0.ɵɵelementStart(8, "div", 33)(9, "label");
|
|
272
282
|
i0.ɵɵtext(10, "Line 1");
|
|
273
283
|
i0.ɵɵelementEnd();
|
|
274
|
-
i0.ɵɵelementStart(11, "input",
|
|
275
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
284
|
+
i0.ɵɵelementStart(11, "input", 34);
|
|
285
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line1, $event) || (ctx_r0.EditForm.Line1 = $event); return i0.ɵɵresetView($event); });
|
|
276
286
|
i0.ɵɵelementEnd()();
|
|
277
|
-
i0.ɵɵelementStart(12, "div",
|
|
287
|
+
i0.ɵɵelementStart(12, "div", 35)(13, "label");
|
|
278
288
|
i0.ɵɵtext(14, "Line 2");
|
|
279
289
|
i0.ɵɵelementEnd();
|
|
280
|
-
i0.ɵɵelementStart(15, "input",
|
|
281
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
290
|
+
i0.ɵɵelementStart(15, "input", 36);
|
|
291
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line2, $event) || (ctx_r0.EditForm.Line2 = $event); return i0.ɵɵresetView($event); });
|
|
282
292
|
i0.ɵɵelementEnd()()();
|
|
283
|
-
i0.ɵɵelementStart(16, "div",
|
|
293
|
+
i0.ɵɵelementStart(16, "div", 29)(17, "div", 33)(18, "label");
|
|
284
294
|
i0.ɵɵtext(19, " City ");
|
|
285
|
-
i0.ɵɵconditionalCreate(20,
|
|
286
|
-
i0.ɵɵconditionalCreate(21,
|
|
295
|
+
i0.ɵɵconditionalCreate(20, AddressEditorComponent_Conditional_7_Conditional_4_Conditional_20_Template, 1, 0, "i", 37);
|
|
296
|
+
i0.ɵɵconditionalCreate(21, AddressEditorComponent_Conditional_7_Conditional_4_Conditional_21_Template, 2, 0, "span", 38);
|
|
287
297
|
i0.ɵɵelementEnd();
|
|
288
|
-
i0.ɵɵelementStart(22, "input",
|
|
289
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
298
|
+
i0.ɵɵelementStart(22, "input", 39);
|
|
299
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.City, $event) || (ctx_r0.EditForm.City = $event); return i0.ɵɵresetView($event); });
|
|
290
300
|
i0.ɵɵelementEnd()();
|
|
291
|
-
i0.ɵɵelementStart(23, "div",
|
|
301
|
+
i0.ɵɵelementStart(23, "div", 40)(24, "label");
|
|
292
302
|
i0.ɵɵtext(25, "State");
|
|
293
303
|
i0.ɵɵelementEnd();
|
|
294
|
-
i0.ɵɵelementStart(26, "input",
|
|
295
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
304
|
+
i0.ɵɵelementStart(26, "input", 41);
|
|
305
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.StateProvince, $event) || (ctx_r0.EditForm.StateProvince = $event); return i0.ɵɵresetView($event); });
|
|
296
306
|
i0.ɵɵelementEnd()();
|
|
297
|
-
i0.ɵɵelementStart(27, "div",
|
|
307
|
+
i0.ɵɵelementStart(27, "div", 42)(28, "label");
|
|
298
308
|
i0.ɵɵtext(29, "Postal");
|
|
299
309
|
i0.ɵɵelementEnd();
|
|
300
|
-
i0.ɵɵelementStart(30, "input",
|
|
301
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
302
|
-
i0.ɵɵlistener("blur", function
|
|
310
|
+
i0.ɵɵelementStart(30, "input", 43);
|
|
311
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_30_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.PostalCode, $event) || (ctx_r0.EditForm.PostalCode = $event); return i0.ɵɵresetView($event); });
|
|
312
|
+
i0.ɵɵlistener("blur", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_blur_30_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onPostalCodeBlur()); });
|
|
303
313
|
i0.ɵɵelementEnd()();
|
|
304
|
-
i0.ɵɵelementStart(31, "div",
|
|
314
|
+
i0.ɵɵelementStart(31, "div", 44)(32, "label");
|
|
305
315
|
i0.ɵɵtext(33, "Country");
|
|
306
316
|
i0.ɵɵelementEnd();
|
|
307
|
-
i0.ɵɵelementStart(34, "select",
|
|
308
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
309
|
-
i0.ɵɵrepeaterCreate(35,
|
|
317
|
+
i0.ɵɵelementStart(34, "select", 31);
|
|
318
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_select_ngModelChange_34_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Country, $event) || (ctx_r0.EditForm.Country = $event); return i0.ɵɵresetView($event); });
|
|
319
|
+
i0.ɵɵrepeaterCreate(35, AddressEditorComponent_Conditional_7_Conditional_4_For_36_Template, 2, 3, "option", 32, _forTrack2);
|
|
310
320
|
i0.ɵɵelementEnd()();
|
|
311
|
-
i0.ɵɵelementStart(37, "div",
|
|
312
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
321
|
+
i0.ɵɵelementStart(37, "div", 45)(38, "input", 52);
|
|
322
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_38_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.IsPrimary, $event) || (ctx_r0.EditForm.IsPrimary = $event); return i0.ɵɵresetView($event); });
|
|
313
323
|
i0.ɵɵelementEnd();
|
|
314
|
-
i0.ɵɵelementStart(39, "label",
|
|
324
|
+
i0.ɵɵelementStart(39, "label", 53);
|
|
315
325
|
i0.ɵɵtext(40, "Primary");
|
|
316
326
|
i0.ɵɵelementEnd()()();
|
|
317
|
-
i0.ɵɵelementStart(41, "div",
|
|
318
|
-
i0.ɵɵlistener("click", function
|
|
319
|
-
i0.ɵɵconditionalCreate(43,
|
|
327
|
+
i0.ɵɵelementStart(41, "div", 48)(42, "button", 49);
|
|
328
|
+
i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_Conditional_4_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSave()); });
|
|
329
|
+
i0.ɵɵconditionalCreate(43, AddressEditorComponent_Conditional_7_Conditional_4_Conditional_43_Template, 1, 0, "i", 50);
|
|
320
330
|
i0.ɵɵtext(44, " Save ");
|
|
321
331
|
i0.ɵɵelementEnd();
|
|
322
|
-
i0.ɵɵelementStart(45, "button",
|
|
323
|
-
i0.ɵɵlistener("click", function
|
|
332
|
+
i0.ɵɵelementStart(45, "button", 51);
|
|
333
|
+
i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_Conditional_4_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onCancelEdit()); });
|
|
324
334
|
i0.ɵɵtext(46, "Cancel");
|
|
325
335
|
i0.ɵɵelementEnd()()();
|
|
326
336
|
} if (rf & 2) {
|
|
@@ -354,20 +364,20 @@ function AddressEditorComponent_Conditional_6_Conditional_4_Template(rf, ctx) {
|
|
|
354
364
|
i0.ɵɵadvance();
|
|
355
365
|
i0.ɵɵconditional(ctx_r0.Saving ? 43 : -1);
|
|
356
366
|
} }
|
|
357
|
-
function
|
|
367
|
+
function AddressEditorComponent_Conditional_7_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
358
368
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
359
|
-
i0.ɵɵelementStart(0, "div",
|
|
360
|
-
i0.ɵɵlistener("click", function
|
|
361
|
-
i0.ɵɵelement(2, "i",
|
|
369
|
+
i0.ɵɵelementStart(0, "div", 11)(1, "button", 54);
|
|
370
|
+
i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_Conditional_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onAdd()); });
|
|
371
|
+
i0.ɵɵelement(2, "i", 55);
|
|
362
372
|
i0.ɵɵtext(3, " Add Address ");
|
|
363
373
|
i0.ɵɵelementEnd()();
|
|
364
374
|
} }
|
|
365
|
-
function
|
|
375
|
+
function AddressEditorComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
366
376
|
i0.ɵɵelementStart(0, "div", 4);
|
|
367
|
-
i0.ɵɵconditionalCreate(1,
|
|
368
|
-
i0.ɵɵrepeaterCreate(2,
|
|
369
|
-
i0.ɵɵconditionalCreate(4,
|
|
370
|
-
i0.ɵɵconditionalCreate(5,
|
|
377
|
+
i0.ɵɵconditionalCreate(1, AddressEditorComponent_Conditional_7_Conditional_1_Template, 3, 0, "div", 9);
|
|
378
|
+
i0.ɵɵrepeaterCreate(2, AddressEditorComponent_Conditional_7_For_3_Template, 14, 10, null, null, _forTrack0);
|
|
379
|
+
i0.ɵɵconditionalCreate(4, AddressEditorComponent_Conditional_7_Conditional_4_Template, 47, 12, "div", 10);
|
|
380
|
+
i0.ɵɵconditionalCreate(5, AddressEditorComponent_Conditional_7_Conditional_5_Template, 4, 0, "div", 11);
|
|
371
381
|
i0.ɵɵelementEnd();
|
|
372
382
|
} if (rf & 2) {
|
|
373
383
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -520,6 +530,12 @@ export class AddressEditorComponent {
|
|
|
520
530
|
Saving = false;
|
|
521
531
|
/** The resolved MJ EntityID for the current {@link EntityName}. */
|
|
522
532
|
resolvedEntityID = '';
|
|
533
|
+
/**
|
|
534
|
+
* Set when the component cannot operate — currently only when {@link EntityName}
|
|
535
|
+
* does not resolve to an entity. Rendered in the template and used to block saving,
|
|
536
|
+
* so a misconfiguration surfaces as a visible message instead of a failed INSERT.
|
|
537
|
+
*/
|
|
538
|
+
LoadError = null;
|
|
523
539
|
/** Cached action ID for the Postal Code Lookup action. */
|
|
524
540
|
postalCodeLookupActionID = null;
|
|
525
541
|
/** Whether a postal code lookup is currently in progress. */
|
|
@@ -576,7 +592,11 @@ export class AddressEditorComponent {
|
|
|
576
592
|
// The action returns JSON-stringified address in Message
|
|
577
593
|
const address = JSON.parse(result.Message);
|
|
578
594
|
const city = address.City || '';
|
|
579
|
-
|
|
595
|
+
// The action's Message is the RAW ProviderGeocodeResult, which names the field
|
|
596
|
+
// StateProvinceCode/StateProvinceName — there is no `State` on it. (`State` exists
|
|
597
|
+
// only as a separate Output param.) Reading `address.State` was always undefined,
|
|
598
|
+
// which is why the postal lookup filled City but never the state box.
|
|
599
|
+
const state = address.StateProvinceCode || address.StateProvinceName || address.State || '';
|
|
580
600
|
if (!city && !state) {
|
|
581
601
|
// Google resolved the country but not a specific city/state for this postal code
|
|
582
602
|
this.PostalCodeNotFound = true;
|
|
@@ -627,12 +647,17 @@ export class AddressEditorComponent {
|
|
|
627
647
|
this.cdr.detectChanges();
|
|
628
648
|
try {
|
|
629
649
|
const md = new Metadata();
|
|
630
|
-
// Resolve EntityName -> EntityID
|
|
631
|
-
|
|
650
|
+
// Resolve EntityName -> EntityID. EntityByName is case- and whitespace-insensitive and
|
|
651
|
+
// O(1); `Entities.find(e => e.Name === ...)` is neither, and its miss used to leave
|
|
652
|
+
// resolvedEntityID empty while still rendering an editable form — which then wrote
|
|
653
|
+
// empty-string GUIDs into AddressLink.EntityID and failed at the database.
|
|
654
|
+
const entity = md.EntityByName(this._entityName);
|
|
632
655
|
if (!entity) {
|
|
656
|
+
this.LoadError = `Address editor misconfigured: entity "${this._entityName}" is not in metadata.`;
|
|
633
657
|
console.error(`AddressEditor: Entity "${this._entityName}" not found`);
|
|
634
658
|
return;
|
|
635
659
|
}
|
|
660
|
+
this.LoadError = null;
|
|
636
661
|
this.resolvedEntityID = entity.ID;
|
|
637
662
|
const rv = new RunView();
|
|
638
663
|
// Load address links and address types in parallel
|
|
@@ -707,7 +732,39 @@ export class AddressEditorComponent {
|
|
|
707
732
|
*/
|
|
708
733
|
getAddressTypeIcon(typeID) {
|
|
709
734
|
const addrType = this.AddressTypes.find(t => t.ID === typeID);
|
|
710
|
-
return addrType?.IconClass
|
|
735
|
+
return AddressEditorComponent.resolveIconClass(addrType?.IconClass);
|
|
736
|
+
}
|
|
737
|
+
/**
|
|
738
|
+
* Resolves an IconClass to something that will actually render, falling back to a
|
|
739
|
+
* generic location pin.
|
|
740
|
+
*
|
|
741
|
+
* A `?? fallback` is not enough on its own: the failure seen in the field was
|
|
742
|
+
* `fa-solid fa-mailbox`, a NON-EMPTY class that is Font Awesome **Pro**-only, so it
|
|
743
|
+
* passed every emptiness check and then rendered as a blank square (the browser
|
|
744
|
+
* reports `content: none` for its ::before — no rule matched). Since a component
|
|
745
|
+
* cannot ask the font whether a glyph exists, this verifies the icon is one the
|
|
746
|
+
* bundled Free set provides and substitutes the pin otherwise. Blank, whitespace-only
|
|
747
|
+
* and modifier-only values fall back too.
|
|
748
|
+
*
|
|
749
|
+
* The Pro list is deliberately small and explicit — only icons this app's seed data
|
|
750
|
+
* has actually used. It is a safety net; the real fix is correcting the seed
|
|
751
|
+
* (`metadata/address-types/.address-types.json`), which this change also does.
|
|
752
|
+
*/
|
|
753
|
+
static resolveIconClass(iconClass) {
|
|
754
|
+
const FALLBACK = 'fa-solid fa-location-dot';
|
|
755
|
+
const cls = (iconClass ?? '').trim();
|
|
756
|
+
if (!cls)
|
|
757
|
+
return FALLBACK;
|
|
758
|
+
// Must name an actual icon, not just a style/modifier such as `fa-solid`.
|
|
759
|
+
const STYLE_ONLY = new Set(['fa-solid', 'fa-regular', 'fa-light', 'fa-thin', 'fa-duotone', 'fa-brands', 'fa', 'fas', 'far', 'fab']);
|
|
760
|
+
const names = cls.split(/\s+/).filter(t => t.startsWith('fa-') && !STYLE_ONLY.has(t));
|
|
761
|
+
if (names.length === 0)
|
|
762
|
+
return FALLBACK;
|
|
763
|
+
// Font Awesome Pro-only icons seen in this app's seed data — they render blank on Free.
|
|
764
|
+
const PRO_ONLY = new Set(['fa-mailbox']);
|
|
765
|
+
if (names.some(n => PRO_ONLY.has(n)))
|
|
766
|
+
return FALLBACK;
|
|
767
|
+
return cls;
|
|
711
768
|
}
|
|
712
769
|
/**
|
|
713
770
|
* Formats the first line of an address display string.
|
|
@@ -804,6 +861,16 @@ export class AddressEditorComponent {
|
|
|
804
861
|
async onSave() {
|
|
805
862
|
if (!this.EditForm.Line1 || !this.EditForm.City)
|
|
806
863
|
return;
|
|
864
|
+
// Both are NOT NULL uniqueidentifier columns on AddressLink; saving without them
|
|
865
|
+
// produced "Conversion failed when converting from a character string to
|
|
866
|
+
// uniqueidentifier" at the database instead of anything actionable.
|
|
867
|
+
if (!this.resolvedEntityID || !this.EditForm.TypeID) {
|
|
868
|
+
this.LoadError = !this.resolvedEntityID
|
|
869
|
+
? `Cannot save: entity "${this._entityName}" is not in metadata.`
|
|
870
|
+
: 'Cannot save: no address type is selected.';
|
|
871
|
+
this.cdr.detectChanges();
|
|
872
|
+
return;
|
|
873
|
+
}
|
|
807
874
|
this.Saving = true;
|
|
808
875
|
this.cdr.detectChanges();
|
|
809
876
|
try {
|
|
@@ -951,23 +1018,23 @@ export class AddressEditorComponent {
|
|
|
951
1018
|
}
|
|
952
1019
|
}
|
|
953
1020
|
static ɵfac = function AddressEditorComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AddressEditorComponent)(); };
|
|
954
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AddressEditorComponent, selectors: [["bizapps-address-editor"]], inputs: { EditMode: "EditMode", EntityName: "EntityName", RecordID: "RecordID" }, outputs: { DataChanged: "DataChanged" }, decls:
|
|
1021
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AddressEditorComponent, selectors: [["bizapps-address-editor"]], inputs: { EditMode: "EditMode", EntityName: "EntityName", RecordID: "RecordID" }, outputs: { DataChanged: "DataChanged" }, decls: 8, vars: 2, consts: [[1, "section-header"], [1, "section-label"], [1, "fa-solid", "fa-map-marker-alt"], [1, "count"], [1, "addr-table"], [1, "load-error-row"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "loading-row"], [1, "fa-solid", "fa-spinner"], [1, "empty-state"], [1, "addr-table-edit-panel"], [1, "addr-table-footer"], [1, "addr-table-row"], [1, "addr-table-icon"], [1, "addr-table-content"], [1, "addr-table-main"], [1, "addr-table-sub"], [1, "addr-table-badges"], [1, "badge", "badge-type"], [1, "badge", "badge-primary"], [1, "addr-table-actions"], [1, "fa-solid", "fa-star"], ["title", "Set as Primary", 1, "btn-ghost"], ["title", "Edit", 1, "btn-ghost", 3, "click"], [1, "fa-solid", "fa-pen"], ["title", "Remove", 1, "btn-ghost", "danger", 3, "click"], [1, "fa-solid", "fa-trash"], ["title", "Set as Primary", 1, "btn-ghost", 3, "click"], [1, "fa-regular", "fa-star"], [1, "form-row"], [1, "form-field", "type-field"], [3, "ngModelChange", "ngModel"], [3, "value"], [1, "form-field"], ["type", "text", "placeholder", "Street address", 3, "ngModelChange", "ngModel"], [1, "form-field", "line2-field"], ["type", "text", "placeholder", "Apt, suite", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-spinner", "fa-spin", "lookup-spinner"], [1, "lookup-not-found"], ["type", "text", "placeholder", "City", 3, "ngModelChange", "ngModel"], [1, "form-field", "state-field"], ["type", "text", "placeholder", "ST", 3, "ngModelChange", "ngModel"], [1, "form-field", "postal-field"], ["type", "text", "placeholder", "Zip", 3, "ngModelChange", "blur", "ngModel"], [1, "form-field", "country-field"], [1, "checkbox-field"], ["type", "checkbox", 3, "ngModelChange", "id", "ngModel"], [3, "for"], [1, "form-actions"], [1, "btn", "btn-primary", "btn-sm", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "btn", "btn-cancel", "btn-sm", 3, "click"], ["type", "checkbox", "id", "primary-add", 3, "ngModelChange", "ngModel"], ["for", "primary-add"], [1, "btn", "btn-outline", "full-width", 3, "click"], [1, "fa-solid", "fa-plus"]], template: function AddressEditorComponent_Template(rf, ctx) { if (rf & 1) {
|
|
955
1022
|
i0.ɵɵelementStart(0, "div", 0)(1, "span", 1);
|
|
956
1023
|
i0.ɵɵelement(2, "i", 2);
|
|
957
1024
|
i0.ɵɵtext(3, " Addresses ");
|
|
958
1025
|
i0.ɵɵconditionalCreate(4, AddressEditorComponent_Conditional_4_Template, 2, 1, "span", 3);
|
|
959
1026
|
i0.ɵɵelementEnd()();
|
|
960
|
-
i0.ɵɵconditionalCreate(5, AddressEditorComponent_Conditional_5_Template, 4,
|
|
1027
|
+
i0.ɵɵconditionalCreate(5, AddressEditorComponent_Conditional_5_Template, 4, 1, "div", 4)(6, AddressEditorComponent_Conditional_6_Template, 4, 0, "div", 4)(7, AddressEditorComponent_Conditional_7_Template, 6, 3, "div", 4);
|
|
961
1028
|
} if (rf & 2) {
|
|
962
1029
|
i0.ɵɵadvance(4);
|
|
963
1030
|
i0.ɵɵconditional(!ctx.Loading && ctx.AddressItems.length > 0 ? 4 : -1);
|
|
964
1031
|
i0.ɵɵadvance();
|
|
965
|
-
i0.ɵɵconditional(ctx.
|
|
966
|
-
} }, dependencies: [CommonModule, FormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel], styles: ["\n\n\n\n\n\n[_nghost-%COMP%] {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n color:
|
|
1032
|
+
i0.ɵɵconditional(ctx.LoadError ? 5 : ctx.Loading ? 6 : 7);
|
|
1033
|
+
} }, dependencies: [CommonModule, FormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel], styles: ["\n\n\n\n\n\n[_nghost-%COMP%] {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n color: var(--mj-text-primary);\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.section-label[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n\n\n.addr-table[_ngcontent-%COMP%] {\n width: 100%;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.addr-table-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n gap: 12px;\n transition: background 0.1s ease;\n}\n\n.addr-table-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.addr-table-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.addr-table-row.primary[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n}\n\n\n\n.addr-table-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n font-size: 14px;\n flex-shrink: 0;\n}\n\n\n\n.addr-table-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.addr-table-main[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.addr-table-sub[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n\n\n.addr-table-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.badge-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.badge-primary[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n\n\n.addr-table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.addr-table-row[_ngcontent-%COMP%]:hover .addr-table-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n\n\n.btn-ghost[_ngcontent-%COMP%] {\n background: transparent;\n color: var(--mj-text-disabled);\n padding: 6px 8px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n transition: all 0.15s ease;\n}\n\n.btn-ghost[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-card);\n}\n\n.btn-ghost.danger[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error-text);\n background: var(--mj-status-error-bg);\n}\n\n\n\n.addr-table-edit-panel[_ngcontent-%COMP%] {\n padding: 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n\n\n.addr-table-footer[_ngcontent-%COMP%] {\n padding: 10px 16px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n\n\n.btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.btn-outline[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px dashed var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.btn-outline[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.btn-outline.full-width[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: center;\n}\n\n.btn-cancel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.btn-cancel[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-subtle);\n}\n\n.btn-sm[_ngcontent-%COMP%] {\n padding: 6px 14px;\n font-size: 12px;\n}\n\n\n\n.form-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.form-field[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.form-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%], \n.form-field[_ngcontent-%COMP%] select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n font-family: inherit;\n background: var(--mj-bg-surface);\n}\n\n.form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, \n.form-field[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-field.type-field[_ngcontent-%COMP%] {\n max-width: 150px;\n}\n\n.form-field.line2-field[_ngcontent-%COMP%] {\n max-width: 150px;\n}\n\n.form-field.state-field[_ngcontent-%COMP%] {\n max-width: 80px;\n}\n\n.form-field.postal-field[_ngcontent-%COMP%] {\n max-width: 130px;\n}\n\n.form-field.country-field[_ngcontent-%COMP%] {\n max-width: 180px;\n}\n\n.checkbox-field[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-top: 22px;\n}\n\n.checkbox-field[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.checkbox-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.form-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 32px 16px;\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-border-strong);\n margin-bottom: 8px;\n display: block;\n}\n\n\n\n.loading-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n color: var(--mj-text-muted);\n font-size: 13px;\n gap: 8px;\n}\n\n.loading-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_spin 1s linear infinite;\n}\n\n\n\n\n.load-error-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 24px;\n color: var(--mj-status-error-text);\n font-size: 13px;\n gap: 8px;\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n.lookup-spinner[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-brand-primary);\n margin-left: 4px;\n}\n\n.lookup-not-found[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-status-warning-text);\n margin-left: 4px;\n font-weight: 600;\n}"] });
|
|
967
1034
|
}
|
|
968
1035
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AddressEditorComponent, [{
|
|
969
1036
|
type: Component,
|
|
970
|
-
args: [{ standalone: true, imports: [CommonModule, FormsModule], selector: 'bizapps-address-editor', template: "<!-- AddressEditor - Compact Table Design (Option B) -->\n\n<div class=\"section-header\">\n <span class=\"section-label\">\n <i class=\"fa-solid fa-map-marker-alt\"></i>\n Addresses\n @if (!Loading && AddressItems.length > 0) {\n <span class=\"count\">({{ AddressItems.length }})</span>\n }\n </span>\n</div>\n\n@if (Loading) {\n <div class=\"addr-table\">\n <div class=\"loading-row\">\n <i class=\"fa-solid fa-spinner\"></i> Loading addresses...\n </div>\n </div>\n} @else {\n <div class=\"addr-table\">\n @if (AddressItems.length === 0 && EditingIndex !== -1) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-map-marker-alt\"></i>\n No addresses linked yet\n </div>\n }\n\n @for (item of AddressItems; track item.Link.ID; let i = $index) {\n <!-- Address Row -->\n <div class=\"addr-table-row\" [class.primary]=\"item.Link.IsPrimary\">\n <div class=\"addr-table-icon\">\n <i [class]=\"getAddressTypeIcon(item.Link.AddressTypeID)\"></i>\n </div>\n <div class=\"addr-table-content\">\n <div class=\"addr-table-main\">{{ formatAddressLine1(item.Address) }}</div>\n <div class=\"addr-table-sub\">{{ formatAddressLine2(item.Address) }}</div>\n </div>\n <div class=\"addr-table-badges\">\n <span class=\"badge badge-type\">{{ item.Link.AddressType }}</span>\n @if (item.Link.IsPrimary) {\n <span class=\"badge badge-primary\"><i class=\"fa-solid fa-star\"></i> Primary</span>\n }\n </div>\n @if (EditMode) {\n <div class=\"addr-table-actions\">\n @if (!item.Link.IsPrimary) {\n <button class=\"btn-ghost\" title=\"Set as Primary\" (click)=\"onSetPrimary(i)\">\n <i class=\"fa-regular fa-star\"></i>\n </button>\n }\n <button class=\"btn-ghost\" title=\"Edit\" (click)=\"onEdit(i)\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button class=\"btn-ghost danger\" title=\"Remove\" (click)=\"onDelete(i)\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n\n <!-- Inline Edit Panel (shown when editing this row) -->\n @if (EditingIndex === i) {\n <div class=\"addr-table-edit-panel\">\n <div class=\"form-row\">\n <div class=\"form-field type-field\">\n <label>Type</label>\n <select [(ngModel)]=\"EditForm.TypeID\">\n @for (t of AddressTypes; track t.ID) {\n <option [value]=\"t.ID\">{{ t.Name }}</option>\n }\n </select>\n </div>\n <div class=\"form-field\">\n <label>Line 1</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line1\" placeholder=\"Street address\">\n </div>\n <div class=\"form-field line2-field\">\n <label>Line 2</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line2\" placeholder=\"Apt, suite\">\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-field\">\n <label>\n City\n @if (LookingUpPostalCode) { <i class=\"fa-solid fa-spinner fa-spin lookup-spinner\"></i> }\n @if (PostalCodeNotFound) { <span class=\"lookup-not-found\">not found</span> }\n </label>\n <input type=\"text\" [(ngModel)]=\"EditForm.City\" placeholder=\"City\">\n </div>\n <div class=\"form-field state-field\">\n <label>State</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.StateProvince\" placeholder=\"ST\">\n </div>\n <div class=\"form-field postal-field\">\n <label>Postal</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.PostalCode\" placeholder=\"Zip\" (blur)=\"onPostalCodeBlur()\">\n </div>\n <div class=\"form-field country-field\">\n <label>Country</label>\n <select [(ngModel)]=\"EditForm.Country\">\n @for (c of Countries; track c.Code) {\n <option [value]=\"c.Code\">{{ c.Code }} - {{ c.Name }}</option>\n }\n </select>\n </div>\n <div class=\"checkbox-field\">\n <input type=\"checkbox\" [id]=\"'primary-edit-' + i\" [(ngModel)]=\"EditForm.IsPrimary\">\n <label [for]=\"'primary-edit-' + i\">Primary</label>\n </div>\n </div>\n <div class=\"form-actions\">\n <button class=\"btn btn-primary btn-sm\" (click)=\"onSave()\" [disabled]=\"Saving\">\n @if (Saving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n Save\n </button>\n <button class=\"btn btn-cancel btn-sm\" (click)=\"onCancelEdit()\">Cancel</button>\n </div>\n </div>\n }\n }\n\n <!-- Add New Panel (shown when EditingIndex === -1) -->\n @if (EditingIndex === -1) {\n <div class=\"addr-table-edit-panel\">\n <div class=\"form-row\">\n <div class=\"form-field type-field\">\n <label>Type</label>\n <select [(ngModel)]=\"EditForm.TypeID\">\n @for (t of AddressTypes; track t.ID) {\n <option [value]=\"t.ID\">{{ t.Name }}</option>\n }\n </select>\n </div>\n <div class=\"form-field\">\n <label>Line 1</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line1\" placeholder=\"Street address\">\n </div>\n <div class=\"form-field line2-field\">\n <label>Line 2</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line2\" placeholder=\"Apt, suite\">\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-field\">\n <label>\n City\n @if (LookingUpPostalCode) { <i class=\"fa-solid fa-spinner fa-spin lookup-spinner\"></i> }\n @if (PostalCodeNotFound) { <span class=\"lookup-not-found\">not found</span> }\n </label>\n <input type=\"text\" [(ngModel)]=\"EditForm.City\" placeholder=\"City\">\n </div>\n <div class=\"form-field state-field\">\n <label>State</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.StateProvince\" placeholder=\"ST\">\n </div>\n <div class=\"form-field postal-field\">\n <label>Postal</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.PostalCode\" placeholder=\"Zip\" (blur)=\"onPostalCodeBlur()\">\n </div>\n <div class=\"form-field country-field\">\n <label>Country</label>\n <select [(ngModel)]=\"EditForm.Country\">\n @for (c of Countries; track c.Code) {\n <option [value]=\"c.Code\">{{ c.Code }} - {{ c.Name }}</option>\n }\n </select>\n </div>\n <div class=\"checkbox-field\">\n <input type=\"checkbox\" id=\"primary-add\" [(ngModel)]=\"EditForm.IsPrimary\">\n <label for=\"primary-add\">Primary</label>\n </div>\n </div>\n <div class=\"form-actions\">\n <button class=\"btn btn-primary btn-sm\" (click)=\"onSave()\" [disabled]=\"Saving\">\n @if (Saving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n Save\n </button>\n <button class=\"btn btn-cancel btn-sm\" (click)=\"onCancelEdit()\">Cancel</button>\n </div>\n </div>\n }\n\n <!-- Add Button Footer -->\n @if (EditingIndex === null && EditMode) {\n <div class=\"addr-table-footer\">\n <button class=\"btn btn-outline full-width\" (click)=\"onAdd()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Address\n </button>\n </div>\n }\n </div>\n}\n", styles: ["/* ============================================\n AddressEditor - Compact Table Design\n Pixel-perfect match to Option B mockup\n ============================================ */\n\n:host {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n color: #333;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.section-label {\n font-size: 15px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-label i {\n color: #1976d2;\n}\n\n.count {\n font-size: 12px;\n color: #888;\n font-weight: 400;\n}\n\n/* Table container */\n.addr-table {\n width: 100%;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Table rows */\n.addr-table-row {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid #f0f0f0;\n gap: 12px;\n transition: background 0.1s ease;\n}\n\n.addr-table-row:last-child {\n border-bottom: none;\n}\n\n.addr-table-row:hover {\n background: #fafafa;\n}\n\n.addr-table-row.primary {\n background: #f1f8e9;\n}\n\n/* Icon */\n.addr-table-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: #e3f2fd;\n color: #1565c0;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n/* Content */\n.addr-table-content {\n flex: 1;\n min-width: 0;\n}\n\n.addr-table-main {\n font-size: 14px;\n color: #333;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.addr-table-sub {\n font-size: 12px;\n color: #888;\n margin-top: 2px;\n}\n\n/* Badges */\n.addr-table-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.badge-type {\n background: #e3f2fd;\n color: #1565c0;\n}\n\n.badge-primary {\n background: #e8f5e9;\n color: #2e7d32;\n}\n\n/* Actions */\n.addr-table-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.addr-table-row:hover .addr-table-actions {\n opacity: 1;\n}\n\n/* Ghost buttons */\n.btn-ghost {\n background: transparent;\n color: #999;\n padding: 6px 8px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n transition: all 0.15s ease;\n}\n\n.btn-ghost:hover {\n color: #333;\n background: #f5f5f5;\n}\n\n.btn-ghost.danger:hover {\n color: #c62828;\n background: #ffebee;\n}\n\n/* Edit panel */\n.addr-table-edit-panel {\n padding: 16px;\n background: #f8f9ff;\n border-bottom: 2px solid #1976d2;\n}\n\n/* Footer */\n.addr-table-footer {\n padding: 10px 16px;\n border-top: 1px solid #e0e0e0;\n background: #fafafa;\n}\n\n/* Buttons */\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary {\n background: #1976d2;\n color: white;\n}\n\n.btn-primary:hover {\n background: #1565c0;\n}\n\n.btn-outline {\n background: transparent;\n border: 1px dashed #ccc;\n color: #666;\n}\n\n.btn-outline:hover {\n border-color: #1976d2;\n color: #1976d2;\n background: #f5f9ff;\n}\n\n.btn-outline.full-width {\n width: 100%;\n justify-content: center;\n}\n\n.btn-cancel {\n background: #f5f5f5;\n color: #666;\n border: 1px solid #e0e0e0;\n}\n\n.btn-cancel:hover {\n background: #eeeeee;\n}\n\n.btn-sm {\n padding: 6px 14px;\n font-size: 12px;\n}\n\n/* Form */\n.form-row {\n display: flex;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.form-field {\n flex: 1;\n}\n\n.form-field label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: #666;\n margin-bottom: 4px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.form-field input,\n.form-field select {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n font-size: 14px;\n font-family: inherit;\n background: white;\n}\n\n.form-field input:focus,\n.form-field select:focus {\n outline: none;\n border-color: #1976d2;\n box-shadow: 0 0 0 3px rgba(25, 118, 210, 0.1);\n}\n\n.form-field.type-field {\n max-width: 150px;\n}\n\n.form-field.line2-field {\n max-width: 150px;\n}\n\n.form-field.state-field {\n max-width: 80px;\n}\n\n.form-field.postal-field {\n max-width: 130px;\n}\n\n.form-field.country-field {\n max-width: 180px;\n}\n\n.checkbox-field {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-top: 22px;\n}\n\n.checkbox-field input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.checkbox-field label {\n font-size: 13px;\n color: #555;\n cursor: pointer;\n}\n\n.form-actions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n\n/* Empty state */\n.empty-state {\n text-align: center;\n padding: 32px 16px;\n color: #888;\n font-size: 14px;\n}\n\n.empty-state i {\n font-size: 24px;\n color: #ccc;\n margin-bottom: 8px;\n display: block;\n}\n\n/* Loading */\n.loading-row {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n color: #888;\n font-size: 13px;\n gap: 8px;\n}\n\n.loading-row i {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n.lookup-spinner {\n font-size: 10px;\n color: #1976d2;\n margin-left: 4px;\n}\n\n.lookup-not-found {\n font-size: 10px;\n color: #e65100;\n margin-left: 4px;\n font-weight: 600;\n}\n"] }]
|
|
1037
|
+
args: [{ standalone: true, imports: [CommonModule, FormsModule], selector: 'bizapps-address-editor', template: "<!-- AddressEditor - Compact Table Design (Option B) -->\n\n<div class=\"section-header\">\n <span class=\"section-label\">\n <i class=\"fa-solid fa-map-marker-alt\"></i>\n Addresses\n @if (!Loading && AddressItems.length > 0) {\n <span class=\"count\">({{ AddressItems.length }})</span>\n }\n </span>\n</div>\n\n@if (LoadError) {\n <div class=\"addr-table\">\n <div class=\"load-error-row\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ LoadError }}\n </div>\n </div>\n} @else if (Loading) {\n <div class=\"addr-table\">\n <div class=\"loading-row\">\n <i class=\"fa-solid fa-spinner\"></i> Loading addresses...\n </div>\n </div>\n} @else {\n <div class=\"addr-table\">\n @if (AddressItems.length === 0 && EditingIndex !== -1) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-map-marker-alt\"></i>\n No addresses linked yet\n </div>\n }\n\n @for (item of AddressItems; track item.Link.ID; let i = $index) {\n <!-- Address Row -->\n <div class=\"addr-table-row\" [class.primary]=\"item.Link.IsPrimary\">\n <div class=\"addr-table-icon\">\n <i [class]=\"getAddressTypeIcon(item.Link.AddressTypeID)\"></i>\n </div>\n <div class=\"addr-table-content\">\n <div class=\"addr-table-main\">{{ formatAddressLine1(item.Address) }}</div>\n <div class=\"addr-table-sub\">{{ formatAddressLine2(item.Address) }}</div>\n </div>\n <div class=\"addr-table-badges\">\n <span class=\"badge badge-type\">{{ item.Link.AddressType }}</span>\n @if (item.Link.IsPrimary) {\n <span class=\"badge badge-primary\"><i class=\"fa-solid fa-star\"></i> Primary</span>\n }\n </div>\n @if (EditMode) {\n <div class=\"addr-table-actions\">\n @if (!item.Link.IsPrimary) {\n <button class=\"btn-ghost\" title=\"Set as Primary\" (click)=\"onSetPrimary(i)\">\n <i class=\"fa-regular fa-star\"></i>\n </button>\n }\n <button class=\"btn-ghost\" title=\"Edit\" (click)=\"onEdit(i)\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button class=\"btn-ghost danger\" title=\"Remove\" (click)=\"onDelete(i)\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n\n <!-- Inline Edit Panel (shown when editing this row) -->\n @if (EditingIndex === i) {\n <div class=\"addr-table-edit-panel\">\n <div class=\"form-row\">\n <div class=\"form-field type-field\">\n <label>Type</label>\n <select [(ngModel)]=\"EditForm.TypeID\">\n @for (t of AddressTypes; track t.ID) {\n <option [value]=\"t.ID\">{{ t.Name }}</option>\n }\n </select>\n </div>\n <div class=\"form-field\">\n <label>Line 1</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line1\" placeholder=\"Street address\">\n </div>\n <div class=\"form-field line2-field\">\n <label>Line 2</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line2\" placeholder=\"Apt, suite\">\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-field\">\n <label>\n City\n @if (LookingUpPostalCode) { <i class=\"fa-solid fa-spinner fa-spin lookup-spinner\"></i> }\n @if (PostalCodeNotFound) { <span class=\"lookup-not-found\">not found</span> }\n </label>\n <input type=\"text\" [(ngModel)]=\"EditForm.City\" placeholder=\"City\">\n </div>\n <div class=\"form-field state-field\">\n <label>State</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.StateProvince\" placeholder=\"ST\">\n </div>\n <div class=\"form-field postal-field\">\n <label>Postal</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.PostalCode\" placeholder=\"Zip\" (blur)=\"onPostalCodeBlur()\">\n </div>\n <div class=\"form-field country-field\">\n <label>Country</label>\n <select [(ngModel)]=\"EditForm.Country\">\n @for (c of Countries; track c.Code) {\n <option [value]=\"c.Code\">{{ c.Code }} - {{ c.Name }}</option>\n }\n </select>\n </div>\n <div class=\"checkbox-field\">\n <input type=\"checkbox\" [id]=\"'primary-edit-' + i\" [(ngModel)]=\"EditForm.IsPrimary\">\n <label [for]=\"'primary-edit-' + i\">Primary</label>\n </div>\n </div>\n <div class=\"form-actions\">\n <button class=\"btn btn-primary btn-sm\" (click)=\"onSave()\" [disabled]=\"Saving\">\n @if (Saving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n Save\n </button>\n <button class=\"btn btn-cancel btn-sm\" (click)=\"onCancelEdit()\">Cancel</button>\n </div>\n </div>\n }\n }\n\n <!-- Add New Panel (shown when EditingIndex === -1) -->\n @if (EditingIndex === -1) {\n <div class=\"addr-table-edit-panel\">\n <div class=\"form-row\">\n <div class=\"form-field type-field\">\n <label>Type</label>\n <select [(ngModel)]=\"EditForm.TypeID\">\n @for (t of AddressTypes; track t.ID) {\n <option [value]=\"t.ID\">{{ t.Name }}</option>\n }\n </select>\n </div>\n <div class=\"form-field\">\n <label>Line 1</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line1\" placeholder=\"Street address\">\n </div>\n <div class=\"form-field line2-field\">\n <label>Line 2</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line2\" placeholder=\"Apt, suite\">\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-field\">\n <label>\n City\n @if (LookingUpPostalCode) { <i class=\"fa-solid fa-spinner fa-spin lookup-spinner\"></i> }\n @if (PostalCodeNotFound) { <span class=\"lookup-not-found\">not found</span> }\n </label>\n <input type=\"text\" [(ngModel)]=\"EditForm.City\" placeholder=\"City\">\n </div>\n <div class=\"form-field state-field\">\n <label>State</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.StateProvince\" placeholder=\"ST\">\n </div>\n <div class=\"form-field postal-field\">\n <label>Postal</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.PostalCode\" placeholder=\"Zip\" (blur)=\"onPostalCodeBlur()\">\n </div>\n <div class=\"form-field country-field\">\n <label>Country</label>\n <select [(ngModel)]=\"EditForm.Country\">\n @for (c of Countries; track c.Code) {\n <option [value]=\"c.Code\">{{ c.Code }} - {{ c.Name }}</option>\n }\n </select>\n </div>\n <div class=\"checkbox-field\">\n <input type=\"checkbox\" id=\"primary-add\" [(ngModel)]=\"EditForm.IsPrimary\">\n <label for=\"primary-add\">Primary</label>\n </div>\n </div>\n <div class=\"form-actions\">\n <button class=\"btn btn-primary btn-sm\" (click)=\"onSave()\" [disabled]=\"Saving\">\n @if (Saving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n Save\n </button>\n <button class=\"btn btn-cancel btn-sm\" (click)=\"onCancelEdit()\">Cancel</button>\n </div>\n </div>\n }\n\n <!-- Add Button Footer -->\n @if (EditingIndex === null && EditMode) {\n <div class=\"addr-table-footer\">\n <button class=\"btn btn-outline full-width\" (click)=\"onAdd()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Address\n </button>\n </div>\n }\n </div>\n}\n", styles: ["/* ============================================\n AddressEditor - Compact Table Design\n Pixel-perfect match to Option B mockup\n ============================================ */\n\n:host {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n color: var(--mj-text-primary);\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.section-label {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-label i {\n color: var(--mj-brand-primary);\n}\n\n.count {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n/* Table container */\n.addr-table {\n width: 100%;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Table rows */\n.addr-table-row {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n gap: 12px;\n transition: background 0.1s ease;\n}\n\n.addr-table-row:last-child {\n border-bottom: none;\n}\n\n.addr-table-row:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.addr-table-row.primary {\n background: var(--mj-status-success-bg);\n}\n\n/* Icon */\n.addr-table-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n font-size: 14px;\n flex-shrink: 0;\n}\n\n/* Content */\n.addr-table-content {\n flex: 1;\n min-width: 0;\n}\n\n.addr-table-main {\n font-size: 14px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.addr-table-sub {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* Badges */\n.addr-table-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.badge-type {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.badge-primary {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n/* Actions */\n.addr-table-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.addr-table-row:hover .addr-table-actions {\n opacity: 1;\n}\n\n/* Ghost buttons */\n.btn-ghost {\n background: transparent;\n color: var(--mj-text-disabled);\n padding: 6px 8px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n transition: all 0.15s ease;\n}\n\n.btn-ghost:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-card);\n}\n\n.btn-ghost.danger:hover {\n color: var(--mj-status-error-text);\n background: var(--mj-status-error-bg);\n}\n\n/* Edit panel */\n.addr-table-edit-panel {\n padding: 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n/* Footer */\n.addr-table-footer {\n padding: 10px 16px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n/* Buttons */\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.btn-outline {\n background: transparent;\n border: 1px dashed var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.btn-outline:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.btn-outline.full-width {\n width: 100%;\n justify-content: center;\n}\n\n.btn-cancel {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.btn-cancel:hover {\n background: var(--mj-border-subtle);\n}\n\n.btn-sm {\n padding: 6px 14px;\n font-size: 12px;\n}\n\n/* Form */\n.form-row {\n display: flex;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.form-field {\n flex: 1;\n}\n\n.form-field label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.form-field input,\n.form-field select {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n font-family: inherit;\n background: var(--mj-bg-surface);\n}\n\n.form-field input:focus,\n.form-field select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-field.type-field {\n max-width: 150px;\n}\n\n.form-field.line2-field {\n max-width: 150px;\n}\n\n.form-field.state-field {\n max-width: 80px;\n}\n\n.form-field.postal-field {\n max-width: 130px;\n}\n\n.form-field.country-field {\n max-width: 180px;\n}\n\n.checkbox-field {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-top: 22px;\n}\n\n.checkbox-field input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.checkbox-field label {\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.form-actions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n\n/* Empty state */\n.empty-state {\n text-align: center;\n padding: 32px 16px;\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.empty-state i {\n font-size: 24px;\n color: var(--mj-border-strong);\n margin-bottom: 8px;\n display: block;\n}\n\n/* Loading */\n.loading-row {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n color: var(--mj-text-muted);\n font-size: 13px;\n gap: 8px;\n}\n\n.loading-row i {\n animation: spin 1s linear infinite;\n}\n\n/* Misconfiguration (e.g. an EntityName that is not in metadata). Styled like .loading-row\n so it sits in the same slot, but in the danger colour and left-aligned for readability. */\n.load-error-row {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 24px;\n color: var(--mj-status-error-text);\n font-size: 13px;\n gap: 8px;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n.lookup-spinner {\n font-size: 10px;\n color: var(--mj-brand-primary);\n margin-left: 4px;\n}\n\n.lookup-not-found {\n font-size: 10px;\n color: var(--mj-status-warning-text);\n margin-left: 4px;\n font-weight: 600;\n}\n"] }]
|
|
971
1038
|
}], () => [], { EditMode: [{
|
|
972
1039
|
type: Input
|
|
973
1040
|
}], DataChanged: [{
|