From a6c964a8306d07325b1bcc6e16fed577ed4c07ca Mon Sep 17 00:00:00 2001 From: Artyom Savchenko Date: Sat, 22 Nov 2025 17:24:05 +0700 Subject: [PATCH 1/7] Do not spam with expected invite errors (#10241) Signed-off-by: Artem Savchenko --- server/account/src/utils.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/account/src/utils.ts b/server/account/src/utils.ts index e6be70ad8d..3a96046909 100644 --- a/server/account/src/utils.ts +++ b/server/account/src/utils.ts @@ -1105,13 +1105,11 @@ export async function createWorkspaceRecord ( export async function checkInvite (ctx: MeasureContext, invite: WorkspaceInvite, email: string): Promise { if (invite.remainingUses === 0) { ctx.error('Invite limit exceeded', { email, ...invite }) - Analytics.handleError(new Error(`Invite limit exceeded ${email}`)) throw new PlatformError(new Status(Severity.ERROR, platform.status.Forbidden, {})) } if (invite.expiresOn > 0 && invite.expiresOn < Date.now()) { ctx.error('Invite link expired', { email, ...invite }) - Analytics.handleError(new Error(`Invite link expired ${invite.id} ${email}`)) throw new PlatformError(new Status(Severity.ERROR, platform.status.ExpiredLink, {})) } @@ -1129,7 +1127,6 @@ export async function checkInvite (ctx: MeasureContext, invite: WorkspaceInvite, if (invite.email != null && invite.email.trim().length > 0 && invite.email !== email) { ctx.error("Invite doesn't allow this email address", { email, ...invite }) - Analytics.handleError(new Error(`Invite link email check failed ${invite.id} ${email} ${invite.email}`)) throw new PlatformError(new Status(Severity.ERROR, platform.status.Forbidden, {})) } From 40dc9cb5287021ec674224261174d1306bbce1ef Mon Sep 17 00:00:00 2001 From: Artyom Savchenko Date: Sat, 22 Nov 2025 18:38:40 +0700 Subject: [PATCH 2/7] Fix domain not found error (#10240) Signed-off-by: Artem Savchenko --- plugins/view-resources/src/components/ParentsNavigator.svelte | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/view-resources/src/components/ParentsNavigator.svelte b/plugins/view-resources/src/components/ParentsNavigator.svelte index b84c4f883e..4fbe8acf47 100644 --- a/plugins/view-resources/src/components/ParentsNavigator.svelte +++ b/plugins/view-resources/src/components/ParentsNavigator.svelte @@ -51,6 +51,9 @@ while (currentDoc && withParent(currentDoc)) { const _id = getParentId(currentDoc) const _class = getParentClass(currentDoc) + if (_id == null || _class == null) { + continue + } const parent: Doc | undefined = await client.findOne(_class, { _id }) if (parent) { From 90d2af45e9571dada4964c10b43e207d52892d04 Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Sun, 23 Nov 2025 10:16:48 +0500 Subject: [PATCH 3/7] Navigate from ID presenter (#10242) Signed-off-by: Denis Bykhov --- .../src/components/DocTable.svelte | 2 +- .../src/components/IdPresenter.svelte | 28 +++++++++++++++++-- .../src/components/Table.svelte | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/plugins/view-resources/src/components/DocTable.svelte b/plugins/view-resources/src/components/DocTable.svelte index 9d0debebd7..be1bf07159 100644 --- a/plugins/view-resources/src/components/DocTable.svelte +++ b/plugins/view-resources/src/components/DocTable.svelte @@ -86,7 +86,7 @@ disabled: true } : {} - if (attribute.collectionAttr) { + if (attribute.collectionAttr || attribute.attribute?.type?._class === core.class.TypeIdentifier) { return { object, ...attribute.props, ...readonlyParams } } if (attribute.attribute?.type._class === core.class.EnumOf) { diff --git a/plugins/view-resources/src/components/IdPresenter.svelte b/plugins/view-resources/src/components/IdPresenter.svelte index 009cf8d515..4ff98969c6 100644 --- a/plugins/view-resources/src/components/IdPresenter.svelte +++ b/plugins/view-resources/src/components/IdPresenter.svelte @@ -13,10 +13,15 @@ // limitations under the License. --> - - {value ?? ''} - +{#if object !== undefined} + + + {value ?? ''} + + +{:else} + + {value ?? ''} + +{/if} diff --git a/plugins/view-resources/src/components/Table.svelte b/plugins/view-resources/src/components/Table.svelte index 225e85c092..64c511bc70 100644 --- a/plugins/view-resources/src/components/Table.svelte +++ b/plugins/view-resources/src/components/Table.svelte @@ -269,7 +269,7 @@ readonly: !editable, editable } - if (attribute.collectionAttr) { + if (attribute.collectionAttr || attribute.attribute?.type?._class === core.class.TypeIdentifier) { return { object, ...attribute.props, ...readonlyParams } } if (attribute.attribute?.type._class === core.class.EnumOf) { From 6f22cf0dd12ae12f688d9dd3fc3118a309c536bc Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Mon, 24 Nov 2025 21:33:16 +0500 Subject: [PATCH 4/7] Clear filters for card (#10246) Signed-off-by: Denis Bykhov --- .../components/navigator/TypesNavigator.svelte | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/plugins/card-resources/src/components/navigator/TypesNavigator.svelte b/plugins/card-resources/src/components/navigator/TypesNavigator.svelte index 9e34065120..f737c884ad 100644 --- a/plugins/card-resources/src/components/navigator/TypesNavigator.svelte +++ b/plugins/card-resources/src/components/navigator/TypesNavigator.svelte @@ -13,16 +13,16 @@ // limitations under the License. --> -
+
{#if favoriteRootClasses.length > 0} { selectType(e.detail) @@ -152,7 +153,7 @@ allClasses={classes} {_class} space={undefined} - currentSpace={undefined} + {currentSpace} {getItemActions} excludedClasses={favoriteTypes} on:select={(e) => { diff --git a/plugins/workbench-resources/src/components/Navigator.svelte b/plugins/workbench-resources/src/components/Navigator.svelte index 8126c5bf07..ca09ae04e3 100644 --- a/plugins/workbench-resources/src/components/Navigator.svelte +++ b/plugins/workbench-resources/src/components/Navigator.svelte @@ -81,8 +81,8 @@ let requestIndex = 0 async function update (model: NavigatorModel, spaces: Space[], preferences: Map, SpacePreference>) { - shownSpaces = spaces.filter((sp) => !sp.archived && !preferences.has(sp._id)) - starred = spaces.filter((sp) => preferences.has(sp._id)) + shownSpaces = spaces.filter((sp) => !sp.archived && (model.hideStarred || !preferences.has(sp._id))) + starred = model.hideStarred ? [] : spaces.filter((sp) => preferences.has(sp._id)) if (model.specials !== undefined) { const [sp, resIndex] = await updateSpecials(model.specials, spaces, ++requestIndex) if (resIndex !== requestIndex) return @@ -173,7 +173,7 @@
(menuSelection = res.detail)} /> - {#if starred.length} + {#if starred.length > 0 && !model.hideStarred} {/if} + {#if model.groups && model.groups.length > 0} +
+ {#each model.groups as group (group.id)} + {#if group.component} + + {/if} + {/each} + {/if} + {#each model.spaces as m (m.label)} hierarchy.isDerived(it._class, m.spaceClass))} @@ -198,14 +207,5 @@ deselect={menuSelection || starred.some((s) => s._id === currentSpace)} /> {/each} - - {#if model.groups && model.groups.length > 0} -
- {#each model.groups as group (group.id)} - {#if group.component} - - {/if} - {/each} - {/if} {/if} diff --git a/plugins/workbench/src/types.ts b/plugins/workbench/src/types.ts index 981533013a..f15bf52081 100644 --- a/plugins/workbench/src/types.ts +++ b/plugins/workbench/src/types.ts @@ -159,6 +159,7 @@ export interface NavigatorModel { spaces: SpacesNavModel[] specials?: SpecialNavModel[] groups?: GroupsNavModel[] + hideStarred?: boolean } /** @public */