team join with link and member admin
This commit is contained in:
@@ -24,21 +24,35 @@
|
||||
if(!date){ return ""; }
|
||||
return new Intl.DateTimeFormat('default', {dateStyle: 'long'}).format(date);
|
||||
}
|
||||
|
||||
function joinURL(){
|
||||
return `${config.public.siteRootUrl}/join/${activeMembership.value?.account.join_password}`;
|
||||
}
|
||||
|
||||
</script>
|
||||
<template>
|
||||
<div>
|
||||
<h3>Account</h3>
|
||||
<p>Name: {{ activeMembership?.account.name }} <span v-if="activeMembership && (activeMembership.access === ACCOUNT_ACCESS.OWNER || activeMembership.access !== ACCOUNT_ACCESS.ADMIN)"><input v-model="newAccountName" placeholder="Enter New Name"/><button @click.prevent="accountStore.changeAccountName(newAccountName)">Change Name</button></span></p>
|
||||
<p>Name: {{ activeMembership?.account.name }} <span v-if="activeMembership && (activeMembership.access === ACCOUNT_ACCESS.OWNER || activeMembership.access === ACCOUNT_ACCESS.ADMIN)"><input v-model="newAccountName" placeholder="Enter New Name"/><button @click.prevent="accountStore.changeAccountName(newAccountName)">Change Name</button></span></p>
|
||||
<p>Current Period Ends: {{ formatDate(activeMembership?.account.current_period_ends) }}</p>
|
||||
<p>Permitted Features: {{ activeMembership?.account.features }}</p>
|
||||
<p>Maximum Notes: {{ activeMembership?.account.max_notes }}</p>
|
||||
<p>Maximum Members: {{ activeMembership?.account.max_members }}</p>
|
||||
<p>Access Level: {{ activeMembership?.access }}</p>
|
||||
<p>Access Level: {{ activeMembership?.access }} <span v-if="activeMembership && activeMembership.access === ACCOUNT_ACCESS.ADMIN"><button @click.prevent="accountStore.claimOwnershipOfAccount()">Claim Ownership of Account</button></span></p>
|
||||
<p>Plan: {{ activeMembership?.account.plan_name }}</p>
|
||||
<p>Join Link: <pre>{{ joinURL() }}</pre> <span v-if="activeMembership && (activeMembership.access === ACCOUNT_ACCESS.OWNER || activeMembership.access === ACCOUNT_ACCESS.ADMIN)"><button @click.prevent="accountStore.rotateJoinPassword()">Generate New Join Link</button></span></p>
|
||||
|
||||
<h4>Members</h4>
|
||||
<ul>
|
||||
<li v-for="accountMember in activeAccountMembers">{{ accountMember.user.display_name }}</li>
|
||||
<li v-for="accountMember in activeAccountMembers">
|
||||
{{ accountMember.user.display_name }}
|
||||
({{ accountMember.user.email }})
|
||||
[{{ accountMember.access }}]
|
||||
<span v-if="accountMember.pending">(pending)</span>
|
||||
<span v-if="accountMember.pending && activeMembership && (activeMembership.access === ACCOUNT_ACCESS.OWNER || activeMembership.access === ACCOUNT_ACCESS.ADMIN)"><button @click.prevent="accountStore.acceptPendingMembership(accountMember.id)">Accept Pending Membership</button></span>
|
||||
<span v-if="activeMembership && (activeMembership.access === ACCOUNT_ACCESS.OWNER || activeMembership.access === ACCOUNT_ACCESS.ADMIN) && accountMember.access === ACCOUNT_ACCESS.READ_ONLY"><button @click.prevent="accountStore.changeUserAccessWithinAccount(accountMember.user.id, ACCOUNT_ACCESS.READ_WRITE)">Promote to Read/Write</button></span>
|
||||
<span v-if="activeMembership && (activeMembership.access === ACCOUNT_ACCESS.OWNER || activeMembership.access === ACCOUNT_ACCESS.ADMIN) && accountMember.access === ACCOUNT_ACCESS.READ_WRITE"><button @click.prevent="accountStore.changeUserAccessWithinAccount(accountMember.user.id, ACCOUNT_ACCESS.ADMIN)">Promote to Admin</button></span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<template v-if="config.public.debugMode">
|
||||
@@ -51,10 +65,7 @@
|
||||
<p>User Id: {{ activeMembership?.user_id }}</p>
|
||||
</template>
|
||||
|
||||
<button @click.prevent="accountStore.changeAccountPlan(2)">Change active Account Plan to 2</button>
|
||||
<button @click.prevent="accountStore.joinUserToAccount(4)">Join user 4 to active account</button>
|
||||
<button @click.prevent="accountStore.changeUserAccessWithinAccount(4, 'OWNER')">Change user 4 access within account 5 to OWNER (SHOULD FAIL)</button>
|
||||
<button @click.prevent="accountStore.changeUserAccessWithinAccount(4, 'ADMIN')">Change user 4 access within account 5 to ADMIN</button>
|
||||
<button @click.prevent="accountStore.claimOwnershipOfAccount()">Claim Ownership of current account for current user</button>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
44
pages/join/[join_password].vue
Normal file
44
pages/join/[join_password].vue
Normal file
@@ -0,0 +1,44 @@
|
||||
<script setup lang="ts">
|
||||
import { AccountWithMembers } from '~~/lib/services/service.types';
|
||||
|
||||
const route = useRoute();
|
||||
const {join_password} : {join_password?: string} = route.params;
|
||||
|
||||
const { $client } = useNuxtApp();
|
||||
|
||||
// this could probably be an elegant destructure here but I lost patience
|
||||
let account: AccountWithMembers | undefined;
|
||||
if(join_password){
|
||||
const result = await $client.account.getAccountByJoinPassword.useQuery({join_password});
|
||||
account = result.data.value?.account;
|
||||
}
|
||||
|
||||
const { data: dbUser } = await $client.auth.getDBUser.useQuery();
|
||||
|
||||
async function doJoin(){
|
||||
if(dbUser.value?.dbUser && account){
|
||||
await $client.account.joinUserToAccountPending.useQuery({account_id: account.id, user_id: dbUser.value.dbUser.id});
|
||||
} else {
|
||||
console.log(`Unable to Join`)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<template>
|
||||
<div>
|
||||
<div v-if="account">
|
||||
<h3>Join {{ account?.name }}</h3>
|
||||
|
||||
<div v-if="dbUser?.dbUser">
|
||||
<button @click.prevent="doJoin()">Join</button>
|
||||
</div>
|
||||
<div v-else>
|
||||
<NuxtLink to="/signup">Sign up to Join team</NuxtLink>
|
||||
<p>or</p>
|
||||
<NuxtLink to="/signin">Sign in to Join team</NuxtLink>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<h3>This does not appear to be a valid Join Link. Please ask a Team administrator to re-generate and resend the Join link.</h3>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
Reference in New Issue
Block a user