Skip to content

Commit 6b40532

Browse files
authored
Use our tabs for "open in new tab" (#10204)
Signed-off-by: Denis Bykhov <[email protected]>
1 parent ee77c81 commit 6b40532

File tree

6 files changed

+32
-6
lines changed

6 files changed

+32
-6
lines changed

common/config/rush/pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/view-resources/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
"@hcengineering/query": "^0.7.17",
6262
"@hcengineering/emoji": "workspace:^0.7.0",
6363
"@hcengineering/theme": "workspace:^0.7.0",
64+
"@hcengineering/workbench": "workspace:^0.7.0",
6465
"@hcengineering/hls": "workspace:^0.7.0",
6566
"fast-equals": "^5.2.2"
6667
}

plugins/view-resources/src/actionImpl.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
copyTextToClipboardOldBrowser,
2020
getClient,
2121
getMarkup,
22+
hasResource,
2223
updateAttribute
2324
} from '@hcengineering/presentation'
2425
import { markupToJSON } from '@hcengineering/text'
@@ -48,6 +49,7 @@ import {
4849
selectionStore
4950
} from './selection'
5051
import { deleteObjects, getObjectId, getObjectLinkFragment, restrictionStore } from './utils'
52+
import workbenchPlugin from '@hcengineering/workbench'
5153

5254
/**
5355
* Action to be used for copying text to clipboard.
@@ -328,8 +330,13 @@ async function OpenInNewTab (
328330
const panelComponent = hierarchy.classHierarchyMixin(d._class, view.mixin.ObjectPanel)
329331
const component = props?.component ?? panelComponent?.component ?? view.component.EditDoc
330332
const loc = await getObjectLinkFragment(hierarchy, d, {}, component)
331-
const url = locationToUrl(loc)
332-
window.open(url, '_blank')
333+
if (hasResource(workbenchPlugin.function.OpenInNewTab) === true) {
334+
const res = await getResource(workbenchPlugin.function.OpenInNewTab)
335+
await res(loc)
336+
} else {
337+
const url = locationToUrl(loc)
338+
window.open(url, '_blank')
339+
}
333340
}
334341

335342
/**

plugins/workbench-resources/src/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import Workbench from './components/Workbench.svelte'
2525
import ServerManager from './components/ServerManager.svelte'
2626
import WorkbenchTabs from './components/WorkbenchTabs.svelte'
2727
import { isAdminUser } from '@hcengineering/presentation'
28-
import { canCloseTab, closeCurrentTab, closeTab, pinTab, unpinTab } from './workbench'
28+
import { canCloseTab, closeCurrentTab, closeTab, OpenInNewTab, pinTab, unpinTab } from './workbench'
2929
import { closeWidget, closeWidgetTab, createWidgetTab, getSidebarObject } from './sidebar'
3030

3131
async function hasArchiveSpaces (spaces: Space[]): Promise<boolean> {
@@ -66,7 +66,8 @@ export default async (): Promise<Resources> => ({
6666
CloseWidget: closeWidget,
6767
GetSidebarObject: getSidebarObject,
6868
LogIn: logIn,
69-
LogOut: logOut
69+
LogOut: logOut,
70+
OpenInNewTab
7071
},
7172
actionImpl: {
7273
Navigate: doNavigate,

plugins/workbench-resources/src/workbench.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,19 @@ export function getTabLocation (tab: Pick<WorkbenchTab, 'location'>): Location {
176176
return parseLocation(url)
177177
}
178178

179+
export async function OpenInNewTab (loc: Location): Promise<void> {
180+
const client = getClient()
181+
const data = await getTabDataByLocation(loc)
182+
const name = data.name ?? (await translate(data.label, {}, get(languageStore)))
183+
const url = locationToUrl(loc)
184+
await client.createDoc(workbench.class.WorkbenchTab, core.space.Workspace, {
185+
attachedTo: getCurrentAccount().uuid,
186+
location: url,
187+
isPinned: false,
188+
name
189+
})
190+
}
191+
179192
export async function closeTab (tab: WorkbenchTab): Promise<void> {
180193
const tabs = get(tabsStore)
181194
const index = tabs.findIndex((t) => t._id === tab._id)

plugins/workbench/src/plugin.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import type { Class, Doc, Mixin, Ref, Space } from '@hcengineering/core'
1818
import type { Asset, IntlString, Metadata, Plugin, Resource } from '@hcengineering/platform'
1919
import { plugin } from '@hcengineering/platform'
20-
import { AnyComponent, ComponentExtensionId } from '@hcengineering/ui'
20+
import { AnyComponent, ComponentExtensionId, Location } from '@hcengineering/ui'
2121
import { Action, ViewAction } from '@hcengineering/view'
2222

2323
import type {
@@ -95,7 +95,8 @@ export const workbenchPlugin = plugin(workbenchId, {
9595
CloseWidget: '' as Resource<(widget: Ref<Widget>) => Promise<void>>,
9696
GetSidebarObject: '' as Resource<() => Partial<Pick<Doc, '_id' | '_class'>>>,
9797
LogIn: '' as Resource<(loginInfo: { account: string, token?: string }) => Promise<void>>,
98-
LogOut: '' as Resource<() => Promise<void>>
98+
LogOut: '' as Resource<() => Promise<void>>,
99+
OpenInNewTab: '' as Resource<(loc: Location) => Promise<void>>
99100
},
100101
actionImpl: {
101102
Navigate: '' as ViewAction<{

0 commit comments

Comments
 (0)