trigger from receive settings

This commit is contained in:
bimgeek
2026-03-31 18:10:08 +03:00
parent 8fc81b0b4e
commit db88c8eeaa
4 changed files with 453 additions and 134 deletions
+25
View File
@@ -62,6 +62,10 @@
v-if="isReceiveSettingsMissing"
:notification="receiveSettingsMissingNotification"
/>
<CommonModelNotification
v-if="settingsExpiredNotification"
:notification="settingsExpiredNotification"
/>
<CommonModelNotification
v-if="expiredNotification"
:notification="expiredNotification"
@@ -209,6 +213,27 @@ const receiveLatestVersion = async () => {
await store.receiveModel(props.modelCard.modelCardId, 'UpdateNotification')
}
const settingsExpiredNotification = computed(() => {
if (!props.modelCard.expired) return
const notification = {} as ModelCardNotification
notification.dismissible = false
notification.level = 'info'
notification.text = 'Settings changed since last load'
const ctaType = props.modelCard.progress ? 'Restart' : 'Update'
notification.cta = {
name: ctaType,
action: async () => {
if (props.modelCard.progress) {
await store.receiveModelCancel(props.modelCard.modelCardId)
}
await receiveCurrentVersion()
}
}
return notification
})
const expiredNotification = computed(() => {
if (!props.modelCard.latestVersionId || props.modelCard.hasDismissedUpdateWarning)
return
+1 -1
View File
@@ -17,7 +17,7 @@ export interface IReceiveBinding extends IBinding<IReceiveBindingEvents> {
export interface IReceiveBindingEvents
extends IBindingSharedEvents,
IModelCardSharedEvents {
// See note oon timeout in bridge v2; we might not need this
setModelsExpired: (modelCardIds: string[]) => void
setModelReceiveResult: (args: {
modelCardId: string
bakedObjectIds: string[]
+417 -133
View File
@@ -874,7 +874,7 @@ export type BlobMetadata = {
streamId: Scalars['String']['output'];
uploadError?: Maybe<Scalars['String']['output']>;
uploadStatus: Scalars['Int']['output'];
userId: Scalars['String']['output'];
userId?: Maybe<Scalars['String']['output']>;
};
export type BlobMetadataCollection = {
@@ -1269,6 +1269,14 @@ export type CreateEmbedTokenReturn = {
tokenMetadata: EmbedToken;
};
export type CreateFromTemplateInput = {
modelIds: Array<Scalars['String']['input']>;
/** Override the template's name for this insight */
name?: InputMaybe<Scalars['String']['input']>;
projectId: Scalars['String']['input'];
templateId: Scalars['String']['input'];
};
export type CreateIssueInput = {
assigneeId?: InputMaybe<Scalars['ID']['input']>;
attachmentBlobIds?: InputMaybe<Array<Scalars['String']['input']>>;
@@ -1530,6 +1538,17 @@ export type DashboardUpdateInput = {
state?: InputMaybe<Scalars['String']['input']>;
};
export type DataSourceColumn = {
__typename?: 'DataSourceColumn';
name: Scalars['String']['output'];
type: Scalars['String']['output'];
};
export type DataSourceRefInput = {
alias: Scalars['String']['input'];
dataSourceId: Scalars['String']['input'];
};
export type DateIntervalFilter = {
after?: InputMaybe<Scalars['DateTime']['input']>;
before?: InputMaybe<Scalars['DateTime']['input']>;
@@ -1625,6 +1644,26 @@ export type EmbedTokenCreateInput = {
resourceIdString: Scalars['String']['input'];
};
export type ExecuteQueryInput = {
dataSources?: InputMaybe<Array<DataSourceRefInput>>;
modelIds: Array<Scalars['String']['input']>;
projectId: Scalars['String']['input'];
query: Scalars['JSONObject']['input'];
};
export type ExecuteQueryResult = {
__typename?: 'ExecuteQueryResult';
aggregate: ModelExecutionResult;
perModel: Array<ModelExecutionResult>;
};
export type ExecuteVersionQueryInput = {
modelId: Scalars['String']['input'];
projectId: Scalars['String']['input'];
query: Scalars['JSONObject']['input'];
versionId: Scalars['String']['input'];
};
export type ExtendedViewerResources = {
__typename?: 'ExtendedViewerResources';
/** The groups of viewer resources themselves */
@@ -1646,6 +1685,19 @@ export type ExtendedViewerResourcesRequest = {
savedViewId?: Maybe<Scalars['ID']['output']>;
};
export type ExternalDataSource = {
__typename?: 'ExternalDataSource';
columns: Array<DataSourceColumn>;
createdAt: Scalars['DateTime']['output'];
filename: Scalars['String']['output'];
id: Scalars['String']['output'];
name: Scalars['String']['output'];
projectId?: Maybe<Scalars['String']['output']>;
rowCount: Scalars['Int']['output'];
updatedAt: Scalars['DateTime']['output'];
workspaceId: Scalars['String']['output'];
};
export type FileImportResultInput = {
/** Duration of the file download before parsing started in seconds */
downloadDurationSeconds: Scalars['Float']['input'];
@@ -1812,6 +1864,277 @@ export type IngestionHistoryInput = {
limit?: InputMaybe<Scalars['Int']['input']>;
};
export type Insight = {
__typename?: 'Insight';
/**
* Aggregate results across all tracked models (newest first).
* Use limit=1 for KPI badge.
*/
aggregateResults: Array<InsightResult>;
createdAt: Scalars['DateTime']['output'];
createdBy: Scalars['String']['output'];
customized: Scalars['Boolean']['output'];
dataSources: Array<InsightDataSourceLink>;
/** Version history (previous snapshots) */
history: Array<InsightVersion>;
id: Scalars['String']['output'];
/** Latest result per model (excludes aggregate) */
latestResults: Array<InsightResult>;
metadata: Scalars['JSONObject']['output'];
modelIds: Array<Scalars['String']['output']>;
/** Historical results for a specific model (newest first) */
modelResults: Array<InsightResult>;
name: Scalars['String']['output'];
projectId: Scalars['String']['output'];
query: Scalars['JSONObject']['output'];
/** The template this insight was created from (null if ad-hoc or template deleted) */
template?: Maybe<InsightTemplate>;
/** Which template version was snapshotted at creation/last sync */
templateVersion?: Maybe<Scalars['Int']['output']>;
trigger: Scalars['String']['output'];
type: Scalars['String']['output'];
updatedAt: Scalars['DateTime']['output'];
updatedBy?: Maybe<Scalars['String']['output']>;
version: Scalars['Int']['output'];
/** Stored results for a specific version */
versionResults: Array<InsightResult>;
};
export type InsightAggregateResultsArgs = {
limit?: InputMaybe<Scalars['Int']['input']>;
};
export type InsightModelResultsArgs = {
limit?: InputMaybe<Scalars['Int']['input']>;
modelId: Scalars['String']['input'];
};
export type InsightVersionResultsArgs = {
modelId: Scalars['String']['input'];
versionId: Scalars['String']['input'];
};
export type InsightCreateInput = {
metadata?: InputMaybe<Scalars['JSONObject']['input']>;
modelIds?: InputMaybe<Array<Scalars['String']['input']>>;
name: Scalars['String']['input'];
projectId: Scalars['String']['input'];
query: Scalars['JSONObject']['input'];
trigger?: InputMaybe<Scalars['String']['input']>;
type?: InputMaybe<Scalars['String']['input']>;
};
export type InsightDataSourceLink = {
__typename?: 'InsightDataSourceLink';
alias: Scalars['String']['output'];
dataSource?: Maybe<ExternalDataSource>;
dataSourceId: Scalars['String']['output'];
insightId: Scalars['String']['output'];
};
export type InsightMutations = {
__typename?: 'InsightMutations';
addModels: Insight;
create: Insight;
/** Create an insight by snapshotting a workspace template */
createFromTemplate: Insight;
delete: Scalars['Boolean']['output'];
/** Execute a query ad-hoc against selected models (preview, no persistence) */
executeQuery: ExecuteQueryResult;
/** Execute a query against a single specific version of a model */
executeVersionQuery: VersionQueryResult;
linkDataSource: Scalars['Boolean']['output'];
removeModel: Insight;
/** Reset a customized insight back to its template's latest version */
resetToTemplate: Insight;
/** Rollback an insight to a previous version */
rollbackInsight: Insight;
update: Insight;
};
export type InsightMutationsAddModelsArgs = {
insightId: Scalars['String']['input'];
modelIds: Array<Scalars['String']['input']>;
projectId: Scalars['String']['input'];
};
export type InsightMutationsCreateArgs = {
input: InsightCreateInput;
};
export type InsightMutationsCreateFromTemplateArgs = {
input: CreateFromTemplateInput;
};
export type InsightMutationsDeleteArgs = {
id: Scalars['String']['input'];
projectId: Scalars['String']['input'];
};
export type InsightMutationsExecuteQueryArgs = {
input: ExecuteQueryInput;
};
export type InsightMutationsExecuteVersionQueryArgs = {
input: ExecuteVersionQueryInput;
};
export type InsightMutationsLinkDataSourceArgs = {
alias: Scalars['String']['input'];
dataSourceId: Scalars['String']['input'];
insightId: Scalars['String']['input'];
projectId: Scalars['String']['input'];
};
export type InsightMutationsRemoveModelArgs = {
insightId: Scalars['String']['input'];
modelId: Scalars['String']['input'];
projectId: Scalars['String']['input'];
};
export type InsightMutationsResetToTemplateArgs = {
insightId: Scalars['String']['input'];
projectId: Scalars['String']['input'];
};
export type InsightMutationsRollbackInsightArgs = {
insightId: Scalars['String']['input'];
projectId: Scalars['String']['input'];
toVersion: Scalars['Int']['input'];
};
export type InsightMutationsUpdateArgs = {
input: InsightUpdateInput;
};
export type InsightResult = {
__typename?: 'InsightResult';
id: Scalars['String']['output'];
insightId: Scalars['String']['output'];
modelId?: Maybe<Scalars['String']['output']>;
result: Scalars['JSONObject']['output'];
summary: Scalars['JSONObject']['output'];
timestamp: Scalars['DateTime']['output'];
versionId?: Maybe<Scalars['String']['output']>;
};
export type InsightTemplate = {
__typename?: 'InsightTemplate';
createdAt: Scalars['DateTime']['output'];
createdBy: Scalars['String']['output'];
description?: Maybe<Scalars['String']['output']>;
/** Version history (previous snapshots) */
history: Array<InsightTemplateVersion>;
id: Scalars['String']['output'];
metadata: Scalars['JSONObject']['output'];
name: Scalars['String']['output'];
query: Scalars['JSONObject']['output'];
type: Scalars['String']['output'];
updatedAt: Scalars['DateTime']['output'];
updatedBy: Scalars['String']['output'];
version: Scalars['Int']['output'];
workspaceId: Scalars['String']['output'];
};
export type InsightTemplateCreateInput = {
description?: InputMaybe<Scalars['String']['input']>;
metadata?: InputMaybe<Scalars['JSONObject']['input']>;
name: Scalars['String']['input'];
query: Scalars['JSONObject']['input'];
type: Scalars['String']['input'];
workspaceId: Scalars['String']['input'];
};
export type InsightTemplateMutations = {
__typename?: 'InsightTemplateMutations';
create: InsightTemplate;
delete: Scalars['Boolean']['output'];
rollback: InsightTemplate;
update: InsightTemplate;
};
export type InsightTemplateMutationsCreateArgs = {
input: InsightTemplateCreateInput;
};
export type InsightTemplateMutationsDeleteArgs = {
id: Scalars['String']['input'];
workspaceId: Scalars['String']['input'];
};
export type InsightTemplateMutationsRollbackArgs = {
id: Scalars['String']['input'];
toVersion: Scalars['Int']['input'];
workspaceId: Scalars['String']['input'];
};
export type InsightTemplateMutationsUpdateArgs = {
input: InsightTemplateUpdateInput;
};
export type InsightTemplateUpdateInput = {
description?: InputMaybe<Scalars['String']['input']>;
id: Scalars['String']['input'];
metadata?: InputMaybe<Scalars['JSONObject']['input']>;
name?: InputMaybe<Scalars['String']['input']>;
/** If true, propagate changes to all non-customized insights using this template */
propagateToInsights?: InputMaybe<Scalars['Boolean']['input']>;
query?: InputMaybe<Scalars['JSONObject']['input']>;
type?: InputMaybe<Scalars['String']['input']>;
workspaceId: Scalars['String']['input'];
};
export type InsightTemplateVersion = {
__typename?: 'InsightTemplateVersion';
metadata: Scalars['JSONObject']['output'];
name: Scalars['String']['output'];
query: Scalars['JSONObject']['output'];
type: Scalars['String']['output'];
updatedAt: Scalars['DateTime']['output'];
updatedBy: Scalars['String']['output'];
version: Scalars['Int']['output'];
};
export type InsightUpdateInput = {
id: Scalars['String']['input'];
metadata?: InputMaybe<Scalars['JSONObject']['input']>;
name?: InputMaybe<Scalars['String']['input']>;
projectId: Scalars['String']['input'];
query?: InputMaybe<Scalars['JSONObject']['input']>;
trigger?: InputMaybe<Scalars['String']['input']>;
type?: InputMaybe<Scalars['String']['input']>;
};
export type InsightVersion = {
__typename?: 'InsightVersion';
customized: Scalars['Boolean']['output'];
metadata: Scalars['JSONObject']['output'];
name: Scalars['String']['output'];
query: Scalars['JSONObject']['output'];
type: Scalars['String']['output'];
updatedAt: Scalars['DateTime']['output'];
updatedBy?: Maybe<Scalars['String']['output']>;
version: Scalars['Int']['output'];
};
export type InvitableCollaboratorsFilter = {
search?: InputMaybe<Scalars['String']['input']>;
};
@@ -2234,7 +2557,7 @@ export type LimitedWorkspace = {
id: Scalars['ID']['output'];
/**
* Optional base64 encoded workspace logo image
* @deprecated Use the `workspace.logoUrl` field instead. Will be removed after June 2025.
* @deprecated Use the `workspace.logoUrl` field instead. Will be removed after June 2026.
*/
logo?: Maybe<Scalars['String']['output']>;
/** URL for pulling the workspace logo image */
@@ -2385,6 +2708,15 @@ export type ModelCollection = {
totalCount: Scalars['Int']['output'];
};
export type ModelExecutionResult = {
__typename?: 'ModelExecutionResult';
durationMs: Scalars['Int']['output'];
modelId?: Maybe<Scalars['String']['output']>;
result: Scalars['JSONObject']['output'];
summary: Scalars['JSONObject']['output'];
versionId?: Maybe<Scalars['String']['output']>;
};
export type ModelIngestion = {
__typename?: 'ModelIngestion';
authorUser?: Maybe<LimitedUser>;
@@ -2668,6 +3000,8 @@ export type Mutation = {
commitsMove: Scalars['Boolean']['output'];
dashboardMutations: DashboardMutations;
fileUploadMutations: FileUploadMutations;
insightMutations: InsightMutations;
insightTemplateMutations: InsightTemplateMutations;
/**
* Delete a pending invite
* Note: The required scope to invoke this is not given out to app or personal access tokens
@@ -2710,30 +3044,8 @@ export type Mutation = {
* @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.create instead.
*/
streamCreate?: Maybe<Scalars['String']['output']>;
/**
* Deletes an existing stream.
* @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.delete instead. Field will be deleted on January 1st, 2026.
*/
streamDelete: Scalars['Boolean']['output'];
/** @deprecated Part of the old API surface and will be removed in the future. */
streamFavorite?: Maybe<Stream>;
/**
* Note: The required scope to invoke this is not given out to app or personal access tokens
* @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.batchCreate instead. Field will be deleted on January 1st, 2026.
*/
streamInviteBatchCreate: Scalars['Boolean']['output'];
/**
* Cancel a pending stream invite. Can only be invoked by a stream owner.
* Note: The required scope to invoke this is not given out to app or personal access tokens
* @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.cancel instead. Field will be deleted on January 1st, 2026.
*/
streamInviteCancel: Scalars['Boolean']['output'];
/**
* Invite a new or registered user to the specified stream
* Note: The required scope to invoke this is not given out to app or personal access tokens
* @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.create instead. Field will be deleted on January 1st, 2026.
*/
streamInviteCreate: Scalars['Boolean']['output'];
/**
* Accept or decline a stream invite
* @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.use instead.
@@ -2744,23 +3056,11 @@ export type Mutation = {
* @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.leave instead.
*/
streamLeave: Scalars['Boolean']['output'];
/**
* Revokes the permissions of a user on a given stream.
* @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.updateRole instead. Field will be deleted on January 1st, 2026.
*/
streamRevokePermission?: Maybe<Scalars['Boolean']['output']>;
/**
* Updates an existing stream.
* @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.update instead.
*/
streamUpdate: Scalars['Boolean']['output'];
/**
* Update permissions of a user on a given stream.
* @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.updateRole instead. Field will be deleted on January 1st, 2026.
*/
streamUpdatePermission?: Maybe<Scalars['Boolean']['output']>;
/** @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.batchDelete instead. Field will be deleted on January 1st, 2026. */
streamsDelete: Scalars['Boolean']['output'];
/** Delete a user's account. */
userDelete: Scalars['Boolean']['output'];
userNotificationPreferencesUpdate?: Maybe<Scalars['Boolean']['output']>;
@@ -2931,33 +3231,12 @@ export type MutationStreamCreateArgs = {
};
export type MutationStreamDeleteArgs = {
id: Scalars['String']['input'];
};
export type MutationStreamFavoriteArgs = {
favorited: Scalars['Boolean']['input'];
streamId: Scalars['String']['input'];
};
export type MutationStreamInviteBatchCreateArgs = {
input: Array<StreamInviteCreateInput>;
};
export type MutationStreamInviteCancelArgs = {
inviteId: Scalars['String']['input'];
streamId: Scalars['String']['input'];
};
export type MutationStreamInviteCreateArgs = {
input: StreamInviteCreateInput;
};
export type MutationStreamInviteUseArgs = {
accept: Scalars['Boolean']['input'];
streamId: Scalars['String']['input'];
@@ -2970,26 +3249,11 @@ export type MutationStreamLeaveArgs = {
};
export type MutationStreamRevokePermissionArgs = {
permissionParams: StreamRevokePermissionInput;
};
export type MutationStreamUpdateArgs = {
stream: StreamUpdateInput;
};
export type MutationStreamUpdatePermissionArgs = {
permissionParams: StreamUpdatePermissionInput;
};
export type MutationStreamsDeleteArgs = {
ids?: InputMaybe<Array<Scalars['String']['input']>>;
};
export type MutationUserDeleteArgs = {
userConfirmation: UserDeleteInput;
};
@@ -3228,6 +3492,8 @@ export type Project = {
allowPublicComments: Scalars['Boolean']['output'];
/** List of allowed assignees for this issue */
allowedIssueAssignees: IssueParticipantCollection;
/** When the project was archived. Null if the project is active. */
archivedAt?: Maybe<Scalars['DateTime']['output']>;
/** Get a single automation by id. Error will be thrown if automation is not found or inaccessible. */
automation: Automation;
automations: AutomationCollection;
@@ -4051,6 +4317,8 @@ export type ProjectMutations = {
__typename?: 'ProjectMutations';
/** Access request related mutations */
accessRequestMutations: ProjectAccessRequestMutations;
/** Archive an existing project. Only project owners can archive. */
archive: Project;
automationMutations: ProjectAutomationMutations;
/** Batch delete projects */
batchDelete: Scalars['Boolean']['output'];
@@ -4071,6 +4339,8 @@ export type ProjectMutations = {
/** @deprecated Part of the old API surface and will be removed in the future. Field will be deleted on October 1st, 2026. */
revokeEmbedTokens: Scalars['Boolean']['output'];
savedViewMutations: SavedViewMutations;
/** Unarchive an archived project. Only project owners can unarchive. */
unarchive: Project;
/** Updates an existing project */
update: Project;
/** Update role for a collaborator */
@@ -4078,6 +4348,11 @@ export type ProjectMutations = {
};
export type ProjectMutationsArchiveArgs = {
id: Scalars['String']['input'];
};
export type ProjectMutationsAutomationMutationsArgs = {
projectId: Scalars['ID']['input'];
};
@@ -4119,6 +4394,11 @@ export type ProjectMutationsRevokeEmbedTokensArgs = {
};
export type ProjectMutationsUnarchiveArgs = {
id: Scalars['String']['input'];
};
export type ProjectMutationsUpdateArgs = {
update: ProjectUpdateInput;
};
@@ -4158,6 +4438,7 @@ export type ProjectPermissionChecks = {
__typename?: 'ProjectPermissionChecks';
canAccessIssuesFeature: PermissionCheckResult;
canAccessViewerTableFeature: PermissionCheckResult;
canArchive: PermissionCheckResult;
canBroadcastActivity: PermissionCheckResult;
canCreateAutomation: PermissionCheckResult;
/** @deprecated Comments were moved to issues. Use canCreateIssue instead. This check will be removed after 01 Jun 2026. */
@@ -4188,6 +4469,7 @@ export type ProjectPermissionChecks = {
canRequestRender: PermissionCheckResult;
/** @deprecated Part of the old API surface and will be removed in the future. Use canRevoke on ShareToken. Field will be deleted on October 1st, 2026. */
canRevokeEmbedTokens: PermissionCheckResult;
canUnarchive: PermissionCheckResult;
canUpdate: PermissionCheckResult;
canUpdateAllowPublicComments: PermissionCheckResult;
canUpdateRole: PermissionCheckResult;
@@ -4358,6 +4640,13 @@ export enum ProjectVisibility {
Workspace = 'WORKSPACE'
}
export type PropagationResult = {
__typename?: 'PropagationResult';
failed: Scalars['Int']['output'];
skipped: Scalars['Int']['output'];
updated: Scalars['Int']['output'];
};
export type Query = {
__typename?: 'Query';
/** Stare into the void. */
@@ -4395,6 +4684,12 @@ export type Query = {
* @deprecated Part of the old API surface and will be removed in the future.
*/
discoverableStreams?: Maybe<StreamCollection>;
/** Get a single insight by ID */
insight?: Maybe<Insight>;
/** Get a single insight template by ID */
insightTemplate?: Maybe<InsightTemplate>;
/** List all insights tracking a specific model */
modelInsights: Array<Insight>;
/** Get the (limited) profile information of another server user */
otherUser?: Maybe<LimitedUser>;
permissions: RootPermissionChecks;
@@ -4403,6 +4698,8 @@ export type Query = {
* to see it, for example, if a project isn't public and the user doesn't have the appropriate rights.
*/
project: Project;
/** List all insights for a project, optionally filtered by type */
projectInsights: Array<Insight>;
/**
* Look for an invitation to a project, for the current user (authed or not). If token
* isn't specified, the server will look for any valid invite.
@@ -4432,11 +4729,6 @@ export type Query = {
* @deprecated Part of the old API surface and will be removed in the future. Use Query.projectInvite instead.
*/
streamInvite?: Maybe<PendingStreamCollaborator>;
/**
* Get all invitations to streams that the active user has
* @deprecated Part of the old API surface and will be removed in the future. Use User.projectInvites instead. Field will be deleted on January 1st, 2026.
*/
streamInvites: Array<PendingStreamCollaborator>;
/**
* Returns all streams that the active user is a collaborator on.
* Pass in the `query` parameter to search by name, description or ID.
@@ -4467,6 +4759,8 @@ export type Query = {
validateWorkspaceSlug: Scalars['Boolean']['output'];
workspace: Workspace;
workspaceBySlug: Workspace;
/** List templates for a workspace, optionally filtered by type */
workspaceInsightTemplates: Array<InsightTemplate>;
/**
* Look for an invitation to a workspace, for the current user (authed or not).
*
@@ -4524,6 +4818,24 @@ export type QueryDiscoverableStreamsArgs = {
};
export type QueryInsightArgs = {
id: Scalars['String']['input'];
projectId: Scalars['String']['input'];
};
export type QueryInsightTemplateArgs = {
id: Scalars['String']['input'];
workspaceId: Scalars['String']['input'];
};
export type QueryModelInsightsArgs = {
modelId: Scalars['String']['input'];
projectId: Scalars['String']['input'];
};
export type QueryOtherUserArgs = {
id: Scalars['String']['input'];
};
@@ -4534,6 +4846,12 @@ export type QueryProjectArgs = {
};
export type QueryProjectInsightsArgs = {
projectId: Scalars['String']['input'];
type?: InputMaybe<Scalars['String']['input']>;
};
export type QueryProjectInviteArgs = {
projectId: Scalars['String']['input'];
token?: InputMaybe<Scalars['String']['input']>;
@@ -4628,6 +4946,12 @@ export type QueryWorkspaceBySlugArgs = {
};
export type QueryWorkspaceInsightTemplatesArgs = {
type?: InputMaybe<Scalars['String']['input']>;
workspaceId: Scalars['String']['input'];
};
export type QueryWorkspaceInviteArgs = {
options?: InputMaybe<WorkspaceInviteLookupOptions>;
token?: InputMaybe<Scalars['String']['input']>;
@@ -5313,11 +5637,6 @@ export type StartFileImportInput = {
export type Stream = {
__typename?: 'Stream';
/**
* All the recent activity on this stream in chronological order
* @deprecated Part of the old API surface and will be removed in the future. Field will be deleted on January 1st, 2026.
*/
activity?: Maybe<ActivityCollection>;
allowPublicComments: Scalars['Boolean']['output'];
/** @deprecated Part of the old API surface and will be removed in the future. Use Project.blob instead. */
blob?: Maybe<BlobMetadata>;
@@ -5390,15 +5709,6 @@ export type Stream = {
};
export type StreamActivityArgs = {
actionType?: InputMaybe<Scalars['String']['input']>;
after?: InputMaybe<Scalars['DateTime']['input']>;
before?: InputMaybe<Scalars['DateTime']['input']>;
cursor?: InputMaybe<Scalars['DateTime']['input']>;
limit?: Scalars['Int']['input'];
};
export type StreamBlobArgs = {
id: Scalars['String']['input'];
};
@@ -5490,22 +5800,6 @@ export type StreamCreateInput = {
withContributors?: InputMaybe<Array<Scalars['String']['input']>>;
};
export type StreamInviteCreateInput = {
email?: InputMaybe<Scalars['String']['input']>;
message?: InputMaybe<Scalars['String']['input']>;
/** Defaults to the contributor role, if not specified */
role?: InputMaybe<Scalars['String']['input']>;
/** Can only be specified if guest mode is on or if the user is an admin */
serverRole?: InputMaybe<Scalars['String']['input']>;
streamId: Scalars['String']['input'];
userId?: InputMaybe<Scalars['String']['input']>;
};
export type StreamRevokePermissionInput = {
streamId: Scalars['String']['input'];
userId: Scalars['String']['input'];
};
export enum StreamRole {
StreamContributor = 'STREAM_CONTRIBUTOR',
StreamOwner = 'STREAM_OWNER',
@@ -5526,12 +5820,6 @@ export type StreamUpdateInput = {
name?: InputMaybe<Scalars['String']['input']>;
};
export type StreamUpdatePermissionInput = {
role: Scalars['String']['input'];
streamId: Scalars['String']['input'];
userId: Scalars['String']['input'];
};
export type Subscription = {
__typename?: 'Subscription';
/** It's lonely in the void. */
@@ -5644,7 +5932,7 @@ export type Subscription = {
* Track support session changes for a specific workspace.
* Fires when sessions are requested, approved, revoked, or expire.
*/
workspaceSupportSessionUpdated: WorkspaceSupportSessionUpdatedMessage;
workspaceSupportSessionUpdated?: Maybe<WorkspaceSupportSessionUpdatedMessage>;
/**
* Track updates to a specific workspace.
* Either slug or id must be set.
@@ -5998,7 +6286,7 @@ export type User = {
/**
* Get commits authored by the user. If requested for another user, then only commits
* from public streams will be returned.
* @deprecated Part of the old API surface and will be removed in the future. Use User.versions instead. Field will be deleted on January 1st, 2026.
* @deprecated Part of the old API surface and will be removed in the future. Use User.versions instead.
*/
commits?: Maybe<CommitCollection>;
company?: Maybe<Scalars['String']['output']>;
@@ -6017,12 +6305,6 @@ export type User = {
* (3) The user does not have a valid SSO session for the given SSO provider
*/
expiredSsoSessions: Array<LimitedWorkspace>;
/**
* All the streams that a active user has favorited.
* Note: You can't use this to retrieve another user's favorite streams.
* @deprecated Part of the old API surface and will be removed in the future. Field will be deleted on January 1st, 2026.
*/
favoriteStreams: StreamCollection;
/** Whether the user has a pending/active email verification token */
hasPendingVerification?: Maybe<Scalars['Boolean']['output']>;
id: Scalars['ID']['output'];
@@ -6045,7 +6327,7 @@ export type User = {
/**
* Returns all streams that the user is a collaborator on. If requested for a user, who isn't the
* authenticated user, then this will only return discoverable streams.
* @deprecated Part of the old API surface and will be removed in the future. Use User.projects instead. Field will be deleted on January 1st, 2026.
* @deprecated Part of the old API surface and will be removed in the future. Use User.projects instead.
*/
streams: UserStreamCollection;
/**
@@ -6108,16 +6390,6 @@ export type UserCommitsArgs = {
};
/**
* Full user type, should only be used in the context of admin operations or
* when a user is reading/writing info about himself
*/
export type UserFavoriteStreamsArgs = {
cursor?: InputMaybe<Scalars['String']['input']>;
limit?: Scalars['Int']['input'];
};
/**
* Full user type, should only be used in the context of admin operations or
* when a user is reading/writing info about himself
@@ -6499,6 +6771,15 @@ export type VersionPermissionChecks = {
canUpdate: PermissionCheckResult;
};
export type VersionQueryResult = {
__typename?: 'VersionQueryResult';
createdAt: Scalars['DateTime']['output'];
durationMs: Scalars['Int']['output'];
result: Scalars['JSONObject']['output'];
summary: Scalars['JSONObject']['output'];
versionId: Scalars['String']['output'];
};
/**
* If only one is set, the other will be resolved automatically
* If none are set, the view will be added to the end of the list
@@ -6696,7 +6977,7 @@ export type Workspace = {
issueLabels: IssueLabelCollection;
/**
* Logo image as base64-encoded string
* @deprecated Use the `workspace.logoUrl` field instead. Will be removed after June 2025.
* @deprecated Use the `workspace.logoUrl` field instead. Will be removed after June 2026.
*/
logo?: Maybe<Scalars['String']['output']>;
/** URL for pulling the workspace logo image */
@@ -6914,6 +7195,7 @@ export enum WorkspaceFeatureName {
Presentation = 'presentation',
/** @deprecated Use presentation instead. Value will be dropped after July 19, 2026. */
Presentations = 'presentations',
ProjectArchival = 'projectArchival',
ProjectDashboards = 'projectDashboards',
SavedViews = 'savedViews',
ViewerTable = 'viewerTable',
@@ -7464,6 +7746,8 @@ export type WorkspaceProjectMutationsUpdateRoleArgs = {
};
export type WorkspaceProjectsFilter = {
/** Include archived projects in results. Only respected for workspace admins; silently ignored for non-admins. */
includeArchived?: InputMaybe<Scalars['Boolean']['input']>;
/** Filter out projects by name */
search?: InputMaybe<Scalars['String']['input']>;
/** Only return workspace projects that the active user has an explicit project role in */
+10
View File
@@ -511,6 +511,15 @@ export const useHostAppStore = defineStore('hostAppStore', () => {
})
})
app.$receiveBinding?.on('setModelsExpired', (modelCardIds) => {
documentModelStore.value.models
.filter((m) => modelCardIds.includes(m.modelCardId))
.forEach((model: IReceiverModelCard) => {
model.error = undefined
model.expired = true
})
})
const setModelSendResult = (args: {
modelCardId: string
versionId: string
@@ -560,6 +569,7 @@ export const useHostAppStore = defineStore('hostAppStore', () => {
model.report = undefined
model.error = undefined
model.expired = false
model.displayReceiveComplete = false
model.hasDismissedUpdateWarning = true
model.progress = { status: 'Starting to receive...' }