@propbinder/mobile-design 0.2.47 → 0.2.50

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.
Files changed (221) hide show
  1. package/ng-package.json +24 -0
  2. package/package.json +3 -39
  3. package/src/animations/page-transitions.ts +165 -0
  4. package/src/assets/fonts/brockmann-mediumitalic-webfont.woff2 +0 -0
  5. package/src/assets/fonts/brockmann-regularitalic-webfont.woff2 +0 -0
  6. package/src/assets/fonts/brockmann-semibolditalic-webfont.woff2 +0 -0
  7. package/src/components/action-list-item/ds-mobile-action-list-item.ts +102 -0
  8. package/src/components/action-list-item/index.ts +2 -0
  9. package/src/components/app-icon/ds-app-icon.ts +133 -0
  10. package/src/components/app-icon/index.ts +2 -0
  11. package/src/components/attachment-preview/ds-mobile-attachment-preview.css +139 -0
  12. package/src/components/attachment-preview/ds-mobile-attachment-preview.ts +164 -0
  13. package/src/components/attachment-preview/index.ts +1 -0
  14. package/src/components/avatar-with-badge/ds-avatar-with-badge.ts +142 -0
  15. package/src/components/avatar-with-badge/index.ts +2 -0
  16. package/src/components/booking-modal/ds-mobile-booking-confirmation-wrapper.ts +71 -0
  17. package/src/components/booking-modal/ds-mobile-booking-modal.service.ts +121 -0
  18. package/src/components/booking-modal/ds-mobile-booking-modal.ts +598 -0
  19. package/src/components/booking-modal/ds-mobile-booking-summary.ts +161 -0
  20. package/src/components/booking-modal/index.ts +4 -0
  21. package/src/components/bottom-sheet/ds-mobile-actions-bottom-sheet.ts +266 -0
  22. package/src/components/bottom-sheet/ds-mobile-bottom-sheet-header.ts +146 -0
  23. package/src/components/bottom-sheet/ds-mobile-bottom-sheet-wrapper.ts +156 -0
  24. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.css +101 -0
  25. package/src/components/bottom-sheet/ds-mobile-bottom-sheet.service.ts +169 -0
  26. package/src/components/bottom-sheet/ds-mobile-confirmation-sheet.ts +211 -0
  27. package/src/components/bottom-sheet/ds-mobile-post-create-bottom-sheet.ts +578 -0
  28. package/src/components/bottom-sheet/ds-mobile-profile-actions-sheet.ts +614 -0
  29. package/src/components/bottom-sheet/index.ts +8 -0
  30. package/src/components/bottom-sheet/modal-shadow-fix.ts +42 -0
  31. package/src/components/card-inline/ds-mobile-card-inline.ts +301 -0
  32. package/src/components/card-inline/index.ts +2 -0
  33. package/src/components/card-inline-banner/ds-mobile-card-inline-banner.ts +118 -0
  34. package/src/components/card-inline-banner/index.ts +1 -0
  35. package/src/components/card-inline-contact/ds-mobile-card-inline-contact.ts +120 -0
  36. package/src/components/card-inline-contact/index.ts +1 -0
  37. package/src/components/card-inline-file/ds-mobile-card-inline-file.ts +141 -0
  38. package/src/components/card-inline-file/index.ts +1 -0
  39. package/src/components/chat-modal/ds-mobile-chat-modal.css +159 -0
  40. package/src/components/chat-modal/ds-mobile-chat-modal.service.ts +105 -0
  41. package/src/components/chat-modal/ds-mobile-chat-modal.ts +918 -0
  42. package/src/components/chat-modal/index.ts +8 -0
  43. package/src/components/comment/ds-mobile-comment.ts +568 -0
  44. package/src/components/comment/index.ts +2 -0
  45. package/src/components/contact-list-item/ds-mobile-contact-list-item.ts +182 -0
  46. package/src/components/contact-list-item/index.ts +2 -0
  47. package/src/components/content/ds-mobile-content.ts +139 -0
  48. package/src/components/content/index.ts +2 -0
  49. package/src/components/dropdown/ds-mobile-dropdown.css +199 -0
  50. package/src/components/dropdown/ds-mobile-dropdown.ts +340 -0
  51. package/src/components/dropdown/index.ts +2 -0
  52. package/src/components/ds-mobile-tabs.css +407 -0
  53. package/src/components/ds-mobile-tabs.ts +216 -0
  54. package/src/components/empty-state/ds-mobile-empty-state.ts +120 -0
  55. package/src/components/empty-state/index.ts +2 -0
  56. package/src/components/fab/ds-mobile-fab.ts +315 -0
  57. package/src/components/fab/index.ts +1 -0
  58. package/src/components/facility-creation-modal/ds-mobile-facility-creation-confirmation-wrapper.ts +121 -0
  59. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.css +189 -0
  60. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.service.ts +135 -0
  61. package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.ts +656 -0
  62. package/src/components/facility-creation-modal/index.ts +9 -0
  63. package/src/components/facility-creation-modal/sheets/ds-mobile-access-sheet.ts +105 -0
  64. package/src/components/facility-creation-modal/sheets/ds-mobile-price-sheet.ts +188 -0
  65. package/src/components/facility-creation-modal/sheets/ds-mobile-when-can-book-sheet.ts +460 -0
  66. package/src/components/facility-creation-modal/sheets/ds-mobile-who-can-book-sheet.ts +134 -0
  67. package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.service.ts +69 -0
  68. package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.ts +379 -0
  69. package/src/components/facility-detail-modal/index.ts +2 -0
  70. package/src/components/file-attachment/ds-mobile-file-attachment.ts +164 -0
  71. package/src/components/file-attachment/index.ts +2 -0
  72. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.css +214 -0
  73. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.service.ts +84 -0
  74. package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.ts +424 -0
  75. package/src/components/handbook-detail-modal/index.ts +3 -0
  76. package/src/components/handbook-folder/ds-mobile-handbook-folder-mini.ts +175 -0
  77. package/src/components/handbook-folder/ds-mobile-handbook-folder.ts +533 -0
  78. package/src/components/handbook-folder/index.ts +4 -0
  79. package/src/components/header-content/ds-mobile-header-content.ts +222 -0
  80. package/src/components/header-content/index.ts +2 -0
  81. package/src/components/illustration/ds-mobile-illustration.ts +124 -0
  82. package/src/components/illustration/index.ts +2 -0
  83. package/src/components/index.ts +124 -0
  84. package/src/components/inline-photo/ds-mobile-inline-photo.ts +361 -0
  85. package/src/components/inline-photo/index.ts +1 -0
  86. package/src/components/inline-tabs/ds-mobile-inline-tabs.ts +132 -0
  87. package/src/components/inline-tabs/index.ts +2 -0
  88. package/src/components/interactive-list-item-booking/ds-mobile-interactive-list-item-booking.ts +350 -0
  89. package/src/components/interactive-list-item-booking/index.ts +1 -0
  90. package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.ts +321 -0
  91. package/src/components/interactive-list-item-inquiry/index.ts +2 -0
  92. package/src/components/interactive-list-item-message/ds-mobile-interactive-list-item-message.ts +237 -0
  93. package/src/components/interactive-list-item-message/index.ts +2 -0
  94. package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.ts +549 -0
  95. package/src/components/interactive-list-item-post/ds-mobile-post-pdf-attachment.ts +124 -0
  96. package/src/components/interactive-list-item-post/index.ts +13 -0
  97. package/src/components/lightbox/ds-mobile-lightbox-footer.ts +315 -0
  98. package/src/components/lightbox/ds-mobile-lightbox-header.ts +202 -0
  99. package/src/components/lightbox/ds-mobile-lightbox-image.ts +484 -0
  100. package/src/components/lightbox/ds-mobile-lightbox-pdf.css +377 -0
  101. package/src/components/lightbox/ds-mobile-lightbox-pdf.ts +374 -0
  102. package/src/components/lightbox/ds-mobile-lightbox.css +587 -0
  103. package/src/components/lightbox/ds-mobile-lightbox.service.ts +296 -0
  104. package/src/components/lightbox/ds-mobile-lightbox.ts +529 -0
  105. package/src/components/lightbox/index.ts +22 -0
  106. package/src/components/list-item/ds-mobile-list-item.ts +603 -0
  107. package/src/components/list-item/index.ts +2 -0
  108. package/src/components/list-item-static/ds-mobile-list-item-static.ts +133 -0
  109. package/src/components/list-item-static/index.ts +2 -0
  110. package/src/components/loader-overlay/ds-mobile-loader-overlay.css +49 -0
  111. package/src/components/loader-overlay/ds-mobile-loader-overlay.ts +77 -0
  112. package/src/components/loader-overlay/index.ts +1 -0
  113. package/src/components/logo/ds-logo.ts +95 -0
  114. package/src/components/logo/index.ts +2 -0
  115. package/src/components/message-bubble/ds-mobile-message-bubble.ts +633 -0
  116. package/src/components/message-bubble/index.ts +7 -0
  117. package/src/components/message-composer/ds-mobile-message-composer.ts +1146 -0
  118. package/src/components/message-composer/index.ts +7 -0
  119. package/src/components/modal/ds-mobile-modal.css +163 -0
  120. package/src/components/modal/ds-mobile-modal.service.ts +329 -0
  121. package/src/components/modal/index.ts +8 -0
  122. package/src/components/modal-base/ds-mobile-modal-base.css +378 -0
  123. package/src/components/modal-base/ds-mobile-modal-base.ts +261 -0
  124. package/src/components/modal-base/index.ts +2 -0
  125. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.css +112 -0
  126. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.service.ts +93 -0
  127. package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.ts +442 -0
  128. package/src/components/new-inquiry-modal/index.ts +4 -0
  129. package/src/components/offline-banner/ds-mobile-offline-banner.ts +135 -0
  130. package/src/components/offline-banner/index.ts +1 -0
  131. package/src/components/page-details/ds-mobile-page-details.css +83 -0
  132. package/src/components/page-details/ds-mobile-page-details.ts +282 -0
  133. package/src/components/page-details/index.ts +2 -0
  134. package/src/components/page-main/ds-mobile-page-main.css +68 -0
  135. package/src/components/page-main/ds-mobile-page-main.ts +421 -0
  136. package/src/components/page-main/index.ts +2 -0
  137. package/src/components/post-composer/ds-mobile-post-composer.ts +140 -0
  138. package/src/components/post-composer/index.ts +2 -0
  139. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.css +390 -0
  140. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.service.ts +108 -0
  141. package/src/components/post-detail-modal/ds-mobile-post-detail-modal.ts +722 -0
  142. package/src/components/post-detail-modal/index.ts +9 -0
  143. package/src/components/property-banner/ds-mobile-property-banner.ts +95 -0
  144. package/src/components/property-banner/index.ts +2 -0
  145. package/src/components/section/ds-mobile-section.ts +263 -0
  146. package/src/components/section/index.ts +2 -0
  147. package/src/components/shared/directives/index.ts +2 -0
  148. package/src/components/shared/directives/long-press.directive.ts +212 -0
  149. package/src/components/shared/index.ts +3 -0
  150. package/src/components/shared/mobile-modal-base.ts +457 -0
  151. package/src/components/shared/mobile-page-base.ts +204 -0
  152. package/src/components/swiper/ds-mobile-swiper-with-nav.ts +160 -0
  153. package/src/components/swiper/ds-mobile-swiper.ts +327 -0
  154. package/src/components/swiper/index.ts +3 -0
  155. package/src/components/system-message-banner/ds-mobile-system-message-banner.ts +129 -0
  156. package/src/components/system-message-banner/index.ts +2 -0
  157. package/src/components/tab-bar/ds-mobile-tab-bar.css +533 -0
  158. package/src/components/tab-bar/ds-mobile-tab-bar.ts +735 -0
  159. package/src/components/tab-bar/index.ts +2 -0
  160. package/src/components/tabs/ds-mobile-tabs.css +25 -0
  161. package/src/components/tabs/ds-mobile-tabs.ts +89 -0
  162. package/src/components/tabs/index.ts +2 -0
  163. package/src/components/text-input/ds-text-input.ts +287 -0
  164. package/src/components/text-input/index.ts +2 -0
  165. package/src/examples/booking.page.ts +434 -0
  166. package/src/examples/community.page.ts +776 -0
  167. package/src/examples/handbook.page.ts +324 -0
  168. package/src/examples/home.page.ts +347 -0
  169. package/src/examples/index.ts +12 -0
  170. package/src/examples/inquiries.example.ts +273 -0
  171. package/src/examples/inquiry-detail.example.css +189 -0
  172. package/src/examples/inquiry-detail.example.ts +415 -0
  173. package/src/examples/mobile-tabs-example.component.ts +208 -0
  174. package/src/examples/post-create.page.ts +311 -0
  175. package/src/examples/post-detail.page.ts +296 -0
  176. package/src/examples/sign-in.page.ts +291 -0
  177. package/src/examples/whitelabel-demo-modal.component.ts +1094 -0
  178. package/src/examples/whitelabel-demo-modal.service.ts +77 -0
  179. package/src/models/index.ts +7 -0
  180. package/src/models/post.model.ts +41 -0
  181. package/src/pages/community.page.ts +769 -0
  182. package/src/pages/handbook.page.ts +388 -0
  183. package/src/pages/home.page.ts +303 -0
  184. package/src/pages/index.ts +11 -0
  185. package/src/pages/inquiries.example.ts +273 -0
  186. package/src/pages/inquiry-detail.example.css +189 -0
  187. package/src/pages/inquiry-detail.example.ts +415 -0
  188. package/src/pages/mobile-tabs-example.component.ts +179 -0
  189. package/src/pages/post-create.page.ts +311 -0
  190. package/src/pages/post-detail.page.ts +296 -0
  191. package/src/pages/sign-in.page.ts +291 -0
  192. package/src/pages/whitelabel-demo-modal.component.ts +1094 -0
  193. package/src/pages/whitelabel-demo-modal.service.ts +77 -0
  194. package/src/public-api.ts +6 -0
  195. package/src/services/base-modal.service.ts +101 -0
  196. package/src/services/index.ts +11 -0
  197. package/src/services/posts.service.ts +542 -0
  198. package/src/services/tracking-permission.service.ts +88 -0
  199. package/src/services/user.service.ts +60 -0
  200. package/src/services/whitelabel.service.ts +675 -0
  201. package/{styles → src/styles}/ionic.css +25 -0
  202. package/tsconfig.lib.json +17 -0
  203. package/tsconfig.lib.prod.json +9 -0
  204. package/tsconfig.spec.json +13 -0
  205. package/fesm2022/propbinder-mobile-design.mjs +0 -26136
  206. package/fesm2022/propbinder-mobile-design.mjs.map +0 -1
  207. package/index.d.ts +0 -8154
  208. /package/{assets → src/assets}/fonts/Brockmann-Bold.otf +0 -0
  209. /package/{assets → src/assets}/fonts/Brockmann-BoldItalic.otf +0 -0
  210. /package/{assets → src/assets}/fonts/Brockmann-Medium.otf +0 -0
  211. /package/{assets → src/assets}/fonts/Brockmann-MediumItalic.otf +0 -0
  212. /package/{assets → src/assets}/fonts/Brockmann-Regular.otf +0 -0
  213. /package/{assets → src/assets}/fonts/Brockmann-RegularItalic.otf +0 -0
  214. /package/{assets → src/assets}/fonts/Brockmann-SemiBold.otf +0 -0
  215. /package/{assets → src/assets}/fonts/Brockmann-SemiBoldItalic.otf +0 -0
  216. /package/{assets → src/assets}/fonts/Brockmann_desktop_license.pdf +0 -0
  217. /package/{assets → src/assets}/fonts/brockmann-medium-webfont.woff2 +0 -0
  218. /package/{assets → src/assets}/fonts/brockmann-regular-webfont.woff2 +0 -0
  219. /package/{assets → src/assets}/fonts/brockmann-semibold-webfont.woff2 +0 -0
  220. /package/{styles → src/components/shared}/mobile-common.css +0 -0
  221. /package/{styles → src/components/shared}/mobile-page-base.css +0 -0
@@ -0,0 +1,189 @@
1
+ /* ============================================
2
+ FACILITY CREATION MODAL STYLES
3
+ ============================================ */
4
+
5
+ /* Make modal wrapper fill available height (only for full-height modals) */
6
+ :host ::ng-deep .modal-wrapper:not(.is-auto-height) {
7
+ min-height: 100%;
8
+ }
9
+
10
+ /* Make modal-content-container flex for full-height modals */
11
+ :host ::ng-deep .modal-wrapper:not(.is-auto-height) .modal-content-container {
12
+ display: flex;
13
+ flex-direction: column;
14
+ flex: 1;
15
+ }
16
+
17
+ /* Make modal-main-content fill available height */
18
+ :host ::ng-deep .modal-wrapper:not(.is-auto-height) .modal-main-content {
19
+ flex: 1;
20
+ display: flex;
21
+ flex-direction: column;
22
+ }
23
+
24
+ /* Make form section fill available height */
25
+ .form-section {
26
+ flex: 1;
27
+ display: flex;
28
+ flex-direction: column;
29
+ }
30
+
31
+ /* Large Title Textarea - Matches design system pattern */
32
+ .inquiry-title-input {
33
+ flex: 0 0 auto; /* Don't grow like description */
34
+ }
35
+
36
+ .inquiry-title-input ::ng-deep textarea {
37
+ font-size: var(--font-size-2xl);
38
+ font-weight: 400;
39
+ line-height: 1.2;
40
+ overflow-y: hidden;
41
+ resize: none;
42
+ box-sizing: border-box;
43
+ /* Add right padding to prevent overlap with close button */
44
+ padding-right: 52px; /* 36px button + 16px spacing */
45
+ /* Height will be controlled dynamically by JavaScript */
46
+ }
47
+
48
+ /* Description Textarea - Expand to fill available space */
49
+ .inquiry-description-input {
50
+ display: flex;
51
+ flex: 1;
52
+ min-height: 0;
53
+ }
54
+
55
+ .inquiry-description-input ::ng-deep .textarea-container {
56
+ display: flex;
57
+ flex: 1;
58
+ min-height: 0;
59
+ }
60
+
61
+ .inquiry-description-input ::ng-deep textarea {
62
+ flex: 1;
63
+ min-height: 80px;
64
+ overflow-y: hidden;
65
+ resize: none;
66
+ }
67
+
68
+ /* ============================================
69
+ LIST ITEM DETAILS
70
+ ============================================ */
71
+
72
+ .detail-label {
73
+ font-family: 'Brockmann', sans-serif;
74
+ font-size: var(--font-size-xs, 12px);
75
+ font-weight: 400;
76
+ line-height: 16px;
77
+ letter-spacing: -0.3px;
78
+ color: var(--text-color-default-tertiary, #868e99);
79
+ }
80
+
81
+ .detail-value {
82
+ font-family: 'Brockmann', sans-serif;
83
+ font-size: var(--font-size-sm, 14px);
84
+ font-weight: 400;
85
+ line-height: 20px;
86
+ letter-spacing: -0.3px;
87
+ color: var(--text-color-default-primary, #202227);
88
+ }
89
+
90
+ /* ============================================
91
+ FIXED BOTTOM CONTAINER (Slides with keyboard)
92
+ ============================================ */
93
+
94
+ .fixed-bottom-container {
95
+ background: var(--color-background-neutral-primary);
96
+ border-top: 1px solid var(--border-color-default);
97
+ }
98
+
99
+ /* Attachment Previews Section (Inside Fixed Bottom) */
100
+ .attachment-previews-section {
101
+ padding: 16px 20px;
102
+ border-bottom: 1px solid var(--border-color-default);
103
+ }
104
+
105
+ .image-previews {
106
+ display: flex;
107
+ gap: 8px;
108
+ overflow-x: auto;
109
+ padding-bottom: 4px;
110
+ }
111
+
112
+ /* Hide scrollbar for photo previews */
113
+ .image-previews::-webkit-scrollbar {
114
+ display: none;
115
+ }
116
+
117
+ /* Submit Actions Container */
118
+ .submit-container {
119
+ padding: 16px 20px;
120
+ }
121
+
122
+ .submit-content {
123
+ display: flex;
124
+ align-items: center;
125
+ justify-content: space-between;
126
+ gap: 16px;
127
+ }
128
+
129
+ /* Upload Actions (Left Side) */
130
+ .upload-actions {
131
+ display: flex;
132
+ align-items: center;
133
+ gap: 8px;
134
+ }
135
+
136
+ .upload-actions ds-icon-button::ng-deep button {
137
+ width: 44px;
138
+ height: 44px;
139
+ border-radius: 50%;
140
+ }
141
+
142
+ /* Submit Button (Right Side) */
143
+ .submit-content ds-button::ng-deep button {
144
+ border-radius: 100px;
145
+ }
146
+
147
+ .submit-content ds-button.submit-action-button::ng-deep button {
148
+ height: 44px;
149
+ min-height: 44px;
150
+ max-height: 44px;
151
+ padding-left: 16px;
152
+ padding-right: 16px;
153
+ }
154
+
155
+ /* Responsive adjustments */
156
+ @media (min-width: 768px) {
157
+ .submit-container {
158
+ padding: 20px 32px;
159
+ }
160
+ }
161
+
162
+ /* ============================================
163
+ DEPRECATED: OLD FIXED BOTTOM BUTTON STYLES
164
+ Keeping for backwards compatibility if needed
165
+ ============================================ */
166
+
167
+ .create-action {
168
+ padding: 16px 20px;
169
+ background: var(--color-surface-primary, #ffffff);
170
+ border-top: 1px solid var(--color-border, #e5e5e5);
171
+ }
172
+
173
+ .create-action ds-button {
174
+ display: block;
175
+ width: 100%;
176
+ }
177
+
178
+ .create-action ::ng-deep ds-button button {
179
+ width: 100%;
180
+ border-radius: 100px;
181
+ height: 48px;
182
+ }
183
+
184
+ /* Responsive adjustments */
185
+ @media (min-width: 768px) {
186
+ .create-action {
187
+ padding: 20px 32px;
188
+ }
189
+ }
@@ -0,0 +1,135 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { ModalController } from '@ionic/angular/standalone';
3
+ import {
4
+ DsMobileFacilityCreationModalComponent,
5
+ NewFacilityData,
6
+ } from './ds-mobile-facility-creation-modal';
7
+ import { DsMobileFacilityCreationConfirmationWrapperComponent } from './ds-mobile-facility-creation-confirmation-wrapper';
8
+ import { BaseModalService } from '../../services/base-modal.service';
9
+ import { disableModalShadowPointerEvents } from '../bottom-sheet/modal-shadow-fix';
10
+
11
+ /**
12
+ * Options for opening the facility creation modal
13
+ */
14
+ export interface FacilityCreationModalOptions {
15
+ /** Callback function when facility is submitted */
16
+ onSubmit?: (data: NewFacilityData) => void | Promise<void>;
17
+ /** Initial loading state */
18
+ loading?: boolean;
19
+ /** Initial error message */
20
+ error?: string;
21
+ /** Custom placeholder for title field */
22
+ titlePlaceholder?: string;
23
+ /** Custom placeholder for description field */
24
+ descriptionPlaceholder?: string;
25
+ /** Custom label for submit button */
26
+ submitButtonLabel?: string;
27
+ }
28
+
29
+ /**
30
+ * DsMobileFacilityCreationModalService
31
+ *
32
+ * Service for displaying the facility creation modal.
33
+ * Built on Ionic's modal system with native gestures and animations.
34
+ *
35
+ * Features:
36
+ * - Full-screen modal with form
37
+ * - Title and description inputs
38
+ * - Interactive list items for facility options
39
+ * - Bottom sheet pickers
40
+ * - Form validation
41
+ * - Submit handling with confirmation sheet
42
+ * - Loading and error states
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * constructor(private facilityCreationModal: DsMobileFacilityCreationModalService) {}
47
+ *
48
+ * async createNewFacility(): Promise<void> {
49
+ * await this.facilityCreationModal.open({
50
+ * onSubmit: async (data) => {
51
+ * console.log('Creating facility:', data);
52
+ * await this.apiService.createFacility(data);
53
+ * await this.facilityCreationModal.close();
54
+ * }
55
+ * });
56
+ * }
57
+ * ```
58
+ */
59
+ @Injectable({
60
+ providedIn: 'root',
61
+ })
62
+ export class DsMobileFacilityCreationModalService extends BaseModalService {
63
+ constructor(modalController: ModalController) {
64
+ super(modalController);
65
+ }
66
+
67
+ /**
68
+ * Open the facility creation modal
69
+ *
70
+ * @param options Modal options including onSubmit callback
71
+ * @returns Promise that resolves when the modal is presented
72
+ */
73
+ async open(options?: FacilityCreationModalOptions): Promise<void> {
74
+ console.log('[FacilityCreationModal] Opening modal with options:', options);
75
+
76
+ const modal = await this.createModal(
77
+ DsMobileFacilityCreationModalComponent,
78
+ {
79
+ onSubmit: async (data: NewFacilityData) => {
80
+ console.log('[FacilityCreationModal] Facility submitted:', data);
81
+
82
+ // Call user's onSubmit callback if provided
83
+ if (options?.onSubmit) {
84
+ await options.onSubmit(data);
85
+ }
86
+
87
+ // Close the modal
88
+ await this.close();
89
+
90
+ // Show confirmation sheet
91
+ await this.openConfirmationSheet(data);
92
+ },
93
+ loading: options?.loading ?? false,
94
+ ...(options?.error && { error: options.error }),
95
+ ...(options?.titlePlaceholder && { titlePlaceholder: options.titlePlaceholder }),
96
+ ...(options?.descriptionPlaceholder && { descriptionPlaceholder: options.descriptionPlaceholder }),
97
+ ...(options?.submitButtonLabel && { submitButtonLabel: options.submitButtonLabel }),
98
+ },
99
+ {
100
+ keyboardClose: false, // Don't close on keyboard hide for this modal
101
+ cssClass: ['ds-modal-base'],
102
+ },
103
+ );
104
+
105
+ console.log('[FacilityCreationModal] Modal created, presenting...');
106
+ await modal.present();
107
+ console.log('[FacilityCreationModal] Modal presented');
108
+ }
109
+
110
+ /**
111
+ * Open the confirmation bottom sheet after successful facility creation
112
+ *
113
+ * @param facilityData The created facility data
114
+ * @returns Promise that resolves when the sheet is dismissed
115
+ */
116
+ private async openConfirmationSheet(facilityData: NewFacilityData): Promise<void> {
117
+ const sheet = await this.modalController.create({
118
+ component: DsMobileFacilityCreationConfirmationWrapperComponent,
119
+ componentProps: {
120
+ facilityData
121
+ },
122
+ breakpoints: [0, 1],
123
+ initialBreakpoint: 1,
124
+ handle: true,
125
+ cssClass: ['ds-bottom-sheet', 'auto-height'],
126
+ backdropDismiss: true,
127
+ showBackdrop: true,
128
+ mode: 'ios',
129
+ presentingElement: undefined
130
+ });
131
+
132
+ await sheet.present();
133
+ disableModalShadowPointerEvents(sheet);
134
+ }
135
+ }