import { useMutation } from '@vue/apollo-composable' import gql from 'graphql-tag' export function useSignup () { const signupMutation = useMutation(gql`mutation signup ($input: CreateAccountWithPasswordInput!) { createAccountWithPassword (input: $input) { user { id name email avatar setupDone emailConfirmationNeeded } } }`, { update: (cache, { data: { createAccountWithPassword: resultData } }) => { const query = gql`query { currentUser { id name email avatar setupDone emailConfirmationNeeded } }` cache.writeQuery({ query, data: { currentUser: resultData.user, }, }) }, }) async function signup (input: { email: string, password: string }) { await signupMutation.mutate({ input, }) } return { signup, loading: signupMutation.loading, error: signupMutation.error, } } export function useConfirmEmail () { const confirmEmailMutation = useMutation(gql`mutation confirmEmail ($input: ConfirmEmailInput!) { confirmEmail (input: $input) { user { id emailConfirmationNeeded } } }`, { update: (cache, { data: { confirmEmail: resultData } }) => { const query = gql`query { currentUser { id emailConfirmationNeeded } }` cache.writeQuery({ query, data: { currentUser: resultData.user, }, }) }, }) async function confirmEmail (input: { email: string, token: string }) { await confirmEmailMutation.mutate({ input, }) } return { confirmEmail, loading: confirmEmailMutation.loading, error: confirmEmailMutation.error, } } export function getPasswordStrength (password: string) { if (!password) return 0 const length = password.length const uniqueChars = [ ...new Set(password), ].join('').replace(/\s/g, '').length return Math.min(length, 30) / 30 * Math.min(uniqueChars, 25) / 25 }