2023-03-22 15:24:55 +00:00
|
|
|
<template>
|
|
|
|
<aside class="side-panels">
|
2024-05-06 08:07:25 +00:00
|
|
|
<Tabs :key="element?.id" full-height>
|
2023-03-22 15:24:55 +00:00
|
|
|
<Tab
|
|
|
|
v-for="pageSidePanelType in pageSidePanelTypes"
|
2023-09-12 07:19:53 +00:00
|
|
|
:key="pageSidePanelType.getType()"
|
2025-01-06 14:16:11 +00:00
|
|
|
:tooltip="getTooltipMessage(pageSidePanelType)"
|
|
|
|
:title="pageSidePanelType.label"
|
|
|
|
:append-icon="
|
|
|
|
pageSidePanelType.isInError(sidePanelContext)
|
|
|
|
? 'page-editor__side-panel--error iconoir-warning-circle'
|
2023-12-19 15:19:11 +00:00
|
|
|
: null
|
|
|
|
"
|
|
|
|
:disabled="!element || pageSidePanelType.isDeactivated(element)"
|
2023-03-22 15:24:55 +00:00
|
|
|
>
|
2024-05-02 14:25:42 +00:00
|
|
|
<ReadOnlyForm
|
2023-08-16 13:16:52 +00:00
|
|
|
v-if="element"
|
2024-05-02 14:25:42 +00:00
|
|
|
:read-only="
|
|
|
|
!$hasPermission(
|
|
|
|
'builder.page.element.update',
|
|
|
|
element,
|
|
|
|
workspace.id
|
|
|
|
)
|
|
|
|
"
|
|
|
|
>
|
|
|
|
<component
|
|
|
|
:is="pageSidePanelType.component"
|
|
|
|
class="side-panels__panel"
|
|
|
|
/>
|
|
|
|
</ReadOnlyForm>
|
2023-03-30 12:37:18 +00:00
|
|
|
<EmptySidePanelState v-else />
|
2023-03-22 15:24:55 +00:00
|
|
|
</Tab>
|
|
|
|
</Tabs>
|
|
|
|
</aside>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
2023-03-30 12:37:18 +00:00
|
|
|
import { mapGetters } from 'vuex'
|
|
|
|
import EmptySidePanelState from '@baserow/modules/builder/components/page/sidePanels/EmptySidePanelState'
|
|
|
|
|
2023-03-22 15:24:55 +00:00
|
|
|
export default {
|
|
|
|
name: 'PageSidePanels',
|
2023-03-30 12:37:18 +00:00
|
|
|
components: { EmptySidePanelState },
|
2025-01-06 14:16:11 +00:00
|
|
|
inject: ['workspace', 'builder'],
|
2023-03-22 15:24:55 +00:00
|
|
|
computed: {
|
2023-03-30 12:37:18 +00:00
|
|
|
...mapGetters({
|
2025-02-05 10:44:06 +01:00
|
|
|
getElementSelected: 'element/getSelected',
|
2023-03-30 12:37:18 +00:00
|
|
|
}),
|
2025-02-05 10:44:06 +01:00
|
|
|
element() {
|
|
|
|
return this.getElementSelected(this.builder)
|
|
|
|
},
|
2023-03-22 15:24:55 +00:00
|
|
|
pageSidePanelTypes() {
|
|
|
|
return this.$registry.getOrderedList('pageSidePanel')
|
|
|
|
},
|
2025-01-06 14:16:11 +00:00
|
|
|
sidePanelContext() {
|
2025-02-05 10:44:06 +01:00
|
|
|
if (!this.element) {
|
|
|
|
return { builder: this.builder }
|
|
|
|
}
|
|
|
|
const page = this.$store.getters['page/getById'](
|
|
|
|
this.builder,
|
|
|
|
this.element.page_id
|
|
|
|
)
|
2025-01-06 14:16:11 +00:00
|
|
|
return {
|
|
|
|
page,
|
|
|
|
builder: this.builder,
|
|
|
|
element: this.element,
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
getTooltipMessage(pageSidePanelType) {
|
|
|
|
if (this.element && pageSidePanelType.isDeactivated(this.element)) {
|
|
|
|
return pageSidePanelType.getDeactivatedText()
|
|
|
|
} else if (pageSidePanelType.isInError(this.sidePanelContext)) {
|
|
|
|
return pageSidePanelType.getInErrorText()
|
|
|
|
}
|
|
|
|
return null
|
|
|
|
},
|
2023-03-22 15:24:55 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
</script>
|