import { Clerk } from '@clerk/clerk-js'
// Initialize Clerk with your Clerk Publishable Key
const clerk = new Clerk('YOUR_PUBLISHABLE_KEY')
await clerk.load()
if (clerk.user) {
// Check for an active organization
if (clerk.organization) {
// Render list of organization membership requests
async function renderMembershipRequests(organization, isAdmin) {
try {
const { data } = await organization.getMembershipRequests()
const membershipRequests = data
console.log(`getMembershipRequests:`, membershipRequests)
membershipRequests.map((membershipRequest) => {
const requestsTable = document.getElementById('requests_table')
const row = requestsTable.insertRow()
row.insertCell().textContent = membershipRequest.publicUserData.userId
row.insertCell().textContent = membershipRequest.publicUserData.identifier
row.insertCell().textContent = membershipRequest.status
// Add administrative actions:
// Add member (removes request)
if (isAdmin) {
// Show add member button
document.getElementById('add-member-head').removeAttribute('hidden')
// Get the user ID of the member
const userId = membershipRequest.publicUserData.userId
// Add member to organization
const addBtn = document.createElement('button')
addBtn.textContent = 'Add member'
addBtn.addEventListener('click', async function (e) {
e.preventDefault()
const role = 'org:member'
await organization
.addMember({ userId, role })
.then((res) => {
document.getElementById('response').innerHTML = JSON.stringify(res)
})
.catch((error) => {
document.getElementById('error-container').removeAttribute('hidden')
document.getElementById('error-message').innerHTML = error.errors[0].longMessage
console.log('An error occurred:', error.errors)
})
})
row.insertCell().appendChild(addBtn)
}
})
} catch (error) {
document.getElementById('error-container').removeAttribute('hidden')
document.getElementById('error-message').innerHTML = error.errors[0].longMessage
console.log('An error occurred:', error.errors)
}
}
/**
* Checks if a user is an admin of the
* currently active organization and
* renders the organization's membership requests.
*/
async function checkAdminAndRenderRequests() {
const organizationId = clerk.organization.id
const organizationMemberships = await clerk.user.getOrganizationMemberships()
const currentMembership = organizationMemberships.find(
(membership) => membership.organization.id === organizationId,
)
const currentOrganization = currentMembership.organization
if (!currentOrganization) {
return
}
const isAdmin = currentMembership.role === 'org:admin'
console.log(`Organization:`, currentOrganization)
renderMembershipRequests(currentOrganization, isAdmin)
}
checkAdminAndRenderRequests()
} else {
// If there is no active organization,
// mount Clerk's <OrganizationSwitcher />
// to allow the user to set an organization as active
document.getElementById('app').innerHTML = `
<h2>Select an organization to set it as active</h2>
<div id="org-switcher"></div>
`
const orgSwitcherDiv = document.getElementById('org-switcher')
clerk.mountOrganizationSwitcher(orgSwitcherDiv)
}
} else {
document.getElementById('app').innerHTML = `
<div id="sign-in"></div>
`
const signInDiv = document.getElementById('sign-in')
clerk.mountSignIn(signInDiv)
}