feat: render, update and save group by field value on change of group by field
This commit is contained in:
parent
5248fc51e4
commit
046d30a63f
@ -35,6 +35,7 @@ def create(view):
|
|||||||
doc.load_default_columns = view.load_default_columns or False
|
doc.load_default_columns = view.load_default_columns or False
|
||||||
doc.filters = json.dumps(view.filters)
|
doc.filters = json.dumps(view.filters)
|
||||||
doc.order_by = view.order_by
|
doc.order_by = view.order_by
|
||||||
|
doc.group_by_field = view.group_by_field
|
||||||
doc.columns = json.dumps(view.columns)
|
doc.columns = json.dumps(view.columns)
|
||||||
doc.rows = json.dumps(view.rows)
|
doc.rows = json.dumps(view.rows)
|
||||||
doc.insert()
|
doc.insert()
|
||||||
@ -60,6 +61,7 @@ def update(view):
|
|||||||
doc.load_default_columns = view.load_default_columns or False
|
doc.load_default_columns = view.load_default_columns or False
|
||||||
doc.filters = json.dumps(filters)
|
doc.filters = json.dumps(filters)
|
||||||
doc.order_by = view.order_by
|
doc.order_by = view.order_by
|
||||||
|
doc.group_by_field = view.group_by_field
|
||||||
doc.columns = json.dumps(columns)
|
doc.columns = json.dumps(columns)
|
||||||
doc.rows = json.dumps(rows)
|
doc.rows = json.dumps(rows)
|
||||||
doc.save()
|
doc.save()
|
||||||
@ -139,6 +141,7 @@ def create_or_update_default_view(view):
|
|||||||
doc.load_default_columns = view.load_default_columns or False
|
doc.load_default_columns = view.load_default_columns or False
|
||||||
doc.filters = json.dumps(filters)
|
doc.filters = json.dumps(filters)
|
||||||
doc.order_by = view.order_by
|
doc.order_by = view.order_by
|
||||||
|
doc.group_by_field = view.group_by_field
|
||||||
doc.columns = json.dumps(columns)
|
doc.columns = json.dumps(columns)
|
||||||
doc.rows = json.dumps(rows)
|
doc.rows = json.dumps(rows)
|
||||||
doc.save()
|
doc.save()
|
||||||
@ -154,6 +157,7 @@ def create_or_update_default_view(view):
|
|||||||
doc.load_default_columns = view.load_default_columns or False
|
doc.load_default_columns = view.load_default_columns or False
|
||||||
doc.filters = json.dumps(filters)
|
doc.filters = json.dumps(filters)
|
||||||
doc.order_by = view.order_by
|
doc.order_by = view.order_by
|
||||||
|
doc.group_by_field = view.group_by_field
|
||||||
doc.columns = json.dumps(columns)
|
doc.columns = json.dumps(columns)
|
||||||
doc.rows = json.dumps(rows)
|
doc.rows = json.dumps(rows)
|
||||||
doc.is_default = True
|
doc.is_default = True
|
||||||
|
|||||||
@ -1,7 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<Dropdown :options="options">
|
<Autocomplete :options="options" value="" @change="(e) => setGroupBy(e)">
|
||||||
<template #default="{ open }">
|
<template #target="{ togglePopover }">
|
||||||
<Button :label="hideLabel ? __('Status') : __('Group By: Status')">
|
<Button
|
||||||
|
:label="
|
||||||
|
hideLabel
|
||||||
|
? groupByValue?.label
|
||||||
|
: __('Group By: ') + groupByValue?.label
|
||||||
|
"
|
||||||
|
@click="togglePopover()"
|
||||||
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<DetailsIcon />
|
<DetailsIcon />
|
||||||
</template>
|
</template>
|
||||||
@ -13,12 +20,13 @@
|
|||||||
</template>
|
</template>
|
||||||
</Button>
|
</Button>
|
||||||
</template>
|
</template>
|
||||||
</Dropdown>
|
</Autocomplete>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import Autocomplete from '@/components/frappe-ui/Autocomplete.vue'
|
||||||
import DetailsIcon from '@/components/icons/DetailsIcon.vue'
|
import DetailsIcon from '@/components/icons/DetailsIcon.vue'
|
||||||
import { Dropdown } from 'frappe-ui'
|
import { createResource } from 'frappe-ui'
|
||||||
import { ref } from 'vue'
|
import { ref, computed, onMounted, nextTick } from 'vue'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
doctype: {
|
doctype: {
|
||||||
@ -31,14 +39,39 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const emit = defineEmits(['update'])
|
||||||
|
|
||||||
const list = defineModel()
|
const list = defineModel()
|
||||||
|
|
||||||
const selected = ref('Status')
|
const groupByValue = ref({
|
||||||
|
label: 'Owner',
|
||||||
|
value: 'owner',
|
||||||
|
})
|
||||||
|
|
||||||
const options = ref([
|
const groupByOptions = createResource({
|
||||||
{ label: 'Status', value: 'status' },
|
url: 'crm.api.doc.get_group_by_fields',
|
||||||
{ label: 'Source', value: 'source' },
|
cache: ['groupByOptions', props.doctype],
|
||||||
{ label: 'Owner', value: 'owner' },
|
params: {
|
||||||
{ label: 'Created At', value: 'created_at' },
|
doctype: props.doctype,
|
||||||
])
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
if (groupByOptions.data?.length) return
|
||||||
|
groupByOptions.fetch()
|
||||||
|
})
|
||||||
|
|
||||||
|
function setGroupBy(data) {
|
||||||
|
groupByValue.value = data
|
||||||
|
nextTick(() => emit('update', data.value))
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = computed(() => {
|
||||||
|
if (!groupByOptions.data) return []
|
||||||
|
if (!list.value?.data?.group_by_field) return groupByOptions.data
|
||||||
|
groupByValue.value = list.value.data.group_by_field
|
||||||
|
return groupByOptions.data.filter(
|
||||||
|
(option) => option !== groupByValue.value.value
|
||||||
|
)
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -415,6 +415,7 @@ function getParams() {
|
|||||||
icon: _view.icon,
|
icon: _view.icon,
|
||||||
filters: _view.filters,
|
filters: _view.filters,
|
||||||
order_by: _view.order_by,
|
order_by: _view.order_by,
|
||||||
|
group_by_field: _view.group_by_field,
|
||||||
columns: _view.columns,
|
columns: _view.columns,
|
||||||
rows: _view.rows,
|
rows: _view.rows,
|
||||||
route_name: _view.route_name,
|
route_name: _view.route_name,
|
||||||
@ -430,6 +431,7 @@ function getParams() {
|
|||||||
icon: '',
|
icon: '',
|
||||||
filters: {},
|
filters: {},
|
||||||
order_by: 'modified desc',
|
order_by: 'modified desc',
|
||||||
|
group_by_field: 'owner',
|
||||||
columns: '',
|
columns: '',
|
||||||
rows: '',
|
rows: '',
|
||||||
route_name: route.name,
|
route_name: route.name,
|
||||||
@ -676,6 +678,21 @@ function updateSort(order_by) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateGroupBy(group_by_field) {
|
||||||
|
viewUpdated.value = true
|
||||||
|
if (!defaultParams.value) {
|
||||||
|
defaultParams.value = getParams()
|
||||||
|
}
|
||||||
|
list.value.params = defaultParams.value
|
||||||
|
list.value.params.view.group_by_field = group_by_field
|
||||||
|
view.value.group_by_field = group_by_field
|
||||||
|
list.value.reload()
|
||||||
|
|
||||||
|
if (!route.query.view) {
|
||||||
|
create_or_update_default_view()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function updateColumns(obj) {
|
function updateColumns(obj) {
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
obj = {
|
obj = {
|
||||||
@ -727,6 +744,7 @@ function create_or_update_default_view() {
|
|||||||
name: view.value.name,
|
name: view.value.name,
|
||||||
filters: defaultParams.value.filters,
|
filters: defaultParams.value.filters,
|
||||||
order_by: defaultParams.value.order_by,
|
order_by: defaultParams.value.order_by,
|
||||||
|
group_by_field: defaultParams.value.view.group_by_field,
|
||||||
columns: defaultParams.value.columns,
|
columns: defaultParams.value.columns,
|
||||||
rows: defaultParams.value.rows,
|
rows: defaultParams.value.rows,
|
||||||
route_name: route.name,
|
route_name: route.name,
|
||||||
@ -891,6 +909,7 @@ function saveView() {
|
|||||||
name: view.value.name,
|
name: view.value.name,
|
||||||
filters: defaultParams.value.filters,
|
filters: defaultParams.value.filters,
|
||||||
order_by: defaultParams.value.order_by,
|
order_by: defaultParams.value.order_by,
|
||||||
|
group_by_field: defaultParams.value.view.group_by_field,
|
||||||
columns: defaultParams.value.columns,
|
columns: defaultParams.value.columns,
|
||||||
rows: defaultParams.value.rows,
|
rows: defaultParams.value.rows,
|
||||||
route_name: route.name,
|
route_name: route.name,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user