woodsportal-client-sdk 1.1.4-dev.8 → 1.1.5-dev.0

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.
@@ -0,0 +1,1066 @@
1
+ import { getCookie } from './chunk-NB7AINV4.js';
2
+ import pako from 'pako';
3
+ import { Base64 } from 'js-base64';
4
+
5
+ function convertToBase64(obj) {
6
+ try {
7
+ if (!obj) return "";
8
+ const json = JSON.stringify(obj);
9
+ const compressed = pako.deflate(json);
10
+ const base64 = Base64.fromUint8Array(compressed, true);
11
+ return base64;
12
+ } catch (error) {
13
+ console.error("Failed to encode object:", error);
14
+ return "";
15
+ }
16
+ }
17
+ function decodeToBase64(encoded) {
18
+ try {
19
+ if (!encoded) return null;
20
+ const uint8Array = Base64.toUint8Array(encoded);
21
+ const decompressed = pako.inflate(uint8Array, { to: "string" });
22
+ return JSON.parse(decompressed);
23
+ } catch (error) {
24
+ console.error("Failed to decode object:", error);
25
+ return null;
26
+ }
27
+ }
28
+
29
+ // src/breadcrumb/url-utils.ts
30
+ function mapKeysDeep(obj, keyMap2) {
31
+ if (Array.isArray(obj)) {
32
+ return obj.map((item) => mapKeysDeep(item, keyMap2));
33
+ } else if (obj !== null && typeof obj === "object") {
34
+ return Object.entries(obj).reduce((acc, [key, value]) => {
35
+ const mappedKey = keyMap2[key] || key;
36
+ acc[mappedKey] = mapKeysDeep(value, keyMap2);
37
+ return acc;
38
+ }, {});
39
+ }
40
+ return obj;
41
+ }
42
+ function isMessingParent(breadcrumbs) {
43
+ let lastItem = breadcrumbs[breadcrumbs.length - 1];
44
+ let lastItem2 = breadcrumbs[breadcrumbs.length - 2];
45
+ let lastItem3 = breadcrumbs[breadcrumbs.length - 3];
46
+ return lastItem?.o_r_id && (!lastItem2?.o_r_id && lastItem2?.o_t_id) && lastItem3?.o_r_id ? true : false;
47
+ }
48
+ function isMessingParentLastItem(breadcrumbs) {
49
+ let lastItem = breadcrumbs[breadcrumbs.length - 1];
50
+ let lastItem2 = breadcrumbs[breadcrumbs.length - 2];
51
+ return !lastItem?.o_t_id && (lastItem2?.o_r_id && lastItem2?.o_t_id) ? false : true;
52
+ }
53
+ function breadcrumbStage(breadcrumbItems) {
54
+ let breadcrumbType = "child";
55
+ if (breadcrumbItems.length === 1) {
56
+ breadcrumbType = "root";
57
+ } else if (breadcrumbItems.length === 2) {
58
+ breadcrumbType = "root_details";
59
+ }
60
+ return breadcrumbType;
61
+ }
62
+ var generateUrl = (props, breadcrumbs) => {
63
+ const newBase64 = convertToBase64(breadcrumbs);
64
+ let url = "";
65
+ if (props?.objectTypeId && props?.recordId) {
66
+ url = `/${props?.recordId}/${props?.objectTypeId}/${props?.recordId}?b=${newBase64}`;
67
+ } else {
68
+ url = `/association/${props?.objectTypeId}?b=${newBase64}`;
69
+ }
70
+ return url;
71
+ };
72
+ function getTotalParentLength(data) {
73
+ return data.filter(
74
+ (item) => (item.pt || item.o_t_id) && !item.o_r_id
75
+ ).length;
76
+ }
77
+ var generatePath = (breadcrumbs, breadcrumb, index) => {
78
+ const bc = convertToBase64(breadcrumbs.slice(0, index + 1));
79
+ if (index === 0) {
80
+ return {
81
+ name: breadcrumb?.n,
82
+ path: `/${breadcrumb?.pt || breadcrumb?.o_t_id}?b=${bc}`
83
+ };
84
+ } else if (index === 1) {
85
+ if (breadcrumb?.isHome) {
86
+ return {
87
+ name: breadcrumb?.n,
88
+ path: `/association/${breadcrumb?.o_t_id}?b=${bc}`
89
+ };
90
+ }
91
+ return {
92
+ name: breadcrumb?.n,
93
+ path: `/${breadcrumb?.o_r_id}/${breadcrumb?.o_t_id}/${breadcrumb?.o_r_id}?b=${bc}`
94
+ };
95
+ } else {
96
+ if (breadcrumb?.o_t_id && breadcrumb?.o_r_id && !breadcrumb?.isHome) {
97
+ return {
98
+ name: breadcrumb?.n,
99
+ path: `/${breadcrumb?.o_r_id}/${breadcrumb?.o_t_id}/${breadcrumb?.o_r_id}?b=${bc}`
100
+ };
101
+ } else {
102
+ return {
103
+ name: breadcrumb?.n,
104
+ path: `/association/${breadcrumb?.o_t_id}?b=${bc}`
105
+ };
106
+ }
107
+ }
108
+ };
109
+
110
+ // src/breadcrumb/key-map.ts
111
+ var keyMap = {
112
+ dp: "defPermissions",
113
+ n: "name",
114
+ sort: "sort",
115
+ o_t_id: "objectTypeId",
116
+ s: "search",
117
+ fPn: "filterPropertyName",
118
+ fO: "filterOperator",
119
+ fV: "filterValue",
120
+ c: "cache",
121
+ isPC: "isPrimaryCompany",
122
+ v: "view",
123
+ l: "limit",
124
+ pt: "path",
125
+ p: "page",
126
+ a: "after",
127
+ aPip: "activePipeline",
128
+ aT: "activeTab",
129
+ cT: "create",
130
+ dP: "display",
131
+ dL: "display_label",
132
+ pId: "pipeline_id"
133
+ };
134
+
135
+ // src/utils/param.ts
136
+ function getParam(paramName) {
137
+ if (typeof globalThis === "undefined" || !globalThis.location) return null;
138
+ const hash = globalThis.location.hash || "";
139
+ if (!hash.startsWith("#/")) return null;
140
+ const hashWithoutHash = hash.startsWith("#") ? hash.substring(1) : hash;
141
+ const queryString = hashWithoutHash.split("?")[1];
142
+ if (!queryString) return null;
143
+ const params = new URLSearchParams(queryString);
144
+ return params.get(paramName);
145
+ }
146
+ function getPath() {
147
+ if (typeof globalThis === "undefined" || !globalThis.location) return null;
148
+ const hash = globalThis.location.hash || "";
149
+ if (!hash.startsWith("#/")) return null;
150
+ return hash.slice(1).split("?")[0];
151
+ }
152
+
153
+ // src/breadcrumb/param.ts
154
+ var getRouteMenu = (path) => {
155
+ const apiRoutes = globalThis?.apiRoutes || [];
156
+ return apiRoutes.find((menu) => menu?.path === path);
157
+ };
158
+ var getRouteDetails = () => {
159
+ const search = getParam("b");
160
+ const breadcrumbs = decodeToBase64(search) || [];
161
+ const lastItem = breadcrumbs[breadcrumbs.length - 1];
162
+ const mapped = lastItem ? mapKeysDeep(lastItem, keyMap) : null;
163
+ return { routeDetails: mapped };
164
+ };
165
+ var getParamDetails = (props, isDetailsPage = false) => {
166
+ const search = getParam("b");
167
+ let breadcrumbs = decodeToBase64(search) || [];
168
+ if (breadcrumbs.length > 0 && breadcrumbs?.[0]?.isHome) {
169
+ breadcrumbs = breadcrumbs.slice(1);
170
+ }
171
+ let mediatorObjectTypeId = "";
172
+ let mediatorObjectRecordId = "";
173
+ let parentObjectTypeId = "";
174
+ let parentObjectRecordId = "";
175
+ let lastItem = breadcrumbs[breadcrumbs.length - 1];
176
+ const lastItem2 = breadcrumbs[breadcrumbs.length - 2];
177
+ const lastItem3 = breadcrumbs[breadcrumbs.length - 3];
178
+ if (isDetailsPage === true && lastItem && "prm" in lastItem) {
179
+ delete lastItem.prm;
180
+ }
181
+ if (breadcrumbs.length > 1) {
182
+ if (props?.type === "ticket" || props?.type === "association") {
183
+ mediatorObjectTypeId = breadcrumbs[1]?.o_t_id || "";
184
+ mediatorObjectRecordId = breadcrumbs[1]?.o_r_id || "";
185
+ parentObjectTypeId = lastItem?.o_t_id || "";
186
+ parentObjectRecordId = lastItem?.o_r_id || "";
187
+ } else {
188
+ if (breadcrumbs.length > 2) {
189
+ mediatorObjectTypeId = breadcrumbs[1]?.o_t_id || "";
190
+ mediatorObjectRecordId = breadcrumbs[1]?.o_r_id || "";
191
+ }
192
+ if (!lastItem?.o_r_id && breadcrumbs.length > 2) {
193
+ parentObjectTypeId = lastItem2?.o_t_id || "";
194
+ parentObjectRecordId = lastItem2?.o_r_id || "";
195
+ }
196
+ if (lastItem?.o_r_id && breadcrumbs.length > 2) {
197
+ parentObjectTypeId = lastItem3?.o_t_id || "";
198
+ parentObjectRecordId = lastItem3?.o_r_id || "";
199
+ }
200
+ if (lastItem2?.o_t_id === "0-5" && !parentObjectTypeId && !parentObjectRecordId) {
201
+ parentObjectTypeId = lastItem2?.o_t_id || "";
202
+ parentObjectRecordId = lastItem2?.o_r_id || "";
203
+ }
204
+ }
205
+ }
206
+ let paramsObject = {};
207
+ if (breadcrumbs[0]?.prm?.isPC || breadcrumbs[1]?.prm?.isPC || lastItem?.prm?.isPC) {
208
+ paramsObject["isPrimaryCompany"] = true;
209
+ }
210
+ if (parentObjectTypeId && parentObjectRecordId) {
211
+ paramsObject["parentObjectTypeId"] = parentObjectTypeId;
212
+ paramsObject["parentObjectRecordId"] = parentObjectRecordId;
213
+ }
214
+ if (mediatorObjectTypeId && mediatorObjectRecordId) {
215
+ paramsObject["mediatorObjectTypeId"] = mediatorObjectTypeId;
216
+ paramsObject["mediatorObjectRecordId"] = mediatorObjectRecordId;
217
+ }
218
+ const mappedLastItemParam = Object.fromEntries(
219
+ Object.entries(lastItem?.prm || {}).map(([key, value]) => [
220
+ keyMap[key] || key,
221
+ // use mapped name if exists, else keep original
222
+ value
223
+ ])
224
+ );
225
+ let queryString = null;
226
+ if (props?.type === "association") {
227
+ queryString = new URLSearchParams({ ...paramsObject, ...{ cache: false } }).toString();
228
+ } else {
229
+ queryString = new URLSearchParams({ ...paramsObject, ...mappedLastItemParam }).toString();
230
+ }
231
+ let params = queryString ? `?${queryString}` : "";
232
+ const totalParentLength = getTotalParentLength(breadcrumbs);
233
+ let parentAccessLabel = false;
234
+ if (breadcrumbs[0]?.prm?.isPC && totalParentLength > 2 || // company object
235
+ !breadcrumbs[0]?.prm?.isPC && totalParentLength > 3 || // normal object
236
+ breadcrumbs[0]?.prm?.isPC && totalParentLength > 1 && props?.type === "ticket" || // company ticket
237
+ !breadcrumbs[0]?.prm?.isPC && totalParentLength > 2 && props?.type === "ticket") {
238
+ parentAccessLabel = true;
239
+ }
240
+ return {
241
+ breadcrumbs,
242
+ // paramsObject: Object.keys(mParamsObject).length === 0 ? null : mParamsObject,
243
+ paramsObject,
244
+ params,
245
+ parentAccessLabel
246
+ };
247
+ };
248
+
249
+ // src/breadcrumb/url.ts
250
+ var useUpdateLink = () => {
251
+ const updateLink = async (props, displayName = "prm") => {
252
+ const search = getParam("b");
253
+ const pathname = getPath();
254
+ let breadcrumbs = decodeToBase64(search) || [];
255
+ if (breadcrumbs.length < 1) {
256
+ const routeMenu = getRouteMenu(pathname);
257
+ breadcrumbs = [
258
+ {
259
+ n: routeMenu?.title,
260
+ pt: routeMenu?.path
261
+ }
262
+ ];
263
+ }
264
+ const lastBreadcrumb = breadcrumbs[breadcrumbs.length - 1];
265
+ if (displayName) {
266
+ const ex = await getDeep(lastBreadcrumb, displayName) || {};
267
+ await setDeep(lastBreadcrumb, displayName, {
268
+ ...ex,
269
+ ...props
270
+ });
271
+ } else {
272
+ await Object.assign(lastBreadcrumb, props);
273
+ }
274
+ const newBase64 = convertToBase64(breadcrumbs);
275
+ updateBParam(newBase64);
276
+ };
277
+ function setDeep(obj, path, value) {
278
+ const keys = path.split(".");
279
+ let curr = obj;
280
+ for (let i = 0; i < keys.length - 1; i++) {
281
+ if (!curr[keys[i]] || typeof curr[keys[i]] !== "object") {
282
+ curr[keys[i]] = {};
283
+ }
284
+ curr = curr[keys[i]];
285
+ }
286
+ curr[keys[keys.length - 1]] = value;
287
+ return curr;
288
+ }
289
+ function getDeep(obj, path) {
290
+ return path.split(".").reduce((acc, key) => acc?.[key], obj);
291
+ }
292
+ const getLinkParams = (displayName = "prm") => {
293
+ const search = getParam("b");
294
+ let breadcrumbs = decodeToBase64(search) || [];
295
+ if (breadcrumbs.length < 1) return null;
296
+ const lastItem = breadcrumbs[breadcrumbs.length - 1];
297
+ const getDeep2 = (obj, path) => {
298
+ return path.split(".").reduce((acc, key) => acc?.[key], obj);
299
+ };
300
+ const expandKeys = (obj) => {
301
+ return Object.fromEntries(
302
+ Object.entries(obj).map(([key, value]) => [
303
+ keyMap[key] || key,
304
+ // map if exists, else keep original
305
+ value
306
+ ])
307
+ );
308
+ };
309
+ const nestedValue = displayName ? getDeep2(lastItem, displayName) : null;
310
+ const output = nestedValue ? expandKeys(nestedValue) : null;
311
+ return output;
312
+ };
313
+ const filterParams = (displayName = "prm") => {
314
+ const search = getParam("b");
315
+ let breadcrumbs = decodeToBase64(search) || [];
316
+ if (breadcrumbs.length < 1) return null;
317
+ const lastItem = breadcrumbs[breadcrumbs.length - 1];
318
+ const getDeep2 = (obj, path) => {
319
+ return path.split(".").reduce((acc, key) => acc?.[key], obj);
320
+ };
321
+ const expandKeys = (obj) => {
322
+ return Object.fromEntries(
323
+ Object.entries(obj).map(([key, value]) => [
324
+ keyMap[key] || key,
325
+ // map if exists, else keep original
326
+ value
327
+ ])
328
+ );
329
+ };
330
+ const nestedValue = displayName ? getDeep2(lastItem, displayName) : null;
331
+ const output = nestedValue ? expandKeys(nestedValue) : expandKeys(lastItem);
332
+ return output;
333
+ };
334
+ return { updateLink, getLinkParams, filterParams };
335
+ };
336
+ var updateBParam = (newValue) => {
337
+ if (typeof globalThis === "undefined" || !globalThis.location) return;
338
+ const hash = globalThis.location.hash || "";
339
+ if (!hash.startsWith("#/")) return;
340
+ const withoutHash = hash.slice(2);
341
+ const [path, queryString] = withoutHash.split("?");
342
+ const params = new URLSearchParams(queryString || "");
343
+ params.set("b", newValue);
344
+ const newHash = `#/${path}?${params.toString()}`;
345
+ if (typeof globalThis !== "undefined" && globalThis.history && globalThis.history.replaceState) {
346
+ globalThis.history.replaceState(null, "", newHash);
347
+ }
348
+ };
349
+
350
+ // src/store/index.ts
351
+ function createStore(initializer) {
352
+ let state;
353
+ const listeners = /* @__PURE__ */ new Set();
354
+ const get = () => state;
355
+ const set = (partial) => {
356
+ const prevState = state;
357
+ const partialState = typeof partial === "function" ? partial(state) : partial;
358
+ state = {
359
+ ...state,
360
+ ...partialState
361
+ };
362
+ listeners.forEach(
363
+ (listener) => listener(state, prevState)
364
+ );
365
+ };
366
+ const subscribe = (listener) => {
367
+ listeners.add(listener);
368
+ return () => listeners.delete(listener);
369
+ };
370
+ state = initializer(set, get);
371
+ return {
372
+ getState: get,
373
+ setState: set,
374
+ subscribe
375
+ };
376
+ }
377
+
378
+ // src/utils/getCookieData.ts
379
+ var getAuthSubscriptionType = () => {
380
+ return getCookie("subscriptionType");
381
+ };
382
+
383
+ // src/store/use-table.ts
384
+ var pageLimit = 10;
385
+ var tableStore = createStore((set, get) => ({
386
+ // ==============================
387
+ // STATE
388
+ // ==============================
389
+ tableUniqueId: null,
390
+ gridData: [],
391
+ sort: "-hs_createdate",
392
+ limit: 10,
393
+ after: "",
394
+ page: 1,
395
+ nextPage: 1,
396
+ stageId: "",
397
+ totalItems: 1,
398
+ numOfPages: 1,
399
+ currentPage: 1,
400
+ search: "",
401
+ filterPropertyName: "hs_pipeline",
402
+ filterOperator: "eq",
403
+ filterValue: "",
404
+ isPrimaryCompany: null,
405
+ view: null,
406
+ selectedPipeline: "",
407
+ tableParam: {},
408
+ tableDefPermissions: {},
409
+ tableData: [],
410
+ tablePrependData: [],
411
+ // ==============================
412
+ // BASIC SETTERS
413
+ // ==============================
414
+ setTableUniqueId: (v) => set({ tableUniqueId: v }),
415
+ setSort: (v) => set({ sort: v }),
416
+ setLimit: (v) => set({ limit: v }),
417
+ setAfter: (v) => set({ after: v }),
418
+ setPage: (v) => set({ page: v }),
419
+ setNextPage: (v) => set({ nextPage: v }),
420
+ setStageId: (v) => set({ stageId: v }),
421
+ setTotalItems: (v) => set({ totalItems: v }),
422
+ setNumOfPages: (v) => set({ numOfPages: v }),
423
+ setCurrentPage: (v) => set({ currentPage: v }),
424
+ setSearch: (v) => set({ search: v }),
425
+ setFilterPropertyName: (v) => set({ filterPropertyName: v }),
426
+ setFilterOperator: (v) => set({ filterOperator: v }),
427
+ setFilterValue: (v) => set({ filterValue: v }),
428
+ setIsPrimaryCompany: (v) => set({ isPrimaryCompany: v }),
429
+ // ==============================
430
+ // VIEW
431
+ // ==============================
432
+ setView: (mView) => {
433
+ set({
434
+ page: getAuthSubscriptionType() === "FREE" ? "" : 1,
435
+ view: mView
436
+ });
437
+ },
438
+ // ==============================
439
+ // PIPELINE
440
+ // ==============================
441
+ changePipeline: (mView) => {
442
+ set({
443
+ page: getAuthSubscriptionType() === "FREE" ? "" : 1,
444
+ selectedPipeline: mView || ""
445
+ });
446
+ },
447
+ setSelectedPipeline: (pipelines, pipeLineId) => {
448
+ let filterValue = "";
449
+ if (pipeLineId) {
450
+ const pipelineSingle = pipelines.find(
451
+ (pipeline) => pipeline.pipelineId === pipeLineId
452
+ );
453
+ filterValue = pipelineSingle?.pipelineId || "";
454
+ }
455
+ set({
456
+ filterPropertyName: "hs_pipeline",
457
+ filterOperator: "eq",
458
+ filterValue,
459
+ selectedPipeline: filterValue
460
+ });
461
+ },
462
+ // ==============================
463
+ // RESET
464
+ // ==============================
465
+ resetTableParam: () => {
466
+ set({
467
+ sort: "-hs_createdate",
468
+ limit: pageLimit,
469
+ after: "",
470
+ page: getAuthSubscriptionType() === "FREE" ? "" : 1,
471
+ totalItems: 1,
472
+ numOfPages: 1,
473
+ currentPage: 1,
474
+ search: "",
475
+ filterPropertyName: "hs_pipeline",
476
+ filterOperator: "eq",
477
+ filterValue: "",
478
+ isPrimaryCompany: null,
479
+ selectedPipeline: ""
480
+ });
481
+ },
482
+ // ==============================
483
+ // PARAM BUILDER
484
+ // ==============================
485
+ getTableParam: (companyAsMediator, currentPageOverride) => {
486
+ const state = get();
487
+ const baseParams = {
488
+ sort: state.sort,
489
+ search: state.search,
490
+ filterPropertyName: state.filterPropertyName,
491
+ filterOperator: state.filterOperator,
492
+ filterValue: state.selectedPipeline,
493
+ cache: true,
494
+ isPrimaryCompany: companyAsMediator || false,
495
+ view: state.view
496
+ };
497
+ if (getAuthSubscriptionType() === "FREE") {
498
+ return {
499
+ ...baseParams,
500
+ after: state.page
501
+ };
502
+ }
503
+ return {
504
+ ...baseParams,
505
+ limit: state.limit,
506
+ page: currentPageOverride || state.page,
507
+ ...state.after && {
508
+ after: state.after
509
+ }
510
+ };
511
+ },
512
+ // ==============================
513
+ // GRID DATA
514
+ // ==============================
515
+ setGridData: async (type, deals) => {
516
+ if (type === "reset") {
517
+ await set({ gridData: [] });
518
+ return [];
519
+ }
520
+ if (type === "directly") {
521
+ await set({ gridData: deals });
522
+ return deals;
523
+ }
524
+ const finalData = await deals.map(
525
+ (deal) => {
526
+ const cards = deal?.data?.results?.rows?.map(
527
+ (row) => ({
528
+ id: row?.hs_object_id,
529
+ ...row,
530
+ hubspotObjectTypeId: type === "deals" ? "0-3" : "0-5"
531
+ })
532
+ ) || [];
533
+ return {
534
+ id: deal.id,
535
+ name: deal.label,
536
+ count: deal?.data?.total,
537
+ ...deal,
538
+ cards
539
+ };
540
+ }
541
+ );
542
+ await set({ gridData: finalData });
543
+ return finalData;
544
+ },
545
+ // ==============================
546
+ // DEFAULT PIPELINE
547
+ // ==============================
548
+ setDefaultPipeline(data, hubspotObjectTypeId) {
549
+ if (!data) {
550
+ set({ selectedPipeline: "" });
551
+ return "";
552
+ }
553
+ const { updateLink, filterParams } = useUpdateLink();
554
+ const params = filterParams();
555
+ const excludedIds = ["0-1", "0-2", "0-3", "0-4", "0-5"];
556
+ const state = get();
557
+ const view = state.view;
558
+ const selectedPipeline = state.selectedPipeline;
559
+ let defaultPipelineId = "";
560
+ let mFilterValue = "";
561
+ const defaultPipeline = data?.data?.[0];
562
+ if (excludedIds.includes(hubspotObjectTypeId)) {
563
+ defaultPipelineId = defaultPipeline?.pipelineId || "";
564
+ }
565
+ if (params && params?.filterPropertyName === "hs_pipeline" && params?.filterValue) {
566
+ mFilterValue = params.filterValue;
567
+ } else {
568
+ if (view === "BOARD" && !selectedPipeline) {
569
+ mFilterValue = defaultPipelineId;
570
+ updateLink({
571
+ fV: defaultPipelineId
572
+ });
573
+ } else if (!excludedIds.includes(hubspotObjectTypeId)) {
574
+ mFilterValue = selectedPipeline || null;
575
+ } else {
576
+ mFilterValue = data.data.length === 1 ? defaultPipelineId : selectedPipeline;
577
+ }
578
+ }
579
+ set({ selectedPipeline: mFilterValue });
580
+ return mFilterValue;
581
+ },
582
+ setTableData: (response) => {
583
+ set({
584
+ tableData: response
585
+ });
586
+ },
587
+ setTablePrependData: async (response) => {
588
+ const state = get();
589
+ let rows = [];
590
+ if (response === "loading") {
591
+ const row = await state.tableData?.data?.results?.columns.reduce((acc, item) => {
592
+ if (!item.hidden) {
593
+ acc[item.key] = "loading";
594
+ }
595
+ return acc;
596
+ }, {});
597
+ rows = [row, ...state.tablePrependData];
598
+ } else {
599
+ const data = response?.data;
600
+ if (!data) {
601
+ set({
602
+ tablePrependData: []
603
+ });
604
+ }
605
+ const row = await Object.fromEntries(
606
+ Object.entries(data).map(([key, value]) => [
607
+ key,
608
+ value?.value ?? value
609
+ ])
610
+ );
611
+ rows = [...state.tablePrependData];
612
+ if (rows.length > 0) {
613
+ rows[0] = row;
614
+ } else {
615
+ rows.push(row);
616
+ }
617
+ }
618
+ set({
619
+ tablePrependData: rows
620
+ });
621
+ return rows;
622
+ }
623
+ }));
624
+ function useTable() {
625
+ const tableState = tableStore.getState();
626
+ return {
627
+ ...tableState,
628
+ ...{ listeners: { subscribe: tableStore.subscribe } }
629
+ };
630
+ }
631
+
632
+ // src/store2/store.ts
633
+ function createStore2(initialState) {
634
+ let state = initialState;
635
+ const listeners = /* @__PURE__ */ new Set();
636
+ return {
637
+ getState() {
638
+ return state;
639
+ },
640
+ setState(partial) {
641
+ state = {
642
+ ...state,
643
+ ...partial
644
+ };
645
+ listeners.forEach(
646
+ (listener) => listener(state)
647
+ );
648
+ },
649
+ subscribe(listener) {
650
+ listeners.add(listener);
651
+ return () => listeners.delete(listener);
652
+ }
653
+ };
654
+ }
655
+
656
+ // src/store2/use-table.ts
657
+ var tableStore2 = createStore2({
658
+ objectsData: null,
659
+ tableData: [],
660
+ tablePrependData: [],
661
+ hubspotObjectTypeId: "",
662
+ selectedPipeline: "",
663
+ viewType: ""
664
+ });
665
+ var actions = {
666
+ async setObjectsData(response) {
667
+ const state = tableStore2.getState();
668
+ if (response?.info?.viewType == "LIST") {
669
+ tableStore2.setState({
670
+ objectsData: response
671
+ });
672
+ }
673
+ if (response?.info?.viewType == "BOARD") {
674
+ const {
675
+ stageId
676
+ } = useTable();
677
+ if (stageId) {
678
+ const boardData = { ...state.objectsData };
679
+ const updatedBoardData = await {
680
+ ...boardData,
681
+ data: {
682
+ ...boardData.data,
683
+ results: boardData.data.results.map(
684
+ (item) => String(item.id) === String(stageId) ? {
685
+ ...item,
686
+ data: {
687
+ ...item.data,
688
+ results: {
689
+ ...item.data.results,
690
+ rows: [
691
+ ...item?.data?.results?.rows ?? [],
692
+ // keep existing rows
693
+ ...response?.data?.results?.rows ?? []
694
+ // prepend new rows
695
+ ]
696
+ }
697
+ }
698
+ } : item
699
+ )
700
+ }
701
+ };
702
+ tableStore2.setState({
703
+ objectsData: updatedBoardData
704
+ });
705
+ } else {
706
+ tableStore2.setState({
707
+ objectsData: response
708
+ });
709
+ }
710
+ }
711
+ },
712
+ setTableData(response, payload) {
713
+ const state = tableStore2.getState();
714
+ const rows = response?.data?.results?.rows ?? [];
715
+ const rowIds = new Set(
716
+ rows.map((row) => row.id ?? row.hs_object_id).filter((id) => id != null && id !== "").map((id) => String(id))
717
+ );
718
+ let newTablePrependData = state.tablePrependData.filter((item) => {
719
+ const itemId = item.id ?? item.hs_object_id;
720
+ if (itemId == null || itemId === "") return true;
721
+ return !rowIds.has(String(itemId));
722
+ });
723
+ const hubspotObjectTypeId = payload?.hubspotObjectTypeId;
724
+ const selectedPipeline = payload?.selectedPipeline;
725
+ const viewType = response?.info?.viewType;
726
+ if (state.viewType && state.viewType != viewType) {
727
+ newTablePrependData = [];
728
+ }
729
+ if (state.hubspotObjectTypeId && state.hubspotObjectTypeId != hubspotObjectTypeId) {
730
+ newTablePrependData = [];
731
+ }
732
+ if (state.selectedPipeline && state.selectedPipeline != selectedPipeline) {
733
+ newTablePrependData = [];
734
+ }
735
+ tableStore2.setState({
736
+ tableData: response,
737
+ tablePrependData: newTablePrependData,
738
+ hubspotObjectTypeId,
739
+ viewType
740
+ });
741
+ },
742
+ modifiedObjectsData(results) {
743
+ const state = tableStore2.getState();
744
+ const tablePrependData = state.tablePrependData;
745
+ const modifiedData = results.map((result) => {
746
+ const matchedPrepend = tablePrependData.find(
747
+ (item) => String(item?.id) === String(result?.id)
748
+ );
749
+ if (!matchedPrepend) {
750
+ return result;
751
+ }
752
+ const prependRows = matchedPrepend?.data?.results?.rows ?? [];
753
+ const prependCards = prependRows.map((row) => ({
754
+ id: row.hs_object_id,
755
+ ...row
756
+ }));
757
+ return {
758
+ ...result,
759
+ // prepend in results.rows
760
+ data: {
761
+ ...result.data,
762
+ results: {
763
+ ...result.data.results,
764
+ rows: [
765
+ ...prependRows,
766
+ ...result?.data?.results?.rows ?? []
767
+ ]
768
+ }
769
+ },
770
+ // prepend in cards
771
+ cards: [
772
+ ...prependCards,
773
+ ...result?.cards ?? []
774
+ ]
775
+ };
776
+ });
777
+ tableStore2.setState({
778
+ objectsData: modifiedData
779
+ });
780
+ },
781
+ clearTablePrependData() {
782
+ tableStore2.setState({
783
+ tablePrependData: []
784
+ });
785
+ },
786
+ async setTablePrependData(response, props) {
787
+ const state = tableStore2.getState();
788
+ let rows = [];
789
+ if (state.tableData?.info?.viewType == "BOARD") {
790
+ if (response === "loading") {
791
+ const responseData = state.tableData?.data?.results ?? [];
792
+ const pipelineStage = props?.payload?.propertyPayload?.hs_pipeline_stage || props?.payload?.propertyPayload?.dealstage;
793
+ rows = responseData.map(
794
+ ({ id, data }) => {
795
+ const matchedPrepend = state.tablePrependData.find(
796
+ (item) => String(item.id) === String(id)
797
+ );
798
+ const prependRows = matchedPrepend?.data?.results?.rows ?? [];
799
+ const newRow = String(id) === String(pipelineStage) ? [
800
+ (data?.results?.columns ?? []).reduce(
801
+ (obj, column) => {
802
+ obj[column.key] = "loading";
803
+ return obj;
804
+ },
805
+ {}
806
+ )
807
+ ] : [];
808
+ return {
809
+ id,
810
+ data: {
811
+ results: {
812
+ columns: data?.results?.columns ?? [],
813
+ // prepend loading row + prepend rows
814
+ rows: [
815
+ ...newRow,
816
+ ...prependRows
817
+ ]
818
+ }
819
+ }
820
+ };
821
+ }
822
+ );
823
+ } else {
824
+ const data = response?.data;
825
+ const hs_pipeline_stage = data?.hs_pipeline_stage?.value?.value || data?.dealstage?.value?.value;
826
+ if (!data) {
827
+ tableStore2.setState({
828
+ tablePrependData: []
829
+ });
830
+ }
831
+ rows = state?.tablePrependData.map((row) => {
832
+ const matchedPrepend = state.tablePrependData.find(
833
+ (item) => String(item.id) === String(row.id)
834
+ );
835
+ const prependRows = matchedPrepend?.data?.results?.rows ?? [];
836
+ if (String(row.id) === String(hs_pipeline_stage)) {
837
+ const updatedRow = (row?.data?.results?.columns ?? []).reduce(
838
+ (obj, column) => {
839
+ const key = column.key;
840
+ obj[key] = data?.[key]?.value ?? data?.[key] ?? "";
841
+ return obj;
842
+ },
843
+ {}
844
+ );
845
+ prependRows[0] = updatedRow;
846
+ return {
847
+ ...row,
848
+ data: {
849
+ ...row.data,
850
+ results: {
851
+ ...row.data.results,
852
+ rows: prependRows
853
+ }
854
+ }
855
+ };
856
+ }
857
+ return row;
858
+ });
859
+ }
860
+ } else {
861
+ if (response === "loading") {
862
+ const row = await state.tableData?.data?.results?.columns.reduce((acc, item) => {
863
+ if (!item.hidden) {
864
+ acc[item.key] = "loading";
865
+ }
866
+ return acc;
867
+ }, {});
868
+ rows = [row, ...state.tablePrependData];
869
+ } else if (response?.data) {
870
+ const data = response?.data;
871
+ if (!data) {
872
+ tableStore2.setState({
873
+ tablePrependData: []
874
+ });
875
+ }
876
+ const row = await Object.fromEntries(
877
+ Object.entries(data).map(([key, value]) => [
878
+ key,
879
+ value?.value ?? value
880
+ ])
881
+ );
882
+ rows = [...state.tablePrependData];
883
+ if (rows.length > 0) {
884
+ rows[0] = row;
885
+ } else {
886
+ rows.push(row);
887
+ }
888
+ }
889
+ }
890
+ tableStore2.setState({
891
+ tablePrependData: rows
892
+ });
893
+ }
894
+ };
895
+
896
+ // src/store2/use-note.ts
897
+ var noteStore = createStore2({
898
+ notes: [],
899
+ prependNotes: [],
900
+ id: ""
901
+ });
902
+ var actions2 = {
903
+ setNotes(response, payload) {
904
+ const state = noteStore.getState();
905
+ const rows = response?.data?.results?.rows ?? [];
906
+ const rowIds = new Set(
907
+ rows.map((row) => row.id ?? row.hs_object_id).filter((id2) => id2 != null && id2 !== "").map((id2) => String(id2))
908
+ );
909
+ let newPrependNotes = state.prependNotes.filter((item) => {
910
+ const itemId = item.id ?? item.hs_object_id;
911
+ if (itemId == null || itemId === "") return true;
912
+ return !rowIds.has(String(itemId));
913
+ });
914
+ const id = payload?.params?.id;
915
+ if (state.id && state.id != id) {
916
+ newPrependNotes = [];
917
+ }
918
+ noteStore.setState({
919
+ notes: response,
920
+ prependNotes: newPrependNotes,
921
+ id
922
+ });
923
+ },
924
+ async setPrependNote(response) {
925
+ const state = noteStore.getState();
926
+ let rows = [];
927
+ if (response === "loading") {
928
+ const row = await state.notes?.data?.results?.columns.reduce((acc, item) => {
929
+ if (!item.hidden) {
930
+ acc[item.key] = "loading";
931
+ }
932
+ return acc;
933
+ }, {});
934
+ rows = [row, ...state.prependNotes];
935
+ } else if (response?.data) {
936
+ const data = response?.data;
937
+ if (!data) {
938
+ noteStore.setState({
939
+ prependNotes: []
940
+ });
941
+ }
942
+ const row = await Object.fromEntries(
943
+ Object.entries(data).map(([key, value]) => [
944
+ key,
945
+ value?.value ?? value
946
+ ])
947
+ );
948
+ rows = [...state.prependNotes];
949
+ if (rows.length > 0) {
950
+ rows[0] = row;
951
+ } else {
952
+ rows.push(row);
953
+ }
954
+ }
955
+ noteStore.setState({
956
+ prependNotes: rows
957
+ });
958
+ },
959
+ async updatePrependNote(response) {
960
+ const state = noteStore.getState();
961
+ const prependNotes = state.prependNotes || [];
962
+ const note = response.data || null;
963
+ const notes = prependNotes.map(
964
+ (item) => item?.hs_object_id === note?.hs_object_id?.value ? {
965
+ ...item,
966
+ ...Object.fromEntries(
967
+ Object.entries(note).map(([key, value]) => [
968
+ key,
969
+ value?.value ?? value
970
+ ])
971
+ )
972
+ } : item
973
+ );
974
+ noteStore.setState({
975
+ prependNotes: notes
976
+ });
977
+ }
978
+ };
979
+
980
+ // src/store2/use-email.ts
981
+ var emailStore = createStore2({
982
+ emails: [],
983
+ prependEmails: [],
984
+ id: ""
985
+ });
986
+ var actions3 = {
987
+ setEmails(response, payload) {
988
+ const state = emailStore.getState();
989
+ const rows = response?.data?.results?.rows ?? [];
990
+ const rowIds = new Set(
991
+ rows.map((row) => row.id ?? row.hs_object_id).filter((id2) => id2 != null && id2 !== "").map((id2) => String(id2))
992
+ );
993
+ let newPrependEmails = state.prependEmails.filter((item) => {
994
+ const itemId = item.id ?? item.hs_object_id;
995
+ if (itemId == null || itemId === "") return true;
996
+ return !rowIds.has(String(itemId));
997
+ });
998
+ const id = payload?.params?.id;
999
+ if (state.id && state.id != id) {
1000
+ newPrependEmails = [];
1001
+ }
1002
+ emailStore.setState({
1003
+ emails: response,
1004
+ prependEmails: newPrependEmails,
1005
+ id
1006
+ });
1007
+ },
1008
+ async setPrependEmail(response) {
1009
+ const state = emailStore.getState();
1010
+ let rows = [];
1011
+ if (response === "loading") {
1012
+ const row = await state.emails?.data?.results?.columns.reduce((acc, item) => {
1013
+ if (!item.hidden) {
1014
+ acc[item.key] = "loading";
1015
+ }
1016
+ return acc;
1017
+ }, {});
1018
+ rows = [row, ...state.prependEmails];
1019
+ } else if (response?.data) {
1020
+ const data = response?.data;
1021
+ if (!data) {
1022
+ emailStore.setState({
1023
+ prependEmails: []
1024
+ });
1025
+ }
1026
+ const row = await Object.fromEntries(
1027
+ Object.entries(data).map(([key, value]) => [
1028
+ key,
1029
+ value?.value ?? value
1030
+ ])
1031
+ );
1032
+ rows = [...state.prependEmails];
1033
+ if (rows.length > 0) {
1034
+ rows[0] = row;
1035
+ } else {
1036
+ rows.push(row);
1037
+ }
1038
+ }
1039
+ emailStore.setState({
1040
+ prependEmails: rows
1041
+ });
1042
+ },
1043
+ async updatePrependEmail(response) {
1044
+ const state = emailStore.getState();
1045
+ const prependEmails = state.prependEmails || [];
1046
+ const email = response.data || null;
1047
+ const emails = prependEmails.map(
1048
+ (item) => item?.hs_object_id === email?.hs_object_id?.value ? {
1049
+ ...item,
1050
+ ...Object.fromEntries(
1051
+ Object.entries(email).map(([key, value]) => [
1052
+ key,
1053
+ value?.value ?? value
1054
+ ])
1055
+ )
1056
+ } : item
1057
+ );
1058
+ emailStore.setState({
1059
+ prependEmails: emails
1060
+ });
1061
+ }
1062
+ };
1063
+
1064
+ export { actions, actions2, actions3, breadcrumbStage, createStore2 as createStore, decodeToBase64, emailStore, generatePath, generateUrl, getParam, getParamDetails, getPath, getRouteDetails, getRouteMenu, isMessingParent, isMessingParentLastItem, noteStore, tableStore2 as tableStore, useTable, useUpdateLink };
1065
+ //# sourceMappingURL=chunk-RDCT25UV.js.map
1066
+ //# sourceMappingURL=chunk-RDCT25UV.js.map