@quoreadmin/ui 1.7.20 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/dist/index.css +1 -1
  2. package/dist/index.js +42 -40
  3. package/dist/index10.js +2 -2
  4. package/dist/{index100.js → index101.js} +1 -1
  5. package/dist/index103.js +138 -6
  6. package/dist/index104.js +4 -0
  7. package/dist/index107.js +2 -2
  8. package/dist/index109.js +1 -1
  9. package/dist/index11.js +2 -2
  10. package/dist/index111.js +3 -3
  11. package/dist/index113.js +6 -6
  12. package/dist/index115.js +1 -1
  13. package/dist/index117.js +5 -5
  14. package/dist/index12.js +2 -2
  15. package/dist/index127.js +69 -10
  16. package/dist/index129.js +9 -75
  17. package/dist/index13.js +2 -2
  18. package/dist/index131.js +68 -243
  19. package/dist/index133.js +257 -0
  20. package/dist/index136.js +35 -16
  21. package/dist/index138.js +22 -50
  22. package/dist/index14.js +2 -2
  23. package/dist/index140.js +38 -1110
  24. package/dist/index142.js +1059 -216
  25. package/dist/index144.js +238 -294
  26. package/dist/index146.js +335 -16
  27. package/dist/index148.js +15 -87
  28. package/dist/index15.js +2 -2
  29. package/dist/index150.js +71 -61
  30. package/dist/index152.js +66 -93
  31. package/dist/index154.js +120 -0
  32. package/dist/index157.js +373 -28
  33. package/dist/index159.js +28 -194
  34. package/dist/index16.js +2 -2
  35. package/dist/index161.js +210 -0
  36. package/dist/index164.js +110 -5518
  37. package/dist/index165.js +484 -80
  38. package/dist/index166.js +5505 -844
  39. package/dist/index167.js +90 -37
  40. package/dist/index168.js +816 -235
  41. package/dist/index169.js +28 -140
  42. package/dist/index17.js +2 -2
  43. package/dist/index170.js +271 -1190
  44. package/dist/index171.js +134 -756
  45. package/dist/index172.js +1133 -1242
  46. package/dist/index173.js +753 -257
  47. package/dist/index174.js +1290 -88
  48. package/dist/index175.js +276 -2
  49. package/dist/index176.js +86 -1356
  50. package/dist/index177.js +4 -0
  51. package/dist/index178.js +1372 -14
  52. package/dist/index18.js +2 -2
  53. package/dist/index180.js +11 -11
  54. package/dist/index181.js +11 -11
  55. package/dist/index182.js +12 -19
  56. package/dist/index183.js +18 -759
  57. package/dist/index184.js +25 -1122
  58. package/dist/index185.js +625 -1100
  59. package/dist/index186.js +1122 -11277
  60. package/dist/index187.js +1234 -36
  61. package/dist/index188.js +11276 -43
  62. package/dist/index19.js +2 -2
  63. package/dist/index191.js +36 -5938
  64. package/dist/index192.js +42 -205
  65. package/dist/index193.js +5922 -19
  66. package/dist/index194.js +199 -10
  67. package/dist/index195.js +33 -76
  68. package/dist/index196.js +14 -249
  69. package/dist/index197.js +72 -13678
  70. package/dist/index198.js +253 -27
  71. package/dist/index199.js +13669 -48
  72. package/dist/index2.js +2 -2
  73. package/dist/index20.js +2 -2
  74. package/dist/index200.js +25 -236
  75. package/dist/index201.js +45 -290
  76. package/dist/index202.js +179 -229
  77. package/dist/index203.js +304 -29
  78. package/dist/index204.js +286 -114
  79. package/dist/index205.js +29 -32
  80. package/dist/index206.js +116 -26
  81. package/dist/index207.js +31 -31
  82. package/dist/index208.js +26 -9
  83. package/dist/index209.js +35 -18
  84. package/dist/index21.js +2 -2
  85. package/dist/index210.js +8 -9
  86. package/dist/index211.js +19 -10
  87. package/dist/index212.js +10 -51
  88. package/dist/index213.js +9 -42
  89. package/dist/index214.js +50 -3
  90. package/dist/index215.js +40 -36
  91. package/dist/index216.js +4 -21
  92. package/dist/index217.js +35 -84
  93. package/dist/index218.js +21 -407
  94. package/dist/index219.js +159 -20
  95. package/dist/index22.js +3 -3
  96. package/dist/index220.js +19 -160
  97. package/dist/index221.js +10 -10
  98. package/dist/index222.js +15 -13
  99. package/dist/index223.js +198 -21
  100. package/dist/index224.js +51 -180
  101. package/dist/index225.js +82 -64
  102. package/dist/index226.js +406 -33
  103. package/dist/index227.js +33 -39
  104. package/dist/index228.js +36 -123
  105. package/dist/index229.js +158 -35
  106. package/dist/index23.js +2 -2
  107. package/dist/index230.js +227 -79
  108. package/dist/index231.js +36 -19
  109. package/dist/index232.js +10 -20
  110. package/dist/index233.js +22 -20
  111. package/dist/index234.js +126 -19
  112. package/dist/index235.js +35 -158
  113. package/dist/index236.js +79 -227
  114. package/dist/index237.js +19 -36
  115. package/dist/index238.js +20 -10
  116. package/dist/index239.js +20 -3632
  117. package/dist/index24.js +2 -2
  118. package/dist/index240.js +20 -55
  119. package/dist/index241.js +22 -77
  120. package/dist/index242.js +22 -52
  121. package/dist/index243.js +20 -215
  122. package/dist/index244.js +836 -10
  123. package/dist/index245.js +695 -50
  124. package/dist/index246.js +174 -59
  125. package/dist/index247.js +22 -54
  126. package/dist/index248.js +20 -75
  127. package/dist/index249.js +19 -722
  128. package/dist/index25.js +60 -11
  129. package/dist/index250.js +3 -39
  130. package/dist/index251.js +181 -58
  131. package/dist/index252.js +133 -11
  132. package/dist/index253.js +1189 -671
  133. package/dist/index254.js +20 -820
  134. package/dist/index255.js +11 -11
  135. package/dist/index256.js +9 -9
  136. package/dist/index257.js +22 -13
  137. package/dist/index258.js +20 -836
  138. package/dist/index259.js +19 -701
  139. package/dist/index26.js +1 -1
  140. package/dist/index260.js +2 -176
  141. package/dist/index261.js +2 -22
  142. package/dist/index262.js +3632 -20
  143. package/dist/index263.js +55 -20
  144. package/dist/index264.js +77 -3
  145. package/dist/index265.js +46 -181
  146. package/dist/index266.js +209 -127
  147. package/dist/index267.js +10 -1223
  148. package/dist/index268.js +57 -20
  149. package/dist/index269.js +61 -22
  150. package/dist/index27.js +1 -1
  151. package/dist/index270.js +54 -22
  152. package/dist/index271.js +75 -29
  153. package/dist/index272.js +722 -19
  154. package/dist/index273.js +39 -20
  155. package/dist/index274.js +64 -2
  156. package/dist/index275.js +11 -2
  157. package/dist/index276.js +689 -237
  158. package/dist/index277.js +820 -8
  159. package/dist/index278.js +42 -126
  160. package/dist/index279.js +59 -63
  161. package/dist/index28.js +1 -1
  162. package/dist/index280.js +26 -3
  163. package/dist/index281.js +21 -26
  164. package/dist/index282.js +21 -53
  165. package/dist/index283.js +15 -78
  166. package/dist/index284.js +17 -26
  167. package/dist/index285.js +253 -22
  168. package/dist/index286.js +8 -22
  169. package/dist/index287.js +137 -15
  170. package/dist/index288.js +83 -17
  171. package/dist/index289.js +2 -2
  172. package/dist/index29.js +1 -1
  173. package/dist/index290.js +3 -2
  174. package/dist/index291.js +24 -1515
  175. package/dist/index292.js +2 -386
  176. package/dist/index293.js +245 -2714
  177. package/dist/index294.js +4 -84
  178. package/dist/index295.js +135 -3765
  179. package/dist/index296.js +70 -57
  180. package/dist/index297.js +86 -14
  181. package/dist/index298.js +27 -82
  182. package/dist/index299.js +13 -199
  183. package/dist/index3.js +2 -2
  184. package/dist/index30.js +1 -1
  185. package/dist/index300.js +66 -237
  186. package/dist/index301.js +3 -78
  187. package/dist/index302.js +2 -22
  188. package/dist/index303.js +74 -926
  189. package/dist/index304.js +52 -21
  190. package/dist/index305.js +5 -19
  191. package/dist/index306.js +4 -19
  192. package/dist/index307.js +171 -61
  193. package/dist/index308.js +62 -18
  194. package/dist/index309.js +74 -18
  195. package/dist/index31.js +1 -1
  196. package/dist/index310.js +78 -21
  197. package/dist/index311.js +11 -11
  198. package/dist/index312.js +930 -58
  199. package/dist/index313.js +21 -261
  200. package/dist/index314.js +19 -5
  201. package/dist/index315.js +19 -139
  202. package/dist/index316.js +67 -71
  203. package/dist/index317.js +17 -85
  204. package/dist/index318.js +19 -29
  205. package/dist/index319.js +21 -15
  206. package/dist/index32.js +1 -1
  207. package/dist/index320.js +21 -74
  208. package/dist/index321.js +63 -4
  209. package/dist/index322.js +1518 -2
  210. package/dist/index323.js +376 -73
  211. package/dist/index324.js +2726 -48
  212. package/dist/index325.js +84 -4
  213. package/dist/index326.js +3769 -4
  214. package/dist/index327.js +51 -170
  215. package/dist/index328.js +14 -62
  216. package/dist/index329.js +84 -75
  217. package/dist/index33.js +1 -1
  218. package/dist/index330.js +201 -8
  219. package/dist/index331.js +245 -12
  220. package/dist/index332.js +32 -50
  221. package/dist/index333.js +8 -11
  222. package/dist/index334.js +12 -13
  223. package/dist/index335.js +49 -52
  224. package/dist/index336.js +9 -49
  225. package/dist/index337.js +10 -27
  226. package/dist/index338.js +58 -2
  227. package/dist/index339.js +52 -5
  228. package/dist/index34.js +1 -1
  229. package/dist/index340.js +31 -2
  230. package/dist/index341.js +2 -23
  231. package/dist/index342.js +4 -40
  232. package/dist/index343.js +2 -2
  233. package/dist/index344.js +22 -10
  234. package/dist/index345.js +38 -17
  235. package/dist/index346.js +2 -17
  236. package/dist/index347.js +10 -9
  237. package/dist/index348.js +20 -10
  238. package/dist/index349.js +17 -2
  239. package/dist/index35.js +1 -1
  240. package/dist/index350.js +9 -8
  241. package/dist/index351.js +10 -10
  242. package/dist/index352.js +2 -14
  243. package/dist/index353.js +9 -37
  244. package/dist/index354.js +9 -19
  245. package/dist/index355.js +14 -20
  246. package/dist/index356.js +17 -62
  247. package/dist/index357.js +56 -36
  248. package/dist/index358.js +26 -16
  249. package/dist/index359.js +6 -56
  250. package/dist/index36.js +1 -1
  251. package/dist/index360.js +51 -28
  252. package/dist/index361.js +7 -7
  253. package/dist/index362.js +11 -51
  254. package/dist/index363.js +6 -6
  255. package/dist/index364.js +28 -12
  256. package/dist/index365.js +2 -7
  257. package/dist/index366.js +69 -27
  258. package/dist/index367.js +167 -2
  259. package/dist/index368.js +20 -70
  260. package/dist/index369.js +20 -167
  261. package/dist/index37.js +4 -16
  262. package/dist/index370.js +61 -98
  263. package/dist/index371.js +37 -91
  264. package/dist/index372.js +30 -97
  265. package/dist/index373.js +11 -17
  266. package/dist/index374.js +3 -30
  267. package/dist/index375.js +3 -10
  268. package/dist/index376.js +13 -4
  269. package/dist/index377.js +7 -4
  270. package/dist/index378.js +12 -13
  271. package/dist/index379.js +5 -7
  272. package/dist/index38.js +15 -43
  273. package/dist/index380.js +33 -12
  274. package/dist/index381.js +31 -5
  275. package/dist/index382.js +27 -32
  276. package/dist/index383.js +58 -28
  277. package/dist/index384.js +16 -27
  278. package/dist/index385.js +99 -59
  279. package/dist/index386.js +91 -3
  280. package/dist/index387.js +98 -2
  281. package/dist/index388.js +3 -2
  282. package/dist/index389.js +2 -17
  283. package/dist/index39.js +42 -67
  284. package/dist/index390.js +2 -13
  285. package/dist/index391.js +17 -6
  286. package/dist/index392.js +13 -32
  287. package/dist/index393.js +8 -0
  288. package/dist/index394.js +34 -0
  289. package/dist/index4.js +2 -2
  290. package/dist/index40.js +66 -26
  291. package/dist/index41.js +25 -32
  292. package/dist/index42.js +32 -37
  293. package/dist/index43.js +37 -1300
  294. package/dist/index44.js +1273 -337
  295. package/dist/index45.js +357 -145
  296. package/dist/index46.js +155 -18
  297. package/dist/index47.js +16 -42
  298. package/dist/index48.js +44 -68
  299. package/dist/index49.js +67 -61
  300. package/dist/index5.js +2 -2
  301. package/dist/index50.js +57 -175
  302. package/dist/index51.js +173 -77
  303. package/dist/index52.js +78 -199
  304. package/dist/index53.js +206 -68
  305. package/dist/index54.js +69 -20
  306. package/dist/index55.js +20 -11
  307. package/dist/index56.js +10 -6
  308. package/dist/index57.js +5 -209
  309. package/dist/index58.js +210 -12
  310. package/dist/index59.js +12 -184
  311. package/dist/index6.js +2 -2
  312. package/dist/index60.js +176 -68
  313. package/dist/index61.js +79 -0
  314. package/dist/index63.js +7 -63
  315. package/dist/index64.js +65 -0
  316. package/dist/index7.js +2 -2
  317. package/dist/{index71.js → index72.js} +2 -2
  318. package/dist/index76.js +40 -308
  319. package/dist/index77.js +330 -0
  320. package/dist/index8.js +3 -3
  321. package/dist/{index80.js → index81.js} +5 -5
  322. package/dist/{index82.js → index83.js} +1 -1
  323. package/dist/index85.js +23 -131
  324. package/dist/index86.js +144 -0
  325. package/dist/{index87.js → index88.js} +5 -5
  326. package/dist/index9.js +2 -2
  327. package/dist/{index89.js → index90.js} +5 -5
  328. package/dist/{index95.js → index96.js} +3 -3
  329. package/dist/index98.js +20 -25
  330. package/dist/index99.js +34 -0
  331. package/dist/src/components/footer-actions/footer-actions.stories.d.ts +33 -1
  332. package/dist/src/components/footer-actions/footer-actions.vue.d.ts +29 -2
  333. package/dist/src/components/page-header/page-header.stories.d.ts +394 -0
  334. package/dist/src/components/page-header/page-header.vue.d.ts +43 -0
  335. package/dist/src/index.d.ts +1 -0
  336. package/package.json +1 -1
  337. package/src/assets/illustrations/app-icon-news.svg +1 -0
  338. package/dist/index102.js +0 -142
  339. package/dist/index134.js +0 -56
  340. package/dist/index155.js +0 -389
  341. package/dist/index162.js +0 -116
  342. package/dist/index163.js +0 -497
  343. package/dist/index179.js +0 -20
  344. package/dist/index62.js +0 -9
  345. package/dist/index75.js +0 -62
  346. package/dist/index84.js +0 -36
  347. package/dist/index97.js +0 -29
  348. package/dist/src/components/footer-actions/footer-actions.d.ts +0 -3
  349. /package/dist/{index65.js → index66.js} +0 -0
  350. /package/dist/{index67.js → index68.js} +0 -0
  351. /package/dist/{index69.js → index70.js} +0 -0
  352. /package/dist/{index73.js → index74.js} +0 -0
  353. /package/dist/{index78.js → index79.js} +0 -0
  354. /package/dist/{index91.js → index92.js} +0 -0
  355. /package/dist/{index93.js → index94.js} +0 -0
package/dist/index140.js CHANGED
@@ -1,1137 +1,65 @@
1
- import { defineComponent as ct, ref as i, computed as _, watch as B, onMounted as dt, onUnmounted as mt } from "vue";
2
- import { useI18n as vt } from "vue-i18n";
3
- import { DateTime as w } from "./index164.js";
4
- import "./index187.js";
5
- import pt from "./index2.js";
6
- import ft from "./index3.js";
7
- import ht from "./index4.js";
8
- import yt from "./index21.js";
9
- import gt from "./index28.js";
10
- import _t from "./index39.js";
11
- import wt from "./index20.js";
12
- import It from "./index46.js";
13
- import Dt from "./index47.js";
14
- import Tt from "./index49.js";
15
- import K from "./index188.js";
16
- const Ft = ct({
17
- name: "QRoomDetailsPopover",
18
- components: {
19
- QAccordion: pt,
20
- QActivityItem: ft,
21
- QAvatar: ht,
22
- QDatePicker: wt,
23
- QDivider: yt,
24
- QIcon: gt,
25
- QPopover: _t,
26
- QTag: It,
27
- QTextarea: Dt,
28
- QTooltip: Tt
29
- },
1
+ import { defineComponent as y, computed as g } from "vue";
2
+ const C = y({
3
+ name: "QRadio",
30
4
  props: {
31
5
  id: {
32
6
  type: String,
33
- default: ""
34
- },
35
- roomDetails: {
36
- type: Object,
37
- default: () => {
38
- }
7
+ default: "radio"
39
8
  },
40
- guestDetails: {
41
- type: Object,
42
- default: () => {
43
- }
44
- },
45
- propertyId: {
46
- type: [Number, String],
47
- default: ""
48
- },
49
- propertyTimeZone: {
9
+ name: {
50
10
  type: String,
51
- default: "America/Chicago"
52
- },
53
- trigger: {
54
- type: [Number, String],
55
11
  default: ""
56
12
  },
57
- comments: {
58
- type: Array,
59
- default: () => []
60
- },
61
- room: {
62
- type: Object,
63
- default: () => {
64
- }
65
- },
66
- showActionMenu: {
67
- type: Boolean,
68
- default: !0
69
- },
70
- showActionsLink: {
71
- type: Boolean,
72
- default: !0
73
- },
74
- showGuestDetails: {
75
- type: Boolean,
76
- default: !1
77
- },
78
- showComments: {
79
- type: Boolean,
80
- default: !1
81
- },
82
- showTickets: {
83
- type: Boolean,
84
- default: !0
85
- },
86
- showGuestCallback: {
87
- type: Boolean,
88
- default: !0
89
- },
90
- showRoomName: {
91
- type: Boolean,
92
- default: !1
93
- },
94
- hover: {
95
- type: Boolean,
96
- default: !1
97
- },
98
- size: {
99
- type: String,
100
- default: "md"
101
- },
102
- open: {
103
- type: Boolean,
104
- default: !1
105
- },
106
- align: {
107
- type: String,
108
- default: "left"
109
- },
110
- position: {
111
- type: String,
112
- default: "bottom"
113
- },
114
- locale: {
115
- type: String,
116
- default: "en"
117
- },
118
- pmsBaseUrl: {
119
- type: String,
120
- default: "",
121
- required: !0
122
- },
123
- allowWhenWhere: {
124
- type: Boolean,
125
- default: !1
126
- },
127
- quickReplies: {
13
+ options: {
128
14
  type: Array,
129
15
  default: () => []
130
16
  },
131
- /** Whether this is a test environment (enables simulation features) */
132
- isTestEnvironment: {
133
- type: Boolean,
134
- default: !1
135
- },
136
- /** Set if the popover is teleported to the body (escapes overflow clipping) */
137
- teleport: {
138
- type: Boolean,
139
- default: !1
140
- },
141
- /** Target element for teleport */
142
- teleportTo: {
143
- type: String,
144
- default: "body"
17
+ modelValue: {
18
+ type: [String, Number, Object, Array],
19
+ default: ""
145
20
  },
146
- /** Whether to close the popover when the trigger scrolls out of its scrollable parent */
147
- closeOnScrollOutOfView: {
21
+ disabled: {
148
22
  type: Boolean,
149
23
  default: !1
150
24
  },
151
- /** Whether to scroll the page to bring the popover into view when it opens or content changes */
152
- scrollIntoView: {
25
+ inline: {
153
26
  type: Boolean,
154
27
  default: !1
155
28
  },
156
- /** Padding (in pixels) from viewport edge when scrolling popover into view */
157
- scrollIntoViewPadding: {
158
- type: Number,
159
- default: 20
29
+ labelClasses: {
30
+ type: [String, Array, Object, Function],
31
+ default: ""
160
32
  }
161
33
  },
162
- emits: ["create:callback", "create:todo", "refresh:pms", "show:toast", "toggle"],
163
- setup(o, { emit: h }) {
164
- const { t: c } = vt(), l = i(null), ie = i(!1), ue = i("left"), X = i([
165
- {
166
- id: 1,
167
- label: c("HC_DEPARTMENT")
168
- },
169
- {
170
- id: 2,
171
- label: c("HC_PERSON")
172
- },
173
- {
174
- id: 0,
175
- label: c("HC_ANYONE")
176
- }
177
- ]), b = i(""), p = i({
178
- checkInDate: /* @__PURE__ */ new Date(),
179
- checkOutDate: /* @__PURE__ */ new Date(),
180
- guestEmail: "",
181
- guestLoyalty: "",
182
- guestMood: null,
183
- guestName: "",
184
- guestPhone: "",
185
- inHouse: !!l.value?.tokenId || !1,
186
- problem: null,
187
- notes: "",
188
- tokenId: l.value?.tokenId
189
- }), G = i(250), U = i(290), M = i([]), we = i([]), Z = i(!0), ee = i(!0), N = i({
190
- info: !0,
191
- tickets: !0,
192
- comments: !0
193
- }), te = i(!0), be = i(o.guestDetails), O = i([]), y = i({
194
- actionItems: !1,
195
- conversationToggle: !1,
196
- messages: !1,
197
- pms: !1,
198
- roomNotices: !1,
199
- sendingMessage: !1,
200
- tickets: !1
201
- }), C = i([]), ce = i([]), de = i("bottom"), R = i(null), H = i(!1), W = i(!1), j = i(""), me = i(!1), A = i(!1), k = i(null), Q = i(null), Ce = 3e4, d = i({
202
- assignType: null,
203
- department: null,
204
- due: /* @__PURE__ */ new Date(),
205
- item: null,
206
- notes: "",
207
- person: null,
208
- requestedBy: null,
209
- when: null,
210
- where: null
211
- }), $ = i([
212
- {
213
- id: 0,
214
- label: c("HC_STAFF_MEMBER")
215
- },
216
- {
217
- id: 1,
218
- label: c("HC_HOTEL_GUEST")
219
- }
220
- ]), ve = i(!1), E = i(null), I = i({
221
- endDate: /* @__PURE__ */ new Date(),
222
- issue: null,
223
- notes: "",
224
- startDate: /* @__PURE__ */ new Date()
225
- }), ae = i([]), se = i(!1), S = i([]), L = i([]), Me = i([
226
- {
227
- label: c("HC_COMPLAINT"),
228
- id: "complaint"
229
- },
230
- {
231
- label: c("HC_REQUEST"),
232
- id: "request"
233
- },
234
- {
235
- label: c("HC_ROOM_NOTICE"),
236
- id: "room_notice"
237
- },
238
- {
239
- label: c("HC_WORK_ORDER"),
240
- id: "work_order"
241
- }
242
- ]), J = i(), P = i(null), v = i({
243
- assignType: null,
244
- department: null,
245
- due: /* @__PURE__ */ new Date(),
246
- item: null,
247
- issue: null,
248
- notes: "",
249
- person: null,
250
- requestedBy: null
251
- }), pe = i([]), q = i([]), x = i([]), Ne = _(() => {
252
- switch (l.value.cleaning?.name || l.value.cleaningStatus) {
253
- case "CLEAN":
254
- case "INSPECTED":
255
- return "CLEAN";
256
- case "DIRTY":
257
- case "PICKUP":
258
- case "OUT OF ORDER":
259
- case "OUT OF SERVICE":
260
- return "DIRTY";
261
- default:
262
- return "";
263
- }
264
- }), Re = _(() => {
265
- const e = b.value.toLowerCase();
266
- return o.quickReplies.filter((t) => t.toLowerCase().match(e));
267
- }), He = _(() => {
268
- if (!C.value.length) return [];
269
- const e = [];
270
- let t = null;
271
- return C.value.forEach((a) => {
272
- const s = w.fromFormat(
273
- a.dateUtc,
274
- "yyyy-MM-dd HH:mm:ss",
275
- { zone: "utc" }
276
- ).setZone(o.propertyTimeZone), n = s.toFormat("yyyy-MM-dd-HH");
277
- n !== t && (e.push({
278
- type: "separator",
279
- label: s.toFormat("ccc, LLL d 'at' h:mma").replace("AM", "am").replace("PM", "pm"),
280
- hourKey: n
281
- }), t = n), e.push({
282
- type: "message",
283
- ...a,
284
- formattedTime: s.toFormat("h:mma").replace("AM", "am").replace("PM", "pm")
285
- });
286
- }), e;
287
- }), Ie = _(() => S.value.length ? !!S.value.find(
288
- (t) => t.type === "complaint"
289
- ) : !1), Le = _(() => S.value.length ? !!S.value.find(
290
- (t) => t.type === "callback"
291
- ) : !1), Pe = _(() => {
292
- let e = [];
293
- return O.value[0] && O.value[0].options === void 0 ? O.value.forEach((t) => {
294
- e.push({
295
- id: parseInt(t.id),
296
- label: t.display_name
297
- });
298
- }) : e = O.value, e;
299
- }), De = _(() => l.value.occupancy?.name === "OCCUPIED" || l.value.occupancyStatus === "OCCUPIED"), qe = _(() => De.value && Ie.value ? "HK_ROOM_STATUS_Occupied_Complaint" : "HK_ROOM_STATUS_Occupied"), xe = _(() => {
300
- switch (E.value?.id) {
301
- case "request":
302
- case "work_order":
303
- return X.value[0];
304
- default:
305
- return null;
306
- }
307
- }), Fe = _(() => {
308
- if (M.value)
309
- switch (E.value?.id) {
310
- case "request":
311
- return M.value.find((e) => parseInt(e.id) === 4);
312
- case "work_order":
313
- return M.value.find((e) => parseInt(e.id) === 2);
314
- default:
315
- return null;
316
- }
317
- return null;
318
- }), Be = _(() => {
319
- switch (E.value?.id) {
320
- case "request":
321
- return $.value[1];
322
- case "work_order":
323
- return $.value[0];
324
- default:
325
- return null;
326
- }
327
- }), Ge = _(() => {
328
- let e = "";
329
- if (l.value && l.value.reservations[0]) {
330
- const t = w.fromISO(
331
- l.value.reservations[0].arrivalDate
332
- ), a = t.toFormat("MMM"), s = t.day, n = t.year, r = w.fromISO(
333
- l.value.reservations[0].departureDate
334
- ), u = r.toFormat("MMM"), m = r.day, f = r.year;
335
- e += a + " " + s, n !== f && (e += ", " + n), a === u ? e += "-" + m : e += " - " + u + " " + m, e += ", " + f;
336
- }
337
- return e;
338
- }), Ue = _(() => {
339
- let e = ae.value;
340
- return e = [...new Set(e)], e;
341
- }), We = _(() => {
342
- const e = E.value?.id;
343
- if (!e)
344
- return !1;
345
- switch (e) {
346
- case "room_notice":
347
- return I.value.issue && I.value.startDate && I.value.endDate;
348
- case "complaint":
349
- return p.value.problem && p.value.guestName && p.value.guestMood;
350
- case "work_order":
351
- return v.value.item && v.value.issue && v.value.requestedBy && v.value.due && (v.value.assignType && v.value.assignType.id === 0 || v.value.assignType && v.value.assignType.id === 1 && v.value.department || v.value.assignType && v.value.assignType.id === 2 && v.value.person);
352
- case "request":
353
- return d.value.item && d.value.requestedBy && d.value.due && (d.value.assignType && d.value.assignType.id === 0 || d.value.assignType && d.value.assignType.id === 1 && d.value.department || d.value.assignType && d.value.assignType.id === 2 && d.value.person);
354
- default:
355
- return !1;
356
- }
357
- }), Te = () => {
358
- se.value = !1, H.value = !1, ie.value = !1, ve.value = !1, O.value = [], ce.value = [], pe.value = [], q.value = [], x.value = [], E.value = null, I.value.issue = null, I.value.startDate = /* @__PURE__ */ new Date(), I.value.endDate = /* @__PURE__ */ new Date(), I.value.notes = "", p.value.guestName = "", p.value.guestEmail = "", p.value.guestPhone = "", p.value.guestMood = null, p.value.guestLoyalty = "", p.value.problem = null, p.value.checkInDate = /* @__PURE__ */ new Date(), p.value.checkOutDate = /* @__PURE__ */ new Date(), p.value.notes = "", v.value.assignType = null, v.value.department = null, v.value.person = null, v.value.due = /* @__PURE__ */ new Date(), v.value.item = null, v.value.issue = null, v.value.notes = "", d.value.assignType = null, d.value.department = null, d.value.person = null, d.value.due = /* @__PURE__ */ new Date(), d.value.item = null, d.value.notes = "", d.value.when = null, d.value.where = null;
359
- }, je = async () => {
360
- h("create:callback", l.value), h("toggle", !1);
361
- }, F = (e) => {
362
- const t = [];
363
- (Array.isArray(e) ? e : Object.values(e)).forEach((s) => {
364
- const n = s.senderType || s.sender_type, r = s.senderName || "", u = s.senderId || s.sender_id, m = s.profileImg || s.profile_img, f = r ? r.split(" ") : ["", ""], g = s.user_first_name || s.guest_first_name || f[0] || "", z = s.user_last_name || s.guest_last_name || f.slice(1).join(" ") || "", re = g && z ? `${g} ${z}` : g || "Auto-Reply", le = n === "system" || n === "user", D = n === "guest";
365
- let T = {
366
- id: s.id,
367
- isPropertyEmployee: n === "user",
368
- isSent: !!s.sent,
369
- isSystemMessage: n === "system",
370
- isStaffMessage: le,
371
- isGuestMessage: D,
372
- comment: s.content,
373
- dateUtc: s.sent || s.created,
374
- user: {
375
- firstName: g || "Auto-Reply",
376
- icon: "",
377
- id: u || "system-message",
378
- initials: "",
379
- lastName: z || "",
380
- name: re,
381
- src: m || ""
382
- }
383
- };
384
- T.user.firstName && T.user.lastName ? T.user.initials = T.user.firstName[0] + T.user.lastName[0] : T.user.firstName && (T.user.initials = T.user.firstName[0]), le && (T.user.icon = "property-fill"), t.push(T);
385
- }), C.value = t;
386
- }, Qe = (e) => {
387
- if (!e || e.length === 0) return;
388
- (Array.isArray(e) ? e : Object.values(e)).forEach((a) => {
389
- if (C.value.some((T) => T.id === a.id))
34
+ emits: ["update:model-value", "change"],
35
+ setup(t, { emit: n }) {
36
+ const r = g(() => t.modelValue), f = (e) => {
37
+ const l = e.target;
38
+ if (l) {
39
+ const d = l.value, i = t.options.find(
40
+ (a) => String(a.value) === d
41
+ ), u = i ? i.value : d;
42
+ if (o(u)) {
43
+ let a;
44
+ Array.isArray(t.modelValue) ? a = [] : a = "", n("update:model-value", a), n("change", null);
390
45
  return;
391
- const s = a.senderType || a.sender_type, n = a.senderName || "", r = a.senderId || a.sender_id, u = a.profileImg || a.profile_img, m = n ? n.split(" ") : ["", ""], f = a.user_first_name || a.guest_first_name || m[0] || "", g = a.user_last_name || a.guest_last_name || m.slice(1).join(" ") || "", z = f && g ? `${f} ${g}` : f || "Auto-Reply", re = s === "system" || s === "user", le = s === "guest";
392
- let D = {
393
- id: a.id,
394
- isPropertyEmployee: s === "user",
395
- isSent: !!a.sent,
396
- isSystemMessage: s === "system",
397
- isStaffMessage: re,
398
- isGuestMessage: le,
399
- comment: a.content,
400
- dateUtc: a.sent || a.created,
401
- user: {
402
- firstName: f || "Auto-Reply",
403
- icon: "",
404
- id: r || "system-message",
405
- initials: "",
406
- lastName: g || "",
407
- name: z,
408
- src: u || ""
409
- }
410
- };
411
- D.user.firstName && D.user.lastName ? D.user.initials = D.user.firstName[0] + D.user.lastName[0] : D.user.firstName && (D.user.initials = D.user.firstName[0]), re && (D.user.icon = "property-fill"), C.value.push(D);
412
- });
413
- }, fe = async (e = !1) => {
414
- if (o.showComments && l.value.tokenId) {
415
- e || (y.value.messages = !0);
416
- try {
417
- let t = `/api/client/connect/getMessages.php?tokenId=${l.value.tokenId}`;
418
- e && k.value !== null && (t += `&lastMsgId=${k.value}`);
419
- const s = await (await fetch(t, {
420
- method: "GET",
421
- credentials: "include"
422
- })).json();
423
- if (s.status === "error")
424
- throw new Error(s.message || "Failed to get messages");
425
- if (A.value = !s.closed, s.messages && s.messages.length > 0) {
426
- k.value = s.messages[s.messages.length - 1].id, e ? Qe(s.messages) : F(s.messages);
427
- const n = setTimeout(Y, 100);
428
- L.value.push(n);
429
- } else e || F(s.messages || []);
430
- } catch (t) {
431
- console.error("getChatMessages error:", t);
432
- } finally {
433
- e || (y.value.messages = !1);
434
- }
435
- }
436
- }, $e = (e) => {
437
- const t = w.utc(), a = w.fromFormat(e, "yyyy-MM-dd HH:mm:ss", { zone: "utc" }), s = t.diff(
438
- a,
439
- [
440
- "years",
441
- "months",
442
- "days",
443
- "hours",
444
- "minutes"
445
- ]
446
- ), n = Math.floor(s.years), r = Math.floor(s.months), u = Math.floor(s.days), m = Math.floor(s.hours), f = Math.floor(s.minutes);
447
- if (n)
448
- return n === 1 ? c("HC_ONE_YEAR_AGO") : c("HC_X_YEARS_AGO", { years: n });
449
- if (r)
450
- return r === 1 ? c("HC_ONE_MONTH_AGO") : c("HC_X_MONTHS_AGO", { months: r });
451
- if (u)
452
- return u === 1 ? c("HC_ONE_DAY_AGO") : c("HC_X_DAYS_AGO", { days: u });
453
- if (m)
454
- return m === 1 ? c("HC_ONE_HOUR_AGO") : c("HC_X_HOURS_AGO", { hours: m });
455
- if (f)
456
- return f === 1 ? c("HC_ONE_MINUTE_AGO") : c("HC_X_MINUTES_AGO", { minutes: f });
457
- if (f === 0)
458
- return c("HC_A_MOMENT_AGO");
459
- }, Je = async () => {
460
- o.showGuestDetails && oe(), ne(), V(), h("refresh:pms", l.value);
461
- }, oe = async () => {
462
- try {
463
- y.value.pms = !0;
464
- const e = new AbortController(), t = setTimeout(() => e.abort(), 45e3);
465
- L.value.push(t);
466
- const a = o.pmsBaseUrl;
467
- if (!a)
468
- throw new Error("PMS base URL is required");
469
- const s = {
470
- Authorization: "Bearer " + (() => {
471
- const g = `; ${document.cookie}`.split("; QV2Auth=");
472
- return g.length === 2 && g.pop()?.split(";").shift() || "";
473
- })(),
474
- "Content-Type": "application/json"
475
- }, n = l.value?.qv2Rooms?.qRoomId || l.value?.id || o.room.id, r = await fetch(
476
- `${a}/vendors/properties/statuses/${o.propertyId}/rooms`,
477
- {
478
- method: "POST",
479
- headers: s,
480
- signal: e.signal,
481
- body: JSON.stringify({ roomsIds: [n] })
482
- }
483
- );
484
- clearTimeout(t), r.ok || ke(r);
485
- const u = await r.json(), m = u.data?.pmsRooms || u.data?.rooms || u.rooms || [];
486
- R.value = m, m.length > 0 ? l.value = {
487
- ...m[0],
488
- tokenId: m[0].tokenId || o.room.tokenId
489
- } : l.value = o.room, y.value.pms = !1;
490
- } catch (e) {
491
- return y.value.pms = !1, h("show:toast", {
492
- show: !0,
493
- message: c("HC_FAILED_TO_LOAD_PMS_DATA"),
494
- variant: "error",
495
- icon: "exclamation-circle"
496
- }), e;
497
- }
498
- }, ne = async () => {
499
- try {
500
- y.value.roomNotices = !0;
501
- const e = await fetch(
502
- "/api/client/common/getRoomNotices.php?propertyId=" + o.propertyId + "&roomIds=[" + o.room.id + "]"
503
- );
504
- if (!e.ok)
505
- throw new Error(`HTTP error! status: ${e.status}`);
506
- const t = await e.json();
507
- ae.value = t.notices;
508
- } catch (e) {
509
- console.error("Error getting room notices:", e), ae.value = [], h("show:toast", {
510
- show: !0,
511
- message: c("HC_FAILED_TO_LOAD_ROOM_NOTICES"),
512
- variant: "error",
513
- icon: "exclamation-circle"
514
- });
515
- } finally {
516
- y.value.roomNotices = !1;
517
- }
518
- }, he = async () => {
519
- try {
520
- const e = new FormData();
521
- e.append("property_id", o.propertyId), e.append("filter", "tasks_new");
522
- const [t, a] = await Promise.all([
523
- fetch("/api/client/common/getDepartments.php", {
524
- method: "POST"
525
- }),
526
- fetch("/api/client/common/getDepartmentUsersByPropertyId.php", {
527
- method: "POST",
528
- body: e
529
- })
530
- ]), s = await t.json(), n = await a.json();
531
- if (s.departments && (s.departments.forEach((r) => {
532
- r.label = r.display_name;
533
- }), M.value = s.departments), n.users) {
534
- const r = [];
535
- let u = {
536
- group: "",
537
- options: []
538
- };
539
- n.users.forEach((m) => {
540
- m.translated_department !== u.group && (u.group && r.push({ ...u }), u.group = m.translated_department, u.options = []), u.options.push(m);
541
- }), u.group && r.push({ ...u }), we.value = r;
542
46
  }
543
- } catch (e) {
544
- console.error("Error getting shared data:", e), h("show:toast", {
545
- show: !0,
546
- message: c("HC_FAILED_TO_LOAD_SHARED_DATA"),
547
- variant: "error",
548
- icon: "exclamation-circle"
549
- });
550
- }
551
- }, Oe = async () => {
552
- try {
553
- const t = await (await fetch(
554
- `/api/client/connect/getStayDetails.php?tokenId=${l.value.tokenId}`,
555
- {
556
- method: "GET",
557
- credentials: "include"
558
- }
559
- )).json();
560
- if (t.status === "error")
561
- throw new Error(t.message || "Failed to get stay details");
562
- t.userName && (p.value.guestName = t.userName), t.cellPhone && (p.value.guestPhone = t.cellPhone), t.email && (p.value.guestEmail = t.email), t.checkIn && (p.value.checkInDate = w.fromISO(
563
- t.checkIn
564
- ).toJSDate()), t.checkOut && (p.value.checkOutDate = w.fromISO(
565
- t.checkOut
566
- ).toJSDate());
567
- } catch (e) {
568
- console.error("getStayDetails error:", e), h("show:toast", {
569
- show: !0,
570
- message: c("HC_FAILED_TO_LOAD_STAY_DETAILS"),
571
- variant: "error",
572
- icon: "exclamation-circle"
573
- });
574
- }
575
- }, Ve = (e) => {
576
- switch (e) {
577
- case "complaint":
578
- return "red-30";
579
- case "hk_request":
580
- return "maroon-30";
581
- case "callback":
582
- return "teal-10";
583
- case "workorder":
584
- return "orange-20";
585
- case "task":
586
- return "green-20";
587
- }
588
- }, Ye = (e) => {
589
- switch (e) {
590
- case "complaint":
591
- return "face-frown";
592
- case "hk_request":
593
- return "concierge-bell";
594
- case "callback":
595
- return "phone";
596
- case "workorder":
597
- return "hammer";
598
- case "task":
599
- return "check";
600
- }
601
- }, V = async () => {
602
- try {
603
- y.value.tickets = !0;
604
- const e = await fetch(
605
- "/api/client/common/getAllToDos.php?propertyId=" + o.propertyId + "&roomIds=[" + o.room.id + "]"
47
+ const c = t.options.find(
48
+ (a) => a.value === u
606
49
  );
607
- if (!e.ok)
608
- throw new Error(`HTTP error! status: ${e.status}`);
609
- const t = await e.json();
610
- S.value = t.tickets;
611
- } catch (e) {
612
- console.error("Error getting tickets:", e), S.value = [], h("show:toast", {
613
- show: !0,
614
- message: c("HC_FAILED_TO_LOAD_TICKETS"),
615
- variant: "error",
616
- icon: "exclamation-circle"
617
- });
618
- } finally {
619
- y.value.tickets = !1;
620
- }
621
- }, ke = async (e) => {
622
- const t = await e.text();
623
- let a;
624
- try {
625
- a = JSON.parse(t).response;
626
- } catch {
627
- a = { code: e.status, message: t };
628
- }
629
- return a.code === 401 ? (window.location.href = "/logout.php?unauthorized=1", { error: a }) : a;
630
- }, ze = (e) => {
631
- const t = document.querySelectorAll(".pulse");
632
- if (t && t.length) {
633
- const a = l.value?.qv2Rooms?.qRoomId || l.value?.id || o.room?.id, s = document.getElementById("room-" + a), n = s?.classList;
634
- switch (e) {
635
- case "room_notice":
636
- (n?.contains("roombox_unsel") || n?.contains("roombox_unsel_active")) && (s?.classList.remove(), s?.classList.add("roomnoticeroombox_sel"));
637
- break;
638
- case "complaint":
639
- !n?.contains("smsroombox_sel") && !n?.contains("callbackroombox_sel") && (s?.classList.remove(), s?.classList.add("complaintsroombox_sel"));
640
- break;
641
- case "request":
642
- !n?.contains("smsroombox_sel") && !n?.contains("callbackroombox_sel") && !n?.contains("complaintsroombox_sel") && (s?.classList.remove(), s?.classList.add("guestrequestroombox_sel"));
643
- break;
644
- case "work_order":
645
- !n?.contains("smsroombox_sel") && !n?.contains("callbackroombox_sel") && !n?.contains("complaintsroombox_sel") && !n?.contains("guestrequestroombox_sel") && (s?.classList.remove(), s?.classList.add("workordersroombox_sel"));
646
- break;
647
- }
648
- const r = setTimeout(() => {
649
- t.forEach((u) => {
650
- u.classList.remove("pulse");
651
- });
652
- }, 4500);
653
- L.value.push(r);
654
- }
655
- }, Ke = () => {
656
- window.open("/guest/overview.php", "_blank");
657
- }, Xe = (e) => {
658
- let t = "";
659
- switch (e.type) {
660
- case "complaint":
661
- t = `/complaints/complaints_view.php?id=${e.id}`;
662
- break;
663
- case "request":
664
- t = `/tasks/hk_request.php?id=${e.id}`;
665
- break;
666
- case "satisfaction-call":
667
- t = `/tasks/task_callback.php?id=${e.id}`;
668
- break;
669
- case "work-order":
670
- t = `/tasks/workorder.php?id=${e.id}`;
671
- break;
672
- case "task":
673
- t = `/tasks/task.php?id=${e.id}`;
674
- break;
675
- default:
676
- return "#";
677
- }
678
- window.open(t, "_blank");
679
- }, Ze = async () => {
680
- ve.value = !0;
681
- const e = l.value?.qv2Rooms?.qRoomId || l.value?.id || o.room?.id, t = l.value?.qv2Rooms?.qRoomName || l.value?.name || o.room?.name, a = {
682
- type: E.value?.id,
683
- propertyId: o.propertyId,
684
- userId: P.value,
685
- areaId: e,
686
- areaName: t
687
- };
688
- switch (E.value?.id) {
689
- case "complaint":
690
- a.tokenId = l.value.tokenId, a.problemId = p.value.problem.id, a.guestName = p.value.guestName, a.guestPhone = p.value.guestPhone, a.guestEmail = p.value.guestEmail, a.guestLoyalty = p.value.guestLoyalty, a.guestMood = p.value.guestMood.id, a.checkInDate = w.fromJSDate(p.value.checkInDate).toFormat(
691
- "yyyy-MM-dd"
692
- ), a.checkOutDate = w.fromJSDate(p.value.checkOutDate).toFormat(
693
- "yyyy-MM-dd"
694
- ), a.notes = p.value.notes, a.inHouse = 2, a.source = "dashboard", h("create:todo", a);
695
- break;
696
- case "request":
697
- a.itemId = d.value.item.id, a.assignType = d.value.assignType.id, a.occupied = d.value.requestedBy.id, a.notes = d.value.notes, a.dueDate = w.fromJSDate(d.value.due).toFormat("yyyy-MM-dd"), d.value.assignType.id === 1 && (a.department = d.value.department.id), d.value.assignType.id === 2 && (a.person = d.value.person.id), o.allowWhenWhere && (a.requestWhen = d.value.when ? d.value.when.id : "", a.requestWhere = d.value.where ? d.value.where.id : ""), h("create:todo", a);
698
- break;
699
- case "room_notice":
700
- a.issueId = I.value.issue.id, a.startDate = w.fromJSDate(I.value.startDate).toFormat("yyyy-MM-dd"), a.endDate = w.fromJSDate(I.value.endDate).toFormat("yyyy-MM-dd"), a.notes = I.value.notes, a.sendPush = "1", h("create:todo", a);
701
- break;
702
- case "work_order":
703
- a.itemId = v.value.item.id, a.issueId = v.value.issue.id, a.assignType = v.value.assignType.id, a.occupied = v.value.requestedBy.id, a.notes = v.value.notes, a.dueDate = w.fromJSDate(v.value.due).toFormat("yyyy-MM-dd"), v.value.assignType.id === 1 && (a.department = v.value.department.id), v.value.assignType.id === 2 && (a.person = v.value.person.id), h("create:todo", a);
704
- break;
705
- }
706
- }, et = (e) => {
707
- ge(), _e(), o.hover && h("toggle", e);
708
- }, tt = (e) => {
709
- Se(), b.value = e;
710
- }, at = async (e) => {
711
- if (console.log("selected:", e), E.value = e, O.value = [], I.value.issue = null, p.value.problem = null, v.value.item = null, v.value.issue = null, d.value.item = null, !E.value) {
712
- y.value.actionItems = !1;
713
- return;
714
- }
715
- y.value.actionItems = !0;
716
- const t = l.value?.qv2Rooms?.qRoomId || l.value?.id || o.room?.id, a = new FormData();
717
- switch (a.append("property_id", o.propertyId), a.append("area_id", t), e.id) {
718
- case "complaint":
719
- try {
720
- l.value.tokenId && await Oe();
721
- const n = await (await fetch("/api/client/common/getComplaintProblemsByPropertyId.php", {
722
- method: "POST",
723
- body: a
724
- })).json();
725
- n.items && (O.value = n.items);
726
- const r = await K.post(
727
- "/api/client/common/getComplaintMoods.php"
728
- );
729
- r.data.items.forEach((u) => {
730
- u.label = u.display_name;
731
- }), ce.value = r.data.items;
732
- } catch (s) {
733
- console.error("Error loading complaint options:", s), h("show:toast", {
734
- show: !0,
735
- message: c("HC_FAILED_TO_LOAD_COMPLAINT_OPTIONS"),
736
- variant: "error",
737
- icon: "exclamation-circle"
738
- });
739
- } finally {
740
- y.value.actionItems = !1;
741
- }
742
- break;
743
- case "room_notice":
744
- try {
745
- const n = await (await fetch("/api/client/common/getRoomNoticeIssuesByPropertyId.php", {
746
- method: "POST",
747
- body: a
748
- })).json();
749
- n.items && (O.value = n.items);
750
- } catch (s) {
751
- console.error("Error loading room notice options:", s), h("show:toast", {
752
- show: !0,
753
- message: c("HC_FAILED_TO_LOAD_ROOM_NOTICE_OPTIONS"),
754
- variant: "error",
755
- icon: "exclamation-circle"
756
- });
757
- } finally {
758
- y.value.actionItems = !1;
759
- }
760
- break;
761
- case "request":
762
- try {
763
- d.value.requestedBy = $.value[1], d.value.assignType = X.value[0];
764
- const n = await (await fetch("/api/client/common/getHousekeepingItemsByPropertyId.php", {
765
- method: "POST",
766
- body: a
767
- })).json();
768
- if (n.items && (O.value = n.items), await he(), d.value.department = M.value.find(
769
- (r) => parseInt(r.id) === 4
770
- ), o.allowWhenWhere)
771
- try {
772
- const r = new FormData();
773
- r.append("property_id", o.propertyId);
774
- const m = await (await fetch(
775
- "/api/client/common/getWhenWhereOptions.php",
776
- {
777
- method: "POST",
778
- body: r
779
- }
780
- )).json();
781
- m.when && Array.isArray(m.when) ? q.value = m.when.map((f) => ({
782
- id: f.id,
783
- label: f.name,
784
- value: f.id
785
- })) : q.value = [], m.where && Array.isArray(m.where) ? x.value = m.where.map((f) => ({
786
- id: f.id,
787
- label: f.name,
788
- value: f.id
789
- })) : x.value = [];
790
- } catch (r) {
791
- console.error("Error loading When/Where options:", r), q.value = [], x.value = [], h("show:toast", {
792
- show: !0,
793
- message: c("HC_FAILED_TO_LOAD_WHEN_WHERE_OPTIONS"),
794
- variant: "error",
795
- icon: "exclamation-circle"
796
- });
797
- }
798
- } catch (s) {
799
- console.error("Error loading request options:", s), h("show:toast", {
800
- show: !0,
801
- message: c("HC_FAILED_TO_LOAD_REQUEST_OPTIONS"),
802
- variant: "error",
803
- icon: "exclamation-circle"
804
- });
805
- } finally {
806
- y.value.actionItems = !1;
807
- }
808
- break;
809
- case "work_order":
810
- try {
811
- v.value.requestedBy = $.value[0], v.value.assignType = X.value[0];
812
- const n = await (await fetch("/api/client/common/getItemsByRoomId.php", {
813
- method: "POST",
814
- body: a
815
- })).json(), r = [];
816
- let u = {
817
- group: "",
818
- options: []
819
- };
820
- n.items && (n.items.forEach((m) => {
821
- m.section_name !== u.group && (u.group && r.push({ ...u }), u.group = m.section_name, u.options = []), m.label && u.options.push(m);
822
- }), u.group && r.push({ ...u })), O.value = r, await Promise.all([
823
- K.post(
824
- "/api/client/common/getWorkOrderIssues.php"
825
- ),
826
- he()
827
- ]).then((m) => {
828
- const f = m[0];
829
- f.data.issues.forEach((g) => {
830
- g.label = g.display_name;
831
- }), pe.value = f.data.issues;
832
- }), v.value.department = M.value.find(
833
- (m) => parseInt(m.id) === 2
834
- );
835
- } catch (s) {
836
- console.error("Error loading work order options:", s), h("show:toast", {
837
- show: !0,
838
- message: c("HC_FAILED_TO_LOAD_WORK_ORDER_OPTIONS"),
839
- variant: "error",
840
- icon: "exclamation-circle"
841
- });
842
- } finally {
843
- y.value.actionItems = !1;
844
- }
845
- break;
846
- default:
847
- y.value.actionItems = !1;
848
- return;
849
- }
850
- }, st = () => {
851
- se.value = !se.value, ie.value = !1;
852
- }, Ee = () => {
853
- const e = document.getElementById("comment-field"), t = document.getElementById("hidden-text");
854
- e.style.height = t?.offsetHeight + "px";
855
- }, Y = () => {
856
- const e = document.getElementById("comments-container");
857
- e?.scroll({
858
- top: e.scrollHeight,
859
- behavior: "smooth"
860
- });
861
- }, ot = async (e) => {
862
- if (e && e.type === "keydown" && e.preventDefault(), l.value.tokenId && b.value && !H.value) {
863
- y.value.sendingMessage = !0;
864
- try {
865
- const t = new FormData();
866
- t.append("tokenId", l.value.tokenId), t.append("content", b.value), t.append("senderId", P.value || "");
867
- const a = await K.post(
868
- "/api/client/connect/sendMessage.php",
869
- t
870
- );
871
- if (a.data.status === "error") {
872
- h("show:toast", {
873
- show: !0,
874
- message: c("HC_FAILED_TO_SEND_MESSAGE"),
875
- variant: "error",
876
- icon: "exclamation-circle"
877
- });
878
- return;
879
- }
880
- b.value = "", A.value = !a.data.closed, a.data.messages && (F(a.data.messages), a.data.messages.length > 0 && (k.value = a.data.messages[a.data.messages.length - 1].id)), Y();
881
- } catch (t) {
882
- console.error("sendChatMessage error:", t), h("show:toast", {
883
- show: !0,
884
- message: c("HC_FAILED_TO_SEND_MESSAGE"),
885
- variant: "error",
886
- icon: "exclamation-circle"
887
- });
888
- } finally {
889
- y.value.sendingMessage = !1;
890
- }
891
- }
892
- }, nt = async () => {
893
- if (!(!l.value.tokenId || !P.value)) {
894
- y.value.conversationToggle = !0;
895
- try {
896
- const e = A.value ? "/api/client/connect/closeConversation.php" : "/api/client/connect/openConversation.php", t = new FormData();
897
- t.append("tokenId", l.value.tokenId), t.append("userId", P.value), A.value && k.value !== null && t.append("lastMsgId", k.value.toString());
898
- const a = await K.post(e, t);
899
- if (a.data.status === "error") {
900
- h("show:toast", {
901
- show: !0,
902
- message: c("HC_FAILED_TO_UPDATE_CONVERSATION"),
903
- variant: "error",
904
- icon: "exclamation-circle"
905
- });
906
- return;
907
- }
908
- A.value = !a.data.closed, a.data.messages && (F(a.data.messages), a.data.messages.length > 0 && (k.value = a.data.messages[a.data.messages.length - 1].id)), h("show:toast", {
909
- show: !0,
910
- message: A.value ? c("HC_CONVERSATION_REOPENED") : c("HC_CONVERSATION_CLOSED"),
911
- variant: "success",
912
- icon: "check-circle"
913
- });
914
- } catch (e) {
915
- console.error("toggleMarkOpenClose error:", e), h("show:toast", {
916
- show: !0,
917
- message: c("HC_FAILED_TO_UPDATE_CONVERSATION"),
918
- variant: "error",
919
- icon: "exclamation-circle"
920
- });
921
- } finally {
922
- y.value.conversationToggle = !1;
923
- }
924
- }
925
- }, rt = async () => {
926
- if (o.isTestEnvironment && !(!l.value?.tokenId || !j.value.trim())) {
927
- me.value = !0;
928
- try {
929
- const e = new FormData();
930
- e.append("tokenId", l.value.tokenId), e.append("content", j.value.trim());
931
- const t = await K.post(
932
- "/api/client/connect/simulateInbound.php",
933
- e
934
- );
935
- if (t.data.status === "error") {
936
- h("show:toast", {
937
- show: !0,
938
- message: c("HC_FAILED_TO_SIMULATE_MESSAGE"),
939
- variant: "error",
940
- icon: "exclamation-circle"
941
- });
942
- return;
943
- }
944
- t.data.messages && (F(t.data.messages), A.value = !t.data.closed, t.data.messages.length > 0 && (k.value = t.data.messages[t.data.messages.length - 1].id)), j.value = "", W.value = !1, Y(), h("show:toast", {
945
- show: !0,
946
- message: c("HC_SIMULATED_GUEST_REPLY"),
947
- variant: "success",
948
- icon: "check-circle"
949
- });
950
- } catch (e) {
951
- console.error("simulateGuestReply error:", e), h("show:toast", {
952
- show: !0,
953
- message: c("HC_FAILED_TO_SIMULATE_MESSAGE"),
954
- variant: "error",
955
- icon: "exclamation-circle"
956
- });
957
- } finally {
958
- me.value = !1;
959
- }
960
- }
961
- }, lt = () => {
962
- W.value = !W.value, W.value || (j.value = "");
963
- }, it = () => {
964
- Q.value || (Q.value = setInterval(() => {
965
- document.visibilityState === "visible" && fe(!0);
966
- }, Ce));
967
- }, ye = () => {
968
- Q.value && (clearInterval(Q.value), Q.value = null);
969
- }, ge = () => {
970
- if (o.align === "left" || o.align === "right") {
971
- const e = J.value?.getBoundingClientRect().left, t = window.innerWidth;
972
- ue.value = t - e < U.value ? "right" : "left";
973
- } else {
974
- const e = J.value?.getBoundingClientRect().top, t = window.innerHeight;
975
- ue.value = t - e < G.value ? "bottom" : "top";
976
- }
977
- }, _e = () => {
978
- if (o.position === "top" || o.position === "bottom") {
979
- const e = J.value?.getBoundingClientRect().top, t = window.innerHeight;
980
- de.value = t - e < G.value ? "top" : "bottom";
981
- } else {
982
- const e = J.value?.getBoundingClientRect().left, t = window.innerWidth;
983
- de.value = t - e < U.value ? "left" : "right";
984
- }
985
- }, Se = () => {
986
- H.value = !H.value, H.value ? (b.value = "", N.value.info = ee.value, N.value.tickets = te.value, N.value.comments = Z.value, ee.value = !1, te.value = !1, document.getElementById("comment-field")?.focus()) : (ee.value = N.value.info, te.value = N.value.tickets, Z.value = N.value.comments);
987
- }, ut = async (e, t) => {
988
- const a = l.value?.qv2Rooms?.qRoomId || l.value?.id || o.room?.id, s = new FormData();
989
- if (s.append("property_id", o.propertyId), s.append("room_ids", JSON.stringify([a])), await V(), S.value) {
990
- const n = [];
991
- S.value.forEach((r) => {
992
- r.id === e && r.type === t ? n.unshift({
993
- ...r,
994
- isNew: !0
995
- }) : n.push({
996
- ...r,
997
- isNew: !1
998
- });
999
- }), n.sort((r, u) => r.id === e ? -1 : u.id === e ? 1 : 0), S.value = [...n];
1000
- }
1001
- };
1002
- B(() => o.open, () => {
1003
- if (o.open && o.showComments && C.value.length) {
1004
- const e = setTimeout(Y, 500);
1005
- L.value.push(e);
1006
- }
1007
- o.open || (Te(), ye(), k.value = null, C.value = [], A.value = !1);
1008
- }), B(
1009
- () => [o.open, o.showComments, Z.value, l.value?.tokenId],
1010
- ([e, t, a, s]) => {
1011
- e && t && a && s ? it() : ye();
1012
- }
1013
- ), B(b, () => {
1014
- const e = setTimeout(Ee, 100);
1015
- L.value.push(e);
1016
- }), B(() => o.allowWhenWhere, (e, t) => {
1017
- t === !0 && e === !1 && (d.value.when = null, d.value.where = null, q.value = [], x.value = []);
1018
- });
1019
- const Ae = () => !!(o.room.reservations || o.room.cleaning || o.room.occupancy);
1020
- return B(() => o.open, async (e, t) => {
1021
- e && !t && (Ae() ? (l.value = o.room, R.value = [o.room]) : o.showGuestDetails && !R.value ? await oe() : l.value || (l.value = o.room), V(), ne(), o.showComments && fe());
1022
- }), B(
1023
- () => o.room.id,
1024
- (e, t) => {
1025
- e !== t && (l.value = o.room, R.value = null, o.open && (Ae() ? R.value = [o.room] : o.showGuestDetails && oe(), V(), ne()));
1026
- }
1027
- ), dt(async () => {
1028
- const e = JSON.parse(
1029
- window.localStorage.getItem("authenticated")
1030
- );
1031
- P.value = e?.user?.id || window.userId || "", l.value = o.room, o.size === "sm" && (G.value = 140, U.value = 160), o.size === "lg" && (G.value = 250, U.value = 440), ge(), _e();
1032
- }), mt(() => {
1033
- L.value.forEach((e) => {
1034
- clearTimeout(e);
1035
- }), ye();
1036
- }), {
1037
- DateTime: w,
1038
- // Refs
1039
- actionMenuOpen: ie,
1040
- alignment: ue,
1041
- assignTypes: X,
1042
- comment: b,
1043
- complaint: p,
1044
- componentHeight: G,
1045
- componentWidth: U,
1046
- departments: M,
1047
- departmentUsers: we,
1048
- expandComments: Z,
1049
- expandGuestInfo: ee,
1050
- expandedStates: N,
1051
- expandTickets: te,
1052
- guestDetailsData: be,
1053
- itemOptions: O,
1054
- loading: y,
1055
- messages: C,
1056
- moodOptions: ce,
1057
- pmsData: R,
1058
- positioning: de,
1059
- quickReplyOpen: H,
1060
- request: d,
1061
- requestedByOptions: $,
1062
- requestLoading: ve,
1063
- requestType: E,
1064
- roomDetailsData: l,
1065
- roomNotice: I,
1066
- roomNotices: ae,
1067
- showCreateRequest: se,
1068
- ticketsList: S,
1069
- todoOptions: Me,
1070
- trigger: J,
1071
- userId: P,
1072
- workOrder: v,
1073
- workOrderIssues: pe,
1074
- whenOptions: q,
1075
- whereOptions: x,
1076
- // Guest Connect state
1077
- isConversationOpen: A,
1078
- lastMessageId: k,
1079
- // Simulate Guest Reply state (test environments only)
1080
- simulateOpen: W,
1081
- simulateContent: j,
1082
- simulateLoading: me,
1083
- // Computed
1084
- cleanliness: Ne,
1085
- filteredReplies: Re,
1086
- groupedMessages: He,
1087
- hasGuestCallback: Le,
1088
- hasComplaint: Ie,
1089
- itemOptionsList: Pe,
1090
- occupied: De,
1091
- occupancyTooltipContent: qe,
1092
- selectedAssignType: xe,
1093
- selectedDepartment: Fe,
1094
- selectedRequestedBy: Be,
1095
- stayDetails: Ge,
1096
- tagsList: Ue,
1097
- validateToDo: We,
1098
- // Methods
1099
- closeRequest: Te,
1100
- createCallback: je,
1101
- createMessageList: F,
1102
- getChatMessages: fe,
1103
- getHowLongAgo: $e,
1104
- getPMSData: oe,
1105
- getRoomNotices: ne,
1106
- getSharedData: he,
1107
- getStayDetails: Oe,
1108
- getTicketColor: Ve,
1109
- getTicketIcon: Ye,
1110
- getTickets: V,
1111
- handleFailedResponse: ke,
1112
- handlePulse: ze,
1113
- onClickEditConnectGuest: Ke,
1114
- onClickTicket: Xe,
1115
- onCreateRequestSubmit: Ze,
1116
- onHoverToggle: et,
1117
- onSelectQuickReply: tt,
1118
- onSelectToDo: at,
1119
- openRequest: st,
1120
- refreshPMSData: Je,
1121
- resizeTextarea: Ee,
1122
- scrollToConnectBottom: Y,
1123
- sendChatMessage: ot,
1124
- setAlignment: ge,
1125
- setPositioning: _e,
1126
- toggleMarkOpenClose: nt,
1127
- toggleQuickReply: Se,
1128
- updateTickets: ut,
1129
- // Simulate Guest Reply methods (test environments only)
1130
- simulateGuestReply: rt,
1131
- toggleSimulateOpen: lt
50
+ let s;
51
+ Array.isArray(t.modelValue) ? s = c ? [c] : [] : s = u, n("update:model-value", s), n("change", u);
52
+ }
53
+ }, o = (e) => Array.isArray(r.value) ? r.value.some((l) => typeof l == "object" && l !== null ? l.value === e : l === e) : r.value === e;
54
+ return {
55
+ selectedValue: r,
56
+ handleClick: f,
57
+ isSelected: o,
58
+ getOptionText: (e) => e.label || e.name || "",
59
+ getLabelClasses: (e, l) => typeof t.labelClasses == "function" ? t.labelClasses(e, l) : t.labelClasses
1132
60
  };
1133
61
  }
1134
62
  });
1135
63
  export {
1136
- Ft as default
64
+ C as default
1137
65
  };