@7365admin1/layer-common 1.11.36 → 1.11.38

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.
@@ -37,10 +37,15 @@
37
37
  </v-dialog>
38
38
 
39
39
  <v-dialog v-model="dialog.createVehicle" v-if="vehicleType" width="450" persistent>
40
- <VehicleForm :type="vehicleType" mode="add" :vehicle-data="selectedVehicleObject" @back="handleBackToSelection"
40
+ <VehicleForm :type="vehicleType" :mode="mode" :vehicle-data="selectedVehicleObject" :plate-number-id="selectedPlateNumberId" @back="handleBackToSelection"
41
41
  @done="handleAddVehicleComplete" :org="org" :site="props.site" @close:all="handleCloseAll" />
42
42
  </v-dialog>
43
43
 
44
+ <v-dialog v-model="dialog.updateVehicle" v-if="vehicleType" width="450" persistent>
45
+ <VehicleForm :type="vehicleType" :mode="mode" :vehicle-data="selectedPlateNumberObject" :plate-number-id="selectedPlateNumberId" @back="handleBackToSelection"
46
+ @done="handleAddVehicleComplete" :org="org" :site="props.site" @close:all="handleCloseAll" @close="handleCloseAll" />
47
+ </v-dialog>
48
+
44
49
  <!-- <v-dialog v-model="dialog.updateVehicle" v-if="vehicleType" width="450" persistent>
45
50
  <VehicleForm :type="vehicleType" mode="edit" :vehicle-data="selectedVehicleObject"
46
51
  @back="dialog.updateVehicle = false" @close="dialog.updateVehicle = false" @done="handleUpdateVehicleComplete"
@@ -58,7 +63,7 @@
58
63
  <span class="d-flex ga-3 align-center"><strong>{{ label }}:</strong></span>
59
64
  <!-- <PlateNumberDisplay :plate-numbers="selectedVehicleObject[key]" show-all :default-value="selectedVehicleObject.plateNumber" /> -->
60
65
  <v-col cols="12">
61
- <v-card flat outlined class="pa-2" border="sm black">
66
+ <v-card flat outlined class="pa-2" border="sm black" :loading="loadingPlateNumberDetails">
62
67
  <v-data-table :items="selectedVehicleObject[key]" :headers="plateHeaders" hide-default-footer>
63
68
  <template #item.status="{ value }">
64
69
  <v-chip :color="formatVehicleStatus(value).color" size="x-small" dark>
@@ -66,22 +71,33 @@
66
71
  </v-chip>
67
72
  </template>
68
73
  <template #item.action="{ item: plateNumberItem, value }">
69
- <v-btn v-if="canDeleteVehicle && (plateNumberItem as TPlateNumber)?.status == 'active'"
70
- text="Delete" color="error" flat size="x-small"
71
- @click="handleDeleteVehicleAction(plateNumberItem as TPlateNumber)" />
72
- <v-btn
73
- v-if="props.app === 'property_management_agency' && (plateNumberItem as TPlateNumber)?.status == 'pending'"
74
- text="Approve" color="success" flat size="x-small"
75
- @click="handleApproveVehicle(plateNumberItem as TPlateNumber)" />
76
- <v-btn v-if="(plateNumberItem as TPlateNumber)?.status == 'deleted'" text="Restore"
77
- color="orange" flat size="x-small"
78
- @click="handleRestoreVehicle(plateNumberItem as TPlateNumber)" />
79
- <v-btn
80
- v-if="((plateNumberItem as TPlateNumber)?.type === 'whitelist' || (plateNumberItem as TPlateNumber)?.type === 'blocklist') && plateNumberItem?.status == 'active'"
81
- variant="outlined"
82
- :text="(plateNumberItem as TPlateNumber)?.type === 'blocklist' ? 'Whitelist' : 'Blocklist'"
83
- :color="(plateNumberItem as TPlateNumber)?.type === 'blocklist' ? 'primary' : 'red'" flat
84
- size="x-small" class="ml-1" @click="handleUpdateType(plateNumberItem as TPlateNumber)" />
74
+ <v-menu>
75
+ <template #activator="{ props: menuProps }">
76
+ <v-btn icon="mdi-dots-vertical" v-bind="menuProps" flat size="x-small" />
77
+ </template>
78
+ <v-list density="compact">
79
+ <v-list-item v-if="(plateNumberItem as TPlateNumber)?.status == 'active'"
80
+ title="Edit Vehicle" prepend-icon="mdi-pencil" @click="handleEditVehicleAction(plateNumberItem as TPlateNumber)" />
81
+ <v-list-item
82
+ v-if="props.app === 'property_management_agency' && (plateNumberItem as TPlateNumber)?.status == 'pending'"
83
+ title="Approve" prepend-icon="mdi-check-circle" base-color="success"
84
+ @click="handleApproveVehicle(plateNumberItem as TPlateNumber)" />
85
+ <v-list-item v-if="(plateNumberItem as TPlateNumber)?.status == 'deleted'" title="Restore"
86
+ prepend-icon="mdi-restore" base-color="orange"
87
+ @click="handleRestoreVehicle(plateNumberItem as TPlateNumber)" />
88
+ <v-list-item
89
+ v-if="((plateNumberItem as TPlateNumber)?.type === 'whitelist' || (plateNumberItem as TPlateNumber)?.type === 'blocklist') && plateNumberItem?.status == 'active'"
90
+ :title="(plateNumberItem as TPlateNumber)?.type === 'blocklist' ? 'Whitelist' : 'Blocklist'"
91
+ prepend-icon="mdi-swap-horizontal"
92
+ :base-color="(plateNumberItem as TPlateNumber)?.type === 'blocklist' ? 'primary' : 'red'"
93
+ @click="handleUpdateType(plateNumberItem as TPlateNumber)" />
94
+
95
+ <v-list-item
96
+ v-if="canDeleteVehicle && (plateNumberItem as TPlateNumber)?.status == 'active'"
97
+ title="Delete" prepend-icon="mdi-delete" base-color="error"
98
+ @click="handleDeleteVehicleAction(plateNumberItem as TPlateNumber)" />
99
+ </v-list>
100
+ </v-menu>
85
101
  </template>
86
102
  </v-data-table>
87
103
  <v-btn text="Add Vehicle Number" class="mt-6 text-capitalize" prepend-icon="mdi-plus"
@@ -94,7 +110,7 @@
94
110
  <v-col v-else-if="selectedVehicleObject[key]" cols="12">
95
111
  <span class="d-flex ga-3 align-center"><strong>{{ label }}:</strong> {{ formatValues(key,
96
112
  selectedVehicleObject[key])
97
- }}</span>
113
+ }}</span>
98
114
  </v-col>
99
115
  </template>
100
116
  </v-row>
@@ -168,26 +184,30 @@ const plateHeaders = [
168
184
 
169
185
 
170
186
  const { formatCamelCaseToWords, formatDate, debounce } = useUtils();
171
- const { getVehicles, deleteVehicle, formatVehicleStatus, approveVehicle, updateVehicle } = useVehicle();
187
+ const { getVehicles, deleteVehicle, formatVehicleStatus, approveVehicle, updateVehicle, getVehicleById } = useVehicle();
172
188
 
173
189
  const items = ref<Array<Record<string, any>>>([]);
174
190
  const page = ref(1);
175
191
  const pages = ref(0);
176
192
  const pageRange = ref("-- - -- of --");
177
193
 
194
+ const mode = ref<"add" | "edit">("add");
195
+
178
196
  const searchInput = ref("")
179
197
 
180
198
  const loading = ref(false);
199
+ const loadingPlateNumberDetails = ref(false);
181
200
  const deletingVehicle = ref(false);
182
201
  const approvingVehicle = ref(false);
183
202
  const restoringVehicle = ref(false);
184
203
  const updatingType = ref(false);
185
204
 
186
205
  const selectedVehicleId = ref<string | null>(null)
187
- const vehicleType = ref<TVehicleType | null>(null);
206
+ const vehicleType = ref<TVehicleType | 'seasonpass' | null>(null);
188
207
  const vehicleTypeFilter = ref<TVehicleType | null>(null);
189
208
 
190
209
  const selectedPlateNumberObject = ref<TPlateNumber | null>(null);
210
+ const selectedPlateNumberId = ref<string | null>(null); // individual plate number
191
211
 
192
212
  const message = ref("");
193
213
  const messageColor = ref("");
@@ -255,6 +275,8 @@ const handleCloseAll = () => {
255
275
  dialog.createVehicle = false;
256
276
  dialog.updateVehicle = false;
257
277
  dialog.showSelection = false;
278
+ dialog.updateVehicleType = false;
279
+ mode.value = "add";
258
280
  vehicleType.value = null;
259
281
  }
260
282
 
@@ -294,12 +316,29 @@ function addNewPlateNumbers() {
294
316
  dialog.showSelection = true;
295
317
  }
296
318
 
297
- function handleEditVehicleAction() {
298
- vehicleType.value = selectedVehicleObject.value?.type || null;
299
- console.log("Selected Vehicle Object: ", selectedVehicleObject.value);
300
- dialog.showSelection = false;
301
- dialog.updateVehicle = false;
302
- dialog.updateVehicle = true;
319
+ async function handleEditVehicleAction(item: TPlateNumber) {
320
+
321
+ selectedPlateNumberId.value = item?._id as string;
322
+
323
+ try {
324
+ loadingPlateNumberDetails.value = true;
325
+ const res = await getVehicleById(selectedPlateNumberId.value as string)
326
+ if(res?.seasonPassType){
327
+ vehicleType.value = "seasonpass";
328
+ } else {
329
+ vehicleType.value = item?.type || null;
330
+ }
331
+ selectedPlateNumberObject.value = res || null;
332
+ dialog.showMoreActions = false;
333
+ mode.value = "edit";
334
+ dialog.updateVehicle = true;
335
+
336
+ } catch (error) {
337
+ console.error("Error fetching vehicle details:", error);
338
+ } finally {
339
+ loadingPlateNumberDetails.value = false;
340
+ }
341
+
303
342
  }
304
343
 
305
344
  function handleDeleteVehicleAction(item: TPlateNumber) {
@@ -354,6 +393,7 @@ function handleUpdatePage(newPageNum: number) {
354
393
  }
355
394
 
356
395
  function handleAddVehicleClick() {
396
+ mode.value = "add";
357
397
  dialog.showSelection = true;
358
398
  selectedVehicleId.value = null;
359
399
  }
@@ -1331,10 +1331,10 @@ const {
1331
1331
  params.status = activeTab.value;
1332
1332
  }
1333
1333
 
1334
- if (activeTab.value !== "registered") {
1335
- delete params.type;
1336
- delete params.checkedOut;
1337
- }
1334
+ // if (activeTab.value !== "registered") {
1335
+ // delete params.type;
1336
+ // delete params.checkedOut;
1337
+ // }
1338
1338
 
1339
1339
  return await getVisitors(params);
1340
1340
  },
@@ -15,6 +15,7 @@ export default function useCustomerSite() {
15
15
  );
16
16
  }
17
17
 
18
+
18
19
  async function getAll({
19
20
  page = 1,
20
21
  search = "",
@@ -47,10 +48,20 @@ export default function useCustomerSite() {
47
48
  );
48
49
  }
49
50
 
51
+ function getCustomerSites (org: string) {
52
+ return useNuxtApp().$api<Record<string, any>>(
53
+ `/api/customer-sites?page=1&search=&limit=10&sort=&order=asc&status=active&org=${org}`,
54
+ {
55
+ method: 'GET'
56
+ }
57
+ )
58
+ }
59
+
50
60
  return {
51
61
  add,
52
62
  getAll,
53
63
  addViaInvite,
54
64
  getBySiteAsServiceProvider,
65
+ getCustomerSites
55
66
  };
56
67
  }
@@ -93,6 +93,21 @@ export default function useMember() {
93
93
  }
94
94
  );
95
95
  }
96
+
97
+ function createMemberDirect(payload: {
98
+ userId: string;
99
+ orgId: string;
100
+ roleId: string;
101
+ app: string;
102
+ siteId?: string;
103
+ siteName?:string;
104
+ }) {
105
+ return useNuxtApp().$api<TMember>('/api/members/direct', {
106
+ method: 'POST',
107
+ body: payload,
108
+ })
109
+ }
110
+
96
111
  return {
97
112
  members,
98
113
  member,
@@ -107,5 +122,6 @@ export default function useMember() {
107
122
  getByUserIdType,
108
123
  updateMemberStatus,
109
124
  updateMemberRole,
125
+ createMemberDirect
110
126
  };
111
127
  }
@@ -14,6 +14,30 @@ export default function useUser() {
14
14
  });
15
15
  }
16
16
 
17
+ function inviteUserClient({
18
+ email = '',
19
+ app = '',
20
+ role = '',
21
+ name = '',
22
+ org = '',
23
+ site = '',
24
+ siteName = ''
25
+ } = {}) {
26
+ return useNuxtApp().$api<Record<string, any>>('/api/auth/invite/user', {
27
+ method: 'POST',
28
+ body: {
29
+ email,
30
+ app,
31
+ role,
32
+ name,
33
+ org,
34
+ ...(site && { siteId: site }),
35
+ ...(siteName && { siteName })
36
+ }
37
+ })
38
+ }
39
+
40
+
17
41
  function updateName(name = "") {
18
42
  return useNuxtApp().$api<Record<string, any>>("/api/users/name", {
19
43
  method: "PUT",
@@ -127,6 +151,7 @@ export default function useUser() {
127
151
  createUserByInvite,
128
152
  getById,
129
153
  createUserByVerification,
130
- getUserByEmail
154
+ getUserByEmail,
155
+ inviteUserClient
131
156
  };
132
157
  }
@@ -137,15 +137,21 @@ export default function useWorkOrder() {
137
137
  }
138
138
 
139
139
  function deleteWorkOrder(id: string) {
140
- return useNuxtApp().$api<Record<string, any>>(
141
- `/api/work-orders/deleted/work-order/${id}`,
142
- {
143
- method: "PUT",
144
- // query: { id },
145
- }
146
- );
140
+ return useNuxtApp().$api<Record<string, any>>(`/api/work-orders/${id}`, {
141
+ method: "DELETE",
142
+ });
147
143
  }
148
144
 
145
+ // function deleteWorkOrder(id: string) {
146
+ // return useNuxtApp().$api<Record<string, any>>(
147
+ // `/api/work-orders/deleted/work-order/${id}`,
148
+ // {
149
+ // method: "PUT",
150
+ // // query: { id },
151
+ // }
152
+ // );
153
+ // }
154
+
149
155
  function getWorkOrderSettings(_workOrderSettings: Record<string, any>) {
150
156
  return useNuxtApp().$api<Record<string, any>>(
151
157
  "/api/work-order-settings/get-by-site",
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@7365admin1/layer-common",
3
3
  "license": "MIT",
4
4
  "type": "module",
5
- "version": "1.11.36",
5
+ "version": "1.11.38",
6
6
  "author": "7365admin1",
7
7
  "main": "./nuxt.config.ts",
8
8
  "publishConfig": {
package/types/org.d.ts CHANGED
@@ -5,6 +5,7 @@ declare type TOrg = {
5
5
  contact: string;
6
6
  busInst: string;
7
7
  type: string;
8
+ defaultSite?: string;
8
9
  createdAt?: string;
9
10
  updatedAt?: string;
10
11
  status?: string;