Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wiki-js
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
wiki-js
Commits
3de0e149
You need to sign in or sign up before continuing.
Commit
3de0e149
authored
Oct 12, 2019
by
NGPixel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: page tree browser
parent
7a3198c3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
103 additions
and
41 deletions
+103
-41
page-selector.vue
client/components/common/page-selector.vue
+91
-41
common-pages-query-tree.gql
client/graph/common/common-pages-query-tree.gql
+11
-0
page.js
server/graph/resolvers/page.js
+1
-0
No files found.
client/components/common/page-selector.vue
View file @
3de0e149
<
template
lang=
"pug"
>
v-dialog(v-model='isShown', max-width='850px')
v-card.page-selector
.dialog-header.is-
dark
.dialog-header.is-
blue
v-icon.mr-3(color='white') mdi-page-next-outline
.body-1 Select Page Location
v-spacer
...
...
@@ -15,45 +15,53 @@
.d-flex(style='min-height:400px;')
v-flex.grey(xs4, :class='darkMode ? `darken-4` : `lighten-3`')
v-toolbar(color='grey darken-3', dark, dense, flat)
.body-2 Folders
//- v-spacer
//- v-btn(icon): v-icon create_new_folder
.body-2 Virtual Folders
v-spacer
v-btn(icon, tile)
v-icon mdi-help-box
v-treeview(
v-model='tree'
:items='treeFolders'
:active.sync='currentNode'
:open.sync='openNodes'
:items='tree'
:load-children='fetchFolders'
dense
expand-icon='mdi-menu-down-outline'
item-id='path'
item-text='title'
activatable
open-on-click
hoverable
)
template(slot='prepend', slot-scope='{ item, open, leaf }')
v-icon mdi-
{{
open
?
'folder-open'
:
'folder'
}}
v-flex(xs8)
v-toolbar(color='
grey
darken-2', dark, dense, flat)
v-toolbar(color='
blue
darken-2', dark, dense, flat)
.body-2 Pages
v-spacer
v-btn(icon): v-icon mdi-forward
v-btn(icon): v-icon mdi-delete
v-list(dense)
v-list-item
v-list-item-icon: v-icon mdi-file-document-box
v-list-item-title File A
v-divider
v-list-item
v-list-item-icon: v-icon mdi-file-document-box
v-list-item-title File B
v-divider
v-list-item
v-list-item-icon: v-icon mdi-file-document-box
v-list-item-title File C
v-divider
v-list-item
v-list-item-icon: v-icon mdi-file-document-box
v-list-item-title File D
v-card-actions.grey.pa-2(:class='darkMode ? `darken-3-d5` : `lighten-1`')
v-btn(icon, tile): v-icon mdi-content-save-move-outline
v-btn(icon, tile): v-icon mdi-trash-can-outline
v-list.py-0(dense, v-if='currentPages.length > 0')
v-list-item-group(
v-model='currentPage'
color='primary'
)
template(v-for='(page, idx) of currentPages')
v-list-item(:key='page.id', :value='page.path')
v-list-item-icon: v-icon mdi-file-document-box
v-list-item-title
{{
page
.
title
}}
v-divider(v-if='idx < pages.length - 1')
v-alert.animated.fadeIn(
v-else
text
color='orange'
prominent
icon='mdi-alert'
)
.body-2 This folder is empty.
v-card-actions.grey.pa-2(:class='darkMode ? `darken-2` : `lighten-1`')
v-select(
solo
dark
flat
background-color='grey darken-3-d2'
hide-details
single-line
...
...
@@ -62,6 +70,7 @@
v-model='currentLocale'
)
v-text-field(
ref='pathIpt'
solo
hide-details
prefix='/'
...
...
@@ -73,13 +82,15 @@
v-card-chin
v-spacer
v-btn(text, @click='close') Cancel
v-btn.px-4(color='primary', @click='open')
v-btn.px-4(color='primary', @click='open'
, :disabled='!isValidPath'
)
v-icon(left) mdi-check
span Select
</
template
>
<
script
>
import
_
from
'lodash'
import
{
get
}
from
'vuex-pathify'
import
pageTreeQuery
from
'gql/common/common-pages-query-tree.gql'
/* global siteLangs, siteConfig */
...
...
@@ -111,8 +122,15 @@ export default {
searchLoading
:
false
,
currentLocale
:
siteConfig
.
lang
,
currentPath
:
'new-page'
,
tree
:
[],
treeChildren
:
[],
currentPage
:
null
,
currentNode
:
[
0
],
openNodes
:
[
0
],
tree
:
[{
id
:
0
,
title
:
'/ (root'
,
children
:
[]
}],
pages
:
[],
namespaces
:
siteLangs
.
length
?
siteLangs
.
map
(
ns
=>
ns
.
code
)
:
[
siteConfig
.
lang
]
}
},
...
...
@@ -122,21 +140,33 @@ export default {
get
()
{
return
this
.
value
},
set
(
val
)
{
this
.
$emit
(
'input'
,
val
)
}
},
treeFolders
()
{
return
[
{
id
:
'/'
,
name
:
'/ (root)'
,
children
:
[]
}
]
currentPages
()
{
return
_
.
filter
(
this
.
pages
,
[
'parent'
,
_
.
head
(
this
.
currentNode
)
||
0
])
},
isValidPath
()
{
return
this
.
currentPath
&&
this
.
currentPath
.
length
>
2
}
},
watch
:
{
isShown
(
newValue
,
oldValue
)
{
isShown
(
newValue
,
oldValue
)
{
if
(
newValue
&&
!
oldValue
)
{
this
.
currentPath
=
this
.
path
this
.
currentLocale
=
this
.
locale
_
.
delay
(()
=>
{
this
.
$refs
.
pathIpt
.
focus
()
})
}
},
currentNode
(
newValue
,
oldValue
)
{
if
(
newValue
.
length
<
1
)
{
// force a selection
this
.
$nextTick
(()
=>
{
this
.
currentNode
=
oldValue
})
}
},
currentPage
(
newValue
,
oldValue
)
{
if
(
!
_
.
isEmpty
(
newValue
))
{
this
.
currentPath
=
newValue
}
}
},
...
...
@@ -153,8 +183,28 @@ export default {
this
.
close
()
}
},
async
fetchFolders
(
item
)
{
console
.
info
(
item
)
async
fetchFolders
(
item
)
{
this
.
searchLoading
=
true
const
resp
=
await
this
.
$apollo
.
query
({
query
:
pageTreeQuery
,
fetchPolicy
:
'network-only'
,
variables
:
{
parent
:
item
.
id
,
mode
:
'ALL'
,
locale
:
this
.
currentLocale
}
})
const
items
=
_
.
get
(
resp
,
'data.pages.tree'
,
[])
const
itemFolders
=
_
.
filter
(
items
,
[
'isFolder'
,
true
]).
map
(
f
=>
({...
f
,
children
:
[]}))
const
itemPages
=
_
.
filter
(
items
,
[
'isFolder'
,
false
])
if
(
itemFolders
.
length
>
0
)
{
item
.
children
=
itemFolders
}
else
{
item
.
children
=
undefined
}
this
.
pages
.
push
(...
itemPages
)
this
.
searchLoading
=
false
}
}
}
...
...
client/graph/common/common-pages-query-tree.gql
0 → 100644
View file @
3de0e149
query
(
$parent
:
Int
!,
$mode
:
PageTreeMode
!,
$locale
:
String
!)
{
pages
{
tree
(
parent
:
$parent
,
mode
:
$mode
,
locale
:
$locale
)
{
id
path
title
isFolder
parent
}
}
}
server/graph/resolvers/page.js
View file @
3de0e149
...
...
@@ -141,6 +141,7 @@ module.exports = {
})
}).
map
(
r
=>
({
...
r
,
parent
:
r
.
parent
||
0
,
locale
:
r
.
localeCode
}))
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment