vue-stack-tabs 0.1.42 → 0.1.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,103 +1,103 @@
1
- import { defu } from 'defu'
2
-
3
- import { getCurrentInstance } from 'vue'
4
- import type { ComponentInternalInstance } from 'vue'
5
- import { type RouteLocationPathRaw, useRoute, useRouter } from 'vue-router'
6
-
7
- import useTabpanel from '@/lib/hooks/useTabpanel'
8
- import { uriDecode } from '@/lib/utils/UriHelper'
9
- import { useEmitter } from '@/lib/hooks/useTabMitt'
10
- export default () => {
11
- const { attrs, props } = getCurrentInstance() as ComponentInternalInstance
12
- const { pageShown, getTab, markDeletableCache, removeComponent, getComponent, addPageScroller } =
13
- useTabpanel()
14
- const route = useRoute()
15
- const router = useRouter()
16
- const emitter = useEmitter()
17
- let currentId = ''
18
- // const currentPageId = ''
19
- let currentTab = ''
20
- currentId = (attrs.tId || props.tId) as string
21
- const currentPageId = (attrs.pId || props.pId) as string
22
- // currentPageId = attrs.pId as string
23
- currentTab = route.query.__tab as string
24
-
25
- const addScroller = (...scroller: string[]) => {
26
- addPageScroller(currentPageId, ...scroller)
27
- }
28
- const forward = (to: RouteLocationPathRaw) => {
29
- // pageShown.value = false
30
- const query = defu(
31
- {
32
- __tab: currentTab
33
- },
34
- to.query
35
- )
36
- emitter.emit('FORWARD')
37
- router.push({
38
- path: to.path,
39
- query
40
- })
41
- }
42
- /**
43
- * 返回
44
- * @param to url or step
45
- * @param query 返回时要加截的数据
46
- */
47
- const backward = (to: number | string, query?: Object) => {
48
- // pageShown.value = false
49
-
50
- const tab = getTab(currentId)
51
- if (!tab) {
52
- return
53
- }
54
- const tabStack = tab.pages
55
- let absTo = 0
56
- if (typeof to === 'number') {
57
- absTo = Math.abs(to)
58
- } else {
59
- let index = 1
60
- let hasPath = false
61
- const pageItems = tabStack.list()
62
- const url = uriDecode(to)
63
- query = defu(url.query, query)
64
- for (let i = tabStack.size() - 2; i >= 0; i--) {
65
- if (pageItems[i].path === url.path) {
66
- hasPath = true
67
- break
68
- }
69
- index += 1
70
- }
71
- if (hasPath) {
72
- absTo = index
73
- }
74
- }
75
-
76
- if (absTo === 0 || tabStack!.size() <= absTo) {
77
- return
78
- }
79
- // const removeCaches = new Set()
80
- for (let i = 0; i < absTo; i++) {
81
- const popRoute = tabStack.pop()
82
- // removeComponent(popRoute!.id)
83
- markDeletableCache(popRoute!.id)
84
- }
85
- const pageRoute = tabStack?.peek()
86
- const component = getComponent(pageRoute!.id)
87
- if (component !== null && component !== undefined) {
88
- const sourceComponent = component.components.DynamicComponent
89
- sourceComponent.props = defu(query, sourceComponent.props)
90
- }
91
- emitter.emit('BACKWARD')
92
- router.push({
93
- path: pageRoute!.path,
94
- query: pageRoute!.query
95
- })
96
- }
97
-
98
- return {
99
- forward,
100
- backward,
101
- addScroller
102
- }
103
- }
1
+ import { defu } from 'defu'
2
+
3
+ import { getCurrentInstance } from 'vue'
4
+ import type { ComponentInternalInstance } from 'vue'
5
+ import { type RouteLocationPathRaw, useRoute, useRouter } from 'vue-router'
6
+
7
+ import useTabpanel from '@/lib/hooks/useTabpanel'
8
+ import { uriDecode } from '@/lib/utils/UriHelper'
9
+ import { useEmitter } from '@/lib/hooks/useTabMitt'
10
+ export default () => {
11
+ const { attrs, props } = getCurrentInstance() as ComponentInternalInstance
12
+ const { pageShown, getTab, markDeletableCache, removeComponent, getComponent, addPageScroller } =
13
+ useTabpanel()
14
+ const route = useRoute()
15
+ const router = useRouter()
16
+ const emitter = useEmitter()
17
+ let currentId = ''
18
+ // const currentPageId = ''
19
+ let currentTab = ''
20
+ currentId = (attrs.tId || props.tId) as string
21
+ const currentPageId = (attrs.pId || props.pId) as string
22
+ // currentPageId = attrs.pId as string
23
+ currentTab = route.query.__tab as string
24
+
25
+ const addScroller = (...scroller: string[]) => {
26
+ addPageScroller(currentPageId, ...scroller)
27
+ }
28
+ const forward = (to: RouteLocationPathRaw) => {
29
+ // pageShown.value = false
30
+ const query = defu(
31
+ {
32
+ __tab: currentTab
33
+ },
34
+ to.query
35
+ )
36
+ emitter.emit('FORWARD')
37
+ router.push({
38
+ path: to.path,
39
+ query
40
+ })
41
+ }
42
+ /**
43
+ * 返回
44
+ * @param to url or step
45
+ * @param query 返回时要加截的数据
46
+ */
47
+ const backward = (to: number | string, query?: Object) => {
48
+ // pageShown.value = false
49
+
50
+ const tab = getTab(currentId)
51
+ if (!tab) {
52
+ return
53
+ }
54
+ const tabStack = tab.pages
55
+ let absTo = 0
56
+ if (typeof to === 'number') {
57
+ absTo = Math.abs(to)
58
+ } else {
59
+ let index = 1
60
+ let hasPath = false
61
+ const pageItems = tabStack.list()
62
+ const url = uriDecode(to)
63
+ query = defu(url.query, query)
64
+ for (let i = tabStack.size() - 2; i >= 0; i--) {
65
+ if (pageItems[i].path === url.path) {
66
+ hasPath = true
67
+ break
68
+ }
69
+ index += 1
70
+ }
71
+ if (hasPath) {
72
+ absTo = index
73
+ }
74
+ }
75
+
76
+ if (absTo === 0 || tabStack!.size() <= absTo) {
77
+ return
78
+ }
79
+ // const removeCaches = new Set()
80
+ for (let i = 0; i < absTo; i++) {
81
+ const popRoute = tabStack.pop()
82
+ // removeComponent(popRoute!.id)
83
+ markDeletableCache(popRoute!.id)
84
+ }
85
+ const pageRoute = tabStack?.peek()
86
+ const component = getComponent(pageRoute!.id)
87
+ if (component !== null && component !== undefined) {
88
+ const sourceComponent = component.components.DynamicComponent
89
+ sourceComponent.props = defu(query, sourceComponent.props)
90
+ }
91
+ emitter.emit('BACKWARD')
92
+ router.push({
93
+ path: pageRoute!.path,
94
+ query: pageRoute!.query
95
+ })
96
+ }
97
+
98
+ return {
99
+ forward,
100
+ backward,
101
+ addScroller
102
+ }
103
+ }
@@ -343,7 +343,7 @@ export default () => {
343
343
  return id
344
344
  }
345
345
  for (const item of unref(tabs)[i].pages.list()) {
346
- removeComponent(item.id)
346
+ // removeComponent(item.id)
347
347
  markDeletableCache(item.id)
348
348
  deletableTab.add(unref(tabs)[i].id)
349
349
  }
@@ -380,7 +380,7 @@ export default () => {
380
380
  for (let i = uTabs.length - 1; i >= 0; i--) {
381
381
  if (uTabs[i].closable) {
382
382
  for (const item of uTabs[i].pages.list()) {
383
- removeComponent(item.id)
383
+ // removeComponent(item.id)
384
384
  markDeletableCache(item.id)
385
385
  deletableTab.add(uTabs[i].id)
386
386
  }
@@ -408,7 +408,7 @@ export default () => {
408
408
  activeTab = uTabs[i]
409
409
  } else if (uTabs[i].closable && uTabs[i].id !== id) {
410
410
  for (const item of uTabs[i].pages.list()) {
411
- removeComponent(item.id)
411
+ // removeComponent(item.id)
412
412
  markDeletableCache(item.id)
413
413
  deletableTab.add(uTabs[i].id)
414
414
  }
@@ -440,7 +440,7 @@ export default () => {
440
440
  for (let i = startIndex; i >= 0; i--) {
441
441
  if (uTabs[i].closable) {
442
442
  for (const item of uTabs[i].pages.list()) {
443
- removeComponent(item.id)
443
+ // removeComponent(item.id)
444
444
  markDeletableCache(item.id)
445
445
  deletableTab.add(uTabs[i].id)
446
446
  }
@@ -476,7 +476,7 @@ export default () => {
476
476
  for (let i = uTabs.length - 1; i >= startIndex; i--) {
477
477
  if (uTabs[i].closable) {
478
478
  for (const item of uTabs[i].pages.list()) {
479
- removeComponent(item.id)
479
+ // removeComponent(item.id)
480
480
  markDeletableCache(item.id)
481
481
  deletableTab.add(uTabs[i].id)
482
482
  }
@@ -1,70 +1,70 @@
1
- import type { ITabBase } from '../model/TabModel'
2
- import { compressToEncodedURIComponent, decompressFromEncodedURIComponent } from 'lz-string'
3
- import Hex from 'hex-encoding'
4
- import { blake3 } from '@noble/hashes/blake3'
5
-
6
- /**
7
- * compress tab info to string
8
- * format:
9
- * {tab id}{current timestamp}{tab name}{tab closable}
10
- * @param tabData
11
- */
12
- export const encodeTabInfo = (tabData: ITabBase): string => {
13
- // const info: ITabBase = {
14
- // id: tabData.id,
15
- // title: tabData.title,
16
- // iframe: tabData.iframe,
17
- // closable: tabData.closable,
18
- // refreshable: tabData.refreshable
19
- // }
20
- const info = `${tabData.id}|${tabData.title}|${tabData.iframe ? 'Y' : 'N'}|${tabData.closable ? 'Y' : 'N'}|${tabData.refreshable ? 'Y' : 'N'}`
21
- return compressToEncodedURIComponent(info)
22
- // const compressed = await compress(new TextEncoder().encode(info))
23
- // return fromUint8Array(compressed, true)
24
- // return compressToEncodedURIComponent(
25
- // `${tabData.id}|${tabData.title}|${tabData.iframe ? 'Y' : 'N'}|${tabData.closable ? 'Y' : 'N'}|${tabData.refreshable ? 'Y' : 'N'}`
26
- // )
27
- }
28
-
29
- export const decodeTabInfo = (tab: string): ITabBase => {
30
- // const decompressed = await decompress(toUint8Array(tab))
31
- const tabString = decompressFromEncodedURIComponent(tab)
32
- // const tabString = new TextDecoder().decode(decompressed)
33
- // return JSON.parse(new TextDecoder().decode(decompressed))
34
- // const tabString = decompressFromEncodedURIComponent(tab)
35
- const tabValues: string[] = tabString.split('|')
36
- return {
37
- id: tabValues[0],
38
- title: tabValues[1],
39
- iframe: tabValues[2] === 'Y',
40
- closable: tabValues[3] === 'Y',
41
- refreshable: tabValues[4] === 'Y'
42
- }
43
- }
44
-
45
- export const createPageId = (tabId: string, path: string, query: Object): string => {
46
- const queryArray = []
47
- console.log(query)
48
- type ObjectKey = keyof typeof query
49
- for (const key in query) {
50
- if (!key.startsWith('__')) {
51
- queryArray.push({
52
- key,
53
- value: query[key as ObjectKey]
54
- })
55
- }
56
- }
57
- queryArray.sort((a, b) => {
58
- let result = 0
59
- if (a.key > b.key) {
60
- result = 1
61
- } else if (a.key < b.key) {
62
- result = -1
63
- }
64
- return result
65
- })
66
- const hash = blake3(`${tabId}|${path}|${JSON.stringify(queryArray)}`)
67
- return Hex.encode(hash)
68
- // return uuidv5(`${tabId}|${path}|${JSON.stringify(queryArray)}`, uuidv5.URL).replaceAll('-', '')
69
- // return await blake3(`${tabId}|${path}|${JSON.stringify(queryArray)}`)
70
- }
1
+ import type { ITabBase } from '../model/TabModel'
2
+ import { compressToEncodedURIComponent, decompressFromEncodedURIComponent } from 'lz-string'
3
+ import Hex from 'hex-encoding'
4
+ import { blake3 } from '@noble/hashes/blake3'
5
+
6
+ /**
7
+ * compress tab info to string
8
+ * format:
9
+ * {tab id}{current timestamp}{tab name}{tab closable}
10
+ * @param tabData
11
+ */
12
+ export const encodeTabInfo = (tabData: ITabBase): string => {
13
+ // const info: ITabBase = {
14
+ // id: tabData.id,
15
+ // title: tabData.title,
16
+ // iframe: tabData.iframe,
17
+ // closable: tabData.closable,
18
+ // refreshable: tabData.refreshable
19
+ // }
20
+ const info = `${tabData.id}|${tabData.title}|${tabData.iframe ? 'Y' : 'N'}|${tabData.closable ? 'Y' : 'N'}|${tabData.refreshable ? 'Y' : 'N'}`
21
+ return compressToEncodedURIComponent(info)
22
+ // const compressed = await compress(new TextEncoder().encode(info))
23
+ // return fromUint8Array(compressed, true)
24
+ // return compressToEncodedURIComponent(
25
+ // `${tabData.id}|${tabData.title}|${tabData.iframe ? 'Y' : 'N'}|${tabData.closable ? 'Y' : 'N'}|${tabData.refreshable ? 'Y' : 'N'}`
26
+ // )
27
+ }
28
+
29
+ export const decodeTabInfo = (tab: string): ITabBase => {
30
+ // const decompressed = await decompress(toUint8Array(tab))
31
+ const tabString = decompressFromEncodedURIComponent(tab)
32
+ // const tabString = new TextDecoder().decode(decompressed)
33
+ // return JSON.parse(new TextDecoder().decode(decompressed))
34
+ // const tabString = decompressFromEncodedURIComponent(tab)
35
+ const tabValues: string[] = tabString.split('|')
36
+ return {
37
+ id: tabValues[0],
38
+ title: tabValues[1],
39
+ iframe: tabValues[2] === 'Y',
40
+ closable: tabValues[3] === 'Y',
41
+ refreshable: tabValues[4] === 'Y'
42
+ }
43
+ }
44
+
45
+ export const createPageId = (tabId: string, path: string, query: Object): string => {
46
+ const queryArray = []
47
+ console.log(query)
48
+ type ObjectKey = keyof typeof query
49
+ for (const key in query) {
50
+ if (!key.startsWith('__')) {
51
+ queryArray.push({
52
+ key,
53
+ value: query[key as ObjectKey]
54
+ })
55
+ }
56
+ }
57
+ queryArray.sort((a, b) => {
58
+ let result = 0
59
+ if (a.key > b.key) {
60
+ result = 1
61
+ } else if (a.key < b.key) {
62
+ result = -1
63
+ }
64
+ return result
65
+ })
66
+ const hash = blake3(`${tabId}|${path}|${JSON.stringify(queryArray)}`)
67
+ return Hex.encode(hash)
68
+ // return uuidv5(`${tabId}|${path}|${JSON.stringify(queryArray)}`, uuidv5.URL).replaceAll('-', '')
69
+ // return await blake3(`${tabId}|${path}|${JSON.stringify(queryArray)}`)
70
+ }