diff --git a/crm/fcrm/doctype/crm_view_settings/crm_view_settings.json b/crm/fcrm/doctype/crm_view_settings/crm_view_settings.json index 8b7ae5f0..91ed5b31 100644 --- a/crm/fcrm/doctype/crm_view_settings/crm_view_settings.json +++ b/crm/fcrm/doctype/crm_view_settings/crm_view_settings.json @@ -9,6 +9,8 @@ "user", "column_break_zacm", "dt", + "route_name", + "pinned", "columns_tab", "default_columns", "columns", @@ -84,11 +86,22 @@ "fieldname": "default_columns", "fieldtype": "Check", "label": "Default Columns" + }, + { + "default": "0", + "fieldname": "pinned", + "fieldtype": "Check", + "label": "Pinned" + }, + { + "fieldname": "route_name", + "fieldtype": "Data", + "label": "Route Name" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-12-30 19:28:02.541487", + "modified": "2024-01-01 18:44:22.815490", "modified_by": "Administrator", "module": "FCRM", "name": "CRM View Settings", diff --git a/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py b/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py index dbb218f6..198379cf 100644 --- a/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py +++ b/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py @@ -24,6 +24,7 @@ def create(view, duplicate=False): doc.user = frappe.session.user doc.filters = json.dumps(view.filters) doc.order_by = view.order_by + doc.route_name = view.route_name or "" doc.default_columns = view.default_columns or False if not view.columns: @@ -59,6 +60,7 @@ def update(view): doc = frappe.get_doc("CRM View Settings", view.name) doc.label = view.label + doc.route_name = view.route_name or "" doc.default_columns = default_columns doc.filters = json.dumps(filters) doc.order_by = view.order_by @@ -72,6 +74,12 @@ def delete(name): if frappe.db.exists("CRM View Settings", name): frappe.delete_doc("CRM View Settings", name) +@frappe.whitelist() +def pin(name, value): + doc = frappe.get_doc("CRM View Settings", name) + doc.pinned = value + doc.save() + def remove_duplicates(l): return list(dict.fromkeys(l)) diff --git a/frontend/src/components/AppSidebar.vue b/frontend/src/components/AppSidebar.vue index f56d4ead..4b5d891d 100644 --- a/frontend/src/components/AppSidebar.vue +++ b/frontend/src/components/AppSidebar.vue @@ -3,7 +3,7 @@ class="flex h-full flex-col justify-between transition-all duration-300 ease-in-out" :class="isSidebarCollapsed ? 'w-12' : 'w-56'" > -
+
+
+
+
+ Pinned Views +
+ +
diff --git a/frontend/src/components/Icons/DuplicateIcon.vue b/frontend/src/components/Icons/DuplicateIcon.vue new file mode 100644 index 00000000..54ba0875 --- /dev/null +++ b/frontend/src/components/Icons/DuplicateIcon.vue @@ -0,0 +1,16 @@ + diff --git a/frontend/src/components/Icons/PinIcon.vue b/frontend/src/components/Icons/PinIcon.vue new file mode 100644 index 00000000..c1ade0a3 --- /dev/null +++ b/frontend/src/components/Icons/PinIcon.vue @@ -0,0 +1,16 @@ + diff --git a/frontend/src/components/Icons/UnpinIcon.vue b/frontend/src/components/Icons/UnpinIcon.vue new file mode 100644 index 00000000..31ac4721 --- /dev/null +++ b/frontend/src/components/Icons/UnpinIcon.vue @@ -0,0 +1,25 @@ + diff --git a/frontend/src/components/SidebarLink.vue b/frontend/src/components/SidebarLink.vue index 0ba25e5d..99a174ca 100644 --- a/frontend/src/components/SidebarLink.vue +++ b/frontend/src/components/SidebarLink.vue @@ -45,7 +45,7 @@ const props = defineProps({ default: '', }, to: { - type: String, + type: [Object, String], default: '', }, isCollapsed: { @@ -55,7 +55,11 @@ const props = defineProps({ }) function handleClick() { - router.push({ name: props.to }) + if (typeof props.to === 'object') { + router.push(props.to) + } else { + router.push({ name: props.to }) + } } let isActive = computed(() => { diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index 6f25d2b7..9492320c 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -63,6 +63,9 @@ />