mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-01-15 21:18:41 +00:00
164 lines
4.4 KiB
JavaScript
164 lines
4.4 KiB
JavaScript
import DataSyncService from '@baserow/modules/database/services/dataSync'
|
|
import error from '@baserow/modules/core/mixins/error'
|
|
import jobProgress from '@baserow/modules/core/mixins/jobProgress'
|
|
import { ResponseErrorMessage } from '@baserow/modules/core/plugins/clientHandler'
|
|
|
|
export default {
|
|
mixins: [error, jobProgress],
|
|
data() {
|
|
return {
|
|
loadingProperties: false,
|
|
loadedProperties: false,
|
|
properties: null,
|
|
syncedProperties: [],
|
|
updateLoading: false,
|
|
}
|
|
},
|
|
beforeDestroy() {
|
|
this.stopPollIfRunning()
|
|
},
|
|
computed: {
|
|
orderedProperties() {
|
|
if (!this.properties) {
|
|
return []
|
|
}
|
|
|
|
// Show the properties where `initially_selected == True` first.
|
|
return this.properties
|
|
.slice()
|
|
.sort((a, b) =>
|
|
a.initially_selected === b.initially_selected
|
|
? 0
|
|
: a.initially_selected
|
|
? -1
|
|
: 1
|
|
)
|
|
},
|
|
},
|
|
methods: {
|
|
toggleVisibleField(key) {
|
|
const index = this.syncedProperties.findIndex((f) => key === f)
|
|
if (index > -1) {
|
|
this.syncedProperties.splice(index, 1)
|
|
} else {
|
|
this.syncedProperties.push(key)
|
|
}
|
|
},
|
|
getFieldTypeIconClass(fieldType) {
|
|
return this.$registry.get('field', fieldType).getIconClass()
|
|
},
|
|
async fetchExistingProperties(table) {
|
|
this.loadingProperties = true
|
|
|
|
try {
|
|
const { data } = await DataSyncService(
|
|
this.$client
|
|
).fetchPropertiesOfDataSync(table.data_sync.id)
|
|
this.loadedProperties = true
|
|
this.properties = data
|
|
} catch (error) {
|
|
if (error.handler && error.handler.code === 'ERROR_SYNC_ERROR') {
|
|
this.showError(
|
|
this.$t('dataSyncType.syncError'),
|
|
error.handler.detail
|
|
)
|
|
error.handler.handled()
|
|
return
|
|
}
|
|
this.handleError(error)
|
|
} finally {
|
|
this.loadingProperties = false
|
|
}
|
|
},
|
|
async fetchNonExistingProperties(type, values) {
|
|
values.type = type
|
|
|
|
this.loadingProperties = true
|
|
this.hideError()
|
|
|
|
try {
|
|
const { data } = await DataSyncService(this.$client).fetchProperties(
|
|
values
|
|
)
|
|
this.loadedProperties = true
|
|
this.properties = data
|
|
this.syncedProperties = data
|
|
.filter((p) => p.initially_selected)
|
|
.map((p) => p.key)
|
|
} catch (error) {
|
|
if (error.handler && error.handler.code === 'ERROR_SYNC_ERROR') {
|
|
this.showError(
|
|
this.$t('dataSyncType.syncError'),
|
|
error.handler.detail
|
|
)
|
|
error.handler.handled()
|
|
return
|
|
}
|
|
this.handleError(error)
|
|
} finally {
|
|
this.loadingProperties = false
|
|
}
|
|
},
|
|
async syncTable(table) {
|
|
if (this.jobIsRunning) {
|
|
return
|
|
}
|
|
|
|
this.hideError()
|
|
this.job = null
|
|
|
|
try {
|
|
const { data: job } = await DataSyncService(this.$client).syncTable(
|
|
table.data_sync.id
|
|
)
|
|
this.startJobPoller(job)
|
|
} catch (error) {
|
|
this.handleError(error)
|
|
}
|
|
},
|
|
async update(table, values, syncTable = true) {
|
|
this.updateLoading = true
|
|
|
|
try {
|
|
const { data } = await DataSyncService(this.$client).update(
|
|
this.table.data_sync.id,
|
|
values
|
|
)
|
|
await this.$store.dispatch('table/forceUpdate', {
|
|
database: this.database,
|
|
table: this.table,
|
|
values: { data_sync: data },
|
|
})
|
|
if (syncTable) {
|
|
await this.syncTable(this.table)
|
|
}
|
|
} catch (error) {
|
|
if (error.handler && error.handler.code === 'ERROR_SYNC_ERROR') {
|
|
this.showError(
|
|
this.$t('dataSyncType.syncError'),
|
|
error.handler.detail
|
|
)
|
|
error.handler.handled()
|
|
return
|
|
}
|
|
this.handleError(error)
|
|
} finally {
|
|
this.updateLoading = false
|
|
}
|
|
},
|
|
onJobFailed() {
|
|
const error = new ResponseErrorMessage(
|
|
this.$t('createDataSync.error'),
|
|
this.job.human_readable_error
|
|
)
|
|
this.stopPollAndHandleError(error)
|
|
},
|
|
onJobPollingError(error) {
|
|
this.stopPollAndHandleError(error)
|
|
},
|
|
stopPollAndHandleError(error) {
|
|
this.stopPollIfRunning()
|
|
error.handler ? this.handleError(error) : this.showError(error)
|
|
},
|
|
},
|
|
}
|