Merge pull request #12011 from Budibase/fix/null-user-column-value
Fixing null in user column form field if using user metadata IDs
This commit is contained in:
commit
25ae13463a
|
@ -1,5 +1,10 @@
|
|||
import { prefixed, DocumentType } from "@budibase/types"
|
||||
export { SEPARATOR, UNICODE_MAX, DocumentType } from "@budibase/types"
|
||||
export {
|
||||
SEPARATOR,
|
||||
UNICODE_MAX,
|
||||
DocumentType,
|
||||
InternalTable,
|
||||
} from "@budibase/types"
|
||||
|
||||
/**
|
||||
* Can be used to create a few different forms of querying a view.
|
||||
|
@ -30,10 +35,6 @@ export const DeprecatedViews = {
|
|||
],
|
||||
}
|
||||
|
||||
export enum InternalTable {
|
||||
USER_METADATA = "ta_users",
|
||||
}
|
||||
|
||||
export const StaticDatabases = {
|
||||
GLOBAL: {
|
||||
name: "global-db",
|
||||
|
|
|
@ -1,9 +1,28 @@
|
|||
<script>
|
||||
import RelationshipField from "./RelationshipField.svelte"
|
||||
import { sdk } from "@budibase/shared-core"
|
||||
|
||||
export let defaultValue
|
||||
|
||||
function updateUserIDs(value) {
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(val => sdk.users.getGlobalUserID(val))
|
||||
} else {
|
||||
return sdk.users.getGlobalUserID(value)
|
||||
}
|
||||
}
|
||||
|
||||
function updateReferences(value) {
|
||||
if (sdk.users.containsUserID(value)) {
|
||||
return updateUserIDs(value)
|
||||
}
|
||||
return value
|
||||
}
|
||||
</script>
|
||||
|
||||
<RelationshipField
|
||||
{...$$props}
|
||||
datasourceType={"user"}
|
||||
primaryDisplay={"email"}
|
||||
defaultValue={updateReferences(defaultValue)}
|
||||
/>
|
||||
|
|
|
@ -160,7 +160,9 @@
|
|||
const handleChange = value => {
|
||||
const changed = fieldApi.setValue(value)
|
||||
if (onChange && changed) {
|
||||
onChange({ value })
|
||||
onChange({
|
||||
value,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
import { ContextUser, User } from "@budibase/types"
|
||||
import {
|
||||
ContextUser,
|
||||
DocumentType,
|
||||
SEPARATOR,
|
||||
User,
|
||||
InternalTable,
|
||||
} from "@budibase/types"
|
||||
import { getProdAppID } from "./applications"
|
||||
|
||||
// checks if a user is specifically a builder, given an app ID
|
||||
|
@ -67,3 +73,21 @@ export function hasAdminPermissions(user?: User | ContextUser): boolean {
|
|||
}
|
||||
return !!user.admin?.global
|
||||
}
|
||||
|
||||
export function getGlobalUserID(userId?: string): string | undefined {
|
||||
if (typeof userId !== "string") {
|
||||
return userId
|
||||
}
|
||||
const prefix = `${DocumentType.ROW}${SEPARATOR}${InternalTable.USER_METADATA}${SEPARATOR}`
|
||||
if (!userId.startsWith(prefix)) {
|
||||
return userId
|
||||
}
|
||||
return userId.split(prefix)[1]
|
||||
}
|
||||
|
||||
export function containsUserID(value: string | undefined): boolean {
|
||||
if (typeof value !== "string") {
|
||||
return false
|
||||
}
|
||||
return value.includes(`${DocumentType.USER}${SEPARATOR}`)
|
||||
}
|
||||
|
|
|
@ -58,6 +58,10 @@ export const DocumentTypesToImport: DocumentType[] = [
|
|||
DocumentType.LAYOUT,
|
||||
]
|
||||
|
||||
export enum InternalTable {
|
||||
USER_METADATA = "ta_users",
|
||||
}
|
||||
|
||||
// these documents don't really exist, they are part of other
|
||||
// documents or enriched into existence as part of get requests
|
||||
export enum VirtualDocumentType {
|
||||
|
|
Loading…
Reference in New Issue