@7365admin1/layer-common 3.2.1 → 3.2.2-staging.76

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 (55) hide show
  1. package/.changeset/camera-wall-gated-endpoint.md +47 -0
  2. package/.changeset/camera-wall-plain-english.md +60 -0
  3. package/.changeset/camera-wall-selection-and-guidance.md +65 -0
  4. package/.changeset/dark-primary-contrast.md +39 -0
  5. package/.changeset/dashboard-dark-theme-contrast.md +15 -0
  6. package/.changeset/service-provider-invitation-actions.md +28 -0
  7. package/components/CameraWall.vue +1034 -0
  8. package/components/CameraWallTile.vue +818 -0
  9. package/components/DashboardMain.vue +84 -88
  10. package/components/DashboardPanel.vue +1 -1
  11. package/components/EntryPassInformation.vue +4 -4
  12. package/components/FeedbackMain.vue +7 -7
  13. package/components/HidAccessLogDashboard.vue +119 -44
  14. package/components/HidCameraCaptureDialog.vue +199 -0
  15. package/components/HidIntercomManagement.vue +808 -201
  16. package/components/HidQrCodeConfiguration.vue +907 -95
  17. package/components/HidServiceSettingsPanel.vue +20 -1
  18. package/components/HidUserEnrollment.vue +392 -81
  19. package/components/Layout/NavigationDrawer.vue +43 -2
  20. package/components/NavigationItem.vue +9 -0
  21. package/components/Nfc/NFCPatrolRouteMain.vue +52 -7
  22. package/components/OnlineFormConfigurationForm.vue +620 -224
  23. package/components/OnlineFormFill.vue +36 -8
  24. package/components/OnlineFormsConfiguration.vue +6 -2
  25. package/components/QrTemplate/CreditCardLandscape.vue +19 -12
  26. package/components/QrTemplate/PrintDialog.vue +209 -196
  27. package/components/ServiceProviderInvitationPrompt.vue +150 -0
  28. package/components/ServiceProviderMain.vue +258 -14
  29. package/components/SiteSettings.vue +4 -2
  30. package/components/VisitorForm.vue +201 -78
  31. package/components/VisitorManagement.vue +2 -3
  32. package/components/VisitorSocketPopUp.vue +56 -2
  33. package/composables/useComment.ts +3 -3
  34. package/composables/useHidAmico.ts +127 -0
  35. package/composables/useHidNavigation.ts +0 -7
  36. package/composables/useLocalAuth.ts +9 -36
  37. package/composables/useOnlineFormPages.ts +2 -0
  38. package/composables/useServiceProviderInvitation.ts +145 -0
  39. package/composables/useSipWebPhone.ts +311 -0
  40. package/composables/useSiteSettings.ts +50 -0
  41. package/composables/useVisitorSocket.ts +26 -0
  42. package/composables/useWebUsb.ts +127 -37
  43. package/package.json +3 -1
  44. package/pages/[org]/[site]/access-mgmt/intercom/index.vue +1 -1
  45. package/plugins/secure-member.client.ts +21 -56
  46. package/plugins/vuetify.ts +37 -9
  47. package/test/visitor-socket.test.mjs +36 -0
  48. package/types/site.d.ts +71 -0
  49. package/utils/camera-wall.test.ts +571 -0
  50. package/utils/camera-wall.ts +926 -0
  51. package/utils/theme.test.ts +216 -0
  52. package/utils/theme.ts +163 -0
  53. package/components/HidIdentityMapping.vue +0 -975
  54. package/middleware/member.ts +0 -4
  55. package/pages/[org]/[site]/access-mgmt/identity-mapping/index.vue +0 -23
@@ -247,6 +247,40 @@
247
247
  {{ resolveText(block.text) }}
248
248
  </p>
249
249
 
250
+ <!-- ORDERED LIST -->
251
+ <div v-else-if="block.type === 'ordered-list'" class="mb-3">
252
+ <div
253
+ v-if="block.title"
254
+ class="text-body-2 font-weight-bold mb-1"
255
+ style="text-decoration: underline; text-underline-offset: 3px"
256
+ >{{ block.title }}</div>
257
+ <ol style="padding-left: 22px; margin: 0">
258
+ <li
259
+ v-for="(item, itemIdx) in block.items"
260
+ :key="itemIdx"
261
+ class="text-body-2 mb-1"
262
+ style="line-height: 1.55; color: #333"
263
+ >{{ item }}</li>
264
+ </ol>
265
+ </div>
266
+
267
+ <!-- UNORDERED LIST -->
268
+ <div v-else-if="block.type === 'unordered-list'" class="mb-3">
269
+ <div
270
+ v-if="block.title"
271
+ class="text-body-2 font-weight-bold mb-1"
272
+ style="text-decoration: underline; text-underline-offset: 3px"
273
+ >{{ block.title }}</div>
274
+ <ul style="padding-left: 22px; margin: 0">
275
+ <li
276
+ v-for="(item, itemIdx) in block.items"
277
+ :key="itemIdx"
278
+ class="text-body-2 mb-1"
279
+ style="line-height: 1.55; color: #333"
280
+ >{{ item }}</li>
281
+ </ul>
282
+ </div>
283
+
250
284
  <!-- DIVIDER -->
251
285
  <v-divider v-else-if="block.type === 'divider'" class="my-4" />
252
286
 
@@ -433,6 +467,7 @@ const props = defineProps({
433
467
  approvalMode: { type: Boolean, default: false },
434
468
  initialManagementValues: { type: Object as PropType<Record<string, string>>, default: () => ({}) },
435
469
  formType: { type: String, default: "" },
470
+ paymentAmount: { type: Number, default: 0 },
436
471
  /** Optional custom submit handler. Receives the collected form values.
437
472
  * If omitted the component submits to /api/online-forms automatically. */
438
473
  submitFn: {
@@ -596,15 +631,8 @@ const submissionStatusColor = computed(() => {
596
631
  }
597
632
  });
598
633
 
599
- const PAYMENT_REQUIRED_FORM_TYPES = new Set([
600
- "Application for Electronic Access Card",
601
- "Application for Booking of BBQ Pit",
602
- "Application for Moving In/Out & Delivery",
603
- "Application for Main Entrance RFID Transponder",
604
- ]);
605
-
606
634
  const requiresPayment = computed(() => {
607
- if (!PAYMENT_REQUIRED_FORM_TYPES.has(props.formType)) return false;
635
+ if (props.paymentAmount <= 0) return false;
608
636
  if (props.formType === "Application for Main Entrance RFID Transponder") {
609
637
  return !!(props.initialValues.reasonLost || props.initialValues.reasonDamaged);
610
638
  }
@@ -88,7 +88,7 @@
88
88
  >
89
89
 
90
90
  <!-- Create Dialog -->
91
- <v-dialog v-model="createDialog" width="450" persistent>
91
+ <v-dialog v-model="createDialog" width="720" persistent>
92
92
  <OnlineFormConfigurationForm
93
93
  mode="add"
94
94
  @cancel="createDialog = false"
@@ -97,7 +97,7 @@
97
97
  </v-dialog>
98
98
 
99
99
  <!-- Edit Dialog -->
100
- <v-dialog v-model="editDialog" width="450" persistent>
100
+ <v-dialog v-model="editDialog" width="720" persistent>
101
101
  <OnlineFormConfigurationForm
102
102
  mode="edit"
103
103
  @cancel="editDialog = false"
@@ -113,6 +113,7 @@
113
113
  :definition="selectedFormDefinition"
114
114
  :site-id="siteId"
115
115
  :org-id="orgId"
116
+ :payment-amount="selectedPaymentAmount"
116
117
  readonly
117
118
  @cancel="previewDialog = false"
118
119
  >
@@ -336,6 +337,9 @@ const selectedFormDefinition = ref<any>(null);
336
337
  const deleteLoading = ref(false);
337
338
  const confirmDialog = ref(false);
338
339
  const selectedOnlineFormId = ref<string | null>(null);
340
+ const selectedPaymentAmount = computed(() =>
341
+ Number(selectedOnlineForm.value?.fields?.paymentAmount ?? 0)
342
+ );
339
343
 
340
344
  function parseFieldsToInputs(fields: Record<string, string>): any[] {
341
345
  return Object.keys(fields)
@@ -33,7 +33,7 @@
33
33
 
34
34
  <qrcode-vue
35
35
  v-if="templateQrCode.CCFrontQREnabled"
36
- :value="`${prefix}0${+printRangeStart + +card.number - 1}`"
36
+ :value="getPassNumberValue(card.number)"
37
37
  :size="templateQrCode.CCFrontQRCodeSize"
38
38
  level="H"
39
39
  :style="{
@@ -53,9 +53,7 @@
53
53
  }"
54
54
  class="position-absolute text-center"
55
55
  >
56
- Pass Number: {{ prefix }}0{{
57
- +printRangeStart + +card.number - 1
58
- }}
56
+ Pass Number: {{ getPassNumberValue(card.number) }}
59
57
  </div>
60
58
  </v-card>
61
59
 
@@ -74,7 +72,7 @@
74
72
 
75
73
  <qrcode-vue
76
74
  v-if="templateQrCode.CCBackQREnabled"
77
- :value="`${prefix}0${+printRangeStart + +card.number - 1}`"
75
+ :value="getPassNumberValue(card.number)"
78
76
  :size="templateQrCode.CCBackQRCodeSize"
79
77
  level="H"
80
78
  :style="{
@@ -93,9 +91,7 @@
93
91
  }"
94
92
  class="position-absolute text-center"
95
93
  >
96
- Pass Number: {{ prefix }}0{{
97
- +printRangeStart + +card.number - 1
98
- }}
94
+ Pass Number: {{ getPassNumberValue(card.number) }}
99
95
  </div>
100
96
  </v-card>
101
97
  </v-col>
@@ -113,11 +109,22 @@ const props = defineProps({
113
109
  paginatedCardData: Array,
114
110
  templateQrCode: Object,
115
111
  prefix: String,
116
- printRangeStart: Number,
117
- });
118
- onMounted(() => {
119
- console.log("templateQrCode 11", props.templateQrCode.CCOrientation);
112
+ printRangeStart: [String, Number],
120
113
  });
114
+
115
+ const getPassNumberValue = (position) => {
116
+ const rawStartValue = `${props.printRangeStart ?? ""}`.trim();
117
+ const startMatch = rawStartValue.match(/(\d+)$/);
118
+ const startValue = startMatch?.[1] ?? "0";
119
+ const startNumber = Number(startValue);
120
+ const sequenceNumber = startNumber + Number(position) - 1;
121
+ const cleanPrefix = `${props.prefix ?? ""}`.replace(/\d+$/, "");
122
+ const width = startValue.length;
123
+ const formattedSequence =
124
+ width > 0 ? `${sequenceNumber}`.padStart(width, "0") : `${sequenceNumber}`;
125
+
126
+ return `${cleanPrefix}${formattedSequence}`;
127
+ };
121
128
  </script>
122
129
 
123
130
  <style scoped>