1
0
Fork 0
mirror of synced 2024-08-14 01:21:41 +12:00

Add role footer for admins and developers, remove wasted API calls

This commit is contained in:
Andrew Kingston 2023-02-28 12:49:40 +00:00
parent a6c7277a2a
commit a44729d7ec
5 changed files with 47 additions and 12 deletions

View file

@ -34,6 +34,7 @@
export let fetchTerm = null export let fetchTerm = null
export let customPopoverHeight export let customPopoverHeight
export let align = "left" export let align = "left"
export let footer = null
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()
@ -210,6 +211,12 @@
{/each} {/each}
{/if} {/if}
</ul> </ul>
{#if footer}
<div class="footer">
{footer}
</div>
{/if}
</div> </div>
</Popover> </Popover>
@ -286,4 +293,11 @@
.popover-content :global(.spectrum-Search .spectrum-Textfield-icon) { .popover-content :global(.spectrum-Search .spectrum-Textfield-icon) {
top: 9px; top: 9px;
} }
.footer {
padding: 4px 12px 12px 12px;
font-style: italic;
max-width: 160px;
font-size: 12px;
}
</style> </style>

View file

@ -19,6 +19,7 @@
export let autocomplete = false export let autocomplete = false
export let sort = false export let sort = false
export let align export let align
export let footer = null
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()
@ -68,6 +69,7 @@
{options} {options}
{autoWidth} {autoWidth}
{align} {align}
{footer}
{getOptionLabel} {getOptionLabel}
{getOptionValue} {getOptionValue}
{getOptionIcon} {getOptionIcon}

View file

@ -23,6 +23,7 @@
export let autocomplete = false export let autocomplete = false
export let customPopoverHeight export let customPopoverHeight
export let align export let align
export let footer = null
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()
const onChange = e => { const onChange = e => {
@ -50,6 +51,7 @@
{autoWidth} {autoWidth}
{sort} {sort}
{align} {align}
{footer}
{getOptionLabel} {getOptionLabel}
{getOptionValue} {getOptionValue}
{getOptionIcon} {getOptionIcon}

View file

@ -13,16 +13,24 @@
export let allowRemove = false export let allowRemove = false
export let disabled = false export let disabled = false
export let align export let align
export let footer = null
export let allowedRoles = null
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()
const RemoveID = "remove" const RemoveID = "remove"
$: options = getOptions($roles, allowPublic, allowRemove) $: options = getOptions($roles, allowPublic, allowRemove, allowedRoles)
const getOptions = (roles, allowPublic) => { const getOptions = (roles, allowPublic, allowRemove, allowedRoles) => {
if (allowedRoles?.length) {
console.log(allowedRoles)
console.log(roles)
return roles.filter(role => allowedRoles.includes(role._id))
}
let newRoles = [...roles]
if (allowRemove) { if (allowRemove) {
roles = [ newRoles = [
...roles, ...newRoles,
{ {
_id: RemoveID, _id: RemoveID,
name: "Remove", name: "Remove",
@ -30,9 +38,9 @@
] ]
} }
if (allowPublic) { if (allowPublic) {
return roles return newRoles
} }
return roles.filter(role => role._id !== Constants.Roles.PUBLIC) return newRoles.filter(role => role._id !== Constants.Roles.PUBLIC)
} }
const getColor = role => { const getColor = role => {
@ -63,6 +71,7 @@
{quiet} {quiet}
{disabled} {disabled}
{align} {align}
{footer}
bind:value bind:value
on:change={onChange} on:change={onChange}
{options} {options}

View file

@ -84,7 +84,7 @@
const isBuilderOrAdmin = user.admin?.global || user.builder?.global const isBuilderOrAdmin = user.admin?.global || user.builder?.global
let role = undefined let role = undefined
if (isBuilderOrAdmin) { if (isBuilderOrAdmin) {
role = "ADMIN" role = Constants.Roles.ADMIN
} else { } else {
const appRole = Object.keys(user.roles).find(x => x === prodAppId) const appRole = Object.keys(user.roles).find(x => x === prodAppId)
if (appRole) { if (appRole) {
@ -134,6 +134,9 @@
return return
} }
try { try {
if (user.role === role) {
return
}
await updateAppUser(user, role) await updateAppUser(user, role)
} catch (error) { } catch (error) {
console.error(error) console.error(error)
@ -369,9 +372,12 @@
} }
} }
const roleNote = user => { const getRoleFooter = user => {
if (user.group) { if (!user.role && user.group) {
return "Part of a group" return "This user has been given access via their group"
}
if (user.isBuilderOrAdmin) {
return "This user's role grants admin access to all apps"
} }
return null return null
} }
@ -557,7 +563,7 @@
</div> </div>
<div class="auth-entity-access" class:muted={user.group}> <div class="auth-entity-access" class:muted={user.group}>
<RoleSelect <RoleSelect
note={roleNote(user)} footer={getRoleFooter(user)}
placeholder={false} placeholder={false}
value={user.role} value={user.role}
allowRemove={user.role && !user.group} allowRemove={user.role && !user.group}
@ -569,9 +575,11 @@
on:remove={() => { on:remove={() => {
onUpdateUser(user) onUpdateUser(user)
}} }}
disabled={user.isBuilderOrAdmin}
autoWidth autoWidth
align="right" align="right"
allowedRoles={user.isBuilderOrAdmin
? [Constants.Roles.ADMIN]
: null}
/> />
</div> </div>
</div> </div>