fix: change column color and save it
This commit is contained in:
parent
d5edfe27f8
commit
b9961b0ba0
@ -79,7 +79,9 @@ const fields = createResource({
|
||||
function apply() {
|
||||
nextTick(() => {
|
||||
showDialog.value = false
|
||||
emit('update', column_field.value)
|
||||
emit('update', {
|
||||
column_field: column_field.value.name,
|
||||
})
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -10,8 +10,40 @@
|
||||
class="flex flex-col gap-2.5 min-w-[268px] hover:bg-gray-100 rounded-lg p-2.5 transition-all duration-300 ease-in-out"
|
||||
>
|
||||
<div class="flex gap-2 items-center justify-between">
|
||||
<div class="flex gap-2 items-center text-base py-1.5">
|
||||
<IndicatorIcon :class="colorClasses(column.column.color)" />
|
||||
<div class="flex items-center text-base">
|
||||
<NestedPopover>
|
||||
<template #target>
|
||||
<Button variant="ghost" size="sm" class="hover:!bg-gray-100">
|
||||
<IndicatorIcon
|
||||
:class="colorClasses(column.column.color, true)"
|
||||
/>
|
||||
</Button>
|
||||
</template>
|
||||
<template #body="{ close }">
|
||||
<div
|
||||
class="flex flex-col gap-3 px-3 py-2.5 rounded-lg border border-gray-100 bg-white shadow-xl"
|
||||
>
|
||||
<div class="flex gap-1">
|
||||
<Button
|
||||
:class="colorClasses(color)"
|
||||
variant="ghost"
|
||||
v-for="color in colors"
|
||||
:key="color"
|
||||
@click="() => (column.column.color = color)"
|
||||
>
|
||||
<IndicatorIcon />
|
||||
</Button>
|
||||
</div>
|
||||
<div class="flex flex-row-reverse">
|
||||
<Button
|
||||
variant="solid"
|
||||
:label="__('Apply')"
|
||||
@click="updateColor"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</NestedPopover>
|
||||
<div>{{ column.column.name }}</div>
|
||||
</div>
|
||||
<div>
|
||||
@ -39,10 +71,13 @@
|
||||
</Draggable>
|
||||
</template>
|
||||
<script setup>
|
||||
import NestedPopover from '@/components/NestedPopover.vue'
|
||||
import IndicatorIcon from '@/components/Icons/IndicatorIcon.vue'
|
||||
import Draggable from 'vuedraggable'
|
||||
import { computed } from 'vue'
|
||||
|
||||
const emit = defineEmits(['update'])
|
||||
|
||||
const kanban = defineModel()
|
||||
|
||||
const columns = computed(() => {
|
||||
@ -59,14 +94,26 @@ const columns = computed(() => {
|
||||
return _columns
|
||||
})
|
||||
|
||||
function colorClasses(color) {
|
||||
function updateColor() {
|
||||
let _columns = []
|
||||
columns.value.forEach((col) => {
|
||||
_columns.push(col.column)
|
||||
})
|
||||
|
||||
emit('update', { columns: _columns })
|
||||
}
|
||||
|
||||
function colorClasses(color, onlyIcon = false) {
|
||||
let textColor = `!text-${color}-600`
|
||||
if (color == 'black') {
|
||||
textColor = '!text-gray-900'
|
||||
} else if (['gray', 'green'].includes(color)) {
|
||||
textColor = `!text-${color}-700`
|
||||
}
|
||||
return [textColor]
|
||||
|
||||
let bgColor = `!bg-${color}-100 hover:!bg-${color}-200 active:!bg-${color}-300`
|
||||
|
||||
return [textColor, onlyIcon ? '' : bgColor]
|
||||
}
|
||||
|
||||
const colors = [
|
||||
|
||||
@ -713,16 +713,18 @@ function updateColumns(obj) {
|
||||
}
|
||||
}
|
||||
|
||||
function updateKanbanSettings(column_field) {
|
||||
function updateKanbanSettings(data) {
|
||||
viewUpdated.value = true
|
||||
if (!defaultParams.value) {
|
||||
defaultParams.value = getParams()
|
||||
}
|
||||
list.value.params = defaultParams.value
|
||||
list.value.params.view.column_field = column_field.name
|
||||
list.value.params.view.columns = ''
|
||||
view.value.column_field = column_field.name
|
||||
view.value.columns = ''
|
||||
if (data.column_field) {
|
||||
list.value.params.view.column_field = data.column_field
|
||||
view.value.column_field = data.column_field
|
||||
}
|
||||
list.value.params.view.columns = data.columns ? data.columns : ''
|
||||
view.value.columns = data.columns ? data.columns : ''
|
||||
list.value.reload()
|
||||
|
||||
if (!route.query.view) {
|
||||
@ -976,7 +978,7 @@ function likeDoc({ name, liked }) {
|
||||
})
|
||||
}
|
||||
|
||||
defineExpose({ applyFilter, applyLikeFilter, likeDoc })
|
||||
defineExpose({ applyFilter, applyLikeFilter, likeDoc, updateKanbanSettings })
|
||||
|
||||
// Watchers
|
||||
watch(
|
||||
|
||||
@ -28,7 +28,11 @@
|
||||
allowedViews: ['list', 'group_by', 'kanban'],
|
||||
}"
|
||||
/>
|
||||
<KanbanView v-if="route.params.viewType == 'kanban'" v-model="deals" />
|
||||
<KanbanView
|
||||
v-if="route.params.viewType == 'kanban'"
|
||||
v-model="deals"
|
||||
@update="(data) => viewControls.updateKanbanSettings(data)"
|
||||
/>
|
||||
<DealsListView
|
||||
ref="dealsListView"
|
||||
v-else-if="deals.data && rows.length"
|
||||
|
||||
@ -29,7 +29,11 @@
|
||||
allowedViews: ['list', 'group_by', 'kanban'],
|
||||
}"
|
||||
/>
|
||||
<KanbanView v-if="route.params.viewType == 'kanban'" v-model="leads" />
|
||||
<KanbanView
|
||||
v-if="route.params.viewType == 'kanban'"
|
||||
v-model="leads"
|
||||
@update="(data) => viewControls.updateKanbanSettings(data)"
|
||||
/>
|
||||
<LeadsListView
|
||||
ref="leadsListView"
|
||||
v-else-if="leads.data && rows.length"
|
||||
|
||||
@ -24,7 +24,11 @@
|
||||
allowedViews: ['list', 'kanban'],
|
||||
}"
|
||||
/>
|
||||
<KanbanView v-if="$route.params.viewType == 'kanban'" v-model="tasks" />
|
||||
<KanbanView
|
||||
v-if="$route.params.viewType == 'kanban'"
|
||||
v-model="tasks"
|
||||
@update="(data) => viewControls.updateKanbanSettings(data)"
|
||||
/>
|
||||
<TasksListView
|
||||
ref="tasksListView"
|
||||
v-else-if="tasks.data && rows.length"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user