pr comments

This commit is contained in:
Peter Clement 2025-04-15 13:45:22 +01:00
parent 0709f68f47
commit d2be62dfe1
2 changed files with 28 additions and 6 deletions

View File

@ -9,7 +9,7 @@
Body,
Link,
} from "@budibase/bbui"
import { auth, admin } from "@/stores/portal"
import { auth, admin, licensing } from "@/stores/portal"
import { createEventDispatcher } from "svelte"
import { API } from "@/api"
@ -36,14 +36,15 @@
let containerWidth = "auto"
let promptText = ""
let animateBorder = false
let creditsExceeded = false // TODO: Make this computed when quota is implemented
let switchOnAIModal: Modal
let addCreditsModal: Modal
$: accountPortalAccess = $auth?.user?.accountPortalAccess
$: accountPortal = $admin.accountPortalUrl
$: aiEnabled = false
$: aiEnabled = $auth?.user?.llm
$: expanded = expandedOnly ? true : expanded
$: creditsExceeded = $licensing.aiCreditsExceeded
$: disabled = suggestedCode !== null || !aiEnabled || creditsExceeded
$: if (expandedOnly) {
containerWidth = calculateExpandedWidth()
}
@ -153,8 +154,7 @@
src={BBAI}
alt="AI"
class="ai-icon"
class:disabled={expanded &&
(suggestedCode !== null || !aiEnabled || creditsExceeded)}
class:disabled={expanded && disabled}
on:click={!expandedOnly
? e => {
e.stopPropagation()
@ -170,7 +170,7 @@
class="prompt-input"
placeholder="Generate Javascript..."
on:keydown={handleKeyPress}
disabled={suggestedCode !== null || !aiEnabled || creditsExceeded}
{disabled}
readonly={suggestedCode !== null}
/>
{:else}

View File

@ -56,7 +56,9 @@ interface LicensingState {
// user limits
userCount?: number
userLimit?: number
aiCreditsLimit?: number
userLimitReached: boolean
aiCreditsExceeded: boolean
errUserLimit: boolean
}
@ -102,6 +104,8 @@ class LicensingStore extends BudiStore<LicensingState> {
userLimit: undefined,
userLimitReached: false,
errUserLimit: false,
// AI Limits
aiCreditsExceeded: false,
})
}
@ -119,6 +123,16 @@ class LicensingStore extends BudiStore<LicensingState> {
return userCount > userLimit
}
aiCreditsExceeded(
aiCredits: number,
aiCreditsLimit = get(this.store).aiCreditsLimit
) {
if (aiCreditsLimit === UNLIMITED || aiCreditsLimit === undefined) {
return false
}
return aiCredits > aiCreditsLimit
}
async isCloud() {
let adminStore = get(admin)
if (!adminStore.loaded) {
@ -291,9 +305,15 @@ class LicensingStore extends BudiStore<LicensingState> {
const userQuota = license.quotas.usage.static.users
const userLimit = userQuota.value
const aiCreditsQuota = license.quotas.usage.monthly.budibaseAICredits
const aiCreditsLimit = aiCreditsQuota.value
const userCount = usage.usageQuota.users
const userLimitReached = this.usersLimitReached(userCount, userLimit)
const userLimitExceeded = this.usersLimitExceeded(userCount, userLimit)
const aiCreditsExceeded = this.aiCreditsExceeded(
usage.monthly.current.budibaseAICredits,
aiCreditsLimit
)
const isCloudAccount = await this.isCloud()
const errUserLimit =
isCloudAccount &&
@ -315,6 +335,8 @@ class LicensingStore extends BudiStore<LicensingState> {
userLimit,
userLimitReached,
errUserLimit,
aiCreditsLimit,
aiCreditsExceeded,
}
})
}