Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
parkpow
GitHub Repository: parkpow/deep-license-plate-recognition
Path: blob/master/webhooks/webhook_preview/lib/utils.ts
1072 views
1
import { type ClassValue, clsx } from "clsx";
2
import { twMerge } from "tailwind-merge";
3
import { WebhookData, isType1, isType2 } from "@/types/webhook";
4
5
export function cn(...inputs: ClassValue[]) {
6
return twMerge(clsx(inputs));
7
}
8
9
export function generateUUID() {
10
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
11
const r = (Math.random() * 16) | 0,
12
v = c === "x" ? r : (r & 0x3) | 0x8;
13
return v.toString(16);
14
});
15
}
16
17
export function getBaseUrl() {
18
if (typeof window !== "undefined") {
19
return window.location.origin;
20
}
21
22
// For server-side rendering
23
if (process.env.VERCEL_URL) {
24
return `https://${process.env.VERCEL_URL}`;
25
}
26
27
// Fallback for local development
28
return "http://localhost:3000";
29
}
30
31
export function formatDate(dateString: string) {
32
if (!dateString) return "Unknown Date";
33
34
try {
35
const date = new Date(dateString);
36
return new Intl.DateTimeFormat("en-US", {
37
dateStyle: "short",
38
timeStyle: "short",
39
}).format(date);
40
} catch (error) {
41
console.error("Error formatting date:", error);
42
return "Invalid Date";
43
}
44
}
45
46
export function getPlateNumber(data: WebhookData): string {
47
try {
48
// Check if data has the expected structure
49
if (!data?.data?.results?.[0]) {
50
return "Unknown Plate";
51
}
52
53
if (isType1(data)) {
54
const result = data.data.results[0];
55
if (result.plate && typeof result.plate === "string") {
56
return result.plate.trim() === "" ? "NO PLATE" : result.plate;
57
}
58
}
59
60
if (isType2(data)) {
61
const result = data.data.results[0];
62
if (result.plate?.props?.plate?.[0]?.value) {
63
const plateValue = result.plate.props.plate[0].value;
64
return plateValue.trim() === "" ? "NO PLATE" : plateValue;
65
}
66
}
67
68
// If we get here, there's no valid plate
69
return "NO PLATE";
70
} catch (error) {
71
console.error("Error getting plate number:", error);
72
return "Unknown Plate";
73
}
74
}
75
76
export function getPlateScore(data: WebhookData): number | null {
77
try {
78
if (isType1(data)) {
79
const result = data.data.results[0];
80
return result.score ?? null;
81
}
82
83
if (isType2(data)) {
84
const result = data.data.results[0];
85
return result.plate?.score ?? null;
86
}
87
88
return null;
89
} catch (error) {
90
console.error("Error getting plate score:", error);
91
return null;
92
}
93
}
94
95
export function getRegion(data: WebhookData): string | null {
96
try {
97
if (isType1(data)) {
98
const firstResult = data.data.results[0];
99
return firstResult.region?.code?.toUpperCase() ?? null;
100
}
101
102
if (isType2(data)) {
103
const firstResult = data.data.results[0];
104
return (
105
firstResult.plate?.props?.region?.[0]?.value?.toUpperCase() ?? null
106
);
107
}
108
109
return null;
110
} catch (error) {
111
console.error("Error getting region:", error);
112
return null;
113
}
114
}
115
116
export function getRegionScore(data: WebhookData): number | null {
117
try {
118
if (isType1(data)) {
119
const firstResult = data.data.results[0];
120
return firstResult.region?.score ?? null;
121
}
122
123
if (isType2(data)) {
124
const firstResult = data.data.results[0];
125
return firstResult.plate?.props?.region?.[0]?.score ?? null;
126
}
127
128
return null;
129
} catch (error) {
130
console.error("Error getting region score:", error);
131
return null;
132
}
133
}
134
135
export function getDirection(data: WebhookData): number | null {
136
try {
137
if (isType1(data)) {
138
const firstResult = data.data.results[0];
139
return firstResult.direction ?? null;
140
}
141
142
if (isType2(data)) {
143
const firstResult = data.data.results[0];
144
return firstResult.direction ?? null;
145
}
146
147
return null;
148
} catch (error) {
149
console.error("Error getting direction:", error);
150
return null;
151
}
152
}
153
154
export function getVehicleOrientation(data: WebhookData): string | null {
155
try {
156
if (isType1(data)) {
157
const firstResult = data.data.results[0];
158
if (firstResult.orientation?.[0]?.orientation) {
159
return firstResult.orientation[0].orientation;
160
}
161
}
162
163
if (isType2(data)) {
164
const firstResult = data.data.results[0];
165
if (firstResult.vehicle?.props?.orientation?.[0]?.value) {
166
return firstResult.vehicle.props.orientation[0].value;
167
}
168
}
169
170
return null;
171
} catch (error) {
172
console.error("Error getting vehicle orientation:", error);
173
return null;
174
}
175
}
176
177
export function getVehicleType(data: WebhookData): string {
178
try {
179
if (isType1(data)) {
180
const firstResult = data.data.results[0];
181
if (firstResult.vehicle?.type) {
182
return firstResult.vehicle.type;
183
}
184
}
185
186
if (isType2(data)) {
187
const firstResult = data.data.results[0];
188
if (firstResult.vehicle?.type) {
189
return firstResult.vehicle.type;
190
}
191
}
192
193
return "Unknown Vehicle";
194
} catch (error) {
195
console.error("Error getting vehicle type:", error);
196
return "Unknown Vehicle";
197
}
198
}
199
200
export function getVehicleMake(data: WebhookData): string {
201
try {
202
if (isType1(data)) {
203
const firstResult = data.data.results[0];
204
if (firstResult.model_make?.[0]?.make) {
205
return firstResult.model_make[0].make;
206
}
207
}
208
209
if (isType2(data)) {
210
const firstResult = data.data.results[0];
211
if (firstResult.vehicle?.props?.make_model?.[0]?.make) {
212
return firstResult.vehicle.props.make_model[0].make;
213
}
214
}
215
216
return "Unknown Make";
217
} catch (error) {
218
console.error("Error getting vehicle make:", error);
219
return "Unknown Make";
220
}
221
}
222
223
export function getVehicleModel(data: WebhookData): string {
224
try {
225
if (isType1(data)) {
226
const firstResult = data.data.results[0];
227
if (firstResult.model_make?.[0]?.model) {
228
return firstResult.model_make[0].model;
229
}
230
}
231
232
if (isType2(data)) {
233
const firstResult = data.data.results[0];
234
if (firstResult.vehicle?.props?.make_model?.[0]?.model) {
235
return firstResult.vehicle.props.make_model[0].model;
236
}
237
}
238
239
return "Unknown Model";
240
} catch (error) {
241
console.error("Error getting vehicle model:", error);
242
return "Unknown Model";
243
}
244
}
245
246
export function getVehicleColor(data: WebhookData): string {
247
try {
248
if (isType1(data)) {
249
const firstResult = data.data.results[0];
250
if (firstResult.color?.[0]?.color) {
251
return firstResult.color[0].color;
252
}
253
}
254
255
if (isType2(data)) {
256
const firstResult = data.data.results[0];
257
if (firstResult.vehicle?.props?.color?.[0]?.value) {
258
return firstResult.vehicle.props.color[0].value;
259
}
260
}
261
262
return "Unknown Color";
263
} catch (error) {
264
console.error("Error getting vehicle color:", error);
265
return "Unknown Color";
266
}
267
}
268
269
export function getCameraId(data: WebhookData): string {
270
try {
271
return data?.data?.camera_id || "Unknown Camera";
272
} catch (error) {
273
console.error("Error getting camera ID:", error);
274
return "Unknown Camera";
275
}
276
}
277
278
export function getTimestamp(data: WebhookData): string {
279
try {
280
return data?.data?.timestamp || "Unknown Time";
281
} catch (error) {
282
console.error("Error getting timestamp:", error);
283
return "Unknown Time";
284
}
285
}
286
287
export function getImageurl(data: WebhookData): string | null {
288
try {
289
return data?.image?.url || null;
290
} catch (error) {
291
console.error("Error getting Image:", error);
292
return "Unknown Image";
293
}
294
}
295
296
export const setStoredUuid = (uuid: string) => {
297
if (typeof window !== "undefined") {
298
localStorage.setItem("webhookUuid", uuid);
299
}
300
};
301
302