cja-phoenix 1.0.11 → 1.0.12
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.
- package/dist/module.json +1 -1
- package/dist/module.mjs +2 -1
- package/dist/runtime/components/StickyContainer.vue +1 -1
- package/dist/runtime/components/funnel/Header.vue +66 -0
- package/dist/runtime/components/funnel/Header.vue.d.ts +7 -0
- package/dist/runtime/components/funnel/Submit.vue +68 -0
- package/dist/runtime/components/funnel/Submit.vue.d.ts +21 -0
- package/dist/runtime/{utils/gtm.d.ts → composables/useCjaGtm.d.ts} +2 -3
- package/dist/runtime/{utils/gtm.js → composables/useCjaGtm.js} +47 -17
- package/dist/runtime/composables/useFunnelConfig.d.ts +10 -0
- package/dist/runtime/composables/useFunnelConfig.js +50 -0
- package/dist/runtime/composables/useJourneyConfig.d.ts +11 -0
- package/dist/runtime/composables/useJourneyConfig.js +13 -0
- package/dist/runtime/types/JourneyConfig.d.ts +9 -0
- package/dist/runtime/utils/applyProductData.d.ts +2 -2
- package/dist/runtime/utils/applyProductData.js +18 -14
- package/dist/runtime/utils/updateForm.d.ts +1 -1
- package/dist/runtime/utils/updateForm.js +25 -21
- package/dist/runtime/utils/updateMarketingConsent.d.ts +1 -1
- package/dist/runtime/utils/updateMarketingConsent.js +12 -8
- package/dist/runtime/utils/uploadFile.d.ts +0 -1
- package/dist/runtime/utils/uploadFile.js +3 -1
- package/package.json +3 -1
- package/dist/runtime/types/funnelConfig.d.ts +0 -12
- package/dist/runtime/utils/index.d.ts +0 -1
- package/dist/runtime/utils/index.js +0 -1
- /package/dist/runtime/{utils → composables}/useHeaderHeight.d.ts +0 -0
- /package/dist/runtime/{utils → composables}/useHeaderHeight.js +0 -0
- /package/dist/runtime/{utils → composables}/useValidateForm.d.ts +0 -0
- /package/dist/runtime/{utils → composables}/useValidateForm.js +0 -0
- /package/dist/runtime/types/{funnelConfig.js → JourneyConfig.js} +0 -0
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -5,7 +5,7 @@ const module = defineNuxtModule({
|
|
|
5
5
|
name: "cja-phoenix",
|
|
6
6
|
configKey: "cja-phoenix"
|
|
7
7
|
},
|
|
8
|
-
setup(_options, _nuxt) {
|
|
8
|
+
async setup(_options, _nuxt) {
|
|
9
9
|
const { resolve } = createResolver(import.meta.url);
|
|
10
10
|
const nuxtOptions = _nuxt.options;
|
|
11
11
|
nuxtOptions.vite.css ||= {};
|
|
@@ -18,6 +18,7 @@ const module = defineNuxtModule({
|
|
|
18
18
|
`;
|
|
19
19
|
nuxtOptions.css.push(resolve("./runtime/assets/scss/tippy.scss"));
|
|
20
20
|
nuxtOptions.css.push(resolve("./runtime/assets/iconia/style.css"));
|
|
21
|
+
addImportsDir(resolve("./runtime/composables"));
|
|
21
22
|
addImportsDir(resolve("./runtime/utils"));
|
|
22
23
|
addImportsDir(resolve("./runtime/types"));
|
|
23
24
|
addComponentsDir({
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
</template>
|
|
16
16
|
|
|
17
17
|
<script setup>
|
|
18
|
-
import { useHeaderHeight } from "
|
|
18
|
+
import { useHeaderHeight } from "#imports";
|
|
19
19
|
import { onMounted, ref } from "vue";
|
|
20
20
|
const { top, bottom, left, right } = defineProps({
|
|
21
21
|
top: { type: Number, required: false },
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="funnel-header">
|
|
3
|
+
<div class="header-container">
|
|
4
|
+
<h2>{{ title }}</h2>
|
|
5
|
+
<span
|
|
6
|
+
v-if="tooltip"
|
|
7
|
+
v-tippy="tooltip"
|
|
8
|
+
class="m-cgg-icon--question"
|
|
9
|
+
/>
|
|
10
|
+
</div>
|
|
11
|
+
<p v-if="description">
|
|
12
|
+
{{ description }}
|
|
13
|
+
</p>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<script setup>
|
|
18
|
+
defineProps({
|
|
19
|
+
title: { type: String, required: true },
|
|
20
|
+
description: { type: String, required: false },
|
|
21
|
+
tooltip: { type: String, required: false }
|
|
22
|
+
});
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<style lang="scss" scoped>
|
|
26
|
+
.funnel-header {
|
|
27
|
+
text-align: center;
|
|
28
|
+
margin: 0 0 32px;
|
|
29
|
+
|
|
30
|
+
.header-container {
|
|
31
|
+
display: flex;
|
|
32
|
+
gap: 12px;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
align-items: center;
|
|
35
|
+
|
|
36
|
+
.m-cgg-icon--question {
|
|
37
|
+
color: $main-blue;
|
|
38
|
+
font-size: 24px;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
h2 {
|
|
43
|
+
color: $main-blue;
|
|
44
|
+
font-size: 20px;
|
|
45
|
+
line-height: 26px;
|
|
46
|
+
font-weight: 700;
|
|
47
|
+
margin: 0;
|
|
48
|
+
|
|
49
|
+
@media screen and (min-width: $break-lg-min) {
|
|
50
|
+
font-size: 24px;
|
|
51
|
+
line-height: 30px;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
p {
|
|
56
|
+
font-size: 14px;
|
|
57
|
+
line-height: 18px;
|
|
58
|
+
margin: 24px 0 0;
|
|
59
|
+
|
|
60
|
+
@media screen and (min-width: $break-lg-min) {
|
|
61
|
+
font-size: 16px;
|
|
62
|
+
line-height: 20px;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
</style>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
title: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
tooltip?: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<Teleport
|
|
3
|
+
to="body"
|
|
4
|
+
:disabled="viewport.isGreaterOrEquals('lg')"
|
|
5
|
+
>
|
|
6
|
+
<div class="btn-container">
|
|
7
|
+
<CjaButton
|
|
8
|
+
color="orange"
|
|
9
|
+
:loading="loading"
|
|
10
|
+
:icon-right="icon"
|
|
11
|
+
@click="$emit('btn:click')"
|
|
12
|
+
>
|
|
13
|
+
<slot>{{ t("btn.submit") }}</slot>
|
|
14
|
+
</CjaButton>
|
|
15
|
+
</div>
|
|
16
|
+
</Teleport>
|
|
17
|
+
</template>
|
|
18
|
+
|
|
19
|
+
<script setup>
|
|
20
|
+
const { t } = useI18n();
|
|
21
|
+
const viewport = useViewport();
|
|
22
|
+
defineProps({
|
|
23
|
+
loading: { type: Boolean, required: false },
|
|
24
|
+
icon: { type: null, required: false }
|
|
25
|
+
});
|
|
26
|
+
defineEmits(["btn:click"]);
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<style lang="scss" scoped>
|
|
30
|
+
.btn-container {
|
|
31
|
+
position: fixed;
|
|
32
|
+
bottom: 0;
|
|
33
|
+
left: 0;
|
|
34
|
+
width: 100%;
|
|
35
|
+
padding: 20px 15px;
|
|
36
|
+
background-color: $white;
|
|
37
|
+
display: flex;
|
|
38
|
+
flex-direction: row;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
box-shadow: $box-shadow-m;
|
|
41
|
+
z-index: 2;
|
|
42
|
+
|
|
43
|
+
@media screen and (min-width: $break-lg-min) {
|
|
44
|
+
position: static;
|
|
45
|
+
margin: 32px 0 0;
|
|
46
|
+
padding: 0;
|
|
47
|
+
box-shadow: none;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.cja-btn {
|
|
51
|
+
width: 100%;
|
|
52
|
+
|
|
53
|
+
@media screen and (min-width: $break-xs-min) {
|
|
54
|
+
max-width: 200px;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
59
|
+
|
|
60
|
+
<i18n lang="json">
|
|
61
|
+
{
|
|
62
|
+
"pt": {
|
|
63
|
+
"btn": {
|
|
64
|
+
"submit": "Continuar"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
</i18n>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Icon } from '#imports';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
loading?: boolean;
|
|
4
|
+
icon?: Icon;
|
|
5
|
+
};
|
|
6
|
+
declare var __VLS_14: {};
|
|
7
|
+
type __VLS_Slots = {} & {
|
|
8
|
+
default?: (props: typeof __VLS_14) => any;
|
|
9
|
+
};
|
|
10
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
"btn:click": (...args: any[]) => void;
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
13
|
+
"onBtn:click"?: ((...args: any[]) => any) | undefined;
|
|
14
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
16
|
+
export default _default;
|
|
17
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
18
|
+
new (): {
|
|
19
|
+
$slots: S;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const useCjaGtm: (
|
|
3
|
-
category: string;
|
|
1
|
+
import type { JourneyLocation, VerticalCode } from '../types/JourneyConfig.js';
|
|
2
|
+
export declare const useCjaGtm: (vertical: VerticalCode, source: JourneyLocation | {
|
|
4
3
|
formType: string;
|
|
5
4
|
location: string;
|
|
6
5
|
}) => {
|
|
@@ -1,18 +1,48 @@
|
|
|
1
|
-
|
|
1
|
+
import { useGtm } from "@gtm-support/vue-gtm";
|
|
2
|
+
export const useCjaGtm = (vertical, source) => {
|
|
3
|
+
const gtm = useGtm();
|
|
4
|
+
const category = (() => {
|
|
5
|
+
switch (vertical) {
|
|
6
|
+
case "HL":
|
|
7
|
+
return "mortgage";
|
|
8
|
+
case "PL":
|
|
9
|
+
return "personal-loan new-funnel";
|
|
10
|
+
case "EN":
|
|
11
|
+
return "energy";
|
|
12
|
+
case "BB":
|
|
13
|
+
return "broadband";
|
|
14
|
+
case "CI":
|
|
15
|
+
return "car-insurance-funnel";
|
|
16
|
+
}
|
|
17
|
+
})();
|
|
18
|
+
const { formType, location } = (() => {
|
|
19
|
+
switch (source) {
|
|
20
|
+
case "funnel":
|
|
21
|
+
return { formType: "FUNNEL", location: "Funnel" };
|
|
22
|
+
case "results":
|
|
23
|
+
return { formType: "RESULTS", location: "Results" };
|
|
24
|
+
case "checkout":
|
|
25
|
+
return { formType: "CHECKOUT", location: "Checkout" };
|
|
26
|
+
case "contact":
|
|
27
|
+
return { formType: "CONTACT", location: "Contact" };
|
|
28
|
+
default:
|
|
29
|
+
return source;
|
|
30
|
+
}
|
|
31
|
+
})();
|
|
2
32
|
const trackStepEvent = (options) => {
|
|
3
33
|
gtm?.trackEvent({
|
|
4
|
-
event: `${
|
|
34
|
+
event: `${location} Step`,
|
|
5
35
|
eventDetails: {
|
|
6
|
-
category
|
|
36
|
+
category,
|
|
7
37
|
value: options.stepName,
|
|
8
38
|
noninteraction: false,
|
|
9
|
-
location
|
|
39
|
+
location,
|
|
10
40
|
action: options.action,
|
|
11
41
|
properties: {
|
|
12
42
|
stepName: options.stepName,
|
|
13
43
|
stepNumber: options.stepNumber,
|
|
14
44
|
stepDetails: options.stepDetails,
|
|
15
|
-
formType
|
|
45
|
+
formType
|
|
16
46
|
}
|
|
17
47
|
}
|
|
18
48
|
});
|
|
@@ -21,8 +51,8 @@ export const useCjaGtm = (gtm, gtmOptions) => {
|
|
|
21
51
|
gtm?.trackEvent({
|
|
22
52
|
event: "Impressions",
|
|
23
53
|
eventDetails: {
|
|
24
|
-
category
|
|
25
|
-
location
|
|
54
|
+
category,
|
|
55
|
+
location,
|
|
26
56
|
action: "Results Impressions",
|
|
27
57
|
loadTime: options.time || 0,
|
|
28
58
|
properties: {
|
|
@@ -34,7 +64,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
|
|
|
34
64
|
id: p.productId,
|
|
35
65
|
brand: p.provider,
|
|
36
66
|
position: i + 1,
|
|
37
|
-
category
|
|
67
|
+
category,
|
|
38
68
|
list: options.listing,
|
|
39
69
|
price: "5.00",
|
|
40
70
|
quantity: 1
|
|
@@ -49,8 +79,8 @@ export const useCjaGtm = (gtm, gtmOptions) => {
|
|
|
49
79
|
eventDetails: {
|
|
50
80
|
label: options.product.cardTitle,
|
|
51
81
|
source: `Conversion - ${options.source}`,
|
|
52
|
-
category
|
|
53
|
-
location
|
|
82
|
+
category,
|
|
83
|
+
location,
|
|
54
84
|
action: "Results Purchase",
|
|
55
85
|
properties: {
|
|
56
86
|
list: options.listing
|
|
@@ -65,7 +95,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
|
|
|
65
95
|
action: "purchase"
|
|
66
96
|
},
|
|
67
97
|
products: (() => {
|
|
68
|
-
switch (
|
|
98
|
+
switch (category) {
|
|
69
99
|
case "energy":
|
|
70
100
|
return [
|
|
71
101
|
{
|
|
@@ -74,7 +104,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
|
|
|
74
104
|
brand: options.product.provider,
|
|
75
105
|
position: options.product.index + 1,
|
|
76
106
|
dimension3: options.source,
|
|
77
|
-
category
|
|
107
|
+
category,
|
|
78
108
|
list: options.listing,
|
|
79
109
|
price: "5.00",
|
|
80
110
|
quantity: 1
|
|
@@ -91,7 +121,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
|
|
|
91
121
|
approvalRate: "unavailable",
|
|
92
122
|
dimension3: options.source,
|
|
93
123
|
dimension6: `apr:${options.product.attributes.taeg}, totalRepayment:${options.product.attributes.mtic}, monthlyRepayment:${options.product.attributes.installment}`,
|
|
94
|
-
category
|
|
124
|
+
category,
|
|
95
125
|
list: options.listing,
|
|
96
126
|
price: "5.00",
|
|
97
127
|
quantity: 1
|
|
@@ -99,7 +129,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
|
|
|
99
129
|
];
|
|
100
130
|
default:
|
|
101
131
|
console.error(
|
|
102
|
-
`Unrecognized category ${
|
|
132
|
+
`Unrecognized category ${category}, implement vertical specific gtm product`
|
|
103
133
|
);
|
|
104
134
|
return [{}];
|
|
105
135
|
}
|
|
@@ -113,8 +143,8 @@ export const useCjaGtm = (gtm, gtmOptions) => {
|
|
|
113
143
|
gtm?.trackEvent({
|
|
114
144
|
event: "productDetail",
|
|
115
145
|
eventDetails: {
|
|
116
|
-
category
|
|
117
|
-
location
|
|
146
|
+
category,
|
|
147
|
+
location,
|
|
118
148
|
action: "Results Detail",
|
|
119
149
|
properties: {
|
|
120
150
|
list: options.listing
|
|
@@ -131,7 +161,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
|
|
|
131
161
|
id: options.product.productId,
|
|
132
162
|
brand: options.product.provider,
|
|
133
163
|
position: options.product.index + 1,
|
|
134
|
-
category
|
|
164
|
+
category,
|
|
135
165
|
list: options.listing,
|
|
136
166
|
price: "5.00",
|
|
137
167
|
quantity: 1
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ComputedRef } from 'vue';
|
|
2
|
+
import type { StepData } from '../types/JourneyConfig.js';
|
|
3
|
+
export declare const useFunnelConfig: (structure: ComputedRef<Map<string, string[]>>) => {
|
|
4
|
+
steps: ComputedRef<string[]>;
|
|
5
|
+
currentStep: ComputedRef<StepData>;
|
|
6
|
+
totalSteps: ComputedRef<number>;
|
|
7
|
+
getStep: (step: string | number | undefined) => StepData | undefined;
|
|
8
|
+
goNextStep: () => Promise<void>;
|
|
9
|
+
goPrevStep: () => Promise<void>;
|
|
10
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { navigateTo, useRoute, useRouter } from "#app";
|
|
2
|
+
import { computed } from "vue";
|
|
3
|
+
export const useFunnelConfig = (structure) => {
|
|
4
|
+
const route = useRouter().currentRoute;
|
|
5
|
+
const steps = computed(() => Array.from(structure.value.keys()));
|
|
6
|
+
const currentStep = computed(() => getStep(route.value.path.split("/").reverse()[0]) || currentStep.value);
|
|
7
|
+
const totalSteps = computed(() => structure.value.size);
|
|
8
|
+
const getStep = (step) => {
|
|
9
|
+
if (step === void 0) return;
|
|
10
|
+
const stepName = typeof step == "string" ? step : steps.value[step];
|
|
11
|
+
const stepFields = stepName && structure.value.get(stepName);
|
|
12
|
+
return stepName && stepFields ? {
|
|
13
|
+
index: steps.value.indexOf(stepName),
|
|
14
|
+
number: steps.value.indexOf(stepName) + 1,
|
|
15
|
+
name: stepName,
|
|
16
|
+
path: route.value.path.replace(/[^/]+(?=\/$|$)/g, stepName),
|
|
17
|
+
fields: stepFields
|
|
18
|
+
} : void 0;
|
|
19
|
+
};
|
|
20
|
+
const goNextStep = async () => {
|
|
21
|
+
if (currentStep.value) {
|
|
22
|
+
const nextStep = getStep(currentStep.value.index + 1);
|
|
23
|
+
if (nextStep) {
|
|
24
|
+
await navigateTo({
|
|
25
|
+
path: nextStep.path,
|
|
26
|
+
query: useRoute().query
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const goPrevStep = async () => {
|
|
32
|
+
if (currentStep.value) {
|
|
33
|
+
const nextStep = getStep(currentStep.value.index - 1);
|
|
34
|
+
if (nextStep) {
|
|
35
|
+
await navigateTo({
|
|
36
|
+
path: nextStep.path,
|
|
37
|
+
query: useRoute().query
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
steps,
|
|
44
|
+
currentStep,
|
|
45
|
+
totalSteps,
|
|
46
|
+
getStep,
|
|
47
|
+
goNextStep,
|
|
48
|
+
goPrevStep
|
|
49
|
+
};
|
|
50
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { JourneyLocation } from '../types/JourneyConfig.js';
|
|
2
|
+
export declare const useJourneyConfig: (location: JourneyLocation, options: {
|
|
3
|
+
locations: JourneyLocation[];
|
|
4
|
+
initialStep: string;
|
|
5
|
+
lastUrls: Map<JourneyLocation, string>;
|
|
6
|
+
}) => {
|
|
7
|
+
locations: JourneyLocation[];
|
|
8
|
+
initialStep: string;
|
|
9
|
+
lastUrls: Map<JourneyLocation, string>;
|
|
10
|
+
previousUrl: string | undefined;
|
|
11
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const useJourneyConfig = (location, options) => {
|
|
2
|
+
const {
|
|
3
|
+
locations,
|
|
4
|
+
initialStep,
|
|
5
|
+
lastUrls
|
|
6
|
+
} = options;
|
|
7
|
+
return {
|
|
8
|
+
locations,
|
|
9
|
+
initialStep,
|
|
10
|
+
lastUrls,
|
|
11
|
+
previousUrl: lastUrls.get(locations[locations.indexOf(location) - 1])
|
|
12
|
+
};
|
|
13
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export declare const applyProductData: (
|
|
1
|
+
export declare const applyProductData: (options: {
|
|
2
2
|
journeyId: string | undefined;
|
|
3
3
|
index: number;
|
|
4
4
|
path: string;
|
|
5
5
|
productName: string;
|
|
6
6
|
productId: string;
|
|
7
7
|
providerId: string;
|
|
8
|
-
}) =>
|
|
8
|
+
}) => void;
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import { useRuntimeConfig } from "#imports";
|
|
2
|
+
export const applyProductData = (options) => {
|
|
3
|
+
const { apiURL } = useRuntimeConfig().public;
|
|
4
|
+
fetch(new URL("/core/apis/data/applyProductData", apiURL), {
|
|
5
|
+
method: "POST",
|
|
6
|
+
body: JSON.stringify({
|
|
7
|
+
action: "OPEN_APPLICATION_FORM",
|
|
8
|
+
intent: "apply",
|
|
9
|
+
journeyId: options.journeyId,
|
|
10
|
+
path: options.path,
|
|
11
|
+
position: options.index,
|
|
12
|
+
offerSelected: options.productName,
|
|
13
|
+
cggId: options.productId,
|
|
14
|
+
providerCggId: options.providerId,
|
|
15
|
+
has_been_clicked: true
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
};
|
|
@@ -1,22 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import { useRuntimeConfig } from "#imports";
|
|
2
|
+
export const updateForm = (options) => {
|
|
3
|
+
const { apiURL } = useRuntimeConfig().public;
|
|
4
|
+
return fetch(new URL("/core/apis/data/updateForm", apiURL), {
|
|
5
|
+
method: "PUT",
|
|
6
|
+
body: JSON.stringify(
|
|
7
|
+
Object.fromEntries(
|
|
8
|
+
Object.entries({
|
|
9
|
+
eventType: options.eventType || "STEP_CHANGED",
|
|
10
|
+
isActionEvent: true,
|
|
11
|
+
journeyId: options.journeyId,
|
|
12
|
+
stepName: options.stepName,
|
|
13
|
+
isCompleted: options.isCompleted || false,
|
|
14
|
+
sentToDialer: options.sentToDialer || true,
|
|
15
|
+
lastStepNumber: options.step,
|
|
16
|
+
lastStepType: options.formType,
|
|
17
|
+
lastStepUrl: window.location.pathname + window.location.search + window.location.hash,
|
|
18
|
+
data: JSON.stringify({
|
|
19
|
+
...options.payload,
|
|
20
|
+
formType: options.formType
|
|
21
|
+
})
|
|
22
|
+
}).filter(([_, v]) => v != null)
|
|
23
|
+
)
|
|
20
24
|
)
|
|
21
|
-
)
|
|
22
|
-
}
|
|
25
|
+
});
|
|
26
|
+
};
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { useRuntimeConfig } from "#imports";
|
|
2
|
+
export const updateMarketingConsent = (options) => {
|
|
3
|
+
const { apiURL } = useRuntimeConfig().public;
|
|
4
|
+
return fetch(new URL("/core/apis/data/verifyConsent", apiURL), {
|
|
5
|
+
method: "POST",
|
|
6
|
+
body: JSON.stringify({
|
|
7
|
+
email: options.email,
|
|
8
|
+
currentPageUrl: location.origin + location.pathname,
|
|
9
|
+
journeyId: options.journeyId
|
|
10
|
+
})
|
|
11
|
+
});
|
|
12
|
+
};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { useRuntimeConfig } from "#imports";
|
|
1
2
|
export const uploadFile = (options) => {
|
|
3
|
+
const { apiURL } = useRuntimeConfig().public;
|
|
2
4
|
const data = new FormData();
|
|
3
5
|
data.append(
|
|
4
6
|
"path",
|
|
@@ -6,7 +8,7 @@ export const uploadFile = (options) => {
|
|
|
6
8
|
);
|
|
7
9
|
data.append("file", options.file);
|
|
8
10
|
data.append("bucketName", options.bucketName);
|
|
9
|
-
return fetch(
|
|
11
|
+
return fetch(new URL("/core/apis/data/saveFileToS3", apiURL), {
|
|
10
12
|
method: "POST",
|
|
11
13
|
body: data
|
|
12
14
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cja-phoenix",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.12",
|
|
4
4
|
"description": "Phoenix utility",
|
|
5
5
|
"repository": "comparaja/phoenix",
|
|
6
6
|
"license": "MIT",
|
|
@@ -35,8 +35,10 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@nuxt/kit": "^4.0.3",
|
|
38
|
+
"@nuxtjs/i18n": "^9.5.6",
|
|
38
39
|
"@popperjs/core": "^2.11.8",
|
|
39
40
|
"maska": "^3.0.4",
|
|
41
|
+
"nuxt-viewport": "^2.3.1",
|
|
40
42
|
"v-calendar": "^3.1.2",
|
|
41
43
|
"vee-validate": "^4.14.7",
|
|
42
44
|
"vue-tippy": "^6.5.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './mediaBreakpoints.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./mediaBreakpoints.js";
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|