1
0
Fork 0
mirror of https://gitlab.com/bramw/baserow.git synced 2025-01-15 21:18:41 +00:00
bramw_baserow/web-frontend/modules/dashboard/components/DashboardContent.vue
2025-01-07 17:32:50 +00:00

135 lines
3.6 KiB
Vue

<template>
<div>
<div v-if="!isLoading">
<div class="layout__col-2-2 dashboard-app__layout">
<div
class="dashboard-app__layout-scrollable"
:style="{ width: `calc(100% - ${sidebarWidth}px)` }"
>
<div
class="dashboard-app__content"
:class="{ 'dashboard-app__content--small': isInTemplate }"
>
<DashboardContentHeader
:dashboard="dashboard"
:store-prefix="storePrefix"
/>
<EmptyDashboard
v-if="isEmpty"
:dashboard="dashboard"
@widget-type-selected="createWidget($event)"
/>
<template v-else>
<WidgetBoard :dashboard="dashboard" :store-prefix="storePrefix" />
<CreateWidgetButton
v-if="isEditMode && canCreateWidget"
:dashboard="dashboard"
:store-prefix="storePrefix"
@widget-type-selected="createWidget($event)"
/>
</template>
</div>
</div>
<DashboardSidebar
v-if="isEditMode"
:dashboard="dashboard"
:store-prefix="storePrefix"
:style="{ width: `${sidebarWidth}px` }"
/>
</div>
</div>
</div>
</template>
<script>
import EmptyDashboard from '@baserow/modules/dashboard/components/EmptyDashboard'
import CreateWidgetButton from '@baserow/modules/dashboard/components/CreateWidgetButton'
import DashboardSidebar from '@baserow/modules/dashboard/components/DashboardSidebar'
import DashboardContentHeader from '@baserow/modules/dashboard/components/DashboardContentHeader'
import WidgetBoard from '@baserow/modules/dashboard/components/WidgetBoard'
import { notifyIf } from '@baserow/modules/core/utils/error'
export default {
name: 'DashboardContent',
components: {
EmptyDashboard,
CreateWidgetButton,
WidgetBoard,
DashboardContentHeader,
DashboardSidebar,
},
props: {
dashboard: {
type: Object,
required: true,
},
storePrefix: {
type: String,
required: false,
default: '',
},
},
data() {
return {
contentHeight: 0,
}
},
computed: {
sidebarWidth() {
if (this.isEditMode) {
return 352
}
return 0
},
isEditMode() {
return this.$store.getters[
`${this.storePrefix}dashboardApplication/isEditMode`
]
},
isEmpty() {
return this.$store.getters[
`${this.storePrefix}dashboardApplication/isEmpty`
]
},
isLoading() {
return this.$store.getters[
`${this.storePrefix}dashboardApplication/isLoading`
]
},
isInTemplate() {
return this.storePrefix === 'template/'
},
},
methods: {
toggleEditMode() {
return this.$store.dispatch(
`${this.storePrefix}dashboardApplication/toggleEditMode`
)
},
enterEditMode() {
return this.$store.dispatch(
`${this.storePrefix}dashboardApplication/enterEditMode`
)
},
canCreateWidget() {
return this.$hasPermission(
'dashboard.create_widget',
this.dashboard,
this.dashboard.workspace.id
)
},
async createWidget(widgetType) {
const typeFromRegistry = this.$registry.get('dashboardWidget', widgetType)
try {
await this.$store.dispatch('dashboardApplication/createWidget', {
dashboard: this.dashboard,
widget: { title: typeFromRegistry.name, type: widgetType },
})
this.enterEditMode()
} catch (error) {
notifyIf(error, 'dashboard')
}
},
},
}
</script>