c7e0929eca
* feat: initial can create version implementation on model card * feat: disable model card CTAs for send * feat: initial model ingestion tests * fix: apply ingestion send to all CTAs * feat: sketchup bridge * feat: centeralize the start ingestion logic in host app store * fix: sketchup is handling via model ingestion * chore: cosmetics * feat(ingestion): add failWithError and failWithCancel GraphQL mutations * feat(ingestion): add failIngestion and cancelIngestion methods to useModelIngestion composable * feat(ingestion): handle ingestion failure and cancellation in hostAppStore * fix: reviewers comments * fix: don't know where the f that came from * refactor(ingestion): remove unused statusData and fix lint errors * feat(wizard): add canCreateVersion permission check to publish wizard * TODOs * feat(permissions): add 1s polling for canCreateVersion to reflect workspace limit changes * fix(tooltip): undefined doesnt refresh v-tippy * fix(wizard): too much ctrl z lol * refactor(permissions): check canCreateVersion on action instead of polling * feat(hostApp): adds fallback for model ingestion on older servers * fix: ingestion available check and rock'n roll * feat: workspace plan updated subscription boilerplate * fix: bump the timeout to 2h * feat: handle version limits in publish flows via subscription * feat: align Archicad and Vectorworks with new ingestion flow * chore: onMounted at end of file * fix: logic and ui adjustments * fix: refactoring and permissions * refactor: ingestionStatus renamed to activeIngestions * fix: error handling and notifications * fix: global error handling * chore: general alignment and clean up * fix(vectorworks): now uses capital V * chore: revert codegen --------- Co-authored-by: Björn Steinhagen <88777268+bjoernsteinhagen@users.noreply.github.com> Co-authored-by: Björn Steinhagen <steinhagen.bjoern@gmail.com>
72 lines
2.1 KiB
TypeScript
72 lines
2.1 KiB
TypeScript
import { canCreateVersionQuery } from '~/lib/graphql/mutationsAndQueries'
|
|
import { canCreateModelIngestionQuery } from '~/lib/ingestion/graphql/queries'
|
|
import { useAccountStore } from '~/store/accounts'
|
|
|
|
// use this composable whenever we need to check against available graphqls over servers
|
|
export function useCheckGraphql() {
|
|
/**
|
|
* Checks the ingestions available for the server,
|
|
* if available, returns with respond by appending `queryAvailable = true`
|
|
* otherwise, returns fake result object with `queryAvailable = false`
|
|
*/
|
|
const canCreateModelIngestion = async (
|
|
projectId: string,
|
|
modelId: string,
|
|
accountId: string
|
|
) => {
|
|
const accountsStore = useAccountStore()
|
|
const client = accountsStore.getAccountClient(accountId)
|
|
try {
|
|
const result = await client.query({
|
|
query: canCreateModelIngestionQuery,
|
|
variables: {
|
|
projectId,
|
|
modelId
|
|
},
|
|
fetchPolicy: 'network-only'
|
|
})
|
|
return {
|
|
...result.data.project.model.permissions.canCreateIngestion,
|
|
queryAvailable: true
|
|
}
|
|
} catch {
|
|
return { queryAvailable: false, authorized: false, message: undefined }
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if user can create a version for the given model.
|
|
* Used to validate before starting a publish operation.
|
|
*/
|
|
const canCreateVersion = async (
|
|
projectId: string,
|
|
modelId: string,
|
|
accountId: string
|
|
) => {
|
|
const accountsStore = useAccountStore()
|
|
const client = accountsStore.getAccountClient(accountId)
|
|
|
|
try {
|
|
const result = await client.query({
|
|
query: canCreateVersionQuery,
|
|
variables: {
|
|
projectId,
|
|
modelId
|
|
},
|
|
fetchPolicy: 'network-only'
|
|
})
|
|
|
|
return result.data.project.model.permissions.canCreateVersion
|
|
} catch (error) {
|
|
// If we can't check, allow the attempt - server will reject if not allowed
|
|
console.error('Failed to check canCreateVersion:', error)
|
|
return { authorized: true, message: null }
|
|
}
|
|
}
|
|
|
|
return {
|
|
canCreateVersion,
|
|
canCreateModelIngestion
|
|
}
|
|
}
|