mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-06 14:05:28 +00:00
141 lines
3.8 KiB
JavaScript
141 lines
3.8 KiB
JavaScript
import RuntimeFormulaContext from '@baserow/modules/core/runtimeFormulaContext'
|
|
import { resolveFormula } from '@baserow/modules/core/formula'
|
|
import {
|
|
ClickEvent,
|
|
SubmitEvent,
|
|
AfterLoginEvent,
|
|
} from '@baserow/modules/builder/eventTypes'
|
|
import { resolveColor } from '@baserow/modules/core/utils/colors'
|
|
import { themeToColorVariables } from '@baserow/modules/builder/utils/theme'
|
|
|
|
export default {
|
|
inject: ['workspace', 'builder', 'page', 'mode', 'applicationContext'],
|
|
provide() {
|
|
return {
|
|
applicationContext: {
|
|
...this.applicationContext,
|
|
element: this.element,
|
|
...this.applicationContextAdditions,
|
|
},
|
|
}
|
|
},
|
|
props: {
|
|
element: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
applicationContextAdditions: {
|
|
type: Object,
|
|
required: false,
|
|
default: null,
|
|
},
|
|
},
|
|
computed: {
|
|
workflowActionsInProgress() {
|
|
const workflowActions = this.$store.getters[
|
|
'workflowAction/getElementWorkflowActions'
|
|
](this.page, this.element.id)
|
|
return workflowActions.some((workflowAction) =>
|
|
this.$store.getters['workflowAction/getDispatching'](workflowAction)
|
|
)
|
|
},
|
|
elementType() {
|
|
return this.$registry.get('element', this.element.type)
|
|
},
|
|
isEditMode() {
|
|
return this.mode === 'editing'
|
|
},
|
|
runtimeFormulaContext() {
|
|
/**
|
|
* This proxy allow the RuntimeFormulaContextClass to act like a regular object.
|
|
*/
|
|
return new Proxy(
|
|
new RuntimeFormulaContext(
|
|
this.$registry.getAll('builderDataProvider'),
|
|
this.applicationContext
|
|
),
|
|
{
|
|
get(target, prop) {
|
|
return target.get(prop)
|
|
},
|
|
}
|
|
)
|
|
},
|
|
formulaFunctions() {
|
|
return {
|
|
get: (name) => {
|
|
return this.$registry.get('runtimeFormulaFunction', name)
|
|
},
|
|
}
|
|
},
|
|
colorVariables() {
|
|
return themeToColorVariables(this.builder.theme)
|
|
},
|
|
},
|
|
methods: {
|
|
resolveFormula(formula, formulaContext = null) {
|
|
try {
|
|
return resolveFormula(
|
|
formula,
|
|
this.formulaFunctions,
|
|
formulaContext || this.runtimeFormulaContext
|
|
)
|
|
} catch (e) {
|
|
return ''
|
|
}
|
|
},
|
|
async fireEvent(EventType) {
|
|
if (this.mode !== 'editing') {
|
|
if (this.workflowActionsInProgress) {
|
|
return false
|
|
}
|
|
|
|
const workflowActions = this.$store.getters[
|
|
'workflowAction/getElementWorkflowActions'
|
|
](this.page, this.element.id)
|
|
|
|
try {
|
|
await new EventType({
|
|
i18n: this.$i18n,
|
|
store: this.$store,
|
|
registry: this.$registry,
|
|
}).fire({
|
|
workflowActions,
|
|
resolveFormula: this.resolveFormula,
|
|
applicationContext: this.applicationContext,
|
|
})
|
|
} catch (e) {
|
|
let toastTitle = this.$i18n.t(
|
|
'dispatchWorkflowActionError.defaultTitle'
|
|
)
|
|
let toastMessage = this.$i18n.t(
|
|
'dispatchWorkflowActionError.defaultMessage'
|
|
)
|
|
if (e.error !== 'ERROR_WORKFLOW_ACTION_FORM_DATA_INVALID') {
|
|
toastTitle = this.$i18n.t(
|
|
'dispatchWorkflowActionError.formDataInvalidTitle'
|
|
)
|
|
toastMessage = this.$i18n.t(
|
|
'dispatchWorkflowActionError.formDataInvalidMessage'
|
|
)
|
|
}
|
|
return this.$store.dispatch('toast/error', {
|
|
title: toastTitle,
|
|
message: toastMessage,
|
|
})
|
|
}
|
|
}
|
|
},
|
|
fireClickEvent() {
|
|
return this.fireEvent(ClickEvent)
|
|
},
|
|
fireSubmitEvent() {
|
|
this.fireEvent(SubmitEvent)
|
|
},
|
|
fireAfterLoginEvent() {
|
|
this.fireEvent(AfterLoginEvent)
|
|
},
|
|
|
|
resolveColor,
|
|
},
|
|
}
|