Merge branch 'preview-fixes'

This commit is contained in:
the1812 2022-02-19 21:53:50 +08:00
commit 5e2ab0e6a0
2 changed files with 35 additions and 14 deletions

View File

@ -89,7 +89,7 @@ import {
VLoading,
} from '@/ui'
import { addComponentListener } from '@/core/settings'
import { deleteValue, dqa } from '@/core/utils'
import { dqa } from '@/core/utils'
import { SortableJSLibrary } from '@/core/runtime-library'
import { SortableEvent } from 'sortablejs'
import { getData } from '@/plugins/data'
@ -121,8 +121,7 @@ export default Vue.extend({
open: false,
padding: navbarOptions.padding,
rendered,
// order: navbarOptions.order,
hidden: [...navbarOptions.hidden],
hidden: navbarOptions.hidden,
loaded: false,
}
},
@ -173,13 +172,11 @@ export default Vue.extend({
this.rendered.items = sortItems(rendered.items, ordersMap)
},
toggleVisible(item: CustomNavbarItem) {
if (this.hidden.includes(item.name)) {
deleteValue(this.hidden, it => it === item.name)
deleteValue(navbarOptions.hidden, it => it === item.name)
if (navbarOptions.hidden.includes(item.name)) {
lodash.pull(navbarOptions.hidden, item.name)
item.hidden = false
console.log('delete', item.name)
} else {
this.hidden.push(item.name)
navbarOptions.hidden.push(item.name)
item.hidden = true
console.log('add', item.name)

View File

@ -77,9 +77,15 @@ const settingsChangedHandler = (
}
}
// 建立 Proxy
/** 标识经由 `createProxy` 控制的对象 */
export const isProxy = Symbol('isProxy')
export const createProxy = (targetObj: any, valueChangeListener: ValueChangeListener) => {
/**
* Proxy
* @param targetObj
* @param valueChangeListener
*/
export const createProxy = (targetObj: any, valueChangeListener?: ValueChangeListener) => {
const applyProxy = (obj: any, rootProp?: Property, propPath: Property[] = []) => {
for (const [key, value] of Object.entries(obj)) {
if (typeof value === 'object' && !(value instanceof RegExp)) {
@ -94,21 +100,39 @@ export const createProxy = (targetObj: any, valueChangeListener: ValueChangeList
return o[prop]
},
set(o, prop, value) {
if (/* !(prop in o) && */typeof value === 'object'
const oldValue = o[prop]
const isImplicitProp = (
!Object.prototype.hasOwnProperty.call(o, prop) && oldValue !== undefined
)
if (unsafeWindow.proxyDebug) {
console.log({ isImplicitProp, prop, value })
}
/**
* value Proxy
* - Object ( Array)
* - RegExp
* -
* -
*/
const deep = (
typeof value === 'object'
&& !(value instanceof RegExp)
&& !(value[isProxy] === true)
) {
&& !isImplicitProp
)
if (deep) {
value = applyProxy(value, rootProp || prop, [...propPath, prop])
}
const oldValue = o[prop]
o[prop] = value
valueChangeListener(value, oldValue, rootProp || prop, [...propPath, prop])
if (!isImplicitProp) {
valueChangeListener?.(value, oldValue, rootProp || prop, [...propPath, prop])
}
return true
},
deleteProperty(o, prop) {
const oldValue = o[prop]
delete o[prop]
valueChangeListener(undefined, oldValue, rootProp || prop, [...propPath, prop])
valueChangeListener?.(undefined, oldValue, rootProp || prop, [...propPath, prop])
return true
},
})