@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.
- package/ng-package.json +24 -0
- package/package.json +3 -39
- package/src/animations/page-transitions.ts +165 -0
- package/src/assets/fonts/brockmann-mediumitalic-webfont.woff2 +0 -0
- package/src/assets/fonts/brockmann-regularitalic-webfont.woff2 +0 -0
- package/src/assets/fonts/brockmann-semibolditalic-webfont.woff2 +0 -0
- package/src/components/action-list-item/ds-mobile-action-list-item.ts +102 -0
- package/src/components/action-list-item/index.ts +2 -0
- package/src/components/app-icon/ds-app-icon.ts +133 -0
- package/src/components/app-icon/index.ts +2 -0
- package/src/components/attachment-preview/ds-mobile-attachment-preview.css +139 -0
- package/src/components/attachment-preview/ds-mobile-attachment-preview.ts +164 -0
- package/src/components/attachment-preview/index.ts +1 -0
- package/src/components/avatar-with-badge/ds-avatar-with-badge.ts +142 -0
- package/src/components/avatar-with-badge/index.ts +2 -0
- package/src/components/booking-modal/ds-mobile-booking-confirmation-wrapper.ts +71 -0
- package/src/components/booking-modal/ds-mobile-booking-modal.service.ts +121 -0
- package/src/components/booking-modal/ds-mobile-booking-modal.ts +598 -0
- package/src/components/booking-modal/ds-mobile-booking-summary.ts +161 -0
- package/src/components/booking-modal/index.ts +4 -0
- package/src/components/bottom-sheet/ds-mobile-actions-bottom-sheet.ts +266 -0
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet-header.ts +146 -0
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet-wrapper.ts +156 -0
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet.css +101 -0
- package/src/components/bottom-sheet/ds-mobile-bottom-sheet.service.ts +169 -0
- package/src/components/bottom-sheet/ds-mobile-confirmation-sheet.ts +211 -0
- package/src/components/bottom-sheet/ds-mobile-post-create-bottom-sheet.ts +578 -0
- package/src/components/bottom-sheet/ds-mobile-profile-actions-sheet.ts +614 -0
- package/src/components/bottom-sheet/index.ts +8 -0
- package/src/components/bottom-sheet/modal-shadow-fix.ts +42 -0
- package/src/components/card-inline/ds-mobile-card-inline.ts +301 -0
- package/src/components/card-inline/index.ts +2 -0
- package/src/components/card-inline-banner/ds-mobile-card-inline-banner.ts +118 -0
- package/src/components/card-inline-banner/index.ts +1 -0
- package/src/components/card-inline-contact/ds-mobile-card-inline-contact.ts +120 -0
- package/src/components/card-inline-contact/index.ts +1 -0
- package/src/components/card-inline-file/ds-mobile-card-inline-file.ts +141 -0
- package/src/components/card-inline-file/index.ts +1 -0
- package/src/components/chat-modal/ds-mobile-chat-modal.css +159 -0
- package/src/components/chat-modal/ds-mobile-chat-modal.service.ts +105 -0
- package/src/components/chat-modal/ds-mobile-chat-modal.ts +918 -0
- package/src/components/chat-modal/index.ts +8 -0
- package/src/components/comment/ds-mobile-comment.ts +568 -0
- package/src/components/comment/index.ts +2 -0
- package/src/components/contact-list-item/ds-mobile-contact-list-item.ts +182 -0
- package/src/components/contact-list-item/index.ts +2 -0
- package/src/components/content/ds-mobile-content.ts +139 -0
- package/src/components/content/index.ts +2 -0
- package/src/components/dropdown/ds-mobile-dropdown.css +199 -0
- package/src/components/dropdown/ds-mobile-dropdown.ts +340 -0
- package/src/components/dropdown/index.ts +2 -0
- package/src/components/ds-mobile-tabs.css +407 -0
- package/src/components/ds-mobile-tabs.ts +216 -0
- package/src/components/empty-state/ds-mobile-empty-state.ts +120 -0
- package/src/components/empty-state/index.ts +2 -0
- package/src/components/fab/ds-mobile-fab.ts +315 -0
- package/src/components/fab/index.ts +1 -0
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-confirmation-wrapper.ts +121 -0
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.css +189 -0
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.service.ts +135 -0
- package/src/components/facility-creation-modal/ds-mobile-facility-creation-modal.ts +656 -0
- package/src/components/facility-creation-modal/index.ts +9 -0
- package/src/components/facility-creation-modal/sheets/ds-mobile-access-sheet.ts +105 -0
- package/src/components/facility-creation-modal/sheets/ds-mobile-price-sheet.ts +188 -0
- package/src/components/facility-creation-modal/sheets/ds-mobile-when-can-book-sheet.ts +460 -0
- package/src/components/facility-creation-modal/sheets/ds-mobile-who-can-book-sheet.ts +134 -0
- package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.service.ts +69 -0
- package/src/components/facility-detail-modal/ds-mobile-facility-detail-modal.ts +379 -0
- package/src/components/facility-detail-modal/index.ts +2 -0
- package/src/components/file-attachment/ds-mobile-file-attachment.ts +164 -0
- package/src/components/file-attachment/index.ts +2 -0
- package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.css +214 -0
- package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.service.ts +84 -0
- package/src/components/handbook-detail-modal/ds-mobile-handbook-detail-modal.ts +424 -0
- package/src/components/handbook-detail-modal/index.ts +3 -0
- package/src/components/handbook-folder/ds-mobile-handbook-folder-mini.ts +175 -0
- package/src/components/handbook-folder/ds-mobile-handbook-folder.ts +533 -0
- package/src/components/handbook-folder/index.ts +4 -0
- package/src/components/header-content/ds-mobile-header-content.ts +222 -0
- package/src/components/header-content/index.ts +2 -0
- package/src/components/illustration/ds-mobile-illustration.ts +124 -0
- package/src/components/illustration/index.ts +2 -0
- package/src/components/index.ts +124 -0
- package/src/components/inline-photo/ds-mobile-inline-photo.ts +361 -0
- package/src/components/inline-photo/index.ts +1 -0
- package/src/components/inline-tabs/ds-mobile-inline-tabs.ts +132 -0
- package/src/components/inline-tabs/index.ts +2 -0
- package/src/components/interactive-list-item-booking/ds-mobile-interactive-list-item-booking.ts +350 -0
- package/src/components/interactive-list-item-booking/index.ts +1 -0
- package/src/components/interactive-list-item-inquiry/ds-mobile-interactive-list-item-inquiry.ts +321 -0
- package/src/components/interactive-list-item-inquiry/index.ts +2 -0
- package/src/components/interactive-list-item-message/ds-mobile-interactive-list-item-message.ts +237 -0
- package/src/components/interactive-list-item-message/index.ts +2 -0
- package/src/components/interactive-list-item-post/ds-mobile-interactive-list-item-post.ts +549 -0
- package/src/components/interactive-list-item-post/ds-mobile-post-pdf-attachment.ts +124 -0
- package/src/components/interactive-list-item-post/index.ts +13 -0
- package/src/components/lightbox/ds-mobile-lightbox-footer.ts +315 -0
- package/src/components/lightbox/ds-mobile-lightbox-header.ts +202 -0
- package/src/components/lightbox/ds-mobile-lightbox-image.ts +484 -0
- package/src/components/lightbox/ds-mobile-lightbox-pdf.css +377 -0
- package/src/components/lightbox/ds-mobile-lightbox-pdf.ts +374 -0
- package/src/components/lightbox/ds-mobile-lightbox.css +587 -0
- package/src/components/lightbox/ds-mobile-lightbox.service.ts +296 -0
- package/src/components/lightbox/ds-mobile-lightbox.ts +529 -0
- package/src/components/lightbox/index.ts +22 -0
- package/src/components/list-item/ds-mobile-list-item.ts +603 -0
- package/src/components/list-item/index.ts +2 -0
- package/src/components/list-item-static/ds-mobile-list-item-static.ts +133 -0
- package/src/components/list-item-static/index.ts +2 -0
- package/src/components/loader-overlay/ds-mobile-loader-overlay.css +49 -0
- package/src/components/loader-overlay/ds-mobile-loader-overlay.ts +77 -0
- package/src/components/loader-overlay/index.ts +1 -0
- package/src/components/logo/ds-logo.ts +95 -0
- package/src/components/logo/index.ts +2 -0
- package/src/components/message-bubble/ds-mobile-message-bubble.ts +633 -0
- package/src/components/message-bubble/index.ts +7 -0
- package/src/components/message-composer/ds-mobile-message-composer.ts +1146 -0
- package/src/components/message-composer/index.ts +7 -0
- package/src/components/modal/ds-mobile-modal.css +163 -0
- package/src/components/modal/ds-mobile-modal.service.ts +329 -0
- package/src/components/modal/index.ts +8 -0
- package/src/components/modal-base/ds-mobile-modal-base.css +378 -0
- package/src/components/modal-base/ds-mobile-modal-base.ts +261 -0
- package/src/components/modal-base/index.ts +2 -0
- package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.css +112 -0
- package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.service.ts +93 -0
- package/src/components/new-inquiry-modal/ds-mobile-new-inquiry-modal.ts +442 -0
- package/src/components/new-inquiry-modal/index.ts +4 -0
- package/src/components/offline-banner/ds-mobile-offline-banner.ts +135 -0
- package/src/components/offline-banner/index.ts +1 -0
- package/src/components/page-details/ds-mobile-page-details.css +83 -0
- package/src/components/page-details/ds-mobile-page-details.ts +282 -0
- package/src/components/page-details/index.ts +2 -0
- package/src/components/page-main/ds-mobile-page-main.css +68 -0
- package/src/components/page-main/ds-mobile-page-main.ts +421 -0
- package/src/components/page-main/index.ts +2 -0
- package/src/components/post-composer/ds-mobile-post-composer.ts +140 -0
- package/src/components/post-composer/index.ts +2 -0
- package/src/components/post-detail-modal/ds-mobile-post-detail-modal.css +390 -0
- package/src/components/post-detail-modal/ds-mobile-post-detail-modal.service.ts +108 -0
- package/src/components/post-detail-modal/ds-mobile-post-detail-modal.ts +722 -0
- package/src/components/post-detail-modal/index.ts +9 -0
- package/src/components/property-banner/ds-mobile-property-banner.ts +95 -0
- package/src/components/property-banner/index.ts +2 -0
- package/src/components/section/ds-mobile-section.ts +263 -0
- package/src/components/section/index.ts +2 -0
- package/src/components/shared/directives/index.ts +2 -0
- package/src/components/shared/directives/long-press.directive.ts +212 -0
- package/src/components/shared/index.ts +3 -0
- package/src/components/shared/mobile-modal-base.ts +457 -0
- package/src/components/shared/mobile-page-base.ts +204 -0
- package/src/components/swiper/ds-mobile-swiper-with-nav.ts +160 -0
- package/src/components/swiper/ds-mobile-swiper.ts +327 -0
- package/src/components/swiper/index.ts +3 -0
- package/src/components/system-message-banner/ds-mobile-system-message-banner.ts +129 -0
- package/src/components/system-message-banner/index.ts +2 -0
- package/src/components/tab-bar/ds-mobile-tab-bar.css +533 -0
- package/src/components/tab-bar/ds-mobile-tab-bar.ts +735 -0
- package/src/components/tab-bar/index.ts +2 -0
- package/src/components/tabs/ds-mobile-tabs.css +25 -0
- package/src/components/tabs/ds-mobile-tabs.ts +89 -0
- package/src/components/tabs/index.ts +2 -0
- package/src/components/text-input/ds-text-input.ts +287 -0
- package/src/components/text-input/index.ts +2 -0
- package/src/examples/booking.page.ts +434 -0
- package/src/examples/community.page.ts +776 -0
- package/src/examples/handbook.page.ts +324 -0
- package/src/examples/home.page.ts +347 -0
- package/src/examples/index.ts +12 -0
- package/src/examples/inquiries.example.ts +273 -0
- package/src/examples/inquiry-detail.example.css +189 -0
- package/src/examples/inquiry-detail.example.ts +415 -0
- package/src/examples/mobile-tabs-example.component.ts +208 -0
- package/src/examples/post-create.page.ts +311 -0
- package/src/examples/post-detail.page.ts +296 -0
- package/src/examples/sign-in.page.ts +291 -0
- package/src/examples/whitelabel-demo-modal.component.ts +1094 -0
- package/src/examples/whitelabel-demo-modal.service.ts +77 -0
- package/src/models/index.ts +7 -0
- package/src/models/post.model.ts +41 -0
- package/src/pages/community.page.ts +769 -0
- package/src/pages/handbook.page.ts +388 -0
- package/src/pages/home.page.ts +303 -0
- package/src/pages/index.ts +11 -0
- package/src/pages/inquiries.example.ts +273 -0
- package/src/pages/inquiry-detail.example.css +189 -0
- package/src/pages/inquiry-detail.example.ts +415 -0
- package/src/pages/mobile-tabs-example.component.ts +179 -0
- package/src/pages/post-create.page.ts +311 -0
- package/src/pages/post-detail.page.ts +296 -0
- package/src/pages/sign-in.page.ts +291 -0
- package/src/pages/whitelabel-demo-modal.component.ts +1094 -0
- package/src/pages/whitelabel-demo-modal.service.ts +77 -0
- package/src/public-api.ts +6 -0
- package/src/services/base-modal.service.ts +101 -0
- package/src/services/index.ts +11 -0
- package/src/services/posts.service.ts +542 -0
- package/src/services/tracking-permission.service.ts +88 -0
- package/src/services/user.service.ts +60 -0
- package/src/services/whitelabel.service.ts +675 -0
- package/{styles → src/styles}/ionic.css +25 -0
- package/tsconfig.lib.json +17 -0
- package/tsconfig.lib.prod.json +9 -0
- package/tsconfig.spec.json +13 -0
- package/fesm2022/propbinder-mobile-design.mjs +0 -26136
- package/fesm2022/propbinder-mobile-design.mjs.map +0 -1
- package/index.d.ts +0 -8154
- /package/{assets → src/assets}/fonts/Brockmann-Bold.otf +0 -0
- /package/{assets → src/assets}/fonts/Brockmann-BoldItalic.otf +0 -0
- /package/{assets → src/assets}/fonts/Brockmann-Medium.otf +0 -0
- /package/{assets → src/assets}/fonts/Brockmann-MediumItalic.otf +0 -0
- /package/{assets → src/assets}/fonts/Brockmann-Regular.otf +0 -0
- /package/{assets → src/assets}/fonts/Brockmann-RegularItalic.otf +0 -0
- /package/{assets → src/assets}/fonts/Brockmann-SemiBold.otf +0 -0
- /package/{assets → src/assets}/fonts/Brockmann-SemiBoldItalic.otf +0 -0
- /package/{assets → src/assets}/fonts/Brockmann_desktop_license.pdf +0 -0
- /package/{assets → src/assets}/fonts/brockmann-medium-webfont.woff2 +0 -0
- /package/{assets → src/assets}/fonts/brockmann-regular-webfont.woff2 +0 -0
- /package/{assets → src/assets}/fonts/brockmann-semibold-webfont.woff2 +0 -0
- /package/{styles → src/components/shared}/mobile-common.css +0 -0
- /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
|
+
}
|