@qualityunit/liveagent-help 0.0.1 → 0.0.3
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/assets/ar-SA-BAGi-X54.js +1 -0
- package/dist/assets/bg-BG-BCITVy7V.js +1 -0
- package/dist/assets/bs-BA-CwieP_6Q.js +1 -0
- package/dist/assets/ca-ES-BkO3OQJp.js +1 -0
- package/dist/assets/cs-CZ-DdU8wu93.js +1 -0
- package/dist/assets/da-DK-BTDwvW9j.js +1 -0
- package/dist/assets/de-DE-IdTC_9hY.js +1 -0
- package/dist/assets/el-GR-DbTDCUnW.js +1 -0
- package/dist/assets/en-US-BiQuI_NB.js +1 -0
- package/dist/assets/en-VPmnwx-g.js +1 -0
- package/dist/assets/es-ES-C-BMis-f.js +1 -0
- package/dist/assets/et-EE-BYsL_7OC.js +1 -0
- package/dist/assets/fa-IR-DV05Ugvl.js +1 -0
- package/dist/assets/fi-FI-BxTY62gn.js +1 -0
- package/dist/assets/fil-PH-CzKKBvvx.js +1 -0
- package/dist/assets/fr-FR-CkALAUu_.js +1 -0
- package/dist/assets/he-IL-DGZ75XTm.js +1 -0
- package/dist/assets/hr-HR-CwieP_6Q.js +1 -0
- package/dist/assets/hu-HU-YnPqsV9m.js +1 -0
- package/dist/assets/id-ID-D1wNedlR.js +1 -0
- package/dist/assets/index-DMBaNfOP.js +10 -0
- package/dist/assets/index-DYty2IsF.css +1 -0
- package/dist/assets/it-IT-VhGcWe9v.js +1 -0
- package/dist/assets/ja-JP-Ce2blzX5.js +1 -0
- package/dist/assets/ko-KR-Da4QE7WU.js +1 -0
- package/dist/assets/lt-LT-Bg5Jzpit.js +1 -0
- package/dist/assets/lv-LV-FoFJ46S8.js +1 -0
- package/dist/assets/me-ME-Biy_oEN5.js +1 -0
- package/dist/assets/mk-MK-FmFgRqLi.js +1 -0
- package/dist/assets/ms-MY-BzBcFmOB.js +1 -0
- package/dist/assets/nl-NL-VNsaxY_S.js +1 -0
- package/dist/assets/no-NO-DbRgS8bY.js +1 -0
- package/dist/assets/pl-PL-BC_RNqOr.js +1 -0
- package/dist/assets/pt-BR-5RSzKrVs.js +1 -0
- package/dist/assets/ro-RO-Ds7w-arH.js +1 -0
- package/dist/assets/ru-RU-BE28ttmw.js +1 -0
- package/dist/assets/sk-SK-CjyQlNTr.js +1 -0
- package/dist/assets/sl-SI-Cgcni0mk.js +1 -0
- package/dist/assets/sr-CS-Biy_oEN5.js +1 -0
- package/dist/assets/sv-SE-C_mID3a-.js +1 -0
- package/dist/assets/th-TH-bbKk5NF4.js +1 -0
- package/dist/assets/tl-PH-DTTjGOfJ.js +1 -0
- package/dist/assets/tr-TR-BtU8XX02.js +1 -0
- package/dist/assets/uk-UA-C0wZTWK2.js +1 -0
- package/dist/assets/vi-VN-Bw_8ONxP.js +1 -0
- package/dist/assets/vls-BE-DynNaS0c.js +1 -0
- package/dist/assets/zh-CN-CD3mCoN0.js +1 -0
- package/dist/assets/zh-TW-B02B3zJt.js +1 -0
- package/{index.html → dist/index.html} +2 -3
- package/package.json +5 -1
- package/.github/workflows/npm-check-help.yml +0 -13
- package/.github/workflows/npm-publish-help.yml +0 -48
- package/crowdin.yml +0 -3
- package/src/app.css +0 -27
- package/src/lib/HelpCenter.svelte +0 -280
- package/src/lib/HelpCenterWrapper.svelte +0 -48
- package/src/lib/Themes/Dark.js +0 -189
- package/src/lib/Themes/Light.js +0 -189
- package/src/lib/Themes/palette.json +0 -175
- package/src/lib/components/common/AgentsTag.svelte +0 -73
- package/src/lib/components/common/Button.svelte +0 -60
- package/src/lib/components/common/Heading.svelte +0 -21
- package/src/lib/components/common/Link.svelte +0 -27
- package/src/lib/components/common/Paragraph.svelte +0 -30
- package/src/lib/components/common/ProgressTag.svelte +0 -33
- package/src/lib/components/common/ShortcutKey.svelte +0 -39
- package/src/lib/components/common/ShortcutKeys.svelte +0 -35
- package/src/lib/components/common/ThemeSwitcher.svelte +0 -24
- package/src/lib/components/containers/Card.svelte +0 -80
- package/src/lib/components/containers/ContactButton.svelte +0 -64
- package/src/lib/components/containers/ContactRow.svelte +0 -59
- package/src/lib/components/containers/LinkCard.svelte +0 -136
- package/src/lib/components/containers/Office.svelte +0 -44
- package/src/lib/components/containers/Page.svelte +0 -36
- package/src/lib/components/containers/Point.svelte +0 -43
- package/src/lib/components/containers/Tooltip.svelte +0 -143
- package/src/lib/components/containers/Widget.svelte +0 -79
- package/src/lib/components/nav/Menu.svelte +0 -283
- package/src/lib/components/nav/Progress.svelte +0 -249
- package/src/lib/pages/ContactUs.svelte +0 -372
- package/src/lib/pages/ImproveLaSkills.svelte +0 -117
- package/src/lib/pages/Shortcuts.svelte +0 -334
- package/src/lib/pages/steps/AddAgents.svelte +0 -175
- package/src/lib/pages/steps/AddDepartments.svelte +0 -81
- package/src/lib/pages/steps/ConfigureCustomerPortal.svelte +0 -171
- package/src/lib/pages/steps/ConnectEmailAccounts.svelte +0 -204
- package/src/lib/pages/steps/ConnectMessagingApps.svelte +0 -86
- package/src/lib/pages/steps/ConnectSocialMedia.svelte +0 -124
- package/src/lib/pages/steps/CreateCallCenter.svelte +0 -170
- package/src/lib/pages/steps/CreateContactWidget.svelte +0 -131
- package/src/lib/pages/steps/LearnTheBasics.svelte +0 -77
- package/src/lib/pages/steps/Step.svelte +0 -223
- package/src/lib/pages/steps/Summary.svelte +0 -106
- package/src/lib/utils/MockBackend.ts +0 -202
- package/src/lib/utils/menuStore.ts +0 -11
- package/src/lib/utils/progressStore.ts +0 -71
- package/src/lib/utils/themeStore.ts +0 -126
- package/src/lib/utils/types.ts +0 -50
- package/src/locales/ar-SA.json +0 -5
- package/src/locales/bg-BG.json +0 -5
- package/src/locales/bs-BA.json +0 -5
- package/src/locales/ca-ES.json +0 -3
- package/src/locales/cs-CZ.json +0 -5
- package/src/locales/da-DK.json +0 -5
- package/src/locales/de-DE.json +0 -5
- package/src/locales/el-GR.json +0 -5
- package/src/locales/en-US.json +0 -5
- package/src/locales/en.json +0 -16
- package/src/locales/es-ES.json +0 -5
- package/src/locales/et-EE.json +0 -5
- package/src/locales/fa-IR.json +0 -5
- package/src/locales/fi-FI.json +0 -5
- package/src/locales/fil-PH.json +0 -5
- package/src/locales/fr-FR.json +0 -5
- package/src/locales/he-IL.json +0 -3
- package/src/locales/hr-HR.json +0 -5
- package/src/locales/hu-HU.json +0 -5
- package/src/locales/id-ID.json +0 -5
- package/src/locales/it-IT.json +0 -5
- package/src/locales/ja-JP.json +0 -5
- package/src/locales/ko-KR.json +0 -4
- package/src/locales/lt-LT.json +0 -5
- package/src/locales/lv-LV.json +0 -5
- package/src/locales/me-ME.json +0 -5
- package/src/locales/mk-MK.json +0 -1
- package/src/locales/ms-MY.json +0 -3
- package/src/locales/nl-NL.json +0 -5
- package/src/locales/no-NO.json +0 -5
- package/src/locales/pl-PL.json +0 -5
- package/src/locales/pt-BR.json +0 -15
- package/src/locales/ro-RO.json +0 -5
- package/src/locales/ru-RU.json +0 -5
- package/src/locales/sk-SK.json +0 -5
- package/src/locales/sl-SI.json +0 -5
- package/src/locales/sr-CS.json +0 -5
- package/src/locales/sv-SE.json +0 -5
- package/src/locales/th-TH.json +0 -3
- package/src/locales/tl-PH.json +0 -5
- package/src/locales/tr-TR.json +0 -5
- package/src/locales/uk-UA.json +0 -4
- package/src/locales/vi-VN.json +0 -5
- package/src/locales/vls-BE.json +0 -3
- package/src/locales/zh-CN.json +0 -5
- package/src/locales/zh-TW.json +0 -5
- package/src/main.ts +0 -1
- package/src/vite-env.d.ts +0 -2
- package/svelte.config.js +0 -7
- package/tsconfig.json +0 -21
- package/tsconfig.node.json +0 -9
- package/vite.config.js +0 -16
- /package/{public → dist}/assets/icons/add-agents.svg +0 -0
- /package/{public → dist}/assets/icons/add-chat-button.svg +0 -0
- /package/{public → dist}/assets/icons/add-departments.svg +0 -0
- /package/{public → dist}/assets/icons/add-voice-support.svg +0 -0
- /package/{public → dist}/assets/icons/admin.svg +0 -0
- /package/{public → dist}/assets/icons/arrow-right.svg +0 -0
- /package/{public → dist}/assets/icons/at-symbol.svg +0 -0
- /package/{public → dist}/assets/icons/brush.svg +0 -0
- /package/{public → dist}/assets/icons/calls.svg +0 -0
- /package/{public → dist}/assets/icons/chat-with-us.svg +0 -0
- /package/{public → dist}/assets/icons/chat_buttons.svg +0 -0
- /package/{public → dist}/assets/icons/checkmark.svg +0 -0
- /package/{public → dist}/assets/icons/connect-email-account.svg +0 -0
- /package/{public → dist}/assets/icons/connect-messaging-apps.svg +0 -0
- /package/{public → dist}/assets/icons/connect-social-media.svg +0 -0
- /package/{public → dist}/assets/icons/edit.svg +0 -0
- /package/{public → dist}/assets/icons/facebook_logo.svg +0 -0
- /package/{public → dist}/assets/icons/form.svg +0 -0
- /package/{public → dist}/assets/icons/goal.svg +0 -0
- /package/{public → dist}/assets/icons/incoming.svg +0 -0
- /package/{public → dist}/assets/icons/info.svg +0 -0
- /package/{public → dist}/assets/icons/instagram_logo.svg +0 -0
- /package/{public → dist}/assets/icons/invitations.svg +0 -0
- /package/{public → dist}/assets/icons/key_command.svg +0 -0
- /package/{public → dist}/assets/icons/key_down.svg +0 -0
- /package/{public → dist}/assets/icons/key_left_click.svg +0 -0
- /package/{public → dist}/assets/icons/key_middle_click.svg +0 -0
- /package/{public → dist}/assets/icons/key_shift.svg +0 -0
- /package/{public → dist}/assets/icons/key_up.svg +0 -0
- /package/{public → dist}/assets/icons/learn-the-basics.svg +0 -0
- /package/{public → dist}/assets/icons/learn.svg +0 -0
- /package/{public → dist}/assets/icons/messenger_logo.svg +0 -0
- /package/{public → dist}/assets/icons/next.svg +0 -0
- /package/{public → dist}/assets/icons/open_in_new.svg +0 -0
- /package/{public → dist}/assets/icons/outgoing.svg +0 -0
- /package/{public → dist}/assets/icons/owner.svg +0 -0
- /package/{public → dist}/assets/icons/palette.svg +0 -0
- /package/{public → dist}/assets/icons/progress-submenu.svg +0 -0
- /package/{public → dist}/assets/icons/progress.svg +0 -0
- /package/{public → dist}/assets/icons/questionmark.svg +0 -0
- /package/{public → dist}/assets/icons/resolve.svg +0 -0
- /package/{public → dist}/assets/icons/rocket.svg +0 -0
- /package/{public → dist}/assets/icons/sent.svg +0 -0
- /package/{public → dist}/assets/icons/setup-customer-portal.svg +0 -0
- /package/{public → dist}/assets/icons/shortcuts.svg +0 -0
- /package/{public → dist}/assets/icons/show.svg +0 -0
- /package/{public → dist}/assets/icons/smiley-face.svg +0 -0
- /package/{public → dist}/assets/icons/ticket.svg +0 -0
- /package/{public → dist}/assets/icons/unfinished.svg +0 -0
- /package/{public → dist}/assets/icons/viber_logo.svg +0 -0
- /package/{public → dist}/assets/icons/videocall.svg +0 -0
- /package/{public → dist}/assets/icons/warning.svg +0 -0
- /package/{public → dist}/assets/icons/whatsapp_logo.svg +0 -0
- /package/{public → dist}/assets/icons/winky-face.svg +0 -0
- /package/{public → dist}/assets/icons/x_logo.svg +0 -0
- /package/{public → dist}/assets/icons/youtube_logo.svg +0 -0
- /package/{public → dist}/assets/images/all-done.svg +0 -0
- /package/{public → dist}/assets/images/bratislava.png +0 -0
- /package/{public → dist}/assets/images/card_background.svg +0 -0
- /package/{public → dist}/assets/images/configure_customer_portal.svg +0 -0
- /package/{public → dist}/assets/images/connect-email-accounts.svg +0 -0
- /package/{public → dist}/assets/images/connect-social-media.svg +0 -0
- /package/{public → dist}/assets/images/contact-widgets.svg +0 -0
- /package/{public → dist}/assets/images/create-chat-button.svg +0 -0
- /package/{public → dist}/assets/images/create_call_center.svg +0 -0
- /package/{public → dist}/assets/images/departments.svg +0 -0
- /package/{public → dist}/assets/images/facebook-background.png +0 -0
- /package/{public → dist}/assets/images/instagram-background.png +0 -0
- /package/{public → dist}/assets/images/kyiv.png +0 -0
- /package/{public → dist}/assets/images/liveagent.svg +0 -0
- /package/{public → dist}/assets/images/new-york.png +0 -0
- /package/{public → dist}/assets/images/reply_background.svg +0 -0
- /package/{public → dist}/assets/images/status-page-background.png +0 -0
- /package/{public → dist}/assets/images/support-portal-background.png +0 -0
- /package/{public → dist}/assets/images/tags.svg +0 -0
- /package/{public → dist}/assets/images/x-background.png +0 -0
- /package/{public → dist}/assets/images/youtube-background.png +0 -0
@@ -1,171 +0,0 @@
|
|
1
|
-
<script lang="ts">
|
2
|
-
import Step from "./Step.svelte";
|
3
|
-
import Heading from "../../components/common/Heading.svelte";
|
4
|
-
import Paragraph from "../../components/common/Paragraph.svelte";
|
5
|
-
import Widget from "../../components/containers/Widget.svelte";
|
6
|
-
import {getContext, onMount} from "svelte";
|
7
|
-
import Link from "../../components/common/Link.svelte";
|
8
|
-
import {progress} from "../../utils/progressStore.ts";
|
9
|
-
import { type WidgetTypeInterface} from "../../utils/types.ts";
|
10
|
-
import {isArticleCreated, isColorChanged, isKBCreated, isThemeChanged} from "../../utils/MockBackend.ts";
|
11
|
-
import {_} from 'svelte-i18n';
|
12
|
-
|
13
|
-
const iconBasePath: string = getContext<string>('iconBasePath');
|
14
|
-
const baseURL: string = window.location.origin;
|
15
|
-
|
16
|
-
let widgets: WidgetTypeInterface[] = [
|
17
|
-
{
|
18
|
-
id: 'theme',
|
19
|
-
heading: "Choose theme",
|
20
|
-
text: "Let’s start by choosing a customer portal theme. There are a few options to choose from. You can use the “Preview” button to check them out first.",
|
21
|
-
iconPath: `${iconBasePath}brush.svg`,
|
22
|
-
buttonAction: isThemeChanged,
|
23
|
-
completed: false,
|
24
|
-
buttonTextCompleted: "Change theme",
|
25
|
-
buttonTextUncompleted: "Change theme",
|
26
|
-
redirectPath: 'Themes'
|
27
|
-
},
|
28
|
-
{
|
29
|
-
id: 'colors',
|
30
|
-
heading: "Personalize Customer Portal",
|
31
|
-
text: "You can also easily customize the color scheme of your customer portal.",
|
32
|
-
iconPath: `${iconBasePath}palette.svg`,
|
33
|
-
buttonAction: isColorChanged,
|
34
|
-
completed: false,
|
35
|
-
buttonTextCompleted: "Change colors",
|
36
|
-
buttonTextUncompleted: "Change colors",
|
37
|
-
redirectPath: 'Colors'
|
38
|
-
},
|
39
|
-
{
|
40
|
-
id: 'article',
|
41
|
-
heading: "Create your first article",
|
42
|
-
text: "Another thing to note is how easy it is to create your own knowledge base articles for your customer portal visitors.",
|
43
|
-
iconPath: `${iconBasePath}edit.svg`,
|
44
|
-
buttonAction: isArticleCreated,
|
45
|
-
completed: false,
|
46
|
-
buttonTextCompleted: "Create article",
|
47
|
-
buttonTextUncompleted: "Create article",
|
48
|
-
redirectPath: 'Article'
|
49
|
-
},
|
50
|
-
{
|
51
|
-
id: 'kb',
|
52
|
-
heading: "Make your Knowledgebase public",
|
53
|
-
text: "The last step is to enable the knowledgebase to make your articles visible on your customer portal.",
|
54
|
-
iconPath: `${iconBasePath}show.svg`,
|
55
|
-
buttonAction: isKBCreated,
|
56
|
-
completed: false,
|
57
|
-
buttonTextCompleted: "Enable knowledgebase",
|
58
|
-
buttonTextUncompleted: "Manage knowledgebase",
|
59
|
-
redirectPath: 'Knowledge-base'
|
60
|
-
}
|
61
|
-
]
|
62
|
-
|
63
|
-
onMount(async (): Promise<void> => {
|
64
|
-
stepCompleted = $progress[8]?.state === 'c';
|
65
|
-
if (stepCompleted) {
|
66
|
-
widgets = widgets.map(widget => ({...widget, completed: true}));
|
67
|
-
} else {
|
68
|
-
widgets = await Promise.all(widgets.map(async card => {
|
69
|
-
const response = await card.buttonAction();
|
70
|
-
return {...card, completed: response.completionStatus};
|
71
|
-
}));
|
72
|
-
}
|
73
|
-
});
|
74
|
-
|
75
|
-
async function completeStep(id: string): Promise<void> {
|
76
|
-
const widgetIndex: number = widgets.findIndex(w => w.id === id)
|
77
|
-
if (widgetIndex !== -1) {
|
78
|
-
const response = await widgets[widgetIndex].buttonAction(true);
|
79
|
-
widgets[widgetIndex].completed = response.completionStatus;
|
80
|
-
widgets = [...widgets];
|
81
|
-
window.location.hash = widgets[widgetIndex].redirectPath;
|
82
|
-
}
|
83
|
-
}
|
84
|
-
|
85
|
-
$: stepCompleted = widgets.every(widget => widget.completed);
|
86
|
-
|
87
|
-
</script>
|
88
|
-
|
89
|
-
<Step bind:stepFinished={stepCompleted}
|
90
|
-
headerTitle="Configure customer portal"
|
91
|
-
headerIconPath="{iconBasePath}setup-customer-portal.svg"
|
92
|
-
nextStepCase="last"
|
93
|
-
nextStepUnfinishedText="Keep up the pace! Create your knowledgebase to finalize this step."
|
94
|
-
nextStepFinishedText="Congratulations! You've reached the end."
|
95
|
-
path="/configure-customer-portal"
|
96
|
-
>
|
97
|
-
<section class="section-top">
|
98
|
-
<div>
|
99
|
-
<Heading text="Configure Customer Portal" />
|
100
|
-
<Paragraph text="As the final step, let's talk about the Customer Portal, a platform where your customers can reach out, get information, and solve their problems independently. A well-maintained knowledge base can significantly reduce the load on your agents and improve customer satisfaction." />
|
101
|
-
</div>
|
102
|
-
<img src="public/assets/images/configure_customer_portal.svg" alt="Customer support portal" />
|
103
|
-
</section>
|
104
|
-
<section class="mid-section">
|
105
|
-
<p>
|
106
|
-
With LiveAgent, you can fully customize your Customer Portal design according to your brand's theme and preferences. As an example or inspiration, feel free to check our LiveAgent knowledge base available at
|
107
|
-
<Link text="support.liveagent.com" href="http://support.liveagent.com/"/>
|
108
|
-
, which is built only by this feature alone.
|
109
|
-
</p>
|
110
|
-
<p>And now let's have a look at your own Customer Portal here: <Link text={baseURL} href={baseURL} /> It might take some time until it’s also nice and shiny but don’t worry, you will get there eventually.</p>
|
111
|
-
</section>
|
112
|
-
<section class="widgets-wrapper">
|
113
|
-
{#each widgets as widget, index}
|
114
|
-
{#if index === 2}
|
115
|
-
<Paragraph additionalStyles="padding: 0 10px 4px 10px; margin: -3px 0 7px 0" text="you might have already noticed on the Customer Portal configuration screens, there are other more advanced options, like customizing the HTML and CSS or adding your own tracking scripts to the Customer Portal itself." />
|
116
|
-
{/if}
|
117
|
-
<Widget heading={widget.heading}
|
118
|
-
text={widget.text}
|
119
|
-
iconSrc={widget.iconPath}
|
120
|
-
cardPadding="14px 16px"
|
121
|
-
buttonAction={() => completeStep(widget.id)}
|
122
|
-
buttonText={(widget.completed ? widget.buttonTextCompleted : widget.buttonTextUncompleted) ?? $_('Manage')}
|
123
|
-
buttonReversed={widget.completed}
|
124
|
-
/>
|
125
|
-
{/each}
|
126
|
-
</section>
|
127
|
-
<p>Once enabled, head back to your customer portal <Link text={baseURL} href={baseURL} /> and see what you achieved. Well done! 👍" </p>
|
128
|
-
</Step>
|
129
|
-
|
130
|
-
<style>
|
131
|
-
.section-top {
|
132
|
-
display: flex;
|
133
|
-
flex-direction: column;
|
134
|
-
align-items: center;
|
135
|
-
justify-content: center;
|
136
|
-
gap: 16px;
|
137
|
-
}
|
138
|
-
|
139
|
-
.mid-section {
|
140
|
-
display: flex;
|
141
|
-
flex-direction: column;
|
142
|
-
gap: 24px;
|
143
|
-
margin-bottom: 12px;
|
144
|
-
}
|
145
|
-
|
146
|
-
.widgets-wrapper {
|
147
|
-
display: flex;
|
148
|
-
flex-direction: column;
|
149
|
-
align-items: flex-start;
|
150
|
-
padding: 16px 20px;
|
151
|
-
margin-bottom: 12px;
|
152
|
-
border-radius: 6px;
|
153
|
-
background-color: var(--background-color-grey-secondary);
|
154
|
-
}
|
155
|
-
|
156
|
-
p {
|
157
|
-
display: inline;
|
158
|
-
margin: 0;
|
159
|
-
color: var(--texts-icons-primary);
|
160
|
-
font-family: Roboto;
|
161
|
-
font-size: 13px;
|
162
|
-
font-weight: 400;
|
163
|
-
line-height: 20px;
|
164
|
-
}
|
165
|
-
|
166
|
-
@media (min-width: 768px) {
|
167
|
-
.section-top {
|
168
|
-
flex-direction: row;
|
169
|
-
}
|
170
|
-
}
|
171
|
-
</style>
|
@@ -1,204 +0,0 @@
|
|
1
|
-
<script lang="ts">
|
2
|
-
import Step from "./Step.svelte";
|
3
|
-
import Paragraph from "../../components/common/Paragraph.svelte";
|
4
|
-
import Heading from "../../components/common/Heading.svelte";
|
5
|
-
import {getContext, onMount} from "svelte";
|
6
|
-
import {
|
7
|
-
getBuildInEmail,
|
8
|
-
isIncomingEmailAccConnected,
|
9
|
-
isOutgoingEmailAccConnected
|
10
|
-
} from "../../utils/MockBackend.ts";
|
11
|
-
import Widget from "../../components/containers/Widget.svelte";
|
12
|
-
import { progress } from "../../utils/progressStore";
|
13
|
-
import {currentTheme} from "../../utils/themeStore.ts";
|
14
|
-
|
15
|
-
const CONNECT: string = "Connect";
|
16
|
-
const MANAGE: string = "Manage";
|
17
|
-
const iconBasePath: string = getContext<string>('iconBasePath');
|
18
|
-
|
19
|
-
let stepCompleted: boolean = false;
|
20
|
-
let incomingCompleted: boolean = false;
|
21
|
-
let outgoingCompleted: boolean = false;
|
22
|
-
let email: string = '';
|
23
|
-
|
24
|
-
onMount(async (): Promise<void> => {
|
25
|
-
stepCompleted = $progress[3]?.state === 'c';
|
26
|
-
if (stepCompleted) {
|
27
|
-
incomingCompleted = true;
|
28
|
-
outgoingCompleted = true;
|
29
|
-
} else {
|
30
|
-
const responseIncoming = await isIncomingEmailAccConnected();
|
31
|
-
const responseOutgoing = await isOutgoingEmailAccConnected();
|
32
|
-
incomingCompleted = responseIncoming.completionStatus;
|
33
|
-
outgoingCompleted = responseOutgoing.completionStatus;
|
34
|
-
}
|
35
|
-
|
36
|
-
const response = await getBuildInEmail();
|
37
|
-
email = response.message;
|
38
|
-
});
|
39
|
-
|
40
|
-
async function handleIncomingEmailConnect(): Promise<void> {
|
41
|
-
const response = await isIncomingEmailAccConnected(true);
|
42
|
-
incomingCompleted = response.completionStatus;
|
43
|
-
window.location.hash = 'Incoming-Mail-Accounts';
|
44
|
-
}
|
45
|
-
|
46
|
-
async function handleOutgoingEmailConnect(): Promise<void> {
|
47
|
-
const response = await isOutgoingEmailAccConnected(true);
|
48
|
-
outgoingCompleted = response.completionStatus;
|
49
|
-
window.location.hash = 'Outgoing-Mail-Accounts';
|
50
|
-
}
|
51
|
-
|
52
|
-
$: stepCompleted = incomingCompleted && outgoingCompleted;
|
53
|
-
</script>
|
54
|
-
|
55
|
-
|
56
|
-
<Step bind:stepFinished={stepCompleted}
|
57
|
-
headerTitle="Connect email accounts"
|
58
|
-
headerIconPath="{iconBasePath}connect-email-account.svg"
|
59
|
-
nextStepCase="mid"
|
60
|
-
nextStepUnfinishedText="Connect email accounts to complete this step."
|
61
|
-
nextStepFinishedText="If you are done with email accounts, it’s time to have a look at social media channels."
|
62
|
-
path="/connect-email-accounts"
|
63
|
-
>
|
64
|
-
<div class="wrapper">
|
65
|
-
<section>
|
66
|
-
<Heading text="Create your new helpdesk email address" />
|
67
|
-
<Paragraph text="Let's begin by connecting your email accounts to LiveAgent, enabling you to receive emails as tickets and respond to them seamlessly." />
|
68
|
-
<Paragraph text="Two types of email accounts must be set up in LiveAgent, incoming and outgoing. The same email account is often used as both an incoming and outgoing account."/>
|
69
|
-
<div class="panel-wrapper">
|
70
|
-
<Widget heading="Incoming email accounts"
|
71
|
-
text="These accounts receive your customer's emails. Each email sent to these accounts is imported into LiveAgent, creating a ticket."
|
72
|
-
iconSrc="{iconBasePath}incoming.svg"
|
73
|
-
cardPadding="14px 10px 14px 16px"
|
74
|
-
buttonAction={handleIncomingEmailConnect}
|
75
|
-
buttonText={incomingCompleted ? MANAGE : CONNECT}
|
76
|
-
buttonReversed={incomingCompleted}
|
77
|
-
/>
|
78
|
-
<Widget heading="Outgoing email accounts"
|
79
|
-
text="These accounts receive your customer's emails. Each email sent to these accounts is imported into LiveAgent, creating a ticket."
|
80
|
-
iconSrc="{iconBasePath}outgoing.svg"
|
81
|
-
cardPadding="14px 10px 14px 16px"
|
82
|
-
buttonAction={handleOutgoingEmailConnect}
|
83
|
-
buttonText={outgoingCompleted ? MANAGE : CONNECT}
|
84
|
-
buttonReversed={outgoingCompleted}
|
85
|
-
/>
|
86
|
-
</div>
|
87
|
-
</section>
|
88
|
-
<section class="section2">
|
89
|
-
<Heading text="Your Built-in Email Account"/>
|
90
|
-
<div class="inner-section">
|
91
|
-
<Paragraph text="Every LiveAgent account has a built-in email address, serving as both an incoming and outgoing email account. We provide this mailbox free of charge, but it does contain some limitations. It is recommended for use during the initial setup of your LiveAgent account and for fundamental testing but not for communication with your clients." />
|
92
|
-
<img src="public/assets/images/connect-email-accounts.svg" alt="connect email accounts">
|
93
|
-
</div>
|
94
|
-
|
95
|
-
</section>
|
96
|
-
<section class="built-in-email">
|
97
|
-
<div class="email-wrapper">
|
98
|
-
<span class="text">Your built-in email address is: </span>
|
99
|
-
<span class="email">{email}</span>
|
100
|
-
</div>
|
101
|
-
<Paragraph text="Feel free to send a test email to this address and see LiveAgent in action!"/>
|
102
|
-
</section>
|
103
|
-
</div>
|
104
|
-
</Step>
|
105
|
-
|
106
|
-
<style>
|
107
|
-
.section2 {
|
108
|
-
display: flex;
|
109
|
-
flex-direction: column;
|
110
|
-
gap: 10px;
|
111
|
-
margin-top: 24px;
|
112
|
-
}
|
113
|
-
|
114
|
-
.inner-section {
|
115
|
-
display: flex;
|
116
|
-
flex-direction: column;
|
117
|
-
align-items: center;
|
118
|
-
justify-content: space-between;
|
119
|
-
}
|
120
|
-
|
121
|
-
.inner-section > img {
|
122
|
-
margin-top: 0;
|
123
|
-
}
|
124
|
-
|
125
|
-
.panel-wrapper {
|
126
|
-
display: flex;
|
127
|
-
flex-direction: column;
|
128
|
-
gap: 10px;
|
129
|
-
padding: 16px 20px;
|
130
|
-
background: var(--background-color-grey-secondary);
|
131
|
-
border-radius: 6px;
|
132
|
-
}
|
133
|
-
|
134
|
-
.panel {
|
135
|
-
display: flex;
|
136
|
-
gap: 12px;
|
137
|
-
padding: 14px 10px 16px;
|
138
|
-
border-radius: 6px;
|
139
|
-
background: var(--background-color-grey-primary);
|
140
|
-
}
|
141
|
-
|
142
|
-
.panel-heading {
|
143
|
-
padding-left: 22px;
|
144
|
-
margin: 0 0 4px;
|
145
|
-
font-family: Roboto;
|
146
|
-
font-size: 13px;
|
147
|
-
font-weight: 700;
|
148
|
-
line-height: 20px;
|
149
|
-
}
|
150
|
-
|
151
|
-
.panel-right {
|
152
|
-
display: flex;
|
153
|
-
align-items: center;
|
154
|
-
justify-content: center;
|
155
|
-
}
|
156
|
-
|
157
|
-
.text {
|
158
|
-
color: var(----text-color-primary);
|
159
|
-
font-family: Roboto;
|
160
|
-
font-size: 13px;
|
161
|
-
font-weight: 700;
|
162
|
-
line-height: 20px;
|
163
|
-
}
|
164
|
-
|
165
|
-
.email {
|
166
|
-
padding: 5px 12px;
|
167
|
-
color: var(--background-button-primary);
|
168
|
-
font-family: Roboto;
|
169
|
-
font-size: 13px;
|
170
|
-
font-weight: 400;
|
171
|
-
line-height: 20px;
|
172
|
-
background: var(--event-surface-hover);
|
173
|
-
border-radius: 69px;
|
174
|
-
}
|
175
|
-
|
176
|
-
.email-wrapper {
|
177
|
-
display: inline-flex;
|
178
|
-
gap: 6px;
|
179
|
-
justify-content: center;
|
180
|
-
align-items: center;
|
181
|
-
padding-left: 12px;
|
182
|
-
border-radius: 69px;
|
183
|
-
background: var(--event-surface-gray-primary);
|
184
|
-
}
|
185
|
-
|
186
|
-
.built-in-email {
|
187
|
-
display: flex;
|
188
|
-
flex-direction: column;
|
189
|
-
align-items: center;
|
190
|
-
justify-content: center;
|
191
|
-
}
|
192
|
-
|
193
|
-
img {
|
194
|
-
margin: 24px 0;
|
195
|
-
}
|
196
|
-
|
197
|
-
@media (min-width: 768px) {
|
198
|
-
.inner-section {
|
199
|
-
flex-direction: row;
|
200
|
-
align-items: center;
|
201
|
-
justify-content: space-between;
|
202
|
-
}
|
203
|
-
}
|
204
|
-
</style>
|
@@ -1,86 +0,0 @@
|
|
1
|
-
<script lang="ts">
|
2
|
-
import Step from "./Step.svelte";
|
3
|
-
import Heading from "../../components/common/Heading.svelte";
|
4
|
-
import Paragraph from "../../components/common/Paragraph.svelte";
|
5
|
-
import Widget from "../../components/containers/Widget.svelte";
|
6
|
-
import {getContext, onMount} from "svelte";
|
7
|
-
import { progress } from "../../utils/progressStore.ts";
|
8
|
-
import { isViberConnected, isWhatsappConnected } from "../../utils/MockBackend.ts";
|
9
|
-
import {currentTheme} from "../../utils/themeStore.ts";
|
10
|
-
|
11
|
-
const CONNECT: string = "Connect";
|
12
|
-
const MANAGE: string = "Manage";
|
13
|
-
const iconBasePath: string = getContext<string>('iconBasePath');
|
14
|
-
|
15
|
-
let stepCompleted: boolean = false;
|
16
|
-
let whatsappCompleted: boolean = false;
|
17
|
-
let viberCompleted: boolean = false;
|
18
|
-
|
19
|
-
onMount(async (): Promise<void> => {
|
20
|
-
stepCompleted = $progress[5]?.state === 'c';
|
21
|
-
|
22
|
-
if (stepCompleted) {
|
23
|
-
whatsappCompleted = true;
|
24
|
-
viberCompleted = true;
|
25
|
-
} else {
|
26
|
-
const responseWhatsapp = await isWhatsappConnected();
|
27
|
-
const responseViber = await isViberConnected();
|
28
|
-
whatsappCompleted = responseWhatsapp.completionStatus;
|
29
|
-
viberCompleted = responseViber.completionStatus;
|
30
|
-
}
|
31
|
-
});
|
32
|
-
|
33
|
-
async function connectWhatsapp(): Promise<void> {
|
34
|
-
const response = await isWhatsappConnected(true);
|
35
|
-
whatsappCompleted = response.completionStatus;
|
36
|
-
window.location.hash = 'WhatsApp-Configuration';
|
37
|
-
}
|
38
|
-
|
39
|
-
async function connectViber(): Promise<void> {
|
40
|
-
const response = await isViberConnected(true);
|
41
|
-
viberCompleted = response.completionStatus;
|
42
|
-
window.location.hash = 'Viber-Configuration';
|
43
|
-
}
|
44
|
-
|
45
|
-
$: if (whatsappCompleted && viberCompleted) stepCompleted = true;
|
46
|
-
</script>
|
47
|
-
|
48
|
-
<Step bind:stepFinished={stepCompleted}
|
49
|
-
headerTitle="Connect messaging apps"
|
50
|
-
headerIconPath="{iconBasePath}connect-messaging-apps.svg"
|
51
|
-
nextStepCase="mid"
|
52
|
-
nextStepUnfinishedText="This step requires you to connect any messaging app you prefer."
|
53
|
-
nextStepFinishedText="Now, let's introduce another essential aspect of our tool - the diverse range of contact widgets that LiveAgent offers for your convenience."
|
54
|
-
path="/connect-messaging-apps"
|
55
|
-
>
|
56
|
-
<section>
|
57
|
-
<Heading text="Connect Messaging apps" />
|
58
|
-
<Paragraph text="Connecting these messaging platforms to LiveAgent enables you to respond to your customers from one single platform, eliminating the need to switch between different apps or accounts continuously." />
|
59
|
-
</section>
|
60
|
-
<section>
|
61
|
-
<Widget heading="Whatsapp"
|
62
|
-
text="Linking your WhatsApp accounts to LiveAgent will seamlessly transform all incoming WhatsApp messages into tickets within the system. This enables your agents to easily and efficiently respond to each customer query received via WhatsApp."
|
63
|
-
iconSrc="{iconBasePath}whatsapp_logo.svg"
|
64
|
-
backgroundColor="--background-color-green-primary"
|
65
|
-
cardPadding="16px 16px 16px 24px"
|
66
|
-
buttonAction={connectWhatsapp}
|
67
|
-
buttonText={whatsappCompleted ? MANAGE : CONNECT}
|
68
|
-
buttonReversed={whatsappCompleted}
|
69
|
-
/>
|
70
|
-
<Widget heading="Viber"
|
71
|
-
text="By integrating your Viber accounts with LiveAgent, all incoming Viber messages are systematically converted into individual tickets within the platform. This allows your agents to promptly and effortlessly address each customer inquiry received through Viber."
|
72
|
-
iconSrc="{iconBasePath}viber_logo.svg"
|
73
|
-
backgroundColor="--background-color-purple-primary"
|
74
|
-
cardPadding="16px 16px 16px 24px"
|
75
|
-
buttonAction={connectViber}
|
76
|
-
buttonText={viberCompleted ? MANAGE : CONNECT}
|
77
|
-
buttonReversed={viberCompleted}
|
78
|
-
/>
|
79
|
-
</section>
|
80
|
-
</Step>
|
81
|
-
|
82
|
-
<style>
|
83
|
-
section {
|
84
|
-
margin-bottom: 24px;
|
85
|
-
}
|
86
|
-
</style>
|
@@ -1,124 +0,0 @@
|
|
1
|
-
<script lang="ts">
|
2
|
-
import Step from "./Step.svelte";
|
3
|
-
import Paragraph from "../../components/common/Paragraph.svelte";
|
4
|
-
import Heading from "../../components/common/Heading.svelte";
|
5
|
-
import Widget from "../../components/containers/Widget.svelte";
|
6
|
-
import {getContext, onMount} from "svelte";
|
7
|
-
import { progress } from "../../utils/progressStore.ts";
|
8
|
-
import { isFacebookConnected, isInstagramConnected, isTwitterConnected } from "../../utils/MockBackend.ts";
|
9
|
-
import type {WidgetTypeInterface} from "../../utils/types.ts";
|
10
|
-
|
11
|
-
const iconBasePath: string = getContext<string>('iconBasePath');
|
12
|
-
const CONNECT: string = "Connect";
|
13
|
-
const MANAGE: string = "Manage";
|
14
|
-
|
15
|
-
let stepCompleted: boolean = false;
|
16
|
-
|
17
|
-
let widgets: WidgetTypeInterface[] = [
|
18
|
-
{
|
19
|
-
id: 'fb',
|
20
|
-
heading: 'Facebook',
|
21
|
-
text: 'Connect your Facebook business page and transform all posts, comments, and private messages sent to that page into tickets.',
|
22
|
-
iconPath: `${iconBasePath}facebook_logo.svg`,
|
23
|
-
backgroundColor: '--background-color-blue-primary',
|
24
|
-
buttonAction: isFacebookConnected,
|
25
|
-
completed: false,
|
26
|
-
redirectPath: 'Facebook-Pages'
|
27
|
-
},
|
28
|
-
{
|
29
|
-
id: 'ig',
|
30
|
-
heading: 'Instagram',
|
31
|
-
text: 'Connect your Instagram business page and transform all posts, comments, and private messages sent to that page into tickets.',
|
32
|
-
iconPath: `${iconBasePath}instagram_logo.svg`,
|
33
|
-
backgroundColor: '--background-color-pink-primary',
|
34
|
-
buttonAction: isInstagramConnected,
|
35
|
-
completed: false,
|
36
|
-
redirectPath: 'FacebookChannel'
|
37
|
-
},
|
38
|
-
{
|
39
|
-
id: 'x',
|
40
|
-
heading: 'Twitter',
|
41
|
-
text: 'Connect your Twitter business page and transform all posts, comments, and private messages sent to that page into tickets.',
|
42
|
-
iconPath: `${iconBasePath}x_logo.svg`,
|
43
|
-
backgroundColor: '--background-color-grey-primary',
|
44
|
-
buttonAction: isTwitterConnected,
|
45
|
-
completed: false,
|
46
|
-
redirectPath: 'TwitterChannel'
|
47
|
-
}
|
48
|
-
]
|
49
|
-
|
50
|
-
onMount(async (): Promise<void> => {
|
51
|
-
stepCompleted = $progress[4]?.state === 'c';
|
52
|
-
if (stepCompleted) {
|
53
|
-
widgets = widgets.map(widget => ({...widget, completed: true}));
|
54
|
-
} else {
|
55
|
-
const completionChecks = widgets.map(async widget => {
|
56
|
-
const result = await widget.buttonAction();
|
57
|
-
return {...widget, completed: result.completionStatus};
|
58
|
-
});
|
59
|
-
widgets = await Promise.all(completionChecks);
|
60
|
-
}
|
61
|
-
});
|
62
|
-
|
63
|
-
async function completeStep(widget: WidgetTypeInterface): Promise<void> {
|
64
|
-
const widgetIndex: number = widgets.findIndex(w => w.heading === widget.heading);
|
65
|
-
if (widgetIndex !== -1) {
|
66
|
-
const response = await widgets[widgetIndex].buttonAction(true);
|
67
|
-
widgets[widgetIndex].completed = response.completionStatus;
|
68
|
-
widgets = [...widgets];
|
69
|
-
window.location.hash = widget.redirectPath;
|
70
|
-
}
|
71
|
-
}
|
72
|
-
|
73
|
-
$: stepCompleted = widgets.every(widget => widget.completed);
|
74
|
-
</script>
|
75
|
-
|
76
|
-
<Step bind:stepFinished={stepCompleted}
|
77
|
-
headerTitle="Connect social media"
|
78
|
-
headerIconPath="{iconBasePath}connect-social-media.svg"
|
79
|
-
nextStepCase="mid"
|
80
|
-
nextStepUnfinishedText="Connecting social media account is needed to finalize this step."
|
81
|
-
nextStepFinishedText="And how about connecting WhatsApp or Viber accounts? With LiveAgent, we got you covered!"
|
82
|
-
path="/connect-social-media"
|
83
|
-
>
|
84
|
-
<section>
|
85
|
-
<Heading text="Connect your social media accounts" />
|
86
|
-
<div class="points">
|
87
|
-
<img src="public/assets/images/connect-social-media.svg" alt="connect social media">
|
88
|
-
<Paragraph text="LiveAgent can be integrated with Facebook, Instagram, and X(Twitter) accounts and transform communication from these channels into tickets for better and easier management. Having all available social networks connected to LiveAgent allows you to interact and reply to your customers from a single place instead of constantly switching between your social media accounts."/>
|
89
|
-
</div>
|
90
|
-
</section>
|
91
|
-
<section>
|
92
|
-
{#each widgets as widget}
|
93
|
-
<Widget heading={widget.heading}
|
94
|
-
text={widget.text}
|
95
|
-
iconSrc={widget.iconPath}
|
96
|
-
backgroundColor={widget.backgroundColor}
|
97
|
-
cardPadding="16px 16px 16px 24px"
|
98
|
-
buttonAction={() => completeStep(widget)}
|
99
|
-
buttonText={widget.completed ? MANAGE : CONNECT}
|
100
|
-
buttonReversed={widget.completed}
|
101
|
-
/>
|
102
|
-
{/each}
|
103
|
-
</section>
|
104
|
-
</Step>
|
105
|
-
|
106
|
-
<style>
|
107
|
-
.points {
|
108
|
-
display: flex;
|
109
|
-
flex-direction: column;
|
110
|
-
gap: 16px;
|
111
|
-
justify-content: space-between;
|
112
|
-
align-items: center;
|
113
|
-
}
|
114
|
-
|
115
|
-
img {
|
116
|
-
margin: 24px 0;
|
117
|
-
}
|
118
|
-
|
119
|
-
@media (min-width: 768px) {
|
120
|
-
.points {
|
121
|
-
flex-direction: row;
|
122
|
-
}
|
123
|
-
}
|
124
|
-
</style>
|