Skip to content

Commit

Permalink
Merge branch 'refactor/develop' into feat/materials-new-protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
yy-wow committed Jan 15, 2025
2 parents 12f43b0 + 2e16346 commit 58a3376
Show file tree
Hide file tree
Showing 110 changed files with 4,698 additions and 1,731 deletions.
22 changes: 19 additions & 3 deletions designer-demo/registry.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
Breadcrumb,
Fullscreen,
Lang,
ViewSetting,
Logo,
Lock,
Media,
Expand Down Expand Up @@ -70,7 +71,8 @@ export default {
collapse: [
['engine.toolbars.collaboration'],
['engine.toolbars.refresh', 'engine.toolbars.fullscreen'],
['engine.toolbars.lang']
['engine.toolbars.lang'],
['engine.toolbars.viewSetting']
]
}
}
Expand All @@ -96,9 +98,23 @@ export default {
GenerateCode,
Save,
Fullscreen,
Lang
Lang,
ViewSetting
],
plugins: [
Materials,
Tree,
Page,
[Block, { options: { ...Block.options, mergeCategoriesAndGroups: true } }],
Datasource,
Bridge,
I18n,
Script,
State,
Schema,
Help,
Robot
],
plugins: [Materials, Tree, Page, Block, Datasource, Bridge, I18n, Script, State, Schema, Help, Robot],
dsls: [{ id: 'engine.dsls.dslvue' }],
settings: [Props, Styles, Events],
canvas: Canvas
Expand Down
2 changes: 2 additions & 0 deletions jsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"@opentiny/tiny-engine-toolbar-breadcrumb": ["packages/toolbars/breadcrumb/index"],
"@opentiny/tiny-engine-toolbar-fullscreen": ["packages/toolbars/fullscreen/index"],
"@opentiny/tiny-engine-toolbar-lang": ["packages/toolbars/lang/index"],
"@opentiny/tiny-engine-toolbar-view-setting": ["packages/toolbars/view-setting/index"],
"@opentiny/tiny-engine-toolbar-layout": ["packages/toolbars/layout/index"],
"@opentiny/tiny-engine-toolbar-lock": ["packages/toolbars/lock/index"],
"@opentiny/tiny-engine-toolbar-logo": ["packages/toolbars/logo/index"],
Expand Down Expand Up @@ -51,6 +52,7 @@
"@opentiny/tiny-engine-toolbar-breadcrumb/*": ["packages/toolbars/breadcrumb/*"],
"@opentiny/tiny-engine-toolbar-fullscreen/*": ["packages/toolbars/fullscreen/*"],
"@opentiny/tiny-engine-toolbar-lang/*": ["packages/toolbars/lang/*"],
"@opentiny/tiny-engine-toolbar-view-setting/*": ["packages/toolbars/view-setting/*"],
"@opentiny/tiny-engine-toolbar-layout/*": ["packages/toolbars/layout/*"],
"@opentiny/tiny-engine-toolbar-lock/*": ["packages/toolbars/lock/*"],
"@opentiny/tiny-engine-toolbar-logo/*": ["packages/toolbars/logo/*"],
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"devDependencies": {
"@babel/eslint-parser": "^7.21.3",
"@types/node": "^18.0.0",
"@vue/eslint-config-typescript": "^11.0.3",
"chokidar": "^3.5.3",
"concurrently": "^8.2.0",
"cross-env": "^7.0.3",
Expand Down
3 changes: 0 additions & 3 deletions packages/block-compiler/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,7 @@
"@esbuild-plugins/node-globals-polyfill": "^0.2.3",
"@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@types/babel__core": "^7.20.5",
"@typescript-eslint/eslint-plugin": "^8.14.0",
"@typescript-eslint/parser": "^8.14.0",
"@vitejs/plugin-vue": "^5.1.2",
"eslint": "^8.38.0",
"typescript": "~5.4.2",
"vite": "^5.4.2",
"vite-plugin-dts": "^4.3.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/build/vite-config/src/default-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const getDefaultConfig = (engineConfig) => {
base: './',
publicDir: path.resolve(root, './public'),
resolve: {
extensions: ['.js', '.jsx', '.vue'],
extensions: ['.js', '.jsx', '.vue', '.ts', '.tsx'],
alias: {}
},
server: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ const getDevAlias = (useSourceAlias) => {
'@opentiny/tiny-engine-toolbar-breadcrumb': path.resolve(basePath, 'packages/toolbars/breadcrumb/index.js'),
'@opentiny/tiny-engine-toolbar-fullscreen': path.resolve(basePath, 'packages/toolbars/fullscreen/index.js'),
'@opentiny/tiny-engine-toolbar-lang': path.resolve(basePath, 'packages/toolbars/lang/index.js'),
'@opentiny/tiny-engine-toolbar-view-setting': path.resolve(basePath, 'packages/toolbars/view-setting/index.js'),
'@opentiny/tiny-engine-toolbar-layout': path.resolve(basePath, 'packages/toolbars/layout/index.js'),
'@opentiny/tiny-engine-toolbar-lock': path.resolve(basePath, 'packages/toolbars/lock/index.js'),
'@opentiny/tiny-engine-toolbar-logo': path.resolve(basePath, 'packages/toolbars/logo/index.js'),
Expand All @@ -53,7 +54,7 @@ const getDevAlias = (useSourceAlias) => {
'@opentiny/tiny-engine-theme-light': path.resolve(basePath, 'packages/theme/light/index.less'),
'@opentiny/tiny-engine-theme-base': path.resolve(basePath, 'packages/theme/base/src/index.js'),
'@opentiny/tiny-engine-svgs': path.resolve(basePath, 'packages/svgs/index.js'),
'@opentiny/tiny-engine-canvas/render': path.resolve(basePath, 'packages/canvas/render/index.js'),
'@opentiny/tiny-engine-canvas/render': path.resolve(basePath, 'packages/canvas/render/index.ts'),
'@opentiny/tiny-engine-canvas': path.resolve(basePath, 'packages/canvas/index.js'),
'@opentiny/tiny-engine-utils': path.resolve(basePath, 'packages/utils/src/index.js'),
'@opentiny/tiny-engine-webcomponent-core': path.resolve(basePath, 'packages/webcomponent/src/lib.js'),
Expand Down
11 changes: 6 additions & 5 deletions packages/canvas/.eslintrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,23 @@
* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
*
*/

module.exports = {
env: {
browser: true,
es2015: true,
node: true,
jest: true
},
extends: ['eslint:recommended', 'plugin:vue/vue3-essential'],
extends: ['eslint:recommended', 'plugin:vue/vue3-essential', '@vue/eslint-config-typescript'],
parser: 'vue-eslint-parser',
parserOptions: {
parser: '@babel/eslint-parser',
parser: '@typescript-eslint/parser',
ecmaVersion: 'latest',
sourceType: 'module',
requireConfigFile: false,
babelOptions: {
parserOpts: {
plugins: ['jsx']
plugins: ['jsx', 'typescript']
}
}
},
Expand All @@ -37,6 +36,8 @@ module.exports = {
'space-before-function-paren': 'off',
'vue/multi-word-component-names': 'off',
'no-use-before-define': 'error',
'no-unused-vars': ['error', { ignoreRestSiblings: true, varsIgnorePattern: '^_', argsIgnorePattern: '^_' }]
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': ['error', { ignoreRestSiblings: true, varsIgnorePattern: '^_', argsIgnorePattern: '^_' }],
'import/no-inner-modules': 'off'
}
}
74 changes: 70 additions & 4 deletions packages/canvas/DesignCanvas/src/DesignCanvas.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
<template>
<component :is="CanvasLayout">
<template #header>
<component v-if="!isBlock()" :is="CanvasRouteBar"></component>
</template>
<template #container>
<component
:is="CanvasContainer.entry"
Expand All @@ -9,7 +12,8 @@
:canvas-src-doc="canvasSrcDoc"
@remove="removeNode"
@selected="nodeSelected"
></component>
>
</component>
</template>
<template #footer>
<component :is="CanvasBreadcrumb" :data="footData"></component>
Expand All @@ -18,20 +22,22 @@
</template>

<script>
import { ref, watch, onUnmounted } from 'vue'
import { ref, watch, onUnmounted, onMounted } from 'vue'
import {
useProperties,
useCanvas,
useLayout,
useMaterial,
useHistory,
useModal,
usePage,
useMessage,
getMergeRegistry,
getMergeMeta,
getOptions,
getMetaApi,
META_SERVICE,
useMessage,
META_APP,
useNotify
} from '@opentiny/tiny-engine-meta-register'
import { constants } from '@opentiny/tiny-engine-utils'
Expand All @@ -51,7 +57,7 @@ export default {
setup() {
const registry = getMergeRegistry('canvas')
const materialsPanel = getMergeMeta('engine.plugins.materials')?.entry
const { CanvasBreadcrumb } = registry.components
const { CanvasRouteBar, CanvasBreadcrumb } = registry.components
const CanvasLayout = registry.layout.entry
const [CanvasContainer] = registry.metas
const footData = ref([])
Expand Down Expand Up @@ -81,6 +87,8 @@ export default {
pageState.properties = null
}
const isBlock = useCanvas().isBlock
watch(
[() => useCanvas().isSaved(), () => useLayout().layoutState.pageStatus, () => useCanvas().getPageSchema()],
([isSaved, pageStatus, pageSchema], [oldIsSaved, _oldPageStatus, oldPageSchema]) => {
Expand Down Expand Up @@ -181,6 +189,58 @@ export default {
canvasResizeObserver?.disconnect?.()
})
const { addToCallbackFns: addHistoryDataChangedCallback } = (function () {
const callbackFns = new Set()
const { subscribe, unsubscribe } = useMessage()
let sub
onMounted(() => {
sub = subscribe({
topic: 'locationHistoryChanged',
subscriber: 'canvas_design_canvas_controller',
callback: (value) => callbackFns.forEach((cb) => cb(value))
})
})
onUnmounted(() => {
if (sub) {
unsubscribe(sub)
}
})
function addToCallbackFns(cb) {
callbackFns.add(cb)
return () => callbackFns.delete(cb)
}
return {
addToCallbackFns
}
})()
// TODO: 待挪到 getBaseInfo
const baseInfoKeys = Object.keys(getMetaApi(META_SERVICE.GlobalService).getBaseInfo())
function replaceKey(key) {
const existingKey = baseInfoKeys.find((eKey) => eKey.toLowerCase() === key.toLowerCase())
if (existingKey) {
return existingKey
}
return key
}
const postUrlChanged = () => {
usePage().postLocationHistoryChanged(
Object.fromEntries(
Array.from(new URLSearchParams(window.location.search)).map(([key, value]) => [replaceKey(key), value])
)
)
}
onMounted(() => {
window.addEventListener('popstate', postUrlChanged)
})
onUnmounted(() => {
window.removeEventListener('popstate', postUrlChanged)
})
return {
removeNode,
canvasSrc,
Expand All @@ -194,15 +254,21 @@ export default {
getMaterial: useMaterial().getMaterial,
addHistory: useHistory().addHistory,
request: getMetaApi(META_SERVICE.Http).getHttp(),
getPageById: getMetaApi(META_APP.AppManage).getPageById,
getPageAncestors: usePage().getAncestors,
getBaseInfo: () => getMetaApi(META_SERVICE.GlobalService).getBaseInfo(),
addHistoryDataChangedCallback,
ast,
getBlockByName: useMaterial().getBlockByName,
useModal,
useMessage,
useNotify
},
isBlock,
CanvasLayout,
canvasRef,
CanvasContainer,
CanvasRouteBar,
CanvasBreadcrumb
}
}
Expand Down
2 changes: 1 addition & 1 deletion packages/canvas/DesignCanvas/src/api/useCanvas.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ const jsonDiffPatchInstance = jsonDiffPatch.create({
diffMatchPatch: DiffMatchPatch,
minLength: 60
},
// eslint-disable-next-line no-unused-vars
// eslint-disable-next-line @typescript-eslint/no-unused-vars
propertyFilter: function (name, context) {
return name.slice(0, 1) !== '$'
},
Expand Down
1 change: 1 addition & 0 deletions packages/canvas/common/src/constant.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export const NODE_UID = 'data-uid'
export const NODE_TAG = 'data-tag'
export const NODE_LOOP = 'loop-id'
export const NODE_INACTIVE_UID = 'data-ia-uid'

export const DESIGN_MODE = {
DESIGN: 'design', // 设计态
Expand Down
45 changes: 10 additions & 35 deletions packages/canvas/common/src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,27 +55,6 @@ export const copyObject = (node) => {
return node
}

/**
* 从页面importmap中获取模块的名称
* @returns importmap中模块的名称集合
*/
const getImportMapKeys = () => {
try {
const importMapElement = document.querySelector('script[type="importmap"]')

if (!importMapElement) {
return []
}

const importMaps = importMapElement.textContent
const importMapObject = JSON.parse(importMaps || '{}') || {}

return Object.keys(importMapObject.imports)
} catch (error) {
return []
}
}

/**
* 动态导入获取组件库模块
* @param {*} pkg 模块名称
Expand All @@ -87,24 +66,20 @@ const dynamicImportComponentLib = async ({ pkg, script }) => {
return window.TinyComponentLibs[pkg]
}

let modules = {}
if (!script) {
return {}
}

const href = window.parent.location.href || location.href // 这里要取父窗口的地址,因为在iframe中href是about:srcdoc
const scriptUrl = script.startsWith('.') ? new URL(script, href).href : script

try {
// 优先从importmap导入,兼容npm.script字段定义的cdn地址
const importMapKeys = getImportMapKeys()
if (!window.TinyComponentLibs[pkg]) {
const modules = await import(/* @vite-ignore */ scriptUrl)

if (importMapKeys.includes(pkg)) {
modules = await import(/* @vite-ignore */ pkg)
} else if (script) {
modules = await import(/* @vite-ignore */ script)
}
} catch (error) {
modules = {}
window.TinyComponentLibs[pkg] = modules
}

window.TinyComponentLibs[pkg] = modules

return modules
return window.TinyComponentLibs[pkg]
}

/**
Expand Down
Loading

0 comments on commit 58a3376

Please sign in to comment.