diff --git a/frontend/components.d.ts b/frontend/components.d.ts index e6d532de..fc22a05e 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -208,6 +208,7 @@ declare module 'vue' { SmileIcon: typeof import('./src/components/Icons/SmileIcon.vue')['default'] SortBy: typeof import('./src/components/SortBy.vue')['default'] SortIcon: typeof import('./src/components/Icons/SortIcon.vue')['default'] + SquareAsterisk: typeof import('./src/components/Icons/SquareAsterisk.vue')['default'] StepsIcon: typeof import('./src/components/Icons/StepsIcon.vue')['default'] SuccessIcon: typeof import('./src/components/Icons/SuccessIcon.vue')['default'] TableMultiselectInput: typeof import('./src/components/Controls/TableMultiselectInput.vue')['default'] diff --git a/frontend/src/components/Icons/SquareAsterisk.vue b/frontend/src/components/Icons/SquareAsterisk.vue new file mode 100644 index 00000000..cfe09ad9 --- /dev/null +++ b/frontend/src/components/Icons/SquareAsterisk.vue @@ -0,0 +1,19 @@ + diff --git a/frontend/src/components/Layouts/AppSidebar.vue b/frontend/src/components/Layouts/AppSidebar.vue index f73a4564..f7e87c4f 100644 --- a/frontend/src/components/Layouts/AppSidebar.vue +++ b/frontend/src/components/Layouts/AppSidebar.vue @@ -150,6 +150,7 @@ import Section from '@/components/Section.vue' import Email2Icon from '@/components/Icons/Email2Icon.vue' import PinIcon from '@/components/Icons/PinIcon.vue' import UserDropdown from '@/components/UserDropdown.vue' +import SquareAsterisk from '@/components/Icons/SquareAsterisk.vue' import LeadsIcon from '@/components/Icons/LeadsIcon.vue' import DealsIcon from '@/components/Icons/DealsIcon.vue' import ContactsIcon from '@/components/Icons/ContactsIcon.vue' @@ -321,6 +322,17 @@ const showIntermediateModal = ref(false) const currentStep = ref({}) const steps = reactive([ + { + name: 'setup_your_password', + title: __('Setup your password'), + icon: markRaw(SquareAsterisk), + completed: false, + onClick: () => { + minimize.value = true + showSettings.value = true + activeSettingsPage.value = 'Profile' + }, + }, { name: 'create_first_lead', title: __('Create your first lead'), diff --git a/frontend/src/components/Settings/ProfileSettings.vue b/frontend/src/components/Settings/ProfileSettings.vue index f7d1f384..aa9208ad 100644 --- a/frontend/src/components/Settings/ProfileSettings.vue +++ b/frontend/src/components/Settings/ProfileSettings.vue @@ -80,11 +80,12 @@ import Password from '@/components/Controls/Password.vue' import ProfileImageEditor from '@/components/Settings/ProfileImageEditor.vue' import { usersStore } from '@/stores/users' -import { createToast } from '@/utils' -import { Dialog, Avatar, createResource, ErrorMessage } from 'frappe-ui' +import { Dialog, Avatar, createResource, ErrorMessage, toast } from 'frappe-ui' +import { useOnboarding } from 'frappe-ui/frappe' import { ref, computed, onMounted } from 'vue' const { getUser, users } = usersStore() +const { updateOnboardingStep } = useOnboarding('frappecrm') const user = computed(() => getUser() || {}) @@ -96,6 +97,13 @@ const error = ref('') function updateUser() { loading.value = true + + let passwordUpdated = false + + if (profile.value.new_password) { + passwordUpdated = true + } + const fieldname = { first_name: profile.value.first_name, last_name: profile.value.last_name, @@ -112,6 +120,9 @@ function updateUser() { }, auto: true, onSuccess: () => { + if (passwordUpdated) { + updateOnboardingStep('setup_your_password') + } loading.value = false error.value = '' profile.value.new_password = ''