-
-
-
-
+
+
+
+
+
+ {{ __('Welcome to Frappe CRM') }}
+
+
+ {{ __('{0}/{1} steps completed', [stepsCompleted, totalSteps]) }}
+
+
+
+
+
{{ __('Getting started') }}
+
+
+
+
+
+
+
+
+
{{ __('Help centre') }}
@@ -22,6 +66,9 @@
diff --git a/frontend/src/components/Settings/Settings.vue b/frontend/src/components/Settings/Settings.vue
index e805dc3b..5eb093cc 100644
--- a/frontend/src/components/Settings/Settings.vue
+++ b/frontend/src/components/Settings/Settings.vue
@@ -52,6 +52,7 @@
import WhatsAppIcon from '@/components/Icons/WhatsAppIcon.vue'
import ERPNextIcon from '@/components/Icons/ERPNextIcon.vue'
import PhoneIcon from '@/components/Icons/PhoneIcon.vue'
+import InviteIcon from '@/components/Icons/InviteIcon.vue'
import GeneralSettings from '@/components/Settings/GeneralSettings.vue'
import InviteMemberPage from '@/components/Settings/InviteMemberPage.vue'
import ProfileSettings from '@/components/Settings/ProfileSettings.vue'
@@ -96,7 +97,7 @@ const tabs = computed(() => {
},
{
label: __('Invite Members'),
- icon: 'user-plus',
+ icon: InviteIcon,
component: markRaw(InviteMemberPage),
condition: () => isManager(),
},
diff --git a/frontend/src/composables/onboarding.js b/frontend/src/composables/onboarding.js
new file mode 100644
index 00000000..c54c14c3
--- /dev/null
+++ b/frontend/src/composables/onboarding.js
@@ -0,0 +1,80 @@
+import LeadsIcon from '@/components/Icons/LeadsIcon.vue'
+import InviteIcon from '@/components/Icons/InviteIcon.vue'
+import ConvertIcon from '@/components/Icons/ConvertIcon.vue'
+import NoteIcon from '@/components/Icons/NoteIcon.vue'
+import CommentIcon from '@/components/Icons/CommentIcon.vue'
+import EmailIcon from '@/components/Icons/EmailIcon.vue'
+import TaskIcon from '@/components/Icons/TaskIcon.vue'
+import StepsIcon from '@/components/Icons/StepsIcon.vue'
+import { ref, reactive, computed, markRaw } from 'vue'
+
+const steps = reactive([
+ {
+ title: 'Create your first lead',
+ icon: markRaw(LeadsIcon),
+ completed: true,
+ },
+ {
+ title: 'Invite your team',
+ icon: markRaw(InviteIcon),
+ completed: false,
+ },
+ {
+ title: 'Convert lead to deal',
+ icon: markRaw(ConvertIcon),
+ completed: false,
+ },
+ {
+ title: 'Create your first note',
+ icon: markRaw(NoteIcon),
+ completed: false,
+ },
+ {
+ title: 'Create your first task',
+ icon: markRaw(TaskIcon),
+ completed: false,
+ },
+ {
+ title: 'Add your first comment',
+ icon: markRaw(CommentIcon),
+ completed: false,
+ },
+ {
+ title: 'Send email',
+ icon: markRaw(EmailIcon),
+ completed: false,
+ },
+ {
+ title: 'Change deal status',
+ icon: markRaw(StepsIcon),
+ completed: false,
+ },
+])
+
+const stepsCompleted = computed(
+ () => steps.filter((step) => step.completed).length,
+)
+const totalSteps = ref(steps.length)
+
+const completedPercentage = computed(() =>
+ Math.floor((stepsCompleted.value / totalSteps.value) * 100),
+)
+
+export function useOnboarding() {
+ const incrementStep = () => {
+ stepsCompleted.value++
+ }
+
+ const decrementStep = () => {
+ stepsCompleted.value--
+ }
+
+ return {
+ steps,
+ stepsCompleted,
+ totalSteps,
+ completedPercentage,
+ incrementStep,
+ decrementStep,
+ }
+}