@wisemen/wise-crm-web 2.0.0-alpha.2 → 2.0.0-alpha.21

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.
@@ -1,1393 +0,0 @@
1
- import { defineComponent as x, ref as T, useTemplateRef as we, openBlock as d, createElementBlock as M, createBlock as g, unref as e, withCtx as c, createVNode as l, mergeProps as q, createElementVNode as S, toDisplayString as Q, nextTick as Pe, computed as w, createCommentVNode as I, renderSlot as ie, Fragment as H, createTextVNode as X, renderList as xe, useModel as De, mergeModels as Ie } from "vue";
2
- import { useRouteParams as Ne } from "@vueuse/router";
3
- import { useI18n as D } from "vue-i18n";
4
- import { aV as se, a$ as Se, b1 as $e, b4 as ke } from "./uuid.util-B9bkU4IX.js";
5
- import { _ as Fe } from "./CrmDetailView.vue_vue_type_script_setup_true_lang-BD-exgGM.js";
6
- import { d as $, e as L, f as Y, E as re, g as ue, h as Te, i as Me, L as Ve, j as Le, k as B, a as qe, P as Ee, l as Ae, m as Oe, n as Be, U as Qe, o as ee, p as Z, q as Ke, r as ce, s as de, I as je, t as me, v as ze, w as A, x as pe, y as Re, z as Ge, B as He, F as Ye, u as Ze, G as Je, H as We, J as Xe, K as ea, N as ae, O as fe, Q as aa, R as te, S as ta, T as na, V as la, W as oa, X as ia, Y as _e, Z as sa, $ as ra, a0 as ua, a1 as ca, a2 as da, a3 as ma, a4 as pa, a5 as fa, a6 as _a, a7 as ga, a8 as ya, a9 as ba, A as ha } from "./index-CLaJi9-Z.js";
7
- import { UITextField as K, toFormField as E, UIIconButton as ge, UIDropdownMenu as va, UIDropdownMenuGroup as Ua, UIDropdownMenuItem as ne, UIDialog as Ca, UIPhoneNumberField as le, UIFormDialog as wa, UIDialogHeader as Pa, UIDialogBody as xa, UIFormLayout as Da, UIFormFieldGroup as Ia, UIFormFieldGrid as oe, UIDialogFooter as Na, UIDialogFooterSubmit as Sa, createAutocompleteOptions as $a, createSelectOptions as R, UIAutocomplete as ka, UISelect as G, useOverlay as J, UIButton as Fa, UIBadge as ye } from "@wisemen/vue-core-design-system";
8
- import { useForm as j } from "formango";
9
- import z, { z as N } from "zod";
10
- import { useMutation as k, useQuery as be, useOffsetInfiniteQuery as Ta, useKeysetInfiniteQuery as Ma } from "@wisemen/vue-core-api-utils";
11
- import { Motion as Va } from "motion-v";
12
- import { useQueryClient as La, useMutation as qa } from "@tanstack/vue-query";
13
- function Ea() {
14
- return k({
15
- queryFn: async ({
16
- body: t,
17
- params: a
18
- }) => await $.update(a.dealUuid, {
19
- dealLanguage: t.dealLanguage
20
- }),
21
- queryKeysToInvalidate: {
22
- dealDetail: {
23
- dealUuid: (t) => t.dealUuid
24
- },
25
- dealIndex: {}
26
- }
27
- });
28
- }
29
- function Aa() {
30
- return k({
31
- queryFn: async ({
32
- body: t,
33
- params: a
34
- }) => await $.update(a.dealUuid, {
35
- dealSource: t.dealSource
36
- }),
37
- queryKeysToInvalidate: {
38
- dealDetail: {
39
- dealUuid: (t) => t.dealUuid
40
- },
41
- dealIndex: {}
42
- }
43
- });
44
- }
45
- function Oa() {
46
- return k({
47
- queryFn: async ({
48
- body: t,
49
- params: a
50
- }) => await $.update(a.dealUuid, {
51
- dealOwner: t.dealOwner
52
- }),
53
- queryKeysToInvalidate: {
54
- dealDetail: {
55
- dealUuid: (t) => t.dealUuid
56
- },
57
- dealIndex: {}
58
- }
59
- });
60
- }
61
- function Ba() {
62
- return k({
63
- queryFn: async ({
64
- body: t,
65
- params: a
66
- }) => await $.update(a.dealUuid, {
67
- name: t.name
68
- }),
69
- queryKeysToInvalidate: {
70
- dealDetail: {
71
- dealUuid: (t) => t.dealUuid
72
- },
73
- dealIndex: {}
74
- }
75
- });
76
- }
77
- const Qa = {
78
- key: 1,
79
- class: "flex justify-between"
80
- }, Ka = { class: "text-xl font-bold text-primary" }, ja = /* @__PURE__ */ x({
81
- __name: "DealDetailSidebarNameField",
82
- props: {
83
- deal: {}
84
- },
85
- setup(t) {
86
- const a = t, n = D(), i = L(), o = T(!1), r = we("nameFieldContainerRef"), p = Ba(), f = j({
87
- schema: z.object({
88
- name: z.string().min(1)
89
- }),
90
- onSubmit: async (_) => {
91
- try {
92
- await p.execute({
93
- body: {
94
- name: _.name
95
- },
96
- params: {
97
- dealUuid: a.deal.uuid
98
- }
99
- });
100
- } catch (y) {
101
- i.show(y);
102
- } finally {
103
- o.value = !1;
104
- }
105
- }
106
- }), m = f.register("name", a.deal.name);
107
- async function u() {
108
- o.value = !0, await Pe(), h();
109
- }
110
- function h() {
111
- r.value?.querySelector(
112
- "input"
113
- )?.focus();
114
- }
115
- function v() {
116
- if (!f.isDirty.value) {
117
- o.value = !1;
118
- return;
119
- }
120
- f.submit();
121
- }
122
- return (_, y) => (d(), M("div", {
123
- ref_key: "nameFieldContainerRef",
124
- ref: r
125
- }, [
126
- o.value ? (d(), g(Y, {
127
- key: 0,
128
- form: e(f)
129
- }, {
130
- default: c(() => [
131
- l(e(K), q(e(E)(e(m)), {
132
- "is-loading": e(f).isSubmitting.value,
133
- label: e(n).t("wise_crm.deal.detail.sidebar.name_field.label"),
134
- class: "[&_input]:text-xl [&_input]:font-bold",
135
- onBlur: v
136
- }), null, 16, ["is-loading", "label"]),
137
- y[0] || (y[0] = S("button", {
138
- type: "submit",
139
- class: "sr-only"
140
- }, null, -1))
141
- ]),
142
- _: 1
143
- }, 8, ["form"])) : (d(), M("div", Qa, [
144
- S("h2", Ka, Q(a.deal.name), 1),
145
- l(e(ge), {
146
- label: e(n).t("wise_crm.deal.detail.sidebar.name_field.edit_label"),
147
- icon: e(re),
148
- variant: "tertiary",
149
- class: "shrink-0",
150
- onClick: u
151
- }, null, 8, ["label", "icon"])
152
- ]))
153
- ], 512));
154
- }
155
- });
156
- function za() {
157
- const t = La(), a = "dealDetail", n = qa({
158
- mutationFn: async (i) => {
159
- const o = await $.setPrimaryContactPerson(i.dealUuid, i.contactPersonUuid);
160
- if (o.isErr())
161
- throw o.error;
162
- },
163
- onError: (i, o, r) => {
164
- t.setQueryData(
165
- [
166
- a,
167
- {
168
- dealUuid: o.dealUuid
169
- }
170
- ],
171
- r?.previousData
172
- );
173
- },
174
- onMutate: async (i) => {
175
- await t.cancelQueries({
176
- queryKey: [
177
- a,
178
- {
179
- dealUuid: i.dealUuid
180
- }
181
- ]
182
- });
183
- const o = t.getQueryData(
184
- [
185
- a,
186
- {
187
- dealUuid: i.dealUuid
188
- }
189
- ]
190
- );
191
- return o === void 0 ? {} : (t.setQueryData(
192
- [
193
- a,
194
- {
195
- dealUuid: i.dealUuid
196
- }
197
- ],
198
- o.map((r) => ({
199
- ...r,
200
- contactPersons: r.contactPersons.map((p) => ({
201
- ...p,
202
- isPrimary: p.uuid === i.contactPersonUuid
203
- }))
204
- }))
205
- ), {
206
- previousData: o
207
- });
208
- },
209
- onSettled: (i, o, r) => {
210
- r !== void 0 && t.invalidateQueries({
211
- queryKey: [
212
- a,
213
- {
214
- dealUuid: r.dealUuid
215
- }
216
- ]
217
- });
218
- }
219
- });
220
- return {
221
- isLoading: w(() => n.isPending.value),
222
- data: w(() => n.data.value),
223
- execute: async (i) => await n.mutateAsync(i.params)
224
- };
225
- }
226
- function Ra() {
227
- return k({
228
- queryFn: async ({
229
- body: t,
230
- params: a
231
- }) => await $.unlinkContactPerson(a.dealUuid, t.contactPersonUuid),
232
- queryKeysToInvalidate: {
233
- dealDetail: {
234
- dealUuid: (t) => t.dealUuid
235
- },
236
- dealIndex: {}
237
- }
238
- });
239
- }
240
- const Ga = { class: "flex items-start justify-between" }, Ha = { class: "flex flex-col items-start" }, Ya = {
241
- key: 1,
242
- class: "text-brand-700"
243
- }, Za = { class: "-mt-2 -mr-2 flex items-center justify-end" }, Ja = { class: "grid gap-lg" }, Wa = /* @__PURE__ */ x({
244
- __name: "CrmDetailSidebarAccordionGenericContactPersonInfo",
245
- props: {
246
- contactPerson: {},
247
- description: { default: null },
248
- onToggleIsPrimary: {}
249
- },
250
- emits: ["delete", "update"],
251
- setup(t, { emit: a }) {
252
- const n = t, i = a, o = D(), r = n.contactPerson.uuid ?? n.contactPerson.contactPersonUuid, p = {
253
- left: {
254
- icon: re,
255
- type: "icon"
256
- }
257
- }, f = {
258
- left: {
259
- icon: Ve,
260
- type: "icon"
261
- }
262
- };
263
- function m() {
264
- i("update");
265
- }
266
- function u() {
267
- i("delete");
268
- }
269
- function h() {
270
- n.onToggleIsPrimary();
271
- }
272
- return (v, _) => (d(), g(ue, { class: "flex flex-col gap-lg" }, {
273
- default: c(() => [
274
- S("div", Ga, [
275
- S("div", Ha, [
276
- e(r) ? (d(), g(Te, {
277
- key: 0,
278
- label: `${n.contactPerson.firstName} ${n.contactPerson.lastName}`,
279
- "entity-type": e(se).INDIVIDUAL,
280
- uuid: e(r),
281
- class: "-m-xs"
282
- }, null, 8, ["label", "entity-type", "uuid"])) : I("", !0),
283
- n.description ? (d(), M("p", Ya, Q(n.description), 1)) : I("", !0)
284
- ]),
285
- S("div", Za, [
286
- l(Me, {
287
- "is-active": n.contactPerson.isPrimary,
288
- onClick: h
289
- }, null, 8, ["is-active"]),
290
- l(e(va), { "popover-align": "end" }, {
291
- trigger: c(() => [
292
- l(e(ge), {
293
- icon: e(Le),
294
- variant: "tertiary",
295
- size: "sm",
296
- label: "actionMenu"
297
- }, null, 8, ["icon"])
298
- ]),
299
- content: c(() => [
300
- l(e(Ua), null, {
301
- default: c(() => [
302
- l(e(ne), {
303
- config: p,
304
- label: e(o).t("wise_crm.info_dialog.sidebar.overview.update_contact_person"),
305
- onSelect: m
306
- }, null, 8, ["label"]),
307
- l(e(ne), {
308
- "is-destructive": !0,
309
- "is-disabled": n.contactPerson.isPrimary,
310
- config: f,
311
- label: e(o).t("wise_crm.info_dialog.sidebar.overview.delete_contact_person"),
312
- onSelect: u
313
- }, null, 8, ["is-disabled", "label"])
314
- ]),
315
- _: 1
316
- })
317
- ]),
318
- _: 1
319
- })
320
- ])
321
- ]),
322
- S("div", Ja, [
323
- n.contactPerson.email !== null ? (d(), g(B, {
324
- key: 0,
325
- label: n.contactPerson.email,
326
- icon: e(qe)
327
- }, null, 8, ["label", "icon"])) : I("", !0),
328
- n.contactPerson.mobilePhone !== null ? (d(), g(B, {
329
- key: 1,
330
- label: n.contactPerson.mobilePhone,
331
- icon: e(Ee)
332
- }, null, 8, ["label", "icon"])) : I("", !0),
333
- n.contactPerson.phone !== null ? (d(), g(B, {
334
- key: 2,
335
- label: n.contactPerson.phone,
336
- icon: e(Ae)
337
- }, null, 8, ["label", "icon"])) : I("", !0)
338
- ])
339
- ]),
340
- _: 1
341
- }));
342
- }
343
- });
344
- function Xa() {
345
- return k({
346
- queryFn: async ({
347
- body: t,
348
- params: a
349
- }) => await $.linkContactPerson(
350
- a.dealUuid,
351
- t.contactPersonUuid,
352
- t.contactInfo
353
- ),
354
- queryKeysToInvalidate: {
355
- dealDetail: {
356
- dealUuid: (t) => t.dealUuid
357
- },
358
- dealIndex: {}
359
- }
360
- });
361
- }
362
- const et = /* @__PURE__ */ x({
363
- __name: "AppDialog",
364
- props: {
365
- title: {},
366
- description: {}
367
- },
368
- emits: ["close"],
369
- setup(t, { emit: a }) {
370
- const n = t, i = a;
371
- function o() {
372
- i("close");
373
- }
374
- return (r, p) => (d(), g(e(Ca), {
375
- size: "xl",
376
- onClose: o
377
- }, {
378
- default: c(() => [
379
- l(Oe, { class: "flex flex-1 flex-col gap-xl" }, {
380
- default: c(() => [
381
- l(Be, {
382
- title: n.title,
383
- description: n.description,
384
- icon: e(Qe)
385
- }, null, 8, ["title", "description", "icon"]),
386
- ie(r.$slots, "default")
387
- ]),
388
- _: 3
389
- })
390
- ]),
391
- _: 3
392
- }));
393
- }
394
- }), W = /* @__PURE__ */ x({
395
- __name: "ContactPersonFormContactField",
396
- props: {
397
- email: {},
398
- mobilePhone: {},
399
- phone: {}
400
- },
401
- setup(t) {
402
- const a = t, n = D();
403
- return (i, o) => (d(), M(H, null, [
404
- l(e(K), q(e(E)(a.email), {
405
- label: e(n).t("wise_crm.contact.create_dialog.form.fields.email"),
406
- placeholder: e(n).t("wise_crm.contact.create_dialog.form.fields.email"),
407
- class: "col-span-2"
408
- }), null, 16, ["label", "placeholder"]),
409
- l(ee, { class: "col-span-2" }, {
410
- default: c(() => [
411
- X(Q(e(n).t("wise_crm.contact.create_dialog.form.seperator_label")), 1)
412
- ]),
413
- _: 1
414
- }),
415
- l(e(le), q(e(E)(a.mobilePhone), {
416
- label: e(n).t("wise_crm.contact.create_dialog.form.fields.mobile_phone"),
417
- placeholder: e(n).t("wise_crm.contact.create_dialog.form.fields.mobile_phone"),
418
- class: "col-span-2"
419
- }), null, 16, ["label", "placeholder"]),
420
- l(ee, { class: "col-span-2" }, {
421
- default: c(() => [
422
- X(Q(e(n).t("wise_crm.contact.create_dialog.form.seperator_label")), 1)
423
- ]),
424
- _: 1
425
- }),
426
- l(e(le), q(e(E)(a.phone), {
427
- label: e(n).t("wise_crm.contact.create_dialog.form.fields.phone"),
428
- placeholder: e(n).t("wise_crm.contact.create_dialog.form.fields.phone"),
429
- class: "col-span-2"
430
- }), null, 16, ["label", "placeholder"])
431
- ], 64));
432
- }
433
- }), at = /* @__PURE__ */ x({
434
- __name: "DealContactPersonCreateExistingForm",
435
- props: {
436
- form: {}
437
- },
438
- emits: ["createNewContactPerson"],
439
- setup(t, { emit: a }) {
440
- const n = t, i = a, o = D(), r = n.form.register("email"), p = n.form.register("phone"), f = n.form.register("mobile"), m = n.form.register("existingContactPerson"), u = T(null);
441
- async function h(v) {
442
- if (u.value = v, m.setValue(v?.uuid ?? null), v === null)
443
- return;
444
- const _ = await je.getByUuid(v.uuid);
445
- if (_.isErr())
446
- return;
447
- const y = _.value;
448
- r.setValue(y.email), p.setValue(y.phone), f.setValue(y.mobilePhone);
449
- }
450
- return (v, _) => (d(), g(Y, {
451
- form: n.form,
452
- class: "flex h-full flex-1 flex-col justify-between pb-xl"
453
- }, {
454
- default: c(() => [
455
- l(Z, { cols: 2 }, {
456
- default: c(() => [
457
- l(Ke, {
458
- modelValue: u.value,
459
- "onUpdate:modelValue": [
460
- _[0] || (_[0] = (y) => u.value = y),
461
- h
462
- ],
463
- label: e(o).t("wise_crm.contact.create_dialog.form.fields.contact_person"),
464
- class: "col-span-2",
465
- onCreateNew: _[1] || (_[1] = (y) => i("createNewContactPerson"))
466
- }, null, 8, ["modelValue", "label"]),
467
- l(W, {
468
- email: e(r),
469
- "mobile-phone": e(f),
470
- phone: e(p)
471
- }, null, 8, ["email", "mobile-phone", "phone"])
472
- ]),
473
- _: 1
474
- }),
475
- l(ce, null, {
476
- default: c(() => [
477
- l(de, {
478
- "is-loading": n.form.isSubmitting.value,
479
- label: e(o).t("wise_crm.shared.add"),
480
- class: "col-span-2"
481
- }, null, 8, ["is-loading", "label"])
482
- ]),
483
- _: 1
484
- })
485
- ]),
486
- _: 1
487
- }, 8, ["form"]));
488
- }
489
- }), he = /* @__PURE__ */ x({
490
- __name: "ContactPersonFormNameField",
491
- props: {
492
- firstName: {},
493
- lastName: {}
494
- },
495
- setup(t) {
496
- const a = t, n = D();
497
- return (i, o) => (d(), M(H, null, [
498
- l(e(K), q(e(E)(a.firstName), {
499
- label: e(n).t("wise_crm.contact.create_dialog.form.fields.first_name"),
500
- placeholder: e(n).t("wise_crm.contact.create_dialog.form.fields.first_name")
501
- }), null, 16, ["label", "placeholder"]),
502
- l(e(K), q(e(E)(a.lastName), {
503
- label: e(n).t("wise_crm.contact.create_dialog.form.fields.last_name"),
504
- placeholder: e(n).t("wise_crm.contact.create_dialog.form.fields.last_name")
505
- }), null, 16, ["label", "placeholder"])
506
- ], 64));
507
- }
508
- }), tt = /* @__PURE__ */ x({
509
- __name: "DealContactPersonCreateNewForm",
510
- props: {
511
- form: {}
512
- },
513
- setup(t) {
514
- const a = t, n = a.form.register("firstName"), i = a.form.register("lastName"), o = a.form.register("email"), r = a.form.register("mobilePhone"), p = a.form.register("phone");
515
- return (f, m) => (d(), g(Y, {
516
- form: a.form,
517
- class: "flex h-full flex-col justify-between pb-xl"
518
- }, {
519
- default: c(() => [
520
- l(Z, { cols: 2 }, {
521
- default: c(() => [
522
- l(he, {
523
- "first-name": e(n),
524
- "last-name": e(i)
525
- }, null, 8, ["first-name", "last-name"]),
526
- l(W, {
527
- email: e(o),
528
- "mobile-phone": e(r),
529
- phone: e(p)
530
- }, null, 8, ["email", "mobile-phone", "phone"]),
531
- l(me, {
532
- form: a.form
533
- }, null, 8, ["form"])
534
- ]),
535
- _: 1
536
- }),
537
- ie(f.$slots, "actions")
538
- ]),
539
- _: 3
540
- }, 8, ["form"]));
541
- }
542
- }), nt = z.object({
543
- email: z.email().nullable(),
544
- existingContactPerson: ze,
545
- mobile: A.nullable(),
546
- phone: A.nullable()
547
- }), lt = N.object({
548
- email: N.email().min(1).nullable(),
549
- firstName: N.string().min(1),
550
- lastName: N.string().min(1),
551
- mobilePhone: A.nullable(),
552
- phone: A.nullable()
553
- }).superRefine((t, a) => {
554
- t.email !== null && t.email !== "" || t.mobilePhone !== null && t.mobilePhone !== "" || t.phone !== null && t.phone !== "" || a.addIssue({
555
- code: N.ZodIssueCode.custom,
556
- message: pe.global.t("wise_crm.form.errors.at_least_one")
557
- });
558
- }), ot = /* @__PURE__ */ x({
559
- __name: "DealContactPersonCreateDialog",
560
- props: {
561
- dealUuid: {},
562
- isCreatingNewContactPerson: { type: Boolean, default: !1 }
563
- },
564
- emits: ["close", "createNewContactPerson"],
565
- setup(t, { emit: a }) {
566
- const n = t, i = a, o = D(), r = L(), p = Xa(), f = Re(), m = T(n.isCreatingNewContactPerson), u = j({
567
- schema: lt,
568
- onSubmit: async (s) => {
569
- try {
570
- const b = await f.execute({
571
- body: {
572
- email: s.email,
573
- firstName: s.firstName,
574
- lastName: s.lastName,
575
- mobilePhone: s.mobilePhone,
576
- phone: s.phone
577
- }
578
- });
579
- if (b.isErr()) {
580
- r.show(b.error);
581
- return;
582
- }
583
- const C = b.value;
584
- n.isCreatingNewContactPerson || await p.execute({
585
- body: {
586
- contactPersonUuid: C,
587
- contactInfo: {
588
- email: s.email,
589
- mobilePhone: s.mobilePhone,
590
- phone: s.phone
591
- }
592
- },
593
- params: {
594
- dealUuid: n.dealUuid
595
- }
596
- }), y({
597
- label: `${s.firstName} ${s.lastName}`,
598
- value: C
599
- });
600
- } catch (b) {
601
- r.show(b);
602
- }
603
- }
604
- }), h = j({
605
- schema: nt,
606
- onSubmit: async (s) => {
607
- await _(
608
- s.existingContactPerson,
609
- {
610
- email: s.email,
611
- mobilePhone: s.mobile,
612
- phone: s.phone
613
- }
614
- );
615
- }
616
- });
617
- function v() {
618
- m.value = !0;
619
- }
620
- async function _(s, b) {
621
- if (s !== null)
622
- try {
623
- await p.execute({
624
- body: {
625
- contactPersonUuid: s,
626
- contactInfo: b
627
- },
628
- params: {
629
- dealUuid: n.dealUuid
630
- }
631
- }), y();
632
- } catch (C) {
633
- r.show(C);
634
- }
635
- }
636
- function y(s) {
637
- if (s === void 0) {
638
- i("close");
639
- return;
640
- }
641
- i("createNewContactPerson", s), i("close");
642
- }
643
- return (s, b) => (d(), g(et, {
644
- title: e(o).t("wise_crm.info_dialog.contact_person_create.title"),
645
- description: e(o).t("wise_crm.info_dialog.contact_person_create.description"),
646
- onClose: y
647
- }, {
648
- default: c(() => [
649
- m.value ? (d(), g(tt, {
650
- key: 0,
651
- form: e(u)
652
- }, {
653
- actions: c(() => [
654
- l(ce, null, {
655
- default: c(() => [
656
- l(de, {
657
- "is-loading": e(u).isSubmitting.value,
658
- label: e(o).t("wise_crm.shared.create")
659
- }, null, 8, ["is-loading", "label"])
660
- ]),
661
- _: 1
662
- })
663
- ]),
664
- _: 1
665
- }, 8, ["form"])) : (d(), g(at, {
666
- key: 1,
667
- form: e(h),
668
- onCreateNewContactPerson: v
669
- }, null, 8, ["form"]))
670
- ]),
671
- _: 1
672
- }, 8, ["title", "description"]));
673
- }
674
- });
675
- function it() {
676
- return k({
677
- queryFn: async ({
678
- body: t,
679
- params: a
680
- }) => await $.updateContactPerson(a.dealUuid, a.contactPersonUuid, t.form),
681
- queryKeysToInvalidate: {
682
- dealContactPersonDetail: {
683
- contactPersonUuid: (t) => t.contactPersonUuid,
684
- dealUuid: (t) => t.dealUuid
685
- },
686
- dealDetail: {
687
- dealUuid: (t) => t.dealUuid
688
- },
689
- dealIndex: {}
690
- }
691
- });
692
- }
693
- function st(t, a) {
694
- return be("dealContactPersonDetail", {
695
- params: {
696
- contactPersonUuid: a,
697
- dealUuid: t
698
- },
699
- queryFn: () => $.getContactPerson(t.value, a.value)
700
- });
701
- }
702
- const rt = N.object({
703
- email: N.email().min(1).nullable(),
704
- firstName: N.string().min(1),
705
- lastName: N.string().min(1),
706
- mobilePhone: A.nullable(),
707
- phone: A.nullable()
708
- }).superRefine((t, a) => {
709
- t.email !== null && t.email !== "" || t.mobilePhone !== null && t.mobilePhone !== "" || t.phone !== null && t.phone !== "" || a.addIssue({
710
- code: N.ZodIssueCode.custom,
711
- message: pe.global.t("wise_crm.form.errors.at_least_one")
712
- });
713
- }), ut = /* @__PURE__ */ x({
714
- __name: "DealContactPersonUpdateDialog",
715
- props: {
716
- contactPersonUuid: {},
717
- dealUuid: {}
718
- },
719
- emits: ["close"],
720
- setup(t, { emit: a }) {
721
- const n = t, i = a, o = D(), r = L(), p = it(), f = st(
722
- w(() => n.dealUuid),
723
- w(() => n.contactPersonUuid)
724
- ), m = w(() => f.result.value.isOk() ? f.result.value.getValue() : null), u = j({
725
- initialState: w(() => m.value === null ? null : {
726
- email: m.value.email,
727
- firstName: m.value.firstName,
728
- lastName: m.value.lastName,
729
- mobilePhone: m.value.mobilePhone,
730
- phone: m.value.phone
731
- }),
732
- schema: rt,
733
- onSubmit: async (F) => {
734
- await b(F);
735
- }
736
- }), h = u.register("firstName"), v = u.register("lastName"), _ = u.register("email"), y = u.register("mobilePhone"), s = u.register("phone");
737
- async function b(F) {
738
- try {
739
- await p.execute({
740
- body: {
741
- form: F
742
- },
743
- params: {
744
- contactPersonUuid: n.contactPersonUuid,
745
- dealUuid: n.dealUuid
746
- }
747
- }), i("close");
748
- } catch (O) {
749
- r.show(O);
750
- }
751
- }
752
- function C() {
753
- i("close");
754
- }
755
- return (F, O) => (d(), g(e(wa), {
756
- form: e(u),
757
- size: "md",
758
- onClose: C
759
- }, {
760
- default: c(() => [
761
- l(e(Pa), {
762
- title: e(o).t("wise_crm.info_dialog.contact_person_update.title"),
763
- description: e(o).t("wise_crm.info_dialog.contact_person_create.description")
764
- }, null, 8, ["title", "description"]),
765
- m.value !== null ? (d(), g(e(xa), { key: 0 }, {
766
- default: c(() => [
767
- l(e(Da), null, {
768
- default: c(() => [
769
- l(e(Ia), null, {
770
- default: c(() => [
771
- l(e(oe), {
772
- sm: 1,
773
- lg: 2
774
- }, {
775
- default: c(() => [
776
- l(he, {
777
- "first-name": e(h),
778
- "last-name": e(v)
779
- }, null, 8, ["first-name", "last-name"])
780
- ]),
781
- _: 1
782
- })
783
- ]),
784
- _: 1
785
- }),
786
- l(Ge, {
787
- title: e(o).t("wise_crm.shared.contact_info")
788
- }, {
789
- default: c(() => [
790
- l(e(oe), {
791
- sm: 1,
792
- lg: 1,
793
- variant: "card"
794
- }, {
795
- default: c(() => [
796
- l(W, {
797
- email: e(_),
798
- "mobile-phone": e(y),
799
- phone: e(s)
800
- }, null, 8, ["email", "mobile-phone", "phone"])
801
- ]),
802
- _: 1
803
- }),
804
- l(me, { form: e(u) }, null, 8, ["form"])
805
- ]),
806
- _: 1
807
- }, 8, ["title"])
808
- ]),
809
- _: 1
810
- })
811
- ]),
812
- _: 1
813
- })) : I("", !0),
814
- l(e(Na), null, {
815
- right: c(() => [
816
- l(e(Sa), {
817
- "is-loading": e(u).isSubmitting.value,
818
- label: e(o).t("wise_crm.shared.save_changes")
819
- }, null, 8, ["is-loading", "label"])
820
- ]),
821
- _: 1
822
- })
823
- ]),
824
- _: 1
825
- }, 8, ["form"]));
826
- }
827
- });
828
- function ct(t) {
829
- return Ta("userIndex", {
830
- params: t,
831
- queryFn: (a) => He.getAll({
832
- pagination: a,
833
- search: t.params.search?.value
834
- })
835
- });
836
- }
837
- const dt = { class: "p-lg" }, mt = /* @__PURE__ */ x({
838
- __name: "DealDetailSidebarGeneralInfo",
839
- props: {
840
- deal: {}
841
- },
842
- setup(t) {
843
- const a = t, n = D(), i = L(), o = Ea(), r = Aa(), p = Oa(), f = Ye({
844
- persistInUrl: !1
845
- }), m = ct({
846
- params: {
847
- search: f.debouncedSearch
848
- }
849
- }), u = T(a.deal.dealLanguage), h = T(a.deal.dealSource), v = T(
850
- a.deal.owner ? {
851
- uuid: a.deal.owner.uuid,
852
- name: a.deal.owner.name
853
- } : null
854
- ), _ = w(() => {
855
- const U = (m.result.value.isOk() ? m.result.value.getValue().data : []).map((P) => ({
856
- uuid: P.uuid,
857
- name: `${P.firstName} ${P.lastName}`
858
- }));
859
- return $a(U);
860
- });
861
- function y(U) {
862
- return n.t(We.getI18nKey(U));
863
- }
864
- function s(U) {
865
- return n.t(Xe.getI18nKey(U));
866
- }
867
- const b = R(Object.values(Se)), C = R(Object.values($e)), F = Ze();
868
- function O(U) {
869
- f.updateSearch(U);
870
- }
871
- async function ve(U) {
872
- if (u.value = U, U !== null)
873
- try {
874
- await o.execute({
875
- body: {
876
- dealLanguage: U
877
- },
878
- params: {
879
- dealUuid: a.deal.uuid
880
- }
881
- });
882
- } catch (P) {
883
- i.show(P);
884
- }
885
- }
886
- async function Ue(U) {
887
- if (h.value = U, U !== null)
888
- try {
889
- await r.execute({
890
- body: {
891
- dealSource: U
892
- },
893
- params: {
894
- dealUuid: a.deal.uuid
895
- }
896
- });
897
- } catch (P) {
898
- i.show(P);
899
- }
900
- }
901
- async function Ce(U) {
902
- if (v.value = U, U !== null)
903
- try {
904
- await p.execute({
905
- body: {
906
- dealOwner: U
907
- },
908
- params: {
909
- dealUuid: a.deal.uuid
910
- }
911
- });
912
- } catch (P) {
913
- i.show(P);
914
- }
915
- }
916
- return (U, P) => (d(), M("div", null, [
917
- l(ue, null, {
918
- default: c(() => [
919
- S("form", null, [
920
- l(Z, { cols: 1 }, {
921
- default: c(() => [
922
- l(e(ka), {
923
- modelValue: v.value,
924
- "onUpdate:modelValue": [
925
- P[0] || (P[0] = (V) => v.value = V),
926
- Ce
927
- ],
928
- items: _.value,
929
- "display-fn": (V) => V.name,
930
- "is-loading": e(m).isLoading.value || e(p).isLoading.value,
931
- "search-mode": "remote",
932
- placeholder: "Select deal owner",
933
- label: "Deal owner",
934
- "onUpdate:search": O
935
- }, null, 8, ["modelValue", "items", "display-fn", "is-loading"]),
936
- l(e(G), {
937
- modelValue: u.value,
938
- "onUpdate:modelValue": [
939
- P[1] || (P[1] = (V) => u.value = V),
940
- ve
941
- ],
942
- label: e(n).t("wise_crm.deal.form.fields.language"),
943
- placeholder: e(n).t("wise_crm.deal.form.fields.language_placeholder"),
944
- "display-fn": y,
945
- "is-loading": e(o).isLoading.value,
946
- items: e(b)
947
- }, null, 8, ["modelValue", "label", "placeholder", "is-loading", "items"]),
948
- l(e(G), {
949
- modelValue: h.value,
950
- "onUpdate:modelValue": [
951
- P[2] || (P[2] = (V) => h.value = V),
952
- Ue
953
- ],
954
- "display-fn": s,
955
- label: e(n).t("wise_crm.deal.form.fields.source"),
956
- placeholder: e(n).t("wise_crm.deal.form.fields.source_placeholder"),
957
- "is-loading": e(r).isLoading.value,
958
- items: e(C)
959
- }, null, 8, ["modelValue", "label", "placeholder", "is-loading", "items"])
960
- ]),
961
- _: 1
962
- })
963
- ])
964
- ]),
965
- _: 1
966
- }),
967
- S("div", dt, [
968
- l(B, {
969
- label: e(n).t("wise_crm.deal.sidebar.created_at", {
970
- date: e(F).toDate(a.deal.createdAt.toPlainDate())
971
- }),
972
- icon: e(Je),
973
- "text-color": "text-quaternary",
974
- class: "text-sm"
975
- }, null, 8, ["label", "icon"])
976
- ])
977
- ]));
978
- }
979
- }), pt = /* @__PURE__ */ x({
980
- __name: "DealDetailSidebarOverviewContent",
981
- props: {
982
- deal: {}
983
- },
984
- setup(t) {
985
- const a = t, n = D(), i = L(), o = za(), r = Ra(), p = J(), f = p.create(ot), m = p.create(ut), u = w(() => a.deal.contactPersons.length > 0);
986
- function h() {
987
- f.open({
988
- dealUuid: a.deal.uuid
989
- });
990
- }
991
- function v(s) {
992
- m.open({
993
- contactPersonUuid: s,
994
- dealUuid: a.deal.uuid
995
- });
996
- }
997
- async function _(s) {
998
- try {
999
- await r.execute({
1000
- body: {
1001
- contactPersonUuid: s
1002
- },
1003
- params: {
1004
- dealUuid: a.deal.uuid
1005
- }
1006
- });
1007
- } catch (b) {
1008
- i.show(b);
1009
- }
1010
- }
1011
- function y(s) {
1012
- o.execute({
1013
- params: {
1014
- contactPersonUuid: s,
1015
- dealUuid: a.deal.uuid
1016
- }
1017
- });
1018
- }
1019
- return (s, b) => (d(), g(ea, { "default-values": ["general-info", "contact-persons"] }, {
1020
- default: c(() => [
1021
- l(ae, {
1022
- label: e(n).t("wise_crm.deal.detail.sidebar.accordion.general_info"),
1023
- icon: e(fe),
1024
- value: "general-info"
1025
- }, {
1026
- default: c(() => [
1027
- l(mt, {
1028
- deal: a.deal
1029
- }, null, 8, ["deal"])
1030
- ]),
1031
- _: 1
1032
- }, 8, ["label", "icon"]),
1033
- l(ae, {
1034
- "is-empty": !u.value,
1035
- label: e(n).t("wise_crm.info_dialog.sidebar.overview.contact_persons_label"),
1036
- icon: e(aa),
1037
- value: "contact-persons",
1038
- onAdd: h
1039
- }, {
1040
- actions: c(() => [
1041
- u.value ? I("", !0) : (d(), g(ta, {
1042
- key: 0,
1043
- label: e(n).t("wise_crm.info_dialog.sidebar.overview.contact_persons_label"),
1044
- icon: e(te),
1045
- class: "z-1",
1046
- onClick: h
1047
- }, null, 8, ["label", "icon"]))
1048
- ]),
1049
- default: c(() => [
1050
- (d(!0), M(H, null, xe(a.deal.contactPersons, (C) => (d(), g(e(Va), {
1051
- key: C.uuid,
1052
- "layout-id": C.uuid
1053
- }, {
1054
- default: c(() => [
1055
- l(Wa, {
1056
- "contact-person": C,
1057
- "on-toggle-is-primary": () => y(C.uuid),
1058
- description: C.phone,
1059
- onUpdate: (F) => v(C.uuid),
1060
- onDelete: (F) => _(C.uuid)
1061
- }, null, 8, ["contact-person", "on-toggle-is-primary", "description", "onUpdate", "onDelete"])
1062
- ]),
1063
- _: 2
1064
- }, 1032, ["layout-id"]))), 128)),
1065
- u.value ? (d(), g(e(Fa), {
1066
- key: 0,
1067
- "icon-left": e(te),
1068
- label: e(n).t("wise_crm.shared.add"),
1069
- variant: "tertiary",
1070
- size: "sm",
1071
- onClick: h
1072
- }, null, 8, ["icon-left", "label"])) : I("", !0)
1073
- ]),
1074
- _: 1
1075
- }, 8, ["is-empty", "label", "icon"])
1076
- ]),
1077
- _: 1
1078
- }));
1079
- }
1080
- });
1081
- function ft() {
1082
- return k({
1083
- queryFn: async ({
1084
- body: t,
1085
- params: a
1086
- }) => await $.transition(a.dealUuid, t.toBoardColumnUuid),
1087
- queryKeysToInvalidate: {
1088
- dealDetail: {
1089
- dealUuid: (t) => t.dealUuid
1090
- },
1091
- dealIndex: {}
1092
- }
1093
- });
1094
- }
1095
- function _t(t, a) {
1096
- return be("boardColumnsTransition", {
1097
- params: {
1098
- boardColumnUuid: t
1099
- },
1100
- queryFn: () => na.getTransitions(t.value, a.value)
1101
- });
1102
- }
1103
- const gt = /* @__PURE__ */ x({
1104
- __name: "DealDetailSidebarTransitionSelect",
1105
- props: /* @__PURE__ */ Ie({
1106
- deal: {}
1107
- }, {
1108
- modelValue: {
1109
- required: !0
1110
- },
1111
- modelModifiers: {}
1112
- }),
1113
- emits: ["update:modelValue"],
1114
- setup(t) {
1115
- const a = t, n = D(), i = la(), r = J().create(oa), p = De(t, "modelValue"), f = L(), m = ft(), u = _t(
1116
- w(() => p.value.toColumnUuid),
1117
- w(() => i.getOptions().deals?.allowedTransitionTriggerTypes ?? [])
1118
- ), h = w(() => (u.result.value.isOk() ? u.result.value.getValue() : []).flatMap((b) => b.triggers.length === 0 ? [
1119
- b
1120
- ] : b.triggers.map((C) => ({
1121
- ...b,
1122
- toColumnDisplayName: b.toColumnDisplayName,
1123
- triggers: [
1124
- C
1125
- ]
1126
- }))));
1127
- function v(s) {
1128
- return s?.toColumnDisplayName ?? "-";
1129
- }
1130
- const _ = w(() => R(h.value));
1131
- async function y(s) {
1132
- if (s.triggers.length !== 0) {
1133
- if (s.triggers[0]?.triggerType === ke.EMAIL) {
1134
- r.open({
1135
- dealUuid: a.deal.uuid,
1136
- client: {
1137
- uuid: a.deal.client.uuid,
1138
- type: a.deal.client.type
1139
- },
1140
- templateKey: s.triggers[0].config.mailTemplateKey
1141
- });
1142
- return;
1143
- }
1144
- try {
1145
- p.value = s, await m.execute({
1146
- body: {
1147
- toBoardColumnUuid: s.toColumnUuid
1148
- },
1149
- params: {
1150
- dealUuid: a.deal.uuid
1151
- }
1152
- });
1153
- } catch (b) {
1154
- f.show(b);
1155
- }
1156
- }
1157
- }
1158
- return (s, b) => (d(), g(ia, {
1159
- color: p.value?.toColumnColor ?? null
1160
- }, {
1161
- default: c(() => [
1162
- h.value.length === 0 ? (d(), g(e(ye), {
1163
- key: 0,
1164
- "class-config": {
1165
- root: "text-nowrap"
1166
- },
1167
- label: p.value.toColumnDisplayName,
1168
- variant: "translucent",
1169
- color: "brand"
1170
- }, null, 8, ["label"])) : (d(), g(e(G), {
1171
- key: 1,
1172
- "model-value": p.value,
1173
- "is-loading": e(m).isLoading.value,
1174
- "display-fn": v,
1175
- items: _.value,
1176
- "is-label-hidden": !0,
1177
- placeholder: e(n).t("wise_crm.deal.transition.placeholder"),
1178
- label: e(n).t("wise_crm.deal.transition.label"),
1179
- size: "sm",
1180
- "onUpdate:modelValue": y
1181
- }, null, 8, ["model-value", "is-loading", "items", "placeholder", "label"]))
1182
- ]),
1183
- _: 1
1184
- }, 8, ["color"]));
1185
- }
1186
- });
1187
- function yt() {
1188
- return k({
1189
- queryFn: async ({
1190
- body: t,
1191
- params: a
1192
- }) => await _e.create(t, {
1193
- dealUuid: a.dealUuid
1194
- }),
1195
- queryKeysToInvalidate: {
1196
- noteDealIndex: {}
1197
- }
1198
- });
1199
- }
1200
- function bt(t, a) {
1201
- return Ma("noteDealIndex", {
1202
- params: {
1203
- params: a?.params
1204
- },
1205
- queryFn: (n) => _e.getDealNotes({
1206
- pagination: n
1207
- }, t.value)
1208
- });
1209
- }
1210
- const ht = /* @__PURE__ */ x({
1211
- __name: "DealDialogSidebarNotesContent",
1212
- props: {
1213
- deal: {}
1214
- },
1215
- setup(t) {
1216
- const a = t, i = J().create(sa), o = L(), r = yt(), p = ra(), f = bt(
1217
- w(() => a.deal.uuid)
1218
- ), m = w(() => f.result.value.isOk() ? f.result.value.getValue().data : []);
1219
- async function u(_) {
1220
- await r.execute({
1221
- body: _,
1222
- params: {
1223
- dealUuid: a.deal.uuid
1224
- }
1225
- });
1226
- }
1227
- async function h(_) {
1228
- try {
1229
- await p.execute({
1230
- params: {
1231
- noteUuid: _
1232
- }
1233
- });
1234
- } catch (y) {
1235
- o.show(y);
1236
- }
1237
- }
1238
- function v(_) {
1239
- i.open({
1240
- note: _
1241
- });
1242
- }
1243
- return (_, y) => (d(), g(ua, {
1244
- "is-loading": e(f).isLoading.value,
1245
- notes: m.value,
1246
- "on-submit": u,
1247
- "has-next-page": e(f).hasNextPage.value,
1248
- onNext: y[0] || (y[0] = (s) => e(f).fetchNextPage()),
1249
- onDelete: h,
1250
- onUpdate: v
1251
- }, null, 8, ["is-loading", "notes", "has-next-page"]));
1252
- }
1253
- }), vt = { class: "flex h-full flex-1 flex-col" }, Ut = { class: "flex flex-col gap-xl rounded-2xl border border-primary p-xl" }, Ct = { class: "flex w-full flex-wrap items-center gap-sm" }, wt = /* @__PURE__ */ x({
1254
- __name: "DealDetailSidebar",
1255
- props: {
1256
- deal: {}
1257
- },
1258
- setup(t) {
1259
- const a = t, n = D(), i = ca(), o = T(
1260
- "overview"
1261
- /* OVERVIEW */
1262
- ), r = T({
1263
- // There is no uuid available for the initial value, so a placeholder is used
1264
- uuid: "",
1265
- toColumnUuid: a.deal.boardColumn.uuid,
1266
- toColumnColor: a.deal.boardColumn.color,
1267
- toColumnDisplayName: a.deal.boardColumn.displayName,
1268
- toColumnKey: "",
1269
- triggers: []
1270
- }), p = w(() => [
1271
- {
1272
- icon: fe,
1273
- label: n.t("wise_crm.shared.overview"),
1274
- value: "overview"
1275
- /* OVERVIEW */
1276
- },
1277
- {
1278
- icon: da,
1279
- label: n.t("wise_crm.shared.activity"),
1280
- value: "activity"
1281
- /* ACTIVITY */
1282
- },
1283
- {
1284
- icon: ma,
1285
- label: n.t("wise_crm.shared.notes"),
1286
- value: "notes"
1287
- /* NOTES */
1288
- }
1289
- ]);
1290
- return (f, m) => (d(), M("div", vt, [
1291
- S("div", Ut, [
1292
- l(ja, {
1293
- deal: a.deal
1294
- }, null, 8, ["deal"]),
1295
- S("div", Ct, [
1296
- l(pa, {
1297
- onClick: m[0] || (m[0] = (u) => e(i).openBusinessDetail(
1298
- a.deal.client.uuid
1299
- ))
1300
- }, {
1301
- default: c(() => [
1302
- l(e(ye), {
1303
- "class-config": {
1304
- icon: "shrink-0 size-4",
1305
- root: "text-nowrap"
1306
- },
1307
- icon: e(fa),
1308
- label: a.deal.client.name,
1309
- variant: "translucent",
1310
- color: "brand"
1311
- }, null, 8, ["icon", "label"])
1312
- ]),
1313
- _: 1
1314
- }),
1315
- l(gt, {
1316
- modelValue: r.value,
1317
- "onUpdate:modelValue": m[1] || (m[1] = (u) => r.value = u),
1318
- deal: a.deal
1319
- }, null, 8, ["modelValue", "deal"])
1320
- ])
1321
- ]),
1322
- l(_a, {
1323
- modelValue: o.value,
1324
- "onUpdate:modelValue": m[2] || (m[2] = (u) => o.value = u),
1325
- tabs: p.value
1326
- }, {
1327
- default: c(() => [
1328
- o.value === "overview" ? (d(), g(pt, {
1329
- key: 0,
1330
- deal: a.deal
1331
- }, null, 8, ["deal"])) : o.value === "notes" ? (d(), g(ht, {
1332
- key: 1,
1333
- deal: a.deal
1334
- }, null, 8, ["deal"])) : I("", !0)
1335
- ]),
1336
- _: 1
1337
- }, 8, ["modelValue", "tabs"])
1338
- ]));
1339
- }
1340
- }), Pt = /* @__PURE__ */ x({
1341
- __name: "DealDetailSidebarProvider",
1342
- props: {
1343
- dealUuid: {}
1344
- },
1345
- setup(t) {
1346
- const a = t, n = ga(
1347
- w(() => a.dealUuid)
1348
- ), i = D();
1349
- return (o, r) => (d(), g(ya, null, {
1350
- default: c(() => [
1351
- e(n).isError.value ? (d(), g(ba, {
1352
- key: 0,
1353
- message: e(i).t("error.deal_details.description"),
1354
- title: e(i).t("error.deal_details.title")
1355
- }, null, 8, ["message", "title"])) : e(n).isLoading.value ? (d(), g(ha, {
1356
- key: 1,
1357
- class: "h-full"
1358
- })) : e(n).result.value.isOk() ? (d(), g(wt, {
1359
- key: e(n).result.value.getValue().boardColumn.uuid,
1360
- deal: e(n).result.value.getValue()
1361
- }, null, 8, ["deal"])) : I("", !0)
1362
- ]),
1363
- _: 1
1364
- }));
1365
- }
1366
- }), qt = /* @__PURE__ */ x({
1367
- __name: "DealDetailView",
1368
- props: {
1369
- tabs: {}
1370
- },
1371
- setup(t) {
1372
- const a = t, n = D(), i = Ne("dealUuid"), o = w(() => [
1373
- ...a.tabs,
1374
- {
1375
- label: w(() => n.t("wise_crm.deal.detail_view.communication_tab_label")),
1376
- to: "deal-communication"
1377
- }
1378
- ]);
1379
- return (r, p) => (d(), g(Fe, {
1380
- key: e(i),
1381
- "entity-type": e(se).BUSINESS,
1382
- tabs: o.value
1383
- }, {
1384
- sidebar: c(() => [
1385
- l(Pt, { "deal-uuid": e(i) }, null, 8, ["deal-uuid"])
1386
- ]),
1387
- _: 1
1388
- }, 8, ["entity-type", "tabs"]));
1389
- }
1390
- });
1391
- export {
1392
- qt as default
1393
- };