fix: use standard listview as default view
auto save changes in default view
This commit is contained in:
parent
2f89e9bbfb
commit
9b12cbaffe
@ -7,6 +7,7 @@
|
|||||||
"field_order": [
|
"field_order": [
|
||||||
"label",
|
"label",
|
||||||
"user",
|
"user",
|
||||||
|
"is_default",
|
||||||
"column_break_zacm",
|
"column_break_zacm",
|
||||||
"dt",
|
"dt",
|
||||||
"route_name",
|
"route_name",
|
||||||
@ -104,11 +105,17 @@
|
|||||||
"fieldname": "public",
|
"fieldname": "public",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Public"
|
"label": "Public"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"fieldname": "is_default",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Is Default"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2024-02-03 18:22:48.406099",
|
"modified": "2024-02-03 18:38:09.412745",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "FCRM",
|
"module": "FCRM",
|
||||||
"name": "CRM View Settings",
|
"name": "CRM View Settings",
|
||||||
|
|||||||
@ -21,6 +21,9 @@ def create(view):
|
|||||||
view.rows = view.rows + default_rows if default_rows else view.rows
|
view.rows = view.rows + default_rows if default_rows else view.rows
|
||||||
view.rows = remove_duplicates(view.rows)
|
view.rows = remove_duplicates(view.rows)
|
||||||
|
|
||||||
|
if not view.columns:
|
||||||
|
view.columns = sync_default_list_columns(view.doctype)
|
||||||
|
|
||||||
doc = frappe.new_doc("CRM View Settings")
|
doc = frappe.new_doc("CRM View Settings")
|
||||||
doc.name = view.label
|
doc.name = view.label
|
||||||
doc.label = view.label
|
doc.label = view.label
|
||||||
@ -90,3 +93,57 @@ def sync_default_list_rows(doctype):
|
|||||||
rows = list.default_list_data().get("rows")
|
rows = list.default_list_data().get("rows")
|
||||||
|
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
|
def sync_default_list_columns(doctype):
|
||||||
|
list = get_controller(doctype)
|
||||||
|
columns = []
|
||||||
|
|
||||||
|
if hasattr(list, "default_list_data"):
|
||||||
|
columns = list.default_list_data().get("columns")
|
||||||
|
|
||||||
|
return columns
|
||||||
|
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def create_or_update_default_view(view):
|
||||||
|
view = frappe._dict(view)
|
||||||
|
|
||||||
|
filters = parse_json(view.filters) or {}
|
||||||
|
columns = parse_json(view.columns or '[]')
|
||||||
|
rows = parse_json(view.rows or '[]')
|
||||||
|
|
||||||
|
default_rows = sync_default_list_rows(view.doctype)
|
||||||
|
rows = rows + default_rows if default_rows else rows
|
||||||
|
rows = remove_duplicates(rows)
|
||||||
|
|
||||||
|
if not columns:
|
||||||
|
columns = sync_default_list_columns(view.doctype)
|
||||||
|
|
||||||
|
doc = frappe.db.exists(
|
||||||
|
"CRM View Settings",
|
||||||
|
{"dt": view.doctype, "is_default": True, "user": frappe.session.user},
|
||||||
|
)
|
||||||
|
if doc:
|
||||||
|
doc = frappe.get_doc("CRM View Settings", doc)
|
||||||
|
doc.label = view.label
|
||||||
|
doc.route_name = view.route_name or ""
|
||||||
|
doc.load_default_columns = view.load_default_columns or False
|
||||||
|
doc.filters = json.dumps(filters)
|
||||||
|
doc.order_by = view.order_by
|
||||||
|
doc.columns = json.dumps(columns)
|
||||||
|
doc.rows = json.dumps(rows)
|
||||||
|
doc.save()
|
||||||
|
else:
|
||||||
|
doc = frappe.new_doc("CRM View Settings")
|
||||||
|
doc.name = view.label or 'List View'
|
||||||
|
doc.label = view.label or 'List View'
|
||||||
|
doc.dt = view.doctype
|
||||||
|
doc.user = frappe.session.user
|
||||||
|
doc.route_name = view.route_name or ""
|
||||||
|
doc.load_default_columns = view.load_default_columns or False
|
||||||
|
doc.filters = json.dumps(filters)
|
||||||
|
doc.order_by = view.order_by
|
||||||
|
doc.columns = json.dumps(columns)
|
||||||
|
doc.rows = json.dumps(rows)
|
||||||
|
doc.is_default = True
|
||||||
|
doc.insert()
|
||||||
@ -26,14 +26,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<div
|
<div
|
||||||
v-if="viewUpdated && (!view.public || isManager())"
|
v-if="viewUpdated && route.query.view && (!view.public || isManager())"
|
||||||
class="flex items-center gap-2 border-r pr-2"
|
class="flex items-center gap-2 border-r pr-2"
|
||||||
>
|
>
|
||||||
<Button label="Cancel" @click="cancelChanges" />
|
<Button label="Cancel" @click="cancelChanges" />
|
||||||
<Button
|
<Button label="Save Changes" @click="saveView" />
|
||||||
:label="view?.name ? 'Save Changes' : 'Create View'"
|
|
||||||
@click="saveView"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<Filter
|
<Filter
|
||||||
@ -154,7 +151,7 @@ watch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
function getParams() {
|
function getParams() {
|
||||||
let _view = getView(route.query.view)
|
let _view = getView(route.query.view, props.doctype)
|
||||||
const filters = (_view?.filters && JSON.parse(_view.filters)) || {}
|
const filters = (_view?.filters && JSON.parse(_view.filters)) || {}
|
||||||
const order_by = _view?.order_by || 'modified desc'
|
const order_by = _view?.order_by || 'modified desc'
|
||||||
const columns = _view?.columns || ''
|
const columns = _view?.columns || ''
|
||||||
@ -266,7 +263,9 @@ const viewsDropdownOptions = computed(() => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
let publicViews = list.value.data.views.filter((v) => v.public)
|
let publicViews = list.value.data.views.filter((v) => v.public)
|
||||||
let savedViews = list.value.data.views.filter((v) => !v.pinned && !v.public)
|
let savedViews = list.value.data.views.filter(
|
||||||
|
(v) => !v.pinned && !v.public && !v.is_default
|
||||||
|
)
|
||||||
let pinnedViews = list.value.data.views.filter((v) => v.pinned)
|
let pinnedViews = list.value.data.views.filter((v) => v.pinned)
|
||||||
|
|
||||||
publicViews.length &&
|
publicViews.length &&
|
||||||
@ -299,6 +298,10 @@ function updateFilter(filters) {
|
|||||||
list.value.params.filters = filters
|
list.value.params.filters = filters
|
||||||
view.value.filters = filters
|
view.value.filters = filters
|
||||||
list.value.reload()
|
list.value.reload()
|
||||||
|
|
||||||
|
if (!route.query.view) {
|
||||||
|
create_or_update_default_view()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateSort(order_by) {
|
function updateSort(order_by) {
|
||||||
@ -310,6 +313,10 @@ function updateSort(order_by) {
|
|||||||
list.value.params.order_by = order_by
|
list.value.params.order_by = order_by
|
||||||
view.value.order_by = order_by
|
view.value.order_by = order_by
|
||||||
list.value.reload()
|
list.value.reload()
|
||||||
|
|
||||||
|
if (!route.query.view) {
|
||||||
|
create_or_update_default_view()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateColumns(obj) {
|
function updateColumns(obj) {
|
||||||
@ -329,6 +336,21 @@ function updateColumns(obj) {
|
|||||||
list.value.reload()
|
list.value.reload()
|
||||||
}
|
}
|
||||||
viewUpdated.value = true
|
viewUpdated.value = true
|
||||||
|
|
||||||
|
if (!route.query.view) {
|
||||||
|
create_or_update_default_view()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_or_update_default_view() {
|
||||||
|
if (route.query.view) return
|
||||||
|
view.value.doctype = props.doctype
|
||||||
|
call(
|
||||||
|
'crm.fcrm.doctype.crm_view_settings.crm_view_settings.create_or_update_default_view',
|
||||||
|
{
|
||||||
|
view: view.value,
|
||||||
|
}
|
||||||
|
).then(() => reloadView())
|
||||||
}
|
}
|
||||||
|
|
||||||
function updatePageLength(value, loadMore = false) {
|
function updatePageLength(value, loadMore = false) {
|
||||||
|
|||||||
@ -6,6 +6,7 @@ export const viewsStore = defineStore('crm-views', (doctype) => {
|
|||||||
let viewsByName = reactive({})
|
let viewsByName = reactive({})
|
||||||
let pinnedViews = ref([])
|
let pinnedViews = ref([])
|
||||||
let publicViews = ref([])
|
let publicViews = ref([])
|
||||||
|
let defaultView = ref({})
|
||||||
|
|
||||||
// Views
|
// Views
|
||||||
const views = createResource({
|
const views = createResource({
|
||||||
@ -25,13 +26,18 @@ export const viewsStore = defineStore('crm-views', (doctype) => {
|
|||||||
if (view.public) {
|
if (view.public) {
|
||||||
publicViews.value?.push(view)
|
publicViews.value?.push(view)
|
||||||
}
|
}
|
||||||
|
if (view.is_default && view.dt) {
|
||||||
|
defaultView.value[view.dt] = view
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return views
|
return views
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
function getView(view) {
|
function getView(view, doctype = null) {
|
||||||
if (!view) return null
|
if (!view && doctype) {
|
||||||
|
return defaultView.value?.[doctype] || null
|
||||||
|
}
|
||||||
return viewsByName[view]
|
return viewsByName[view]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,6 +57,7 @@ export const viewsStore = defineStore('crm-views', (doctype) => {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
views,
|
views,
|
||||||
|
defaultView,
|
||||||
getPinnedViews,
|
getPinnedViews,
|
||||||
getPublicViews,
|
getPublicViews,
|
||||||
reload,
|
reload,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user