1
0
forked from test/crm

fix: implement view type in view controls component

This commit is contained in:
Shariq Ansari 2024-06-01 14:02:33 +05:30
parent cf693244b7
commit 6dd1ad9678
2 changed files with 31 additions and 18 deletions

View File

@ -159,12 +159,15 @@ def get_list_data(
page_length_count=20, page_length_count=20,
columns=None, columns=None,
rows=None, rows=None,
custom_view_name=None, view=None,
default_filters=None, default_filters=None,
): ):
custom_view = False custom_view = False
filters = frappe._dict(filters) filters = frappe._dict(filters)
custom_view_name = view.get('custom_view_name') if view else None
view_type = view.get('view_type') if view else None
for key in filters: for key in filters:
value = filters[key] value = filters[key]
if isinstance(value, list): if isinstance(value, list):
@ -197,8 +200,8 @@ def get_list_data(
if not rows: if not rows:
rows = ["name"] rows = ["name"]
if not custom_view and frappe.db.exists("CRM View Settings", doctype): if not custom_view and frappe.db.exists("CRM View Settings", {"dt": doctype, "type": view_type}):
list_view_settings = frappe.get_doc("CRM View Settings", doctype) list_view_settings = frappe.get_doc("CRM View Settings", {"dt": doctype, "type": view_type})
columns = frappe.parse_json(list_view_settings.columns) columns = frappe.parse_json(list_view_settings.columns)
rows = frappe.parse_json(list_view_settings.rows) rows = frappe.parse_json(list_view_settings.rows)
is_default = False is_default = False

View File

@ -355,7 +355,7 @@ function getViewType() {
} }
const currentView = computed(() => { const currentView = computed(() => {
let _view = getView(route.query.view) let _view = getView(route.query.view, currentViewType.value)
return { return {
label: label:
_view?.label || props.options?.defaultViewName || getViewType().label, _view?.label || props.options?.defaultViewName || getViewType().label,
@ -366,6 +366,7 @@ const currentView = computed(() => {
const view = ref({ const view = ref({
name: '', name: '',
label: '', label: '',
type: 'list',
icon: '', icon: '',
filters: {}, filters: {},
order_by: 'modified desc', order_by: 'modified desc',
@ -395,7 +396,7 @@ watch(updatedPageCount, (value) => {
}) })
function getParams() { function getParams() {
let _view = getView(route.query.view, props.doctype) let _view = getView(route.query.view, currentViewType.value, 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 || ''
@ -405,6 +406,7 @@ function getParams() {
view.value = { view.value = {
name: _view.name, name: _view.name,
label: _view.label, label: _view.label,
type: _view.type || 'list',
icon: _view.icon, icon: _view.icon,
filters: _view.filters, filters: _view.filters,
order_by: _view.order_by, order_by: _view.order_by,
@ -419,6 +421,7 @@ function getParams() {
view.value = { view.value = {
name: '', name: '',
label: '', label: '',
type: currentViewType.value || 'list',
icon: '', icon: '',
filters: {}, filters: {},
order_by: 'modified desc', order_by: 'modified desc',
@ -439,7 +442,10 @@ function getParams() {
rows: rows, rows: rows,
page_length: pageLength.value, page_length: pageLength.value,
page_length_count: pageLengthCount.value, page_length_count: pageLengthCount.value,
custom_view_name: _view?.name || '', view: {
custom_view_name: _view?.name || '',
view_type: _view?.type || currentViewType.value || 'list',
},
default_filters: props.filters, default_filters: props.filters,
} }
} }
@ -455,7 +461,7 @@ list.value = createResource({
} }
}, },
onSuccess(data) { onSuccess(data) {
let cv = getView(route.query.view) let cv = getView(route.query.view, currentViewType.value)
let params = list.value.params ? list.value.params : getParams() let params = list.value.params ? list.value.params : getParams()
defaultParams.value = { defaultParams.value = {
doctype: props.doctype, doctype: props.doctype,
@ -465,7 +471,10 @@ list.value = createResource({
page_length_count: params.page_length_count, page_length_count: params.page_length_count,
columns: data.columns, columns: data.columns,
rows: data.rows, rows: data.rows,
custom_view_name: cv?.name || '', view: {
custom_view_name: cv?.name || '',
view_type: cv?.type || currentViewType.value || 'list',
},
default_filters: props.filters, default_filters: props.filters,
} }
}, },
@ -696,6 +705,7 @@ function create_or_update_default_view() {
reloadView() reloadView()
view.value = { view.value = {
label: view.value.label, label: view.value.label,
type: view.value.type || 'list',
icon: view.value.icon, icon: view.value.icon,
name: view.value.name, name: view.value.name,
filters: defaultParams.value.filters, filters: defaultParams.value.filters,
@ -803,7 +813,9 @@ const viewActions = computed(() => {
const viewModalObj = ref({}) const viewModalObj = ref({})
function duplicateView() { function duplicateView() {
let label = __(getView(route.query.view)?.label) || __('List View') let label =
__(getView(route.query.view, currentViewType.type)?.label) ||
__('List View')
view.value.name = '' view.value.name = ''
view.value.label = label + __(' (New)') view.value.label = label + __(' (New)')
viewModalObj.value = view.value viewModalObj.value = view.value
@ -811,7 +823,7 @@ function duplicateView() {
} }
function editView() { function editView() {
let cView = getView(route.query.view) let cView = getView(route.query.view, currentViewType.type)
view.value.name = route.query.view view.value.name = route.query.view
view.value.label = __(cView?.label) || __('List View') view.value.label = __(cView?.label) || __('List View')
view.value.icon = cView?.icon || '' view.value.icon = cView?.icon || ''
@ -857,6 +869,7 @@ function cancelChanges() {
function saveView() { function saveView() {
view.value = { view.value = {
label: view.value.label, label: view.value.label,
type: view.value.type || 'list',
icon: view.value.icon, icon: view.value.icon,
name: view.value.name, name: view.value.name,
filters: defaultParams.value.filters, filters: defaultParams.value.filters,
@ -925,7 +938,7 @@ defineExpose({ applyFilter, applyLikeFilter, likeDoc })
// Watchers // Watchers
watch( watch(
() => getView(route.query.view), () => getView(route.query.view, currentViewType.value),
(value, old_value) => { (value, old_value) => {
if (JSON.stringify(value) === JSON.stringify(old_value)) return if (JSON.stringify(value) === JSON.stringify(old_value)) return
reload() reload()
@ -933,11 +946,8 @@ watch(
{ deep: true } { deep: true }
) )
watch( watch([() => route, () => route.params.viewType], (value, old_value) => {
() => route, if (value[0] === old_value[0] && value[1] === value[0]) return
(value, old_value) => { reload()
if (value === old_value) return })
reload()
}
)
</script> </script>