Skip to content

Commit 73a073e

Browse files
authored
Resource page config based on type (#2050)
1 parent bfcbda0 commit 73a073e

File tree

6 files changed

+271
-44
lines changed

6 files changed

+271
-44
lines changed

geonode_mapstore_client/apps.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def run_setup_hooks(*args, **kwargs):
2323
from geonode.api.urls import router
2424
from geonode.security.permissions import VIEW_PERMISSIONS, OWNER_PERMISSIONS
2525
from geonode.groups.conf import settings as groups_settings
26+
from geonode_mapstore_client.utils import get_default_resource_page_config
2627

2728
LOCAL_ROOT = os.path.abspath(os.path.dirname(__file__))
2829
settings.TEMPLATES[0]["DIRS"].insert(0, os.path.join(LOCAL_ROOT, "templates"))
@@ -85,7 +86,7 @@ def run_setup_hooks(*args, **kwargs):
8586
),
8687
re_path(r"^metadata/(?P<pk>[^/]*)$", views.metadata, name='metadata'),
8788
re_path(r"^metadata/(?P<pk>[^/]*)/embed$", views.metadata_embed, name='metadata'),
88-
re_path(r"^(?P<resource_type>[^/]*)$", views.resource_type_catalog, name='resource_type_catalog'),
89+
re_path(r"^(?P<page_id>[^/]*)$", views.resource_page_catalog, name='page_id'),
8990
# required, otherwise will raise no-lookup errors to be analysed
9091
re_path(r"^api/v2/", include(router.urls)),
9192
]
@@ -295,6 +296,9 @@ def run_setup_hooks(*args, **kwargs):
295296
setattr(settings, "MAPSTORE_DASHBOARD_CATALOGUE_SELECTED_SERVICE", MAPSTORE_DASHBOARD_CATALOGUE_SELECTED_SERVICE)
296297
setattr(settings, "MAPSTORE_DASHBOARD_CATALOGUE_SERVICES", MAPSTORE_DASHBOARD_CATALOGUE_SERVICES)
297298

299+
RESOURCES_PAGE_CONFIG = getattr(settings, "RESOURCE_PAGE_CONFIG", get_default_resource_page_config())
300+
setattr(settings, "RESOURCES_PAGE_CONFIG", RESOURCES_PAGE_CONFIG)
301+
298302

299303
def connect_geoserver_style_visual_mode_signal():
300304
from geonode.geoserver.signals import geoserver_automatic_default_style_set

geonode_mapstore_client/static/mapstore/configs/localConfig.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3187,9 +3187,6 @@
31873187
"href": "/services/?limit=5"
31883188
}
31893189
]
3190-
},
3191-
{
3192-
"type": "divider"
31933190
}
31943191
]
31953192
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{% extends "page.html" %} {% block container %}
2+
3+
<script>
4+
window.addEventListener("mapstore:ready", function (event) {
5+
const catalogPagePath =
6+
window.__GEONODE_CONFIG__.localConfig.geoNodeSettings.catalogPagePath;
7+
const pagePath = catalogPagePath ? catalogPagePath : "/catalogue/";
8+
const msAPI = event.detail;
9+
msAPI.setPluginsConfig((localConfig) => {
10+
return (localConfig?.plugins?.catalogue || []).map((plugin) => {
11+
const resourcePageConfig = JSON.parse("{{ resource_page_config|escapejs|safe }}");
12+
const { titleId, defaultQuery, menuItems, filterFormFields } = resourcePageConfig;
13+
if (plugin.name === "ResourcesGrid") {
14+
return {
15+
...plugin,
16+
cfg: {
17+
...plugin?.cfg,
18+
...(titleId && {titleId}),
19+
...(defaultQuery && {defaultQuery}),
20+
...(menuItems && {menuItems}),
21+
}
22+
}
23+
}
24+
if (plugin.name === "ResourcesFiltersForm") {
25+
return {
26+
...plugin,
27+
cfg: {
28+
...plugin?.cfg,
29+
...(filterFormFields && {fields: filterFormFields})
30+
}
31+
}
32+
}
33+
return plugin;
34+
});
35+
});
36+
});
37+
</script>
38+
39+
{% endblock %}

geonode_mapstore_client/templates/geonode-mapstore-client/resource_type_catalog.html

Lines changed: 0 additions & 30 deletions
This file was deleted.

geonode_mapstore_client/utils.py

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,223 @@ def set_default_style_to_open_in_visual_mode(instance, **kwargs):
2525
style.name, resp.status_code, resp.text
2626
)
2727
)
28+
29+
def get_page_filter_form(group_filter_form = None):
30+
if group_filter_form is None:
31+
group_filter_form = []
32+
33+
page_filter_form = [
34+
{
35+
"type": "search"
36+
},
37+
{
38+
"type": "group",
39+
"labelId": "gnhome.customFiltersTitle",
40+
"items": [
41+
{
42+
"id": "my-resources",
43+
"labelId": "gnhome.myResources",
44+
"type": "filter",
45+
"disableIf": "{!state('user')}"
46+
},
47+
{
48+
"id": "favorite",
49+
"labelId": "gnhome.favorites",
50+
"type": "filter",
51+
"disableIf": "{!state('user')}"
52+
},
53+
{
54+
"id": "featured",
55+
"labelId": "gnhome.featuredList",
56+
"type": "filter"
57+
},
58+
{
59+
"id": "unpublished",
60+
"labelId": "gnhome.unpublished",
61+
"type": "filter",
62+
"disableIf": "{!state('user')}"
63+
},
64+
{
65+
"id": "pending-approval",
66+
"labelId": "gnhome.pendingApproval",
67+
"type": "filter",
68+
"disableIf": "{!state('user')}"
69+
},
70+
*group_filter_form,
71+
]
72+
},
73+
{
74+
"type": "divider",
75+
"disableIf": "{!state('user')}"
76+
},
77+
{
78+
"type": "select",
79+
"facet": "category"
80+
},
81+
{
82+
"type": "select",
83+
"facet": "keyword"
84+
},
85+
{
86+
"type": "select",
87+
"facet": "place"
88+
},
89+
{
90+
"type": "select",
91+
"facet": "user"
92+
},
93+
{
94+
"type": "select",
95+
"facet": "group"
96+
},
97+
{
98+
"type": "accordion",
99+
"style": "facet",
100+
"facet": "thesaurus"
101+
},
102+
{
103+
"type": "date-range",
104+
"filterKey": "date",
105+
"labelId": "gnviewer.dateFilter"
106+
},
107+
{
108+
"labelId": "gnviewer.extent",
109+
"type": "extent"
110+
}
111+
]
112+
return page_filter_form
113+
114+
def get_default_resource_page_config():
115+
DEFAULT_PAGE_FILTER_FORM = get_page_filter_form()
116+
default_menu_item = {
117+
"labelId": "gnhome.new",
118+
"disableIf": "{(state('settings') && state('settings').isMobile) || !(state('user') && state('user').perms && state('user').perms.includes('add_resource'))}",
119+
"type": "button",
120+
"variant": "primary",
121+
}
122+
page_resource_config = {
123+
"maps": {
124+
"titleId": "gnhome.map",
125+
"defaultQuery": {
126+
"f": "map"
127+
},
128+
"menuItems": [
129+
{
130+
**default_menu_item,
131+
"value": "map",
132+
"href": "{context.getCataloguePath('/catalogue/#/map/new')}"
133+
}
134+
],
135+
"filterFormFields" : DEFAULT_PAGE_FILTER_FORM
136+
},
137+
"datasets": {
138+
"titleId": "gnhome.dataset",
139+
"defaultQuery": {
140+
"f": "dataset"
141+
},
142+
"menuItems": [
143+
{
144+
**default_menu_item,
145+
"type": "dropdown",
146+
"noCaret": True,
147+
"items": [
148+
{
149+
"labelId": "gnhome.uploadDataset",
150+
"value": "layer",
151+
"type": "link",
152+
"href": "{context.getCataloguePath('/catalogue/#/upload/dataset')}"
153+
},
154+
{
155+
"labelId": "gnhome.createDataset",
156+
"value": "layer",
157+
"type": "link",
158+
"href": "/createlayer/",
159+
"disableIf": "{(state('settings') && state('settings').createLayer) ? false : true}"
160+
},
161+
{
162+
"labelId": "gnhome.remoteServices",
163+
"value": "remote",
164+
"type": "link",
165+
"href": "/services/?limit=5"
166+
}
167+
]
168+
}
169+
],
170+
"filterFormFields": get_page_filter_form([
171+
{
172+
"id": "remote",
173+
"labelId": "gnhome.remote",
174+
"type": "filter"
175+
},
176+
{
177+
"id": "store-vector",
178+
"labelId": "gnhome.vector",
179+
"type": "filter"
180+
},
181+
{
182+
"id": "store-raster",
183+
"labelId": "gnhome.raster",
184+
"type": "filter"
185+
},
186+
{
187+
"id": "store-time-series",
188+
"labelId": "gnhome.timeSeries",
189+
"type": "filter"
190+
},
191+
{
192+
"id": "3dtiles",
193+
"labelId": "gnhome.3dtiles",
194+
"type": "filter"
195+
}
196+
])
197+
},
198+
"documents": {
199+
"titleId": "gnhome.document",
200+
"defaultQuery": {
201+
"f": "document"
202+
},
203+
"menuItems": [
204+
{
205+
**default_menu_item,
206+
"value": "document",
207+
"href": "{context.getCataloguePath('/catalogue/#/upload/document')}"
208+
}
209+
],
210+
"filterFormFields": get_page_filter_form([
211+
{
212+
"id": "remote",
213+
"labelId": "gnhome.remote",
214+
"type": "filter"
215+
}
216+
])
217+
},
218+
"dashboards": {
219+
"titleId": "gnhome.dashboard",
220+
"defaultQuery": {
221+
"f": "dashboard"
222+
},
223+
"menuItems": [
224+
{
225+
226+
"value": "dashboard",
227+
"href": "{context.getCataloguePath('/catalogue/#/dashboard/new')}"
228+
}
229+
],
230+
"filterFormFields": DEFAULT_PAGE_FILTER_FORM
231+
},
232+
"geostories": {
233+
"titleId": "gnhome.geostory",
234+
"defaultQuery": {
235+
"f": "geostory"
236+
},
237+
"menuItems": [
238+
{
239+
**default_menu_item,
240+
"value": "geostory",
241+
"href": "{context.getCataloguePath('/catalogue/#/geostory/new')}"
242+
}
243+
],
244+
"filterFormFields": DEFAULT_PAGE_FILTER_FORM
245+
}
246+
}
247+
return page_resource_config

geonode_mapstore_client/views.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
import json
23
from django.shortcuts import render
34
from django.utils.translation.trans_real import get_language_from_request
45
from dateutil import parser
@@ -71,13 +72,9 @@ def metadata(request, pk, template="geonode-mapstore-client/metadata.html"):
7172
def metadata_embed(request, pk):
7273
return metadata(request, pk, template="geonode-mapstore-client/metadata_embed.html")
7374

74-
def resource_type_catalog(request, resource_type):
75-
# TODO: improve mapping method maybe externalize it and improve it
76-
resource_type_map = {
77-
'datasets': 'dataset',
78-
'documents': 'document',
79-
'maps': 'map',
80-
'dashboards': 'dashboard',
81-
'geostories': 'geostory'
82-
}
83-
return render(request, "geonode-mapstore-client/resource_type_catalog.html", context={ "title": resource_type, "resource_type": resource_type_map.get(resource_type) })
75+
def resource_page_catalog(request, page_id):
76+
from django.conf import settings
77+
78+
RESOURCES_PAGE_CONFIG = getattr(settings, "RESOURCES_PAGE_CONFIG", {})
79+
context = { "resource_page_config": json.dumps(RESOURCES_PAGE_CONFIG.get(page_id)) }
80+
return render(request, "geonode-mapstore-client/resource_page_catalog.html", context=context)

0 commit comments

Comments
 (0)