Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
G
Géocontrib Frontend
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Redmine
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
externe Matthieu
Géocontrib Frontend
Commits
c88f5956
"...git@git.neogeo.fr:ext_matthieu/geocontrib-frontend.git" did not exist on "b5c0c1936db58360ceefcaf8355798bbf5508823"
Commit
c88f5956
authored
3 years ago
by
Timothee P
Browse files
Options
Downloads
Patches
Plain Diff
WIP: pagination functionnal
parent
72ed8fe6
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/components/feature/FeatureListTable.vue
+36
-59
36 additions, 59 deletions
src/components/feature/FeatureListTable.vue
src/views/feature/Feature_list.vue
+228
-14
228 additions, 14 deletions
src/views/feature/Feature_list.vue
with
264 additions
and
73 deletions
src/components/feature/FeatureListTable.vue
+
36
−
59
View file @
c88f5956
...
...
@@ -75,14 +75,16 @@
</tr>
</thead>
<tbody>
<tr
v-for=
"(feature, index) in
pagina
tedFeatures"
:key=
"index"
>
<tr
v-for=
"(feature, index) in
sor
tedFeatures"
:key=
"index"
>
<td
class=
"center"
>
<div
class=
"ui checkbox"
:class=
"
feature.properties.creator.username !== user.username && !user.is_superuser && !isUserProjectAdministrator ?
'disabled' :
''
feature.properties.creator.username !== user.username &&
!user.is_superuser &&
!isUserProjectAdministrator
? 'disabled'
: ''
"
>
<input
...
...
@@ -90,7 +92,11 @@
:id=
"feature.id"
:value=
"feature.id"
v-model=
"checked"
:disabled=
"feature.properties.creator.username !== user.username && !user.is_superuser && !isUserProjectAdministrator"
:disabled=
"
feature.properties.creator.username !== user.username &&
!user.is_superuser &&
!isUserProjectAdministrator
"
/>
<label></label>
</div>
...
...
@@ -157,15 +163,15 @@
{{
feature
.
properties
.
display_last_editor
}}
</td>
</tr>
<tr
v-if=
"f
ilteredFeatures.length
=== 0"
class=
"odd"
>
<tr
v-if=
"f
eaturesCount
=== 0"
class=
"odd"
>
<td
colspan=
"5"
class=
"dataTables_empty"
valign=
"top"
>
Aucune donnée disponible
</td>
</tr>
</tbody>
</table>
<
div
v-if=
"nbPages.length > 1"
<
!-- v-if="nbPages.length > 1" -->
<!--
<div
id=
"table-features_info"
class=
"dataTables_info"
role=
"status"
...
...
@@ -173,7 +179,7 @@
>
Affichage de l'élément
{{
pagination
.
start
+
1
}}
à
{{
displayedPageEnd
}}
sur
{{
f
ilteredFeatures
.
length
}}
éléments
sur
{{
f
eaturesCount
}}
éléments
</div>
<div
v-if=
"nbPages.length > 1"
...
...
@@ -207,7 +213,7 @@
>
{{
pageNumber
}}
</a
>
</span>
<!-- // TODO :
<span
v-if=
"nbPages > 4"
class=
"ellipsis"
>
...
</span>
-->
<a
id=
"table-features_next"
:class=
"[
...
...
@@ -220,26 +226,26 @@
@click="toNextPage"
>Suivant
</a
>
</div>
</div>
-->
</div>
</
template
>
<
script
>
import
{
mapState
,
mapGetters
}
from
'
vuex
'
;
import
{
mapState
,
mapGetters
}
from
"
vuex
"
;
export
default
{
name
:
"
FeatureListTable
"
,
props
:
[
"
filtered
Features
"
,
"
checkedFeatures
"
],
props
:
[
"
geojson
Features
"
,
"
checkedFeatures
"
,
"
featuresCount
"
],
data
()
{
return
{
pagination
:
{
/*
pagination: {
currentPage: 1,
pagesize: 15,
start: 0,
end: 15,
},
},
*/
sort
:
{
column
:
""
,
ascending
:
true
,
...
...
@@ -248,23 +254,18 @@ export default {
},
computed
:
{
...
mapState
([
'
user
'
,
]),
...
mapGetters
([
'
project
'
,
'
permissions
'
]),
...
mapState
([
"
user
"
]),
...
mapGetters
([
"
project
"
,
"
permissions
"
]),
isUserProjectAdministrator
()
{
return
this
.
permissions
.
is_project_administrator
;
},
pagina
tedFeatures
()
{
let
fil
te
r
dFeatures
=
[...
this
.
filtered
Features
];
sor
tedFeatures
()
{
let
sor
tedFeatures
=
[...
this
.
geojson
Features
];
// Ajout du tri
if
(
this
.
sort
.
column
!==
""
)
{
fil
te
r
dFeatures
=
fil
te
r
dFeatures
.
sort
((
a
,
b
)
=>
{
sor
tedFeatures
=
sor
tedFeatures
.
sort
((
a
,
b
)
=>
{
let
aProp
=
this
.
getFeatureDisplayName
(
a
);
let
bProp
=
this
.
getFeatureDisplayName
(
b
);
if
(
this
.
sort
.
column
===
"
statut
"
)
{
...
...
@@ -301,19 +302,17 @@ export default {
}
});
}
return
fil
te
r
dFeatures
.
slice
(
this
.
pagination
.
start
,
this
.
pagination
.
end
)
;
return
sor
tedFeatures
;
},
nbPages
()
{
let
N
=
Math
.
ceil
(
this
.
filteredFeatures
.
length
/
this
.
pagination
.
pagesize
);
/* nbPages() {
let N = Math.ceil(this.featuresCount / this.pagination.pagesize);
const arr = [...Array(N).keys()].map(function (x) {
++x;
return x;
});
return arr;
},
},
*/
checked
:
{
get
()
{
...
...
@@ -323,12 +322,12 @@ export default {
this
.
$store
.
commit
(
"
feature/UPDATE_CHECKED_FEATURES
"
,
newChecked
);
},
},
/*
displayedPageEnd() {
return
this
.
f
ilteredFeatures
.
length
<=
this
.
pagination
.
end
?
this
.
f
ilteredFeatures
.
length
return this.f
eaturesCount
<= this.pagination.end
? this.f
eaturesCount
: this.pagination.end;
},
},
*/
},
methods
:
{
...
...
@@ -359,36 +358,14 @@ export default {
}
},
toPage
(
pageNumber
)
{
const
toAddOrRemove
=
(
pageNumber
-
this
.
pagination
.
currentPage
)
*
this
.
pagination
.
pagesize
;
this
.
pagination
.
start
+=
toAddOrRemove
;
this
.
pagination
.
end
+=
toAddOrRemove
;
this
.
pagination
.
currentPage
=
pageNumber
;
},
toPreviousPage
()
{
if
(
this
.
pagination
.
start
>
0
)
{
this
.
pagination
.
start
-=
this
.
pagination
.
pagesize
;
this
.
pagination
.
end
-=
this
.
pagination
.
pagesize
;
this
.
pagination
.
currentPage
-=
1
;
}
},
toNextPage
()
{
if
(
this
.
pagination
.
end
<
this
.
filteredFeatures
.
length
)
{
this
.
pagination
.
start
+=
this
.
pagination
.
pagesize
;
this
.
pagination
.
end
+=
this
.
pagination
.
pagesize
;
this
.
pagination
.
currentPage
+=
1
;
}
},
},
};
</
script
>
<
style
scoped
>
/* datatables */
.dataTables_wrapper
{
/*
.dataTables_wrapper {
position: relative;
clear: both;
}
...
...
@@ -465,7 +442,7 @@ export default {
border: 1px solid transparent;
background: transparent;
box-shadow: none;
}
}
*/
i
.icon.sort
:not
(
.down
)
:not
(
.up
)
{
color
:
rgb
(
220
,
220
,
220
);
...
...
This diff is collapsed.
Click to expand it.
src/views/feature/Feature_list.vue
+
228
−
14
View file @
c88f5956
...
...
@@ -141,12 +141,75 @@
<div
id=
"map"
ref=
"map"
></div>
<SidebarLayers
v-if=
"basemaps && map"
/>
</div>
<!-- v-on:update:page="changePage" -->
<FeatureListTable
v-show=
"!showMap"
:
filtered
Features=
"geojsonFeatures"
:
geojson
Features=
"geojsonFeatures"
:checkedFeatures.sync=
"checkedFeatures"
:featuresCount=
"featuresCount"
/>
<!-- PAGINATION START -->
<div
data-tab=
"list"
class=
"dataTables_wrapper no-footer"
>
<div
id=
"table-features_info"
class=
"dataTables_info"
role=
"status"
aria-live=
"polite"
>
Affichage de l'élément
{{
pagination
.
start
+
1
}}
à
{{
displayedPageEnd
}}
sur
{{
featuresCount
}}
éléments
</div>
<div
v-if=
"nbPages.length > 1"
id=
"table-features_paginate"
class=
"dataTables_paginate paging_simple_numbers"
>
<a
@
click=
"toPreviousPage"
id=
"table-features_previous"
:class=
"[
'paginate_button previous',
{ disabled: pagination.currentPage === 1 },
]"
aria-controls="table-features"
data-dt-idx="0"
tabindex="0"
>Précédent
</a
>
<span>
<a
v-for=
"pageNumber in nbPages"
:key=
"'page' + pageNumber"
@
click=
"toPage(pageNumber)"
:class=
"[
'paginate_button',
{ current: pageNumber === pagination.currentPage },
]"
aria-controls="table-features"
data-dt-idx="1"
tabindex="0"
>
{{
pageNumber
}}
</a
>
</span>
<!-- // TODO :
<span
v-if=
"nbPages > 4"
class=
"ellipsis"
>
...
</span>
-->
<a
id=
"table-features_next"
:class=
"[
'paginate_button next',
{ disabled: pagination.currentPage === nbPages.length },
]"
aria-controls="table-features"
data-dt-idx="7"
tabindex="0"
@click="toNextPage"
>Suivant
</a
>
</div>
</div>
<!-- PAGINATION END -->
<!-- MODAL ALL DELETE FEATURE TYPE -->
<div
v-if=
"modalAllDeleteOpen"
...
...
@@ -239,18 +302,24 @@ export default {
},
geojsonFeatures
:
[],
featuresCount
:
0
,
previous
:
null
,
next
:
null
,
filterStatus
:
null
,
filterType
:
null
,
baseUrl
:
this
.
$store
.
state
.
configuration
.
BASE_URL
,
map
:
null
,
zoom
:
null
,
lat
:
null
,
lng
:
null
,
limit
:
15
,
offset
:
0
,
//limit: 15,
//offset: 0,
featuresCount
:
0
,
filterType
:
null
,
filterStatus
:
null
,
pagination
:
{
currentPage
:
1
,
pagesize
:
15
,
start
:
0
,
end
:
15
,
},
previous
:
null
,
next
:
null
,
showMap
:
true
,
showAddFeature
:
false
,
};
...
...
@@ -272,6 +341,21 @@ export default {
this
.
project
.
moderation
?
true
:
el
.
value
!==
"
pending
"
);
},
nbPages
()
{
let
N
=
Math
.
ceil
(
this
.
featuresCount
/
this
.
pagination
.
pagesize
);
const
arr
=
[...
Array
(
N
).
keys
()].
map
(
function
(
x
)
{
++
x
;
return
x
;
});
return
arr
;
},
displayedPageEnd
()
{
return
this
.
featuresCount
<=
this
.
pagination
.
end
?
this
.
featuresCount
:
this
.
pagination
.
end
;
},
},
methods
:
{
...
...
@@ -369,6 +453,49 @@ export default {
},
1000
);
},
/* changePage(page) {
if (page === "next") {
this.updateFeatures(this.next);
} else if (page === "previous") {
this.updateFeatures(this.previous);
} else if (typeof page === Number) {
//* update limit and offset
this.updateFeatures();
}
}, */
toPage
(
pageNumber
)
{
console
.
log
(
pageNumber
);
const
toAddOrRemove
=
(
pageNumber
-
this
.
pagination
.
currentPage
)
*
this
.
pagination
.
pagesize
;
this
.
pagination
.
start
+=
toAddOrRemove
;
this
.
pagination
.
end
+=
toAddOrRemove
;
this
.
pagination
.
currentPage
=
pageNumber
;
this
.
updateFeatures
();
},
toPreviousPage
()
{
if
(
this
.
pagination
.
currentPage
!==
1
)
{
if
(
this
.
pagination
.
start
>
0
)
{
this
.
pagination
.
start
-=
this
.
pagination
.
pagesize
;
this
.
pagination
.
end
-=
this
.
pagination
.
pagesize
;
this
.
pagination
.
currentPage
-=
1
;
}
this
.
updateFeatures
(
this
.
previous
);
}
},
toNextPage
()
{
if
(
this
.
pagination
.
currentPage
!==
this
.
nbPages
.
length
)
{
if
(
this
.
pagination
.
end
<
this
.
featuresCount
)
{
this
.
pagination
.
start
+=
this
.
pagination
.
pagesize
;
this
.
pagination
.
end
+=
this
.
pagination
.
pagesize
;
this
.
pagination
.
currentPage
+=
1
;
}
this
.
updateFeatures
(
this
.
next
);
}
},
getFeatureTypeSlug
(
title
)
{
const
featureType
=
this
.
feature_types
.
find
((
el
)
=>
el
.
title
===
title
);
return
featureType
?
featureType
.
slug
:
null
;
...
...
@@ -440,12 +567,20 @@ export default {
this
.
updateFeatures
({
filterType
:
"
status
"
,
filterValue
});
},
updateFeatures
(
filterParams
)
{
let
url
=
`
${
this
.
API_BASE_URL
}
projects/
${
this
.
$route
.
params
.
slug
}
/feature-paginated/?output=geojson&limit=
${
this
.
limit
}
&offset=
${
this
.
offset
}
`
;
if
(
filterParams
)
{
const
params
=
this
.
buildFilterParams
(
filterParams
);
if
(
params
===
"
abort
"
)
return
;
url
+=
params
;
updateFeatures
(
params
)
{
let
url
=
`
${
this
.
API_BASE_URL
}
projects/
${
this
.
$route
.
params
.
slug
}
/feature-paginated/?output=geojson&limit=
${
this
.
pagination
.
pagesize
}
&offset=
${
this
.
pagination
.
start
}
`
;
if
(
params
)
{
if
(
typeof
params
===
"
object
"
)
{
const
filterParams
=
this
.
buildFilterParams
(
params
);
if
(
filterParams
===
"
abort
"
)
return
;
url
+=
filterParams
;
}
else
{
console
.
error
(
"
ONLY FOR DEV !!!!!!!!!!!!!
"
);
params
=
params
.
replace
(
"
8000
"
,
"
8010
"
);
console
.
log
(
url
);
url
=
params
;
}
}
console
.
log
(
"
url -->
"
,
url
);
...
...
@@ -598,5 +733,84 @@ export default {
width
:
100%
;
}
}
.dataTables_wrapper
{
position
:
relative
;
clear
:
both
;
}
.dataTables_wrapper
.dataTables_length
,
.dataTables_wrapper
.dataTables_filter
,
.dataTables_wrapper
.dataTables_info
,
.dataTables_wrapper
.dataTables_processing
,
.dataTables_wrapper
.dataTables_paginate
{
color
:
#333
;
}
.dataTables_wrapper
.dataTables_info
{
clear
:
both
;
float
:
left
;
padding-top
:
0.755em
;
}
.dataTables_wrapper
.dataTables_paginate
{
float
:
right
;
text-align
:
right
;
padding-top
:
0.25em
;
}
.dataTables_wrapper
.dataTables_paginate
.paginate_button.current
,
.dataTables_wrapper
.dataTables_paginate
.paginate_button.current
:hover
{
color
:
#333
!important
;
border
:
1px
solid
#979797
;
background-color
:
white
;
background
:
-webkit-gradient
(
linear
,
left
top
,
left
bottom
,
color-stop
(
0%
,
#fff
),
color-stop
(
100%
,
#dcdcdc
)
);
background
:
-webkit-linear-gradient
(
top
,
#fff
0%
,
#dcdcdc
100%
);
background
:
-moz-linear-gradient
(
top
,
#fff
0%
,
#dcdcdc
100%
);
background
:
-ms-linear-gradient
(
top
,
#fff
0%
,
#dcdcdc
100%
);
background
:
-o-linear-gradient
(
top
,
#fff
0%
,
#dcdcdc
100%
);
background
:
linear-gradient
(
to
bottom
,
#fff
0%
,
#dcdcdc
100%
);
}
.dataTables_wrapper
.dataTables_paginate
.paginate_button
{
box-sizing
:
border-box
;
display
:
inline-block
;
min-width
:
1.5em
;
padding
:
0.5em
1em
;
margin-left
:
2px
;
text-align
:
center
;
text-decoration
:
none
!important
;
cursor
:
pointer
;
color
:
#333
!important
;
border
:
1px
solid
transparent
;
border-radius
:
2px
;
}
.dataTables_wrapper
.dataTables_paginate
.paginate_button
:hover
{
color
:
white
!important
;
border
:
1px
solid
#111
;
background-color
:
#585858
;
background
:
-webkit-gradient
(
linear
,
left
top
,
left
bottom
,
color-stop
(
0%
,
#585858
),
color-stop
(
100%
,
#111
)
);
background
:
-webkit-linear-gradient
(
top
,
#585858
0%
,
#111
100%
);
background
:
-moz-linear-gradient
(
top
,
#585858
0%
,
#111
100%
);
background
:
-ms-linear-gradient
(
top
,
#585858
0%
,
#111
100%
);
background
:
-o-linear-gradient
(
top
,
#585858
0%
,
#111
100%
);
background
:
linear-gradient
(
to
bottom
,
#585858
0%
,
#111
100%
);
}
.dataTables_wrapper
.dataTables_paginate
.paginate_button.disabled
,
.dataTables_wrapper
.dataTables_paginate
.paginate_button.disabled
:hover
,
.dataTables_wrapper
.dataTables_paginate
.paginate_button.disabled
:active
{
cursor
:
default
;
color
:
#666
!important
;
border
:
1px
solid
transparent
;
background
:
transparent
;
box-shadow
:
none
;
}
</
style
>
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment