UBERF-6066: Fix component manager state (#5009)

This commit is contained in:
Andrey Sobolev 2024-03-19 11:47:07 +07:00 committed by GitHub
parent f52c966931
commit eff7b71f43
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 65 additions and 30 deletions

View File

@ -1076,6 +1076,9 @@ dependencies:
express: express:
specifier: ^4.18.3 specifier: ^4.18.3
version: 4.18.3 version: 4.18.3
express-fileupload:
specifier: ^1.4.3
version: 1.5.0
express-static-gzip: express-static-gzip:
specifier: ^2.1.7 specifier: ^2.1.7
version: 2.1.7 version: 2.1.7
@ -9754,13 +9757,6 @@ packages:
jest-util: 29.7.0 jest-util: 29.7.0
dev: false dev: false
/express-fileupload@1.4.3:
resolution: {integrity: sha512-vRzZo2YELm68DfR/CX8RMXgeK9BTAANxigrKACPjCXFGEzkCt/QWbqaIXP3W61uaX/hLj0CAo3/EVelpSQXkqA==}
engines: {node: '>=12.0.0'}
dependencies:
busboy: 1.6.0
dev: false
/express-fileupload@1.5.0: /express-fileupload@1.5.0:
resolution: {integrity: sha512-jSW3w9evqM37VWkEPkL2Ck5wUo2a8qa03MH+Ou/0ZSTpNlQFBvSLjU12k2nYcHhaMPv4JVvv6+Ac1OuLgUZb7w==} resolution: {integrity: sha512-jSW3w9evqM37VWkEPkL2Ck5wUo2a8qa03MH+Ou/0ZSTpNlQFBvSLjU12k2nYcHhaMPv4JVvv6+Ac1OuLgUZb7w==}
engines: {node: '>=12.0.0'} engines: {node: '>=12.0.0'}
@ -18299,7 +18295,7 @@ packages:
dev: false dev: false
file:projects/front.tgz(esbuild@0.20.1): file:projects/front.tgz(esbuild@0.20.1):
resolution: {integrity: sha512-JFdC8n6d9GwIhrZ/XYnaoTZsqNetJ7udjL85tuXg3Cayq6j2hDa1L2LXN0NcBwrt3kCzGLpnPZRVJepMjJsCAA==, tarball: file:projects/front.tgz} resolution: {integrity: sha512-+SAlNGyDeyfdp+Y3dGdI8HgJpR1Yrxfqrvbrh0OXualjj7rwix5GUwuiW0OHA6CDTrv4ZYryoeVEZNlJVgSpNQ==, tarball: file:projects/front.tgz}
id: file:projects/front.tgz id: file:projects/front.tgz
name: '@rush-temp/front' name: '@rush-temp/front'
version: 0.0.0 version: 0.0.0
@ -20245,7 +20241,7 @@ packages:
dev: false dev: false
file:projects/model-time.tgz: file:projects/model-time.tgz:
resolution: {integrity: sha512-OUG+qlKFJwY/3y2wzWTvlrg/mt2OpvYAiGyq3b6LizsQF86AS6EV/LYlLZvhiyuD1fPboPF27UuAry85LiaMlw==, tarball: file:projects/model-time.tgz} resolution: {integrity: sha512-bNDdV8UV4BigbZLLoO4HKeCU5KrBaxI9+rNVGx7K/hdQa1EVA7C5H+0PsOfTAbXDYl1W/hOJuWcApuFWn5kkAA==, tarball: file:projects/model-time.tgz}
name: '@rush-temp/model-time' name: '@rush-temp/model-time'
version: 0.0.0 version: 0.0.0
dependencies: dependencies:
@ -20789,7 +20785,7 @@ packages:
eslint-plugin-n: 15.7.0(eslint@8.56.0) eslint-plugin-n: 15.7.0(eslint@8.56.0)
eslint-plugin-promise: 6.1.1(eslint@8.56.0) eslint-plugin-promise: 6.1.1(eslint@8.56.0)
express: 4.18.3 express: 4.18.3
express-fileupload: 1.4.3 express-fileupload: 1.5.0
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2) jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
prettier: 3.2.5 prettier: 3.2.5
prettier-plugin-svelte: 3.2.1(prettier@3.2.5)(svelte@4.2.11) prettier-plugin-svelte: 3.2.1(prettier@3.2.5)(svelte@4.2.11)
@ -23814,12 +23810,13 @@ packages:
dev: false dev: false
file:projects/text.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2): file:projects/text.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2):
resolution: {integrity: sha512-uLTGoFcGUmTSIp0MgrgLU2HBEFXFczn0iak2Qyj/Q/G1k17AKmEC4fEAD+RELpE7noZ4LtDFiFiRVS47atQKrg==, tarball: file:projects/text.tgz} resolution: {integrity: sha512-tmB4qTcKUuy+7dmuWouLx1p0H1dBy5z7KkVQiJzXE3CFkLbdc4M1c8H10bKsnlpvEGgNe/NJ5qhljvxsFA0Jcw==, tarball: file:projects/text.tgz}
id: file:projects/text.tgz id: file:projects/text.tgz
name: '@rush-temp/text' name: '@rush-temp/text'
version: 0.0.0 version: 0.0.0
dependencies: dependencies:
'@tiptap/core': 2.2.3(@tiptap/pm@2.2.3) '@tiptap/core': 2.2.3(@tiptap/pm@2.2.3)
'@tiptap/extension-code-block': 2.2.3(@tiptap/core@2.2.3)(@tiptap/pm@2.2.3)
'@tiptap/extension-gapcursor': 2.2.3(@tiptap/core@2.2.3)(@tiptap/pm@2.2.3) '@tiptap/extension-gapcursor': 2.2.3(@tiptap/core@2.2.3)(@tiptap/pm@2.2.3)
'@tiptap/extension-heading': 2.2.3(@tiptap/core@2.2.3) '@tiptap/extension-heading': 2.2.3(@tiptap/core@2.2.3)
'@tiptap/extension-highlight': 2.2.3(@tiptap/core@2.2.3) '@tiptap/extension-highlight': 2.2.3(@tiptap/core@2.2.3)
@ -23945,7 +23942,7 @@ packages:
dev: false dev: false
file:projects/time-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): file:projects/time-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-S8FOGEB3vL0jc/8WYVha5iZvzlDAzrtObjh/u3MW1plYhWP3wqPb/RiCPsgVggJpmQMGevEYW76H7bWzyN4kOA==, tarball: file:projects/time-resources.tgz} resolution: {integrity: sha512-C9v36hBLOWZUBJai1N2uGHpY0tOKxMZeqpGYbr5MBW/EwToFHxih4nxgGdHPFGdJ/vKGChp3zRwPaZhtjaWcMQ==, tarball: file:projects/time-resources.tgz}
id: file:projects/time-resources.tgz id: file:projects/time-resources.tgz
name: '@rush-temp/time-resources' name: '@rush-temp/time-resources'
version: 0.0.0 version: 0.0.0

View File

@ -9,7 +9,7 @@ import {
} from '@hcengineering/core' } from '@hcengineering/core'
import { getResource } from '@hcengineering/platform' import { getResource } from '@hcengineering/platform'
import { onDestroy } from 'svelte' import { onDestroy } from 'svelte'
import { writable, type Writable } from 'svelte/store' import { get, writable, type Writable } from 'svelte/store'
import { type LiveQuery } from '../..' import { type LiveQuery } from '../..'
import presentation from '../../plugin' import presentation from '../../plugin'
import { type DocCreatePhase, type DocCreateExtension } from '../../types' import { type DocCreatePhase, type DocCreateExtension } from '../../types'
@ -59,8 +59,9 @@ export class DocCreateExtensionManager {
phase: DocCreatePhase phase: DocCreatePhase
): Promise<void> { ): Promise<void> {
for (const e of this._extensions) { for (const e of this._extensions) {
const state = get(this.getState(e._id))
const applyOp = await getResource(e.apply) const applyOp = await getResource(e.apply)
await applyOp?.(ops, docId, space, data, this.getState(e._id), phase) await applyOp?.(ops, docId, space, data, state, phase)
} }
} }

View File

@ -13,9 +13,9 @@
// limitations under the License. // limitations under the License.
// //
import { codeBlockOptions } from '@hcengineering/text'
import { Extension } from '@tiptap/core' import { Extension } from '@tiptap/core'
import { type CodeOptions } from '@tiptap/extension-code' import { type CodeOptions } from '@tiptap/extension-code'
import { type CodeBlockOptions } from '@tiptap/extension-code-block'
import type { Level } from '@tiptap/extension-heading' import type { Level } from '@tiptap/extension-heading'
import Highlight from '@tiptap/extension-highlight' import Highlight from '@tiptap/extension-highlight'
import Link from '@tiptap/extension-link' import Link from '@tiptap/extension-link'
@ -35,16 +35,6 @@ export const codeOptions: CodeOptions = {
class: 'proseCode' class: 'proseCode'
} }
} }
export const codeBlockOptions: CodeBlockOptions = {
languageClassPrefix: 'language-',
exitOnArrowDown: true,
exitOnTripleEnter: true,
HTMLAttributes: {
class: 'proseCodeBlock'
}
}
export const DefaultKit = Extension.create<DefaultKitOptions>({ export const DefaultKit = Extension.create<DefaultKitOptions>({
name: 'defaultKit', name: 'defaultKit',

View File

@ -21,9 +21,9 @@ import TaskItem from '@tiptap/extension-task-item'
import TaskList from '@tiptap/extension-task-list' import TaskList from '@tiptap/extension-task-list'
import Underline from '@tiptap/extension-underline' import Underline from '@tiptap/extension-underline'
import { DefaultKit, type DefaultKitOptions, codeBlockOptions } from './default-kit' import { DefaultKit, type DefaultKitOptions } from './default-kit'
import { CodeBlockExtension } from '../components/extension/codeblock' import { CodeBlockExtension, codeBlockOptions } from '@hcengineering/text'
import { CodemarkExtension } from '../components/extension/codemark' import { CodemarkExtension } from '../components/extension/codemark'
import { NodeUuidExtension } from '../components/extension/nodeUuid' import { NodeUuidExtension } from '../components/extension/nodeUuid'
import { Table, TableCell, TableRow } from '../components/extension/table' import { Table, TableCell, TableRow } from '../components/extension/table'

View File

@ -50,6 +50,7 @@
"@tiptap/extension-task-item": "^2.1.12", "@tiptap/extension-task-item": "^2.1.12",
"@tiptap/extension-task-list": "^2.1.12", "@tiptap/extension-task-list": "^2.1.12",
"@tiptap/extension-typography": "^2.1.12", "@tiptap/extension-typography": "^2.1.12",
"@tiptap/extension-code-block": "^2.1.12",
"@tiptap/suggestion": "^2.1.12", "@tiptap/suggestion": "^2.1.12",
"prosemirror-model": "^1.19.2", "prosemirror-model": "^1.19.2",
"yjs": "^13.5.52", "yjs": "^13.5.52",

View File

@ -28,6 +28,7 @@ import { ImageNode, ImageOptions } from '../nodes/image'
import { ReferenceNode } from '../nodes/reference' import { ReferenceNode } from '../nodes/reference'
import { TodoItemNode, TodoListNode } from '../nodes/todo' import { TodoItemNode, TodoListNode } from '../nodes/todo'
import { CodeBlockExtension, codeBlockOptions } from '../nodes'
import { DefaultKit, DefaultKitOptions } from './default-kit' import { DefaultKit, DefaultKitOptions } from './default-kit'
const headingLevels: Level[] = [1, 2, 3, 4, 5, 6] const headingLevels: Level[] = [1, 2, 3, 4, 5, 6]
@ -70,10 +71,12 @@ export const ServerKit = Extension.create<ServerKitOptions>({
return [ return [
DefaultKit.configure({ DefaultKit.configure({
...this.options, ...this.options,
codeBlock: false,
heading: { heading: {
levels: headingLevels levels: headingLevels
} }
}), }),
CodeBlockExtension.configure(codeBlockOptions),
...tableExtensions, ...tableExtensions,
...taskListExtensions, ...taskListExtensions,
...fileExtensions, ...fileExtensions,

View File

@ -14,7 +14,16 @@
// //
import { isActive } from '@tiptap/core' import { isActive } from '@tiptap/core'
import CodeBlock from '@tiptap/extension-code-block' import CodeBlock, { CodeBlockOptions } from '@tiptap/extension-code-block'
export const codeBlockOptions: CodeBlockOptions = {
languageClassPrefix: 'language-',
exitOnArrowDown: true,
exitOnTripleEnter: true,
HTMLAttributes: {
class: 'proseCodeBlock'
}
}
export const CodeBlockExtension = CodeBlock.extend({ export const CodeBlockExtension = CodeBlock.extend({
addCommands () { addCommands () {
@ -67,5 +76,39 @@ export const CodeBlockExtension = CodeBlock.extend({
return commands.toggleNode(this.name, 'paragraph', attributes) return commands.toggleNode(this.name, 'paragraph', attributes)
} }
} }
},
addAttributes () {
return {
language: {
default: null,
parseHTML: (element) => {
const { languageClassPrefix } = this.options
let fchild = element.firstElementChild
if (fchild == null) {
for (const c of element.childNodes) {
if (c.nodeType === 1) {
// According to https://developer.mozilla.org/en-US/docs/Web/API/Node
fchild = c as Element
}
}
}
const classNames = [...Array.from(fchild?.classList ?? [])]
if (classNames.length === 0 && fchild?.className !== undefined) {
classNames.push(fchild?.className)
}
const languages = classNames
.filter((className) => className.startsWith(languageClassPrefix))
.map((className) => className.replace(languageClassPrefix, ''))
const language = languages[0]
if (language == null) {
return null
}
return language
},
rendered: false
}
}
} }
}) })

View File

@ -17,4 +17,5 @@ export * from './image'
export * from './reference' export * from './reference'
export * from './todo' export * from './todo'
export * from './file' export * from './file'
export * from './codeblock'
export { getDataAttribute } from './utils' export { getDataAttribute } from './utils'

View File

@ -13,10 +13,10 @@
// limitations under the License. // limitations under the License.
--> -->
<script lang="ts"> <script lang="ts">
import activity from '@hcengineering/activity'
import { Analytics } from '@hcengineering/analytics' import { Analytics } from '@hcengineering/analytics'
import { Attachment } from '@hcengineering/attachment' import { Attachment } from '@hcengineering/attachment'
import { AttachmentPresenter, AttachmentStyledBox } from '@hcengineering/attachment-resources' import { AttachmentPresenter, AttachmentStyledBox } from '@hcengineering/attachment-resources'
import chunter from '@hcengineering/chunter'
import { Employee } from '@hcengineering/contact' import { Employee } from '@hcengineering/contact'
import core, { import core, {
Account, Account,
@ -74,7 +74,6 @@
import view from '@hcengineering/view' import view from '@hcengineering/view'
import { ObjectBox } from '@hcengineering/view-resources' import { ObjectBox } from '@hcengineering/view-resources'
import { createEventDispatcher, onDestroy } from 'svelte' import { createEventDispatcher, onDestroy } from 'svelte'
import activity from '@hcengineering/activity'
import { activeComponent, activeMilestone, generateIssueShortLink, updateIssueRelation } from '../issues' import { activeComponent, activeMilestone, generateIssueShortLink, updateIssueRelation } from '../issues'
import tracker from '../plugin' import tracker from '../plugin'