diff --git a/frappe/public/icons/timeless/symbol-defs.svg b/frappe/public/icons/timeless/symbol-defs.svg
index 2b0cc8b696..d2c162161f 100644
--- a/frappe/public/icons/timeless/symbol-defs.svg
+++ b/frappe/public/icons/timeless/symbol-defs.svg
@@ -693,4 +693,10 @@
+
+
+
+
+
+
diff --git a/frappe/public/js/frappe/list/base_list.js b/frappe/public/js/frappe/list/base_list.js
index a2dc51d69b..beacb136e6 100644
--- a/frappe/public/js/frappe/list/base_list.js
+++ b/frappe/public/js/frappe/list/base_list.js
@@ -179,7 +179,8 @@ frappe.views.BaseList = class BaseList {
'Calendar': 'calendar',
'Gantt': 'gantt',
'Kanban': 'kanban',
- 'Dashboard': 'dashboard'
+ 'Dashboard': 'dashboard',
+ 'Map': 'map',
};
if (frappe.boot.desk_settings.view_switcher) {
@@ -823,6 +824,7 @@ frappe.views.view_modes = [
"Image",
"Inbox",
"Tree",
+ "Map",
];
frappe.views.is_valid = (view_mode) =>
frappe.views.view_modes.includes(view_mode);
diff --git a/frappe/public/js/frappe/list/list_view_select.js b/frappe/public/js/frappe/list/list_view_select.js
index 826158ff3f..9607be6e90 100644
--- a/frappe/public/js/frappe/list/list_view_select.js
+++ b/frappe/public/js/frappe/list/list_view_select.js
@@ -123,7 +123,14 @@ frappe.views.ListViewSelect = class ListViewSelect {
kanbans => this.setup_kanban_switcher(kanbans)
);
}
- }
+ },
+ Map: {
+ condition: this.list_view.settings.get_coords_method ||
+ (this.list_view.meta.fields.find(i => i.fieldname === "latitude") &&
+ this.list_view.meta.fields.find(i => i.fieldname === "longitude")) ||
+ (this.list_view.meta.fields.find(i => i.fieldname === 'location' && i.fieldtype == 'Geolocation')),
+ action: () => this.set_route("map")
+ },
};
frappe.views.view_modes.forEach(view => {