From 54ce770ea300a29fd024a1e13bfc940663bee1fe Mon Sep 17 00:00:00 2001 From: Andrey Sobolev Date: Fri, 8 Nov 2024 12:40:32 +0700 Subject: [PATCH 1/4] Upgrade playwright (#7128) Signed-off-by: Andrey Sobolev --- common/config/rush/pnpm-lock.yaml | 70 +++++++++++++++---------------- qms-tests/sanity/package.json | 6 +-- tests/sanity/package.json | 6 +-- 3 files changed, 41 insertions(+), 41 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 4fad71cec3..7e6bfac2e8 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -57,8 +57,8 @@ dependencies: specifier: ^7.3.1 version: 7.5.1 '@playwright/test': - specifier: ^1.47.2 - version: 1.47.2 + specifier: ^1.48.2 + version: 1.48.2 '@rush-temp/account': specifier: file:./projects/account.tgz version: file:projects/account.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2) @@ -1395,11 +1395,11 @@ dependencies: specifier: ^1.7.3 version: 1.7.4 allure-js-commons: - specifier: ^3.0.4 - version: 3.0.4(allure-playwright@3.0.4) + specifier: ^3.0.6 + version: 3.0.6(allure-playwright@3.0.6) allure-playwright: - specifier: ^3.0.4 - version: 3.0.4(@playwright/test@1.47.2) + specifier: ^3.0.6 + version: 3.0.6(@playwright/test@1.48.2) autolinker: specifier: 4.0.0 version: 4.0.0 @@ -6384,12 +6384,12 @@ packages: dev: false optional: true - /@playwright/test@1.47.2: - resolution: {integrity: sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==} + /@playwright/test@1.48.2: + resolution: {integrity: sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==} engines: {node: '>=18'} hasBin: true dependencies: - playwright: 1.47.2 + playwright: 1.48.2 dev: false /@polka/url@1.0.0-next.24: @@ -10894,25 +10894,25 @@ packages: require-from-string: 2.0.2 dev: false - /allure-js-commons@3.0.4(allure-playwright@3.0.4): - resolution: {integrity: sha512-/UgTzpd7a16t8WpkA/25acmkk8xwwYUK3YDeVcZb1+3+7HHZRE943ZlKxUF/LCeLrZEFgYmOtma9xmaHagSddw==} + /allure-js-commons@3.0.6(allure-playwright@3.0.6): + resolution: {integrity: sha512-q3r3Cj3sG6hR7jH8SGkfNleLJK+yFAGwzyFDGzIfu+WLZ4yeFcBZHkWuq7QreRpxvsZWNby/38jhrj5yYFwQ2g==} peerDependencies: - allure-playwright: 3.0.4 + allure-playwright: 3.0.6 peerDependenciesMeta: allure-playwright: optional: true dependencies: - allure-playwright: 3.0.4(@playwright/test@1.47.2) + allure-playwright: 3.0.6(@playwright/test@1.48.2) md5: 2.3.0 dev: false - /allure-playwright@3.0.4(@playwright/test@1.47.2): - resolution: {integrity: sha512-P2QBUZfEtqof3PLonVXcO2BdaYmWKGRDy4Ehl4dcAGsXdfS5QdrNat+DmR5BMxBNQgvf1805fGBeZh2Zn0gagQ==} + /allure-playwright@3.0.6(@playwright/test@1.48.2): + resolution: {integrity: sha512-CYhIopRjtb1LoTHD0WhH1njd6cEz0J9B+YSSAzLmI/6FP1RPZJFqAyPg/RY8c2BObxM+98T9yZzwSdZ4l3YxjQ==} peerDependencies: '@playwright/test': '>=1.36.0' dependencies: - '@playwright/test': 1.47.2 - allure-js-commons: 3.0.4(allure-playwright@3.0.4) + '@playwright/test': 1.48.2 + allure-js-commons: 3.0.6(allure-playwright@3.0.6) dev: false /ansi-colors@4.1.3: @@ -20575,18 +20575,18 @@ packages: find-up: 3.0.0 dev: false - /playwright-core@1.47.2: - resolution: {integrity: sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==} + /playwright-core@1.48.2: + resolution: {integrity: sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==} engines: {node: '>=18'} hasBin: true dev: false - /playwright@1.47.2: - resolution: {integrity: sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==} + /playwright@1.48.2: + resolution: {integrity: sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==} engines: {node: '>=18'} hasBin: true dependencies: - playwright-core: 1.47.2 + playwright-core: 1.48.2 optionalDependencies: fsevents: 2.3.2 dev: false @@ -25715,7 +25715,7 @@ packages: dev: false file:projects/ai-bot-resources.tgz(@types/node@20.11.19)(esbuild@0.20.1)(postcss-load-config@4.0.2)(postcss@8.4.35)(ts-node@10.9.2): - resolution: {integrity: sha512-VUzWp9Le++agPkh/Sq5V8y1LHVSofd+WOJNwkYFDWlJH0+TKM1F88CFBANOYUlg2ZvhOQGyLCCFTcjbPohfnSQ==, tarball: file:projects/ai-bot-resources.tgz} + resolution: {integrity: sha512-viehvi2XBP+NH8RThNUkArEOG4w3RBebbYPMB082Z1FZWw3BA2eYJYuywMQrg996RB4VKd23z2MRKsH+S9/Ryw==, tarball: file:projects/ai-bot-resources.tgz} id: file:projects/ai-bot-resources.tgz name: '@rush-temp/ai-bot-resources' version: 0.0.0 @@ -25760,7 +25760,7 @@ packages: dev: false file:projects/ai-bot.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2): - resolution: {integrity: sha512-TH/kDh1LKw+pJRxLZZIjR7da6BQslR9S9Uy9HHXDtvtu5es55OmjRZEWPUnkBjKRmY6hTPBmaO4veq7RiaNz7g==, tarball: file:projects/ai-bot.tgz} + resolution: {integrity: sha512-9Den4fvsKoZPm3qqDIuseVnFyfc/Fho5/B0jme5SBPe8h3hWt3Z5KnuLn536JoEEnESef3XGzcNgGLrwoI/aew==, tarball: file:projects/ai-bot.tgz} id: file:projects/ai-bot.tgz name: '@rush-temp/ai-bot' version: 0.0.0 @@ -28875,7 +28875,7 @@ packages: dev: false file:projects/love-resources.tgz(@types/node@20.11.19)(esbuild@0.20.1)(postcss-load-config@4.0.2)(postcss@8.4.35)(ts-node@10.9.2): - resolution: {integrity: sha512-6dbzkDxFSSCZr7b3Cm7AFvESRax8JpNYiIvI/ScUNPN+M7L2a3PKWKlfdcD/ZvWOAKmQW1l0j5GPH/ucHHu8sQ==, tarball: file:projects/love-resources.tgz} + resolution: {integrity: sha512-j08lws3Rs5hRf/4J7g6XgTv81Ngee8Z6OZX5z8zJrYYyi+pF9nB+SqhYBo5XjhaTnGIB7qGmIEa3NPnOboTFXQ==, tarball: file:projects/love-resources.tgz} id: file:projects/love-resources.tgz name: '@rush-temp/love-resources' version: 0.0.0 @@ -29420,7 +29420,7 @@ packages: dev: false file:projects/model-love.tgz: - resolution: {integrity: sha512-UiC6UZqvrfHuUWOu6yZA1F++CSp4lgs3TWAlYXv6yLUAl6tn8m+X5OWbELYe3uPJxKYE/1GGEXL/A8VdnbyRiw==, tarball: file:projects/model-love.tgz} + resolution: {integrity: sha512-bj/JjSJTq+gRJxThem8TQC39bFDXXU22xDeB1w0qEo2eQ64Se3SZKRPg/jfsovn8/TgRJZkiwAhm2BfPF04C0Q==, tarball: file:projects/model-love.tgz} name: '@rush-temp/model-love' version: 0.0.0 dependencies: @@ -30902,7 +30902,7 @@ packages: dev: false file:projects/pod-ai-bot.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.4)(zod@3.23.8): - resolution: {integrity: sha512-jpa/Fp63/KSlRLWWvQ3sAv2vui5c0rCHmcJQCTITuqGtGm+1pNUfjD4wuKCuNp0314WXT7g8+Gge1u3SrQDLJg==, tarball: file:projects/pod-ai-bot.tgz} + resolution: {integrity: sha512-DdvaIQHJvpeb14DqaJxvXMN6gIP1T1HkGubDeZRUO2S2dWW3fR6hcJi7qyKzoQSPcywWkqlvFnoZI8TjBxaf3Q==, tarball: file:projects/pod-ai-bot.tgz} id: file:projects/pod-ai-bot.tgz name: '@rush-temp/pod-ai-bot' version: 0.0.0 @@ -32230,18 +32230,18 @@ packages: dev: false file:projects/qms-tests-sanity.tgz: - resolution: {integrity: sha512-WH2sJcYUwJBzqHng4F/ceE1IkB4XD5HhfdsuSBgCSVD5jsqm+V39F0+AFmLhgQsJuvwd6D2rM/RaCE1hHmGxPw==, tarball: file:projects/qms-tests-sanity.tgz} + resolution: {integrity: sha512-pwcr0TJv07HkRMREnDqvaEmQfzc6fDwD4GF57dZQ/LXDbukRlQicgvWZ+kTNFx/RUyXUiPzvLNvBELMGs3+k/Q==, tarball: file:projects/qms-tests-sanity.tgz} name: '@rush-temp/qms-tests-sanity' version: 0.0.0 dependencies: '@faker-js/faker': 8.4.1 - '@playwright/test': 1.47.2 + '@playwright/test': 1.48.2 '@types/jest': 29.5.12 '@types/node': 20.11.19 '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - allure-js-commons: 3.0.4(allure-playwright@3.0.4) - allure-playwright: 3.0.4(@playwright/test@1.47.2) + allure-js-commons: 3.0.6(allure-playwright@3.0.6) + allure-playwright: 3.0.6(@playwright/test@1.48.2) cross-env: 7.0.3 dotenv: 16.0.3 eslint: 8.56.0 @@ -35767,18 +35767,18 @@ packages: dev: false file:projects/tests-sanity.tgz: - resolution: {integrity: sha512-Ii9d6GDonR1QAp1S1uBqI6QdL7y/Xm3PC7W/HkwUtv8QTH1/gEslKOo6dXE7jxE1rHJigMWiy3ZP1+PHLFnuhg==, tarball: file:projects/tests-sanity.tgz} + resolution: {integrity: sha512-noV3nlBP0OvM6i4C5YUevkhltHxG/2bct4pusP3O3AEQ7Za+A4qwzpsE08pHfA9f9pedEG677GE4EmG9x61rVQ==, tarball: file:projects/tests-sanity.tgz} name: '@rush-temp/tests-sanity' version: 0.0.0 dependencies: '@faker-js/faker': 8.4.1 - '@playwright/test': 1.47.2 + '@playwright/test': 1.48.2 '@types/jest': 29.5.12 '@types/node': 20.11.19 '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - allure-js-commons: 3.0.4(allure-playwright@3.0.4) - allure-playwright: 3.0.4(@playwright/test@1.47.2) + allure-js-commons: 3.0.6(allure-playwright@3.0.6) + allure-playwright: 3.0.6(@playwright/test@1.48.2) cross-env: 7.0.3 dotenv: 16.0.3 eslint: 8.56.0 diff --git a/qms-tests/sanity/package.json b/qms-tests/sanity/package.json index 5d142c5ed4..8180161d79 100644 --- a/qms-tests/sanity/package.json +++ b/qms-tests/sanity/package.json @@ -42,9 +42,9 @@ "eslint-config-standard-with-typescript": "^40.0.0", "prettier": "^3.1.0", "typescript": "^5.3.3", - "@playwright/test": "^1.47.2", - "allure-playwright": "^3.0.4", - "allure-js-commons": "^3.0.4", + "@playwright/test": "^1.48.2", + "allure-playwright": "^3.0.6", + "allure-js-commons": "^3.0.6", "@faker-js/faker": "^8.4.1" }, "dependencies": { diff --git a/tests/sanity/package.json b/tests/sanity/package.json index d1cdbb2d3c..fd1e287b57 100644 --- a/tests/sanity/package.json +++ b/tests/sanity/package.json @@ -41,9 +41,9 @@ "eslint-config-standard-with-typescript": "^40.0.0", "prettier": "^3.1.0", "typescript": "^5.3.3", - "@playwright/test": "^1.47.2", - "allure-playwright": "^3.0.4", - "allure-js-commons": "^3.0.4", + "@playwright/test": "^1.48.2", + "allure-playwright": "^3.0.6", + "allure-js-commons": "^3.0.6", "@faker-js/faker": "^8.4.1" }, "dependencies": { From 97412400ff50a8c1227733bb919f81607da365de Mon Sep 17 00:00:00 2001 From: Anna Khismatullina Date: Fri, 8 Nov 2024 12:41:18 +0700 Subject: [PATCH 2/4] Fixes for Notion import (#7119) Signed-off-by: Anna Khismatullina --- dev/import-tool/src/importer/uploader.ts | 10 ++++- dev/import-tool/src/index.ts | 2 +- dev/import-tool/src/notion/notion.ts | 47 +++++++++++++++++------- 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/dev/import-tool/src/importer/uploader.ts b/dev/import-tool/src/importer/uploader.ts index 2edf7b2f25..64269f1176 100644 --- a/dev/import-tool/src/importer/uploader.ts +++ b/dev/import-tool/src/importer/uploader.ts @@ -24,6 +24,7 @@ import { export interface FileUploader { uploadFile: (id: Ref, name: string, file: File, contentType?: string) => Promise uploadCollaborativeDoc: (id: Ref, collabId: CollaborativeDoc, data: Buffer) => Promise + getFileUrl: (id: string) => string } export interface UploadResult { @@ -34,8 +35,11 @@ export interface UploadResult { export class FrontFileUploader implements FileUploader { constructor ( private readonly frontUrl: string, + private readonly workspaceId: string, private readonly token: string - ) {} + ) { + this.getFileUrl = this.getFileUrl.bind(this) + } public async uploadFile (id: Ref, name: string, file: File, contentType?: string): Promise { const form = new FormData() @@ -55,6 +59,10 @@ export class FrontFileUploader implements FileUploader { }) } + public getFileUrl (id: string): string { + return concatLink(this.frontUrl, `/files/${this.workspaceId}/${id}?file=${id}&workspace=${this.workspaceId}`) + } + public async uploadCollaborativeDoc (id: Ref, collabId: CollaborativeDoc, data: Buffer): Promise { const file = new File([data], collabId) const { documentId } = collaborativeDocParse(collabId) diff --git a/dev/import-tool/src/index.ts b/dev/import-tool/src/index.ts index cf8ab5f456..df3759fa5d 100644 --- a/dev/import-tool/src/index.ts +++ b/dev/import-tool/src/index.ts @@ -78,7 +78,7 @@ export function importTool (): void { return } const client = new TxOperations(connection, acc._id) - const fileUploader = new FrontFileUploader(getFrontUrl(), selectedWs.token) + const fileUploader = new FrontFileUploader(getFrontUrl(), selectedWs.workspaceId, selectedWs.token) try { await f(client, fileUploader) } catch (err: any) { diff --git a/dev/import-tool/src/notion/notion.ts b/dev/import-tool/src/notion/notion.ts index 1ac2aedb0f..7af6e37082 100644 --- a/dev/import-tool/src/notion/notion.ts +++ b/dev/import-tool/src/notion/notion.ts @@ -409,7 +409,7 @@ async function importAttachment ( } const file = new File([data], docMeta.name) - await fileUploader.uploadFile(docMeta.id as Ref, docMeta.name, file) + await fileUploader.uploadFile(docMeta.id as Ref, docMeta.id, file) const attachedData: AttachedData = { file: docMeta.id as Ref, @@ -442,7 +442,7 @@ async function importPageDocument ( const md = data.toString() ?? '' const json = parseMessageMarkdown(md ?? '', 'image://') if (documentMetaMap !== undefined) { - preProcessMarkdown(json, documentMetaMap) + preProcessMarkdown(json, documentMetaMap, fileUploader) } const yDoc = jsonToYDocNoSchema(json, 'content') const buffer = yDocToBuffer(yDoc) @@ -472,7 +472,11 @@ async function importPageDocument ( await client.createDoc(document.class.Document, space, attachedData, id) } -function preProcessMarkdown (json: MarkupNode, documentMetaMap: Map): void { +function preProcessMarkdown ( + json: MarkupNode, + documentMetaMap: Map, + fileUploader: FileUploader +): void { traverseNode(json, (node) => { if (node.type === MarkupNodeType.image) { const src = node.attrs?.src @@ -480,7 +484,7 @@ function preProcessMarkdown (json: MarkupNode, documentMetaMap: Map= 2 ? matched[1] : undefined } function extractExtension (fileName: string): string { - const decoded = decodeURI(fileName) + const decoded = safeDecodeURI(fileName) return parse(decoded).ext.toLowerCase() } function extractNameWoExtension (fileName: string): string { - const decoded = decodeURI(fileName) + const decoded = safeDecodeURI(fileName) return parse(decoded).name } @@ -608,8 +629,8 @@ function getFileId (filePath: string, fileName: string): string { if (notionId !== '' && notionId !== undefined) { return notionId } - const decodedPath = decodeURI(filePath) - const decodedName = decodeURI(fileName) + const decodedPath = safeDecodeURI(filePath) + const decodedName = safeDecodeURI(fileName) return join(basename(decodedPath), decodedName) } From ad54f56f4cebb71d502ea75d2a21e2996617ba9a Mon Sep 17 00:00:00 2001 From: Alexander Platov Date: Fri, 8 Nov 2024 08:43:06 +0300 Subject: [PATCH 3/4] Adaptive aSide in Settings (#7130) Signed-off-by: Alexander Platov --- models/setting/src/index.ts | 14 +++++++- models/setting/src/plugin.ts | 3 +- models/workbench/src/index.ts | 3 +- packages/theme/styles/components.scss | 1 + packages/theme/styles/tables.scss | 6 ++++ packages/ui/src/components/Modal.svelte | 3 +- packages/ui/src/resize.ts | 5 +++ .../settings/NotificationSettings.svelte | 4 +-- .../src/components/ClassAttributes.svelte | 12 +++++-- .../src/components/ClassSetting.svelte | 4 +-- .../src/components/EditAttribute.svelte | 6 ++-- .../src/components/EnumSetting.svelte | 4 +-- .../src/components/Settings.svelte | 31 +++++++++++++++--- .../src/components/SettingsWidget.svelte | 32 +++++++++++++++++++ plugins/setting-resources/src/index.ts | 4 ++- plugins/setting-resources/src/plugin.ts | 5 +++ .../src/components/Templates.svelte | 4 +-- .../src/components/sidebar/Sidebar.svelte | 5 ++- .../components/sidebar/SidebarExpanded.svelte | 4 +-- plugins/workbench-resources/src/sidebar.ts | 2 ++ tests/sanity/tests/model/sidebar-page.ts | 2 +- 21 files changed, 127 insertions(+), 27 deletions(-) create mode 100644 plugins/setting-resources/src/components/SettingsWidget.svelte diff --git a/models/setting/src/index.ts b/models/setting/src/index.ts index 39be49a0a2..3272c01439 100644 --- a/models/setting/src/index.ts +++ b/models/setting/src/index.ts @@ -38,7 +38,7 @@ import { import templates from '@hcengineering/templates' import setting from './plugin' -import workbench from '@hcengineering/model-workbench' +import workbench, { WidgetType } from '@hcengineering/model-workbench' import { type AnyComponent } from '@hcengineering/ui/src/types' export { settingId } from '@hcengineering/setting' @@ -133,6 +133,18 @@ export function createModel (builder: Builder): void { TSpaceTypeCreator ) + builder.createDoc( + workbench.class.Widget, + core.space.Model, + { + label: setting.string.Settings, + type: WidgetType.Flexible, + icon: setting.icon.Setting, + component: setting.component.SettingsWidget + }, + setting.ids.SettingsWidget + ) + builder.mixin(setting.class.Integration, core.class.Class, notification.mixin.ClassCollaborators, { fields: ['modifiedBy'] }) diff --git a/models/setting/src/plugin.ts b/models/setting/src/plugin.ts index ea9f186919..988bdcdc9f 100644 --- a/models/setting/src/plugin.ts +++ b/models/setting/src/plugin.ts @@ -46,7 +46,8 @@ export default mergeIds(settingId, setting, { InviteSetting: '' as AnyComponent, ArrayEditor: '' as AnyComponent, IntegrationPanel: '' as AnyComponent, - Configure: '' as AnyComponent + Configure: '' as AnyComponent, + SettingsWidget: '' as AnyComponent }, category: { Settings: '' as Ref diff --git a/models/workbench/src/index.ts b/models/workbench/src/index.ts index 6b669df82a..729bf39a56 100644 --- a/models/workbench/src/index.ts +++ b/models/workbench/src/index.ts @@ -41,7 +41,8 @@ import workbench from './plugin' export { workbenchId } from '@hcengineering/workbench' export { workbenchOperation } from './migration' -export type { Application } +export type { Application, Widget } +export { WidgetType } from '@hcengineering/workbench' @Model(workbench.class.Application, core.class.Doc, DOMAIN_MODEL) @UX(workbench.string.Application) diff --git a/packages/theme/styles/components.scss b/packages/theme/styles/components.scss index 4b6a4671a1..4d6339f176 100644 --- a/packages/theme/styles/components.scss +++ b/packages/theme/styles/components.scss @@ -62,6 +62,7 @@ gap: var(--spacing-4); } &__container { + justify-content: stretch; height: 100%; } &__container:not(.columns), diff --git a/packages/theme/styles/tables.scss b/packages/theme/styles/tables.scss index a78349fc25..8d2d11e549 100644 --- a/packages/theme/styles/tables.scss +++ b/packages/theme/styles/tables.scss @@ -282,4 +282,10 @@ } } } + &.short .hulyTableAttr-content.withTitle { + flex-direction: column; + align-items: stretch; + + .hulyTableAttr-content__wrapper:empty { display: none; } + } } diff --git a/packages/ui/src/components/Modal.svelte b/packages/ui/src/components/Modal.svelte index 1a87012330..52586b117e 100644 --- a/packages/ui/src/components/Modal.svelte +++ b/packages/ui/src/components/Modal.svelte @@ -32,6 +32,7 @@ export let padding: string | undefined = undefined export let hidden: boolean = false export let allowFullsize: boolean = false + export let noTopIndent: boolean = false export let hideFooter: boolean = false export let adaptive: 'default' | 'freezeActions' | 'doubleRow' | 'disabled' = 'disabled' export let showCancelButton: boolean = true @@ -56,7 +57,7 @@ -
+
diff --git a/plugins/setting-resources/src/components/ClassAttributes.svelte b/plugins/setting-resources/src/components/ClassAttributes.svelte index e64ad58e98..e90ba540e1 100644 --- a/plugins/setting-resources/src/components/ClassAttributes.svelte +++ b/plugins/setting-resources/src/components/ClassAttributes.svelte @@ -26,7 +26,9 @@ getEventPositionElement, showPopup, IconSettings, - ModernButton + ModernButton, + resizeObserver, + deviceWidths } from '@hcengineering/ui' import { ObjectPresenter } from '@hcengineering/view-resources' import settings from '../plugin' @@ -144,7 +146,13 @@
{/if} {/if} -
+
{ + if (el.clientWidth < deviceWidths[0] && !el.classList.contains('short')) el.classList.add('short') + else if (el.clientWidth >= deviceWidths[0] && el.classList.contains('short')) el.classList.remove('short') + }} +>
{#if showHierarchy} diff --git a/plugins/setting-resources/src/components/ClassSetting.svelte b/plugins/setting-resources/src/components/ClassSetting.svelte index 447809776c..db44b3eb55 100644 --- a/plugins/setting-resources/src/components/ClassSetting.svelte +++ b/plugins/setting-resources/src/components/ClassSetting.svelte @@ -27,7 +27,7 @@ Header, Breadcrumb, defineSeparators, - settingsSeparators, + twoPanelsSeparators, Separator, NavGroup } from '@hcengineering/ui' @@ -97,7 +97,7 @@ $: if (ofClass !== undefined && _class !== undefined && !client.getHierarchy().isDerived(_class, ofClass)) { _class = ofClass } - defineSeparators('workspaceSettings', settingsSeparators) + defineSeparators('workspaceSettings', twoPanelsSeparators)
diff --git a/plugins/setting-resources/src/components/EditAttribute.svelte b/plugins/setting-resources/src/components/EditAttribute.svelte index 0ed76746f4..4520175069 100644 --- a/plugins/setting-resources/src/components/EditAttribute.svelte +++ b/plugins/setting-resources/src/components/EditAttribute.svelte @@ -35,6 +35,7 @@ export let attribute: AnyAttribute export let exist: boolean export let disabled: boolean = true + export let noTopIndent: boolean = false let name: string let type: Type | undefined = attribute.type @@ -133,9 +134,8 @@ okLabel={presentation.string.Save} okAction={save} canSave={!(name === undefined || name.trim().length === 0) && !disabled} - onCancel={() => { - clearSettingsStore() - }} + onCancel={clearSettingsStore} + {noTopIndent} > {#if !disabled} diff --git a/plugins/setting-resources/src/components/EnumSetting.svelte b/plugins/setting-resources/src/components/EnumSetting.svelte index e775b207e2..000e7e514b 100644 --- a/plugins/setting-resources/src/components/EnumSetting.svelte +++ b/plugins/setting-resources/src/components/EnumSetting.svelte @@ -27,7 +27,7 @@ Scroller, Separator, defineSeparators, - settingsSeparators, + twoPanelsSeparators, showPopup } from '@hcengineering/ui' import { showMenu } from '@hcengineering/view-resources' @@ -51,7 +51,7 @@ showPopup(setting.component.EditEnum, { title: setting.string.CreateEnum }, 'top') } - defineSeparators('workspaceSettings', settingsSeparators) + defineSeparators('workspaceSettings', twoPanelsSeparators)
diff --git a/plugins/setting-resources/src/components/Settings.svelte b/plugins/setting-resources/src/components/Settings.svelte index dc6138b3ed..62170c3254 100644 --- a/plugins/setting-resources/src/components/Settings.svelte +++ b/plugins/setting-resources/src/components/Settings.svelte @@ -17,7 +17,8 @@ import { AccountRole, getCurrentAccount, hasAccountRole } from '@hcengineering/core' import login, { loginId } from '@hcengineering/login' import { setMetadata } from '@hcengineering/platform' - import presentation, { closeClient, createQuery } from '@hcengineering/presentation' + import presentation, { closeClient, getClient, createQuery } from '@hcengineering/presentation' + import settingPlg from '../plugin' import setting, { SettingsCategory, SettingsEvents } from '@hcengineering/setting' import { Component, @@ -35,13 +36,18 @@ settingsSeparators, showPopup, type AnyComponent, - deviceOptionsStore as deviceInfo + deviceOptionsStore as deviceInfo, + resizeObserver, + deviceWidths } from '@hcengineering/ui' - import { NavFooter } from '@hcengineering/workbench-resources' + import { closeWidget, NavFooter, openWidget, minimizeSidebar } from '@hcengineering/workbench-resources' + import workbench from '@hcengineering/workbench' import { ComponentType, onDestroy, onMount } from 'svelte' import { clearSettingsStore, settingsStore, type SettingsStore } from '../store' import { Analytics } from '@hcengineering/analytics' + const client = getClient() + let category: SettingsCategory | undefined let categoryId: string = '' @@ -122,11 +128,26 @@ return ss.component === undefined ? null : ss.component } $: asideComponent = updatedStore($settingsStore) + let moveASide: boolean = false + const widget = client.getModel().findAllSync(workbench.class.Widget, { _id: settingPlg.ids.SettingsWidget })[0] + $: if (moveASide && asideComponent != null) { + openWidget(widget, { component: asideComponent, ...asideProps }, { active: true, openedByUser: true }) + $deviceInfo.aside.visible = true + } else if ((moveASide && asideComponent == null) || (!moveASide && asideComponent != null)) { + closeWidget(widget._id) + minimizeSidebar() + } defineSeparators('setting', settingsSeparators) -
+
{ + if (el.clientWidth < deviceWidths[2] && !moveASide) moveASide = true + else if (el.clientWidth >= deviceWidths[2] && moveASide) moveASide = false + }} +> {#if $deviceInfo.navigator.visible}
{#key asideProps} diff --git a/plugins/setting-resources/src/components/SettingsWidget.svelte b/plugins/setting-resources/src/components/SettingsWidget.svelte new file mode 100644 index 0000000000..2918ad7fa3 --- /dev/null +++ b/plugins/setting-resources/src/components/SettingsWidget.svelte @@ -0,0 +1,32 @@ + + + +{#key asideProps} + {#if typeof asideComponent === 'string'} + + {:else} + + {/if} +{/key} diff --git a/plugins/setting-resources/src/index.ts b/plugins/setting-resources/src/index.ts index 59c6750723..a281151b2e 100644 --- a/plugins/setting-resources/src/index.ts +++ b/plugins/setting-resources/src/index.ts @@ -58,6 +58,7 @@ import RefEditor from './components/typeEditors/RefEditor.svelte' import RoleAssignmentEditor from './components/typeEditors/RoleAssignmentEditor.svelte' import StringTypeEditor from './components/typeEditors/StringTypeEditor.svelte' import WorkspaceSettings from './components/WorkspaceSettings.svelte' +import SettingsWidget from './components/SettingsWidget.svelte' import setting from './plugin' import { filterDescendants, getOwnerFirstName, getOwnerLastName, getOwnerPosition, getValue } from './utils' @@ -121,7 +122,8 @@ export default async (): Promise => ({ SpaceTypePropertiesSectionEditor, SpaceTypeRolesSectionEditor, RoleEditor, - RoleAssignmentEditor + RoleAssignmentEditor, + SettingsWidget }, actionImpl: { DeleteMixin diff --git a/plugins/setting-resources/src/plugin.ts b/plugins/setting-resources/src/plugin.ts index 40e8f33f56..05450e7af0 100644 --- a/plugins/setting-resources/src/plugin.ts +++ b/plugins/setting-resources/src/plugin.ts @@ -13,12 +13,17 @@ // limitations under the License. // +import { type Ref } from '@hcengineering/core' import type { IntlString } from '@hcengineering/platform' import { mergeIds } from '@hcengineering/platform' import setting, { settingId } from '@hcengineering/setting' import { type AnyComponent } from '@hcengineering/ui' +import { type Widget } from '@hcengineering/workbench' export default mergeIds(settingId, setting, { + ids: { + SettingsWidget: '' as Ref + }, component: { EditEnum: '' as AnyComponent, ManageSpaceTypes: '' as AnyComponent, diff --git a/plugins/templates-resources/src/components/Templates.svelte b/plugins/templates-resources/src/components/Templates.svelte index a7de67bb96..b202a6e52c 100644 --- a/plugins/templates-resources/src/components/Templates.svelte +++ b/plugins/templates-resources/src/components/Templates.svelte @@ -17,7 +17,7 @@ Breadcrumb, Separator, defineSeparators, - settingsSeparators, + twoPanelsSeparators, Scroller } from '@hcengineering/ui' import { getActions as getContributedActions, TreeItem, TreeNode } from '@hcengineering/view-resources' @@ -147,7 +147,7 @@ } let space: Ref | undefined = undefined - defineSeparators('workspaceSettings', settingsSeparators) + defineSeparators('workspaceSettings', twoPanelsSeparators)
diff --git a/plugins/workbench-resources/src/components/sidebar/Sidebar.svelte b/plugins/workbench-resources/src/components/sidebar/Sidebar.svelte index f488453817..4a03ced07f 100644 --- a/plugins/workbench-resources/src/components/sidebar/Sidebar.svelte +++ b/plugins/workbench-resources/src/components/sidebar/Sidebar.svelte @@ -79,7 +79,7 @@ overflow: hidden; flex-direction: row; min-width: 25rem; - border-radius: var(--medium-BorderRadius); + border-radius: 0 var(--medium-BorderRadius) var(--medium-BorderRadius) 0; &.mini:not(.float) { width: 3.5rem !important; @@ -89,6 +89,9 @@ &.mini.float { justify-content: flex-end; } + &.float > :global(.sidebar-content) { + border-top: none; + } } @media (max-width: 1024px) { .sidebar-container { diff --git a/plugins/workbench-resources/src/components/sidebar/SidebarExpanded.svelte b/plugins/workbench-resources/src/components/sidebar/SidebarExpanded.svelte index a9345448c0..fd4f44e38c 100644 --- a/plugins/workbench-resources/src/components/sidebar/SidebarExpanded.svelte +++ b/plugins/workbench-resources/src/components/sidebar/SidebarExpanded.svelte @@ -96,7 +96,7 @@ } -
+