mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-01-15 21:18:41 +00:00
135 lines
3.6 KiB
Vue
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>
|