mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-03-14 20:52:51 +00:00
Use runtime config
This commit is contained in:
parent
eb4d82ee10
commit
0af095785c
46 changed files with 131 additions and 159 deletions
.editorconfigfilePreviewTypes.jspackage.json
changelog/entries/1.19.0/refactor
docs/technical
enterprise/web-frontend/modules/baserow_enterprise/components/admin/forms
web-frontend
modules
builder
core
database
components
docs/sections
APIDocsAuth.vueAPIDocsErrors.vueAPIDocsTableListFields.vueAPIDocsUploadFile.vueAPIDocsUploadFileViaURL.vue
field
table
view
pages
store
utils
test/helpers
|
@ -11,7 +11,7 @@ insert_final_newline = true
|
|||
[Makefile]
|
||||
indent_style = tab
|
||||
|
||||
[*.{js,yml,scss,eslintrc,stylelintrc,vue,html}]
|
||||
[*.{js,yml,scss,eslintrc,stylelintrc,vue,html,json}]
|
||||
indent_size = 2
|
||||
|
||||
[*.md]
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"type": "refactor",
|
||||
"message": "Use nuxt runtimeConfig instead of nuxt-env module",
|
||||
"issue_number": null,
|
||||
"bullet_points": [],
|
||||
"created_at": "2023-07-06"
|
||||
}
|
|
@ -112,7 +112,7 @@ are accepted.
|
|||
url is reachable with your browser.
|
||||
* `FROM_EMAIL` (default `no-reply@localhost`): The 'from' email address of the emails
|
||||
that the platform sends. Like when a user requests a password recovery.
|
||||
* `INITIAL_TABLE_DATA_LIMIT` (default `null`): Indicates the initial table data limit.
|
||||
* `INITIAL_TABLE_DATA_LIMIT` (default not set): Indicates the initial table data limit.
|
||||
If for example 100 is provided then it will not be possible to import a CSV file with
|
||||
more than 100 rows.
|
||||
* `REDIS_HOST` (default `redis`): The hostname of the Redis server.
|
||||
|
|
|
@ -139,9 +139,9 @@ export default {
|
|||
if (!this.authProvider.id) {
|
||||
const nextProviderId =
|
||||
this.$store.getters['authProviderAdmin/getNextProviderId']
|
||||
return `${this.$env.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/`
|
||||
return `${this.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/`
|
||||
}
|
||||
return `${this.$env.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${this.authProvider.id}/`
|
||||
return `${this.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${this.authProvider.id}/`
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
|
|
|
@ -118,9 +118,9 @@ export default {
|
|||
if (!this.authProvider.id) {
|
||||
const nextProviderId =
|
||||
this.$store.getters['authProviderAdmin/getNextProviderId']
|
||||
return `${this.$env.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/`
|
||||
return `${this.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/`
|
||||
}
|
||||
return `${this.$env.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${this.authProvider.id}/`
|
||||
return `${this.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${this.authProvider.id}/`
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
|
|
|
@ -136,9 +136,9 @@ export default {
|
|||
if (!this.authProvider.id) {
|
||||
const nextProviderId =
|
||||
this.$store.getters['authProviderAdmin/getNextProviderId']
|
||||
return `${this.$env.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/`
|
||||
return `${this.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/`
|
||||
}
|
||||
return `${this.$env.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${this.authProvider.id}/`
|
||||
return `${this.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${this.authProvider.id}/`
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
|
|
|
@ -159,7 +159,7 @@ export default {
|
|||
this.loading = false
|
||||
},
|
||||
getDomainUrl(domain) {
|
||||
const url = new URL(this.$env.PUBLIC_WEB_FRONTEND_URL)
|
||||
const url = new URL(this.$config.PUBLIC_WEB_FRONTEND_URL)
|
||||
return `${url.protocol}//${domain.domain_name}${
|
||||
url.port ? `:${url.port}` : ''
|
||||
}`
|
||||
|
|
|
@ -17,11 +17,19 @@ import {
|
|||
*/
|
||||
export function createRouter(ssrContext, config) {
|
||||
let isWebFrontendHostname = true
|
||||
|
||||
// On the server
|
||||
if (process.server && ssrContext && ssrContext.nuxt && ssrContext.req) {
|
||||
if (
|
||||
process.server &&
|
||||
ssrContext &&
|
||||
ssrContext.nuxt &&
|
||||
ssrContext.req &&
|
||||
ssrContext.runtimeConfig
|
||||
) {
|
||||
const req = ssrContext.req
|
||||
const frontendHostname = new URL(req.env.PUBLIC_WEB_FRONTEND_URL).hostname
|
||||
const runtimeConfig = ssrContext.runtimeConfig
|
||||
const frontendHostname = new URL(
|
||||
runtimeConfig.public.PUBLIC_WEB_FRONTEND_URL
|
||||
).hostname
|
||||
const requestHostname = new URL(`http://${req.headers.host}`).hostname
|
||||
isWebFrontendHostname = frontendHostname === requestHostname
|
||||
// Send the variable to the frontend using the `__NUXT__` property
|
||||
|
|
|
@ -46,7 +46,7 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
downloadXHR() {
|
||||
return this.$env.DOWNLOAD_FILE_VIA_XHR === '1'
|
||||
return this.$config.DOWNLOAD_FILE_VIA_XHR === '1'
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
|
|
|
@ -117,8 +117,8 @@ export default {
|
|||
}
|
||||
},
|
||||
async mounted() {
|
||||
if (!this.$env.BASEROW_DISABLE_PUBLIC_URL_CHECK) {
|
||||
const publicBackendUrl = new URL(this.$env.PUBLIC_BACKEND_URL)
|
||||
if (!this.$config.BASEROW_DISABLE_PUBLIC_URL_CHECK) {
|
||||
const publicBackendUrl = new URL(this.$config.PUBLIC_BACKEND_URL)
|
||||
if (publicBackendUrl.host !== window.location.host) {
|
||||
// If the host of the browser location does not match the PUBLIC_BACKEND_URL
|
||||
// then we are probably mis-configured.
|
||||
|
|
|
@ -92,7 +92,7 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
maxSnapshots() {
|
||||
return parseInt(this.$env.BASEROW_MAX_SNAPSHOTS_PER_GROUP)
|
||||
return parseInt(this.$config.BASEROW_MAX_SNAPSHOTS_PER_GROUP)
|
||||
},
|
||||
snapshotModalAlertComponents() {
|
||||
return Object.values(this.$registry.getAll('plugin'))
|
||||
|
|
|
@ -142,7 +142,7 @@ export default {
|
|||
}
|
||||
},
|
||||
trashDuration() {
|
||||
const hours = this.$env.HOURS_UNTIL_TRASH_PERMANENTLY_DELETED
|
||||
const hours = this.$config.HOURS_UNTIL_TRASH_PERMANENTLY_DELETED
|
||||
return moment().subtract(hours, 'hours').fromNow(true)
|
||||
},
|
||||
},
|
||||
|
|
|
@ -59,7 +59,7 @@ export default {
|
|||
try {
|
||||
// The public accept url is the page where the user can publicly navigate too,
|
||||
// to accept the workspace invitation.
|
||||
const acceptUrl = `${this.$env.PUBLIC_WEB_FRONTEND_URL}/workspace-invitation`
|
||||
const acceptUrl = `${this.$config.PUBLIC_WEB_FRONTEND_URL}/workspace-invitation`
|
||||
const { data } = await WorkspaceService(this.$client).sendInvitation(
|
||||
this.workspace.id,
|
||||
acceptUrl,
|
||||
|
|
|
@ -81,7 +81,7 @@ export default {
|
|||
}
|
||||
this.nextPollTimeout = Math.min(
|
||||
this.nextPollTimeout * 1.5,
|
||||
this.$env.BASEROW_FRONTEND_JOBS_POLLING_TIMEOUT_MS
|
||||
this.$config.BASEROW_FRONTEND_JOBS_POLLING_TIMEOUT_MS
|
||||
)
|
||||
this.pollTimeoutId = setTimeout(
|
||||
this.getLatestJobInfo,
|
||||
|
|
|
@ -55,88 +55,41 @@ export default function CoreModule(options) {
|
|||
|
||||
// The core depends on these modules.
|
||||
this.requireModule('cookie-universal-nuxt')
|
||||
this.requireModule([
|
||||
'nuxt-env',
|
||||
{
|
||||
keys: [
|
||||
{
|
||||
key: 'PRIVATE_BACKEND_URL',
|
||||
default: 'http://backend:8000',
|
||||
},
|
||||
{
|
||||
key: 'BASEROW_DISABLE_PUBLIC_URL_CHECK',
|
||||
default: false,
|
||||
},
|
||||
{
|
||||
key: 'PUBLIC_BACKEND_URL',
|
||||
default: 'http://localhost:8000',
|
||||
},
|
||||
{
|
||||
key: 'PUBLIC_WEB_FRONTEND_URL',
|
||||
default: 'http://localhost:3000',
|
||||
},
|
||||
{
|
||||
key: 'INITIAL_TABLE_DATA_LIMIT',
|
||||
default: null,
|
||||
},
|
||||
{
|
||||
// Set to `1` to force download links to download files via XHR query
|
||||
// to bypass `Content-Disposition: inline` that can't be overridden
|
||||
// in another way.
|
||||
// If your files are stored under another origin, you also
|
||||
// must add CORS headers to your server.
|
||||
key: 'DOWNLOAD_FILE_VIA_XHR',
|
||||
default: false,
|
||||
},
|
||||
{
|
||||
// If you change this default please also update the default for the
|
||||
// backend found in src/baserow/config/settings/base.py:321
|
||||
key: 'HOURS_UNTIL_TRASH_PERMANENTLY_DELETED',
|
||||
default: 24 * 3,
|
||||
},
|
||||
{
|
||||
key: 'DISABLE_ANONYMOUS_PUBLIC_VIEW_WS_CONNECTIONS',
|
||||
default: false,
|
||||
},
|
||||
{
|
||||
key: 'BASEROW_MAX_IMPORT_FILE_SIZE_MB',
|
||||
default: 512, // 512Mb
|
||||
},
|
||||
{
|
||||
key: 'FEATURE_FLAGS',
|
||||
default: '',
|
||||
},
|
||||
{
|
||||
key: 'BASEROW_DISABLE_GOOGLE_DOCS_FILE_PREVIEW',
|
||||
default: '',
|
||||
},
|
||||
{
|
||||
key: 'BASEROW_MAX_SNAPSHOTS_PER_GROUP',
|
||||
default: -1,
|
||||
},
|
||||
{
|
||||
key: 'BASEROW_FRONTEND_JOBS_POLLING_TIMEOUT_MS',
|
||||
default: 2000,
|
||||
},
|
||||
{
|
||||
key: 'BASEROW_USE_PG_FULLTEXT_SEARCH',
|
||||
default: 'true',
|
||||
},
|
||||
{
|
||||
key: 'POSTHOG_PROJECT_API_KEY',
|
||||
default: '',
|
||||
},
|
||||
{
|
||||
key: 'POSTHOG_HOST',
|
||||
default: '',
|
||||
},
|
||||
{
|
||||
key: 'BASEROW_UNIQUE_ROW_VALUES_SIZE_LIMIT',
|
||||
default: 100,
|
||||
},
|
||||
],
|
||||
},
|
||||
])
|
||||
|
||||
this.options.privateRuntimeConfig = {
|
||||
PRIVATE_BACKEND_URL:
|
||||
process.env.PRIVATE_BACKEND_URL ?? 'http://backend:8000',
|
||||
}
|
||||
|
||||
this.options.publicRuntimeConfig = {
|
||||
BASEROW_DISABLE_PUBLIC_URL_CHECK:
|
||||
process.env.BASEROW_DISABLE_PUBLIC_URL_CHECK ?? false,
|
||||
PUBLIC_BACKEND_URL:
|
||||
process.env.PUBLIC_BACKEND_URL ?? 'http://localhost:8000',
|
||||
PUBLIC_WEB_FRONTEND_URL:
|
||||
process.env.PUBLIC_WEB_FRONTEND_URL ?? 'http://localhost:3000',
|
||||
INITIAL_TABLE_DATA_LIMIT: process.env.INITIAL_TABLE_DATA_LIMIT ?? null,
|
||||
DOWNLOAD_FILE_VIA_XHR: process.env.DOWNLOAD_FILE_VIA_XHR ?? '0',
|
||||
HOURS_UNTIL_TRASH_PERMANENTLY_DELETED:
|
||||
process.env.HOURS_UNTIL_TRASH_PERMANENTLY_DELETED ?? 24 * 3,
|
||||
DISABLE_ANONYMOUS_PUBLIC_VIEW_WS_CONNECTIONS:
|
||||
process.env.DISABLE_ANONYMOUS_PUBLIC_VIEW_WS_CONNECTIONS ?? '',
|
||||
BASEROW_MAX_IMPORT_FILE_SIZE_MB:
|
||||
process.env.BASEROW_MAX_IMPORT_FILE_SIZE_MB ?? 512,
|
||||
FEATURE_FLAGS: process.env.FEATURE_FLAGS ?? '',
|
||||
BASEROW_DISABLE_GOOGLE_DOCS_FILE_PREVIEW:
|
||||
process.env.BASEROW_DISABLE_GOOGLE_DOCS_FILE_PREVIEW ?? '',
|
||||
BASEROW_MAX_SNAPSHOTS_PER_GROUP:
|
||||
process.env.BASEROW_MAX_SNAPSHOTS_PER_GROUP ?? -1,
|
||||
BASEROW_FRONTEND_JOBS_POLLING_TIMEOUT_MS:
|
||||
process.env.BASEROW_FRONTEND_JOBS_POLLING_TIMEOUT_MS ?? 2000,
|
||||
BASEROW_USE_PG_FULLTEXT_SEARCH:
|
||||
process.env.BASEROW_USE_PG_FULLTEXT_SEARCH ?? 'true',
|
||||
POSTHOG_PROJECT_API_KEY: process.env.POSTHOG_PROJECT_API_KEY ?? '',
|
||||
POSTHOG_HOST: process.env.POSTHOG_HOST ?? '',
|
||||
BASEROW_UNIQUE_ROW_VALUES_SIZE_LIMIT:
|
||||
process.env.BASEROW_UNIQUE_ROW_VALUES_SIZE_LIMIT ?? 100,
|
||||
}
|
||||
|
||||
const locales = [
|
||||
{ code: 'en', name: 'English', file: 'en.json' },
|
||||
|
|
|
@ -134,7 +134,7 @@ export default {
|
|||
this.hideError()
|
||||
|
||||
try {
|
||||
const resetUrl = `${this.$env.PUBLIC_WEB_FRONTEND_URL}/reset-password`
|
||||
const resetUrl = `${this.$config.PUBLIC_WEB_FRONTEND_URL}/reset-password`
|
||||
await AuthService(this.$client).sendResetPasswordEmail(
|
||||
this.account.email,
|
||||
resetUrl
|
||||
|
|
|
@ -31,7 +31,7 @@ export default {
|
|||
link: [
|
||||
{
|
||||
rel: 'canonical',
|
||||
href: this.$env.PUBLIC_WEB_FRONTEND_URL + this.$route.path,
|
||||
href: this.$config.PUBLIC_WEB_FRONTEND_URL + this.$route.path,
|
||||
},
|
||||
],
|
||||
}
|
||||
|
|
|
@ -469,8 +469,8 @@ const prepareRequestHeaders = (store) => (config) => {
|
|||
const createAxiosInstance = (app) => {
|
||||
const url =
|
||||
(process.client
|
||||
? app.$env.PUBLIC_BACKEND_URL
|
||||
: app.$env.PRIVATE_BACKEND_URL) + '/api'
|
||||
? app.$config.PUBLIC_BACKEND_URL
|
||||
: app.$config.PRIVATE_BACKEND_URL) + '/api'
|
||||
return axios.create({
|
||||
baseURL: url,
|
||||
withCredentials: false,
|
||||
|
|
|
@ -4,7 +4,7 @@ import {
|
|||
} from '@baserow/modules/core/utils/env'
|
||||
|
||||
export default function ({ app }, inject) {
|
||||
const FEATURE_FLAGS = getFeatureFlags(app.$env)
|
||||
const FEATURE_FLAGS = getFeatureFlags(app.$config)
|
||||
|
||||
inject('featureFlagIsEnabled', (flag) =>
|
||||
featureFlagIsEnabled(FEATURE_FLAGS, flag)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import posthog from 'posthog-js'
|
||||
import Vue from 'vue'
|
||||
|
||||
export default function ({ app: { router, $env, store } }, inject) {
|
||||
const projectApiKey = $env.POSTHOG_PROJECT_API_KEY
|
||||
const host = $env.POSTHOG_HOST
|
||||
export default function ({ app: { router, $config, store } }, inject) {
|
||||
const projectApiKey = $config.POSTHOG_PROJECT_API_KEY
|
||||
const host = $config.POSTHOG_HOST
|
||||
|
||||
if (!process.client || (!projectApiKey && !host)) {
|
||||
return
|
||||
|
|
|
@ -51,7 +51,7 @@ export class RealTimeHandler {
|
|||
|
||||
// The web socket url is the same as the PUBLIC_BACKEND_URL apart from the
|
||||
// protocol.
|
||||
const rawUrl = this.context.app.$env.PUBLIC_BACKEND_URL
|
||||
const rawUrl = this.context.app.$config.PUBLIC_BACKEND_URL
|
||||
const url = new URL(rawUrl)
|
||||
url.protocol = isSecureURL(rawUrl) ? 'wss:' : 'ws:'
|
||||
url.pathname = '/ws/core/'
|
||||
|
|
|
@ -48,7 +48,7 @@ export const mutations = {
|
|||
},
|
||||
COMPUTE_NEXT_TIMEOUT_MS(state, unfinishedJobIds) {
|
||||
const newJobsToUpdate = !_.isEqual(unfinishedJobIds, state.lastUpdateJobIds)
|
||||
const maxTimeout = this.$env.BASEROW_FRONTEND_JOBS_POLLING_TIMEOUT_MS
|
||||
const maxTimeout = this.$config.BASEROW_FRONTEND_JOBS_POLLING_TIMEOUT_MS
|
||||
if (unfinishedJobIds.length === 0) {
|
||||
// no unfinished jobs to update, so we can relax the refresh until
|
||||
// a new job is added.
|
||||
|
|
|
@ -3,9 +3,13 @@ import jwtDecode from 'jwt-decode'
|
|||
|
||||
const cookieTokenName = 'jwt_token'
|
||||
|
||||
export const setToken = ({ $cookies, $env }, token, key = cookieTokenName) => {
|
||||
export const setToken = (
|
||||
{ $config, $cookies },
|
||||
token,
|
||||
key = cookieTokenName
|
||||
) => {
|
||||
if (process.SERVER_BUILD) return
|
||||
const secure = isSecureURL($env.PUBLIC_WEB_FRONTEND_URL)
|
||||
const secure = isSecureURL($config.PUBLIC_WEB_FRONTEND_URL)
|
||||
$cookies.set(key, token, {
|
||||
path: '/',
|
||||
maxAge: 60 * 60 * 24 * 7,
|
||||
|
|
|
@ -3,9 +3,9 @@ import { isSecureURL } from '@baserow/modules/core/utils/string'
|
|||
// NOTE: this has been deliberately left as `group`. A future task will rename it.
|
||||
const cookieWorkspaceName = 'baserow_group_id'
|
||||
|
||||
export const setWorkspaceCookie = (workspaceId, { $cookies, $env }) => {
|
||||
export const setWorkspaceCookie = (workspaceId, { $cookies, $config }) => {
|
||||
if (process.SERVER_BUILD) return
|
||||
const secure = isSecureURL($env.PUBLIC_WEB_FRONTEND_URL)
|
||||
const secure = isSecureURL($config.PUBLIC_WEB_FRONTEND_URL)
|
||||
$cookies.set(cookieWorkspaceName, workspaceId, {
|
||||
path: '/',
|
||||
maxAge: 60 * 60 * 24 * 7,
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<div class="api-docs__right">
|
||||
<APIDocsExample
|
||||
:value="value"
|
||||
:url="$env.PUBLIC_BACKEND_URL"
|
||||
:url="$config.PUBLIC_BACKEND_URL"
|
||||
:include-user-fields-checkbox="false"
|
||||
type=""
|
||||
@input="$emit('input', $event)"
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
<div class="api-docs__right">
|
||||
<APIDocsExample
|
||||
:value="value"
|
||||
:url="$env.PUBLIC_BACKEND_URL"
|
||||
:url="$config.PUBLIC_BACKEND_URL"
|
||||
type=""
|
||||
:response="{
|
||||
error: 'ERROR_NO_PERMISSION_TO_TABLE',
|
||||
|
|
|
@ -71,7 +71,7 @@ export default {
|
|||
},
|
||||
methods: {
|
||||
getFieldsURL(table) {
|
||||
return `${this.$env.PUBLIC_BACKEND_URL}/api/database/fields/table/${table.id}/`
|
||||
return `${this.$config.PUBLIC_BACKEND_URL}/api/database/fields/table/${table.id}/`
|
||||
},
|
||||
/**
|
||||
* Generates a sample field list response based on the available fields of the table.
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
class="api-docs__content"
|
||||
:content="
|
||||
$t('apiDocsUploadFile.description', {
|
||||
PUBLIC_BACKEND_URL: `${$env.PUBLIC_BACKEND_URL}`,
|
||||
PUBLIC_BACKEND_URL: `${$config.PUBLIC_BACKEND_URL}`,
|
||||
})
|
||||
"
|
||||
/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
class="api-docs__content"
|
||||
:content="
|
||||
$t('apiDocsUploadFileViaURL.description', {
|
||||
PUBLIC_BACKEND_URL: `${$env.PUBLIC_BACKEND_URL}`,
|
||||
PUBLIC_BACKEND_URL: `${$config.PUBLIC_BACKEND_URL}`,
|
||||
})
|
||||
"
|
||||
/>
|
||||
|
|
|
@ -71,7 +71,7 @@ export default {
|
|||
try {
|
||||
const { data } = await FieldService(this.$client).getUniqueRowValues(
|
||||
this._props.defaultValues.id,
|
||||
this.$env.BASEROW_UNIQUE_ROW_VALUES_SIZE_LIMIT,
|
||||
this.$config.BASEROW_UNIQUE_ROW_VALUES_SIZE_LIMIT,
|
||||
splitCommaSeparated
|
||||
)
|
||||
for (const value of data.values) {
|
||||
|
|
|
@ -161,13 +161,13 @@ export default {
|
|||
|
||||
const file = event.target.files[0]
|
||||
const maxSize =
|
||||
parseInt(this.$env.BASEROW_MAX_IMPORT_FILE_SIZE_MB, 10) * 1024 * 1024
|
||||
parseInt(this.$config.BASEROW_MAX_IMPORT_FILE_SIZE_MB, 10) * 1024 * 1024
|
||||
|
||||
if (file.size > maxSize) {
|
||||
this.filename = ''
|
||||
this.handleImporterError(
|
||||
this.$t('tableCSVImporter.limitFileSize', {
|
||||
limit: this.$env.BASEROW_MAX_IMPORT_FILE_SIZE_MB,
|
||||
limit: this.$config.BASEROW_MAX_IMPORT_FILE_SIZE_MB,
|
||||
})
|
||||
)
|
||||
} else {
|
||||
|
@ -203,7 +203,7 @@ export default {
|
|||
|
||||
const decoder = new TextDecoder(this.encoding)
|
||||
const decodedData = decoder.decode(this.rawData)
|
||||
const limit = this.$env.INITIAL_TABLE_DATA_LIMIT
|
||||
const limit = this.$config.INITIAL_TABLE_DATA_LIMIT
|
||||
const count = decodedData.split(/\r\n|\r|\n/).length
|
||||
|
||||
if (limit !== null && count > limit) {
|
||||
|
|
|
@ -126,13 +126,13 @@ export default {
|
|||
const file = event.target.files[0]
|
||||
|
||||
const maxSize =
|
||||
parseInt(this.$env.BASEROW_MAX_IMPORT_FILE_SIZE_MB, 10) * 1024 * 1024
|
||||
parseInt(this.$config.BASEROW_MAX_IMPORT_FILE_SIZE_MB, 10) * 1024 * 1024
|
||||
|
||||
if (file.size > maxSize) {
|
||||
this.filename = ''
|
||||
this.handleImporterError(
|
||||
this.$t('tableJSONImporter.limitFileSize', {
|
||||
limit: this.$env.BASEROW_MAX_IMPORT_FILE_SIZE_MB,
|
||||
limit: this.$config.BASEROW_MAX_IMPORT_FILE_SIZE_MB,
|
||||
})
|
||||
)
|
||||
} else {
|
||||
|
@ -182,7 +182,7 @@ export default {
|
|||
return
|
||||
}
|
||||
|
||||
const limit = this.$env.INITIAL_TABLE_DATA_LIMIT
|
||||
const limit = this.$config.INITIAL_TABLE_DATA_LIMIT
|
||||
if (limit !== null && json.length > limit - 1) {
|
||||
this.handleImporterError(
|
||||
this.$t('tableJSONImporter.limitError', {
|
||||
|
|
|
@ -71,7 +71,7 @@ export default {
|
|||
return
|
||||
}
|
||||
|
||||
const limit = this.$env.INITIAL_TABLE_DATA_LIMIT
|
||||
const limit = this.$config.INITIAL_TABLE_DATA_LIMIT
|
||||
const count = this.content.split(/\r\n|\r|\n/).length
|
||||
if (limit !== null && count > limit) {
|
||||
this.handleImporterError(
|
||||
|
|
|
@ -106,12 +106,12 @@ export default {
|
|||
|
||||
const file = event.target.files[0]
|
||||
const maxSize =
|
||||
parseInt(this.$env.BASEROW_MAX_IMPORT_FILE_SIZE_MB, 10) * 1024 * 1024
|
||||
parseInt(this.$config.BASEROW_MAX_IMPORT_FILE_SIZE_MB, 10) * 1024 * 1024
|
||||
|
||||
if (file.size > maxSize) {
|
||||
this.handleImporterError(
|
||||
this.$t('tableXMLImporter.limitFileSize', {
|
||||
limit: this.$env.BASEROW_MAX_IMPORT_FILE_SIZE_MB,
|
||||
limit: this.$config.BASEROW_MAX_IMPORT_FILE_SIZE_MB,
|
||||
})
|
||||
)
|
||||
this.filename = ''
|
||||
|
@ -162,7 +162,7 @@ export default {
|
|||
return
|
||||
}
|
||||
|
||||
const limit = this.$env.INITIAL_TABLE_DATA_LIMIT
|
||||
const limit = this.$config.INITIAL_TABLE_DATA_LIMIT
|
||||
if (limit !== null && xmlData.length > limit) {
|
||||
this.handleImporterError(
|
||||
this.$t('tableXMLImporter.limitError', { limit })
|
||||
|
|
|
@ -137,7 +137,7 @@ export default {
|
|||
computed: {
|
||||
shareUrl() {
|
||||
return (
|
||||
this.$env.PUBLIC_WEB_FRONTEND_URL +
|
||||
this.$config.PUBLIC_WEB_FRONTEND_URL +
|
||||
this.$router.resolve({
|
||||
name: this.viewType.getPublicRoute(),
|
||||
params: { slug: this.view.slug },
|
||||
|
|
|
@ -75,7 +75,7 @@ export default {
|
|||
computed: {
|
||||
formUrl() {
|
||||
return (
|
||||
this.$env.PUBLIC_WEB_FRONTEND_URL +
|
||||
this.$config.PUBLIC_WEB_FRONTEND_URL +
|
||||
this.$nuxt.$router.resolve({
|
||||
name: this.$registry.get('view', this.view.type).getPublicRoute(),
|
||||
params: { slug: this.view.slug },
|
||||
|
|
|
@ -482,7 +482,7 @@ export default {
|
|||
},
|
||||
copyLinkToSelectedRow(event, selectedRow) {
|
||||
const url =
|
||||
this.$env.PUBLIC_WEB_FRONTEND_URL +
|
||||
this.$config.PUBLIC_WEB_FRONTEND_URL +
|
||||
this.$router.resolve({
|
||||
name: 'database-table-row',
|
||||
params: { ...this.$route.params, rowId: selectedRow.id },
|
||||
|
|
|
@ -125,7 +125,7 @@ export class GoogleDocFilePreview extends FilePreviewType {
|
|||
}
|
||||
|
||||
isCompatible(mimeType, fileName) {
|
||||
if (this.app.$env.BASEROW_DISABLE_GOOGLE_DOCS_FILE_PREVIEW) {
|
||||
if (this.app.$config.BASEROW_DISABLE_GOOGLE_DOCS_FILE_PREVIEW) {
|
||||
return false
|
||||
}
|
||||
|
||||
|
|
|
@ -387,14 +387,14 @@ export default {
|
|||
return mapping
|
||||
},
|
||||
getListURL(table, addUserFieldParam, batch = false) {
|
||||
return `${this.$env.PUBLIC_BACKEND_URL}/api/database/rows/table/${
|
||||
return `${this.$config.PUBLIC_BACKEND_URL}/api/database/rows/table/${
|
||||
table.id
|
||||
}/${batch ? 'batch/' : ''}${
|
||||
addUserFieldParam ? this.userFieldNamesParam : ''
|
||||
}`
|
||||
},
|
||||
getDeleteListURL(table) {
|
||||
return `${this.$env.PUBLIC_BACKEND_URL}/api/database/rows/table/${table.id}/batch-delete/`
|
||||
return `${this.$config.PUBLIC_BACKEND_URL}/api/database/rows/table/${table.id}/batch-delete/`
|
||||
},
|
||||
/**
|
||||
* Generates the 'upload file' file example.
|
||||
|
@ -414,7 +414,7 @@ export default {
|
|||
* Generates the 'upload file' URI.
|
||||
*/
|
||||
getUploadFileListUrl() {
|
||||
return this.$env.PUBLIC_BACKEND_URL + '/api/user-files/upload-file/'
|
||||
return this.$config.PUBLIC_BACKEND_URL + '/api/user-files/upload-file/'
|
||||
},
|
||||
/**
|
||||
* Generates the 'upload file' request example.
|
||||
|
@ -428,7 +428,7 @@ export default {
|
|||
* Generates the 'upload file via URL' URI.
|
||||
*/
|
||||
getUploadFileViaUrlListUrl() {
|
||||
return this.$env.PUBLIC_BACKEND_URL + '/api/user-files/upload-via-url/'
|
||||
return this.$config.PUBLIC_BACKEND_URL + '/api/user-files/upload-via-url/'
|
||||
},
|
||||
getItemURL(table, addUserFieldParam) {
|
||||
return (
|
||||
|
|
|
@ -114,7 +114,7 @@ export default {
|
|||
this.$el.keydownEvent = (event) => this.keyDown(event)
|
||||
document.body.addEventListener('keydown', this.$el.keydownEvent)
|
||||
|
||||
if (!this.$env.DISABLE_ANONYMOUS_PUBLIC_VIEW_WS_CONNECTIONS) {
|
||||
if (!this.$config.DISABLE_ANONYMOUS_PUBLIC_VIEW_WS_CONNECTIONS) {
|
||||
this.$realtime.connect(true, true)
|
||||
|
||||
const token = this.$store.getters['page/view/public/getAuthToken']
|
||||
|
@ -124,7 +124,7 @@ export default {
|
|||
beforeDestroy() {
|
||||
document.body.removeEventListener('keydown', this.$el.keydownEvent)
|
||||
|
||||
if (!this.$env.DISABLE_ANONYMOUS_PUBLIC_VIEW_WS_CONNECTIONS) {
|
||||
if (!this.$config.DISABLE_ANONYMOUS_PUBLIC_VIEW_WS_CONNECTIONS) {
|
||||
this.$realtime.subscribe(null)
|
||||
this.$realtime.disconnect()
|
||||
}
|
||||
|
|
|
@ -71,7 +71,7 @@ export const actions = {
|
|||
viewId,
|
||||
rowId: state.row.id,
|
||||
search: activeSearchTerm,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
})
|
||||
if (row) {
|
||||
commit('SET_ROW', row)
|
||||
|
|
|
@ -270,7 +270,7 @@ export default ({ service, customPopulateRow }) => {
|
|||
offset: 0,
|
||||
limit: getters.getRequestSize,
|
||||
search: getters.getServerSearchTerm,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
publicUrl: rootGetters['page/view/public/getIsPublic'],
|
||||
publicAuthToken: rootGetters['page/view/public/getAuthToken'],
|
||||
orderBy: getOrderBy(rootGetters, getters.getViewId),
|
||||
|
@ -344,7 +344,7 @@ export default ({ service, customPopulateRow }) => {
|
|||
limit: rangeToFetch.limit,
|
||||
signal: lastRequestController.signal,
|
||||
search: getters.getServerSearchTerm,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
publicUrl: rootGetters['page/view/public/getIsPublic'],
|
||||
publicAuthToken: rootGetters['page/view/public/getAuthToken'],
|
||||
orderBy: getOrderBy(rootGetters, getters.getViewId),
|
||||
|
@ -402,7 +402,7 @@ export default ({ service, customPopulateRow }) => {
|
|||
viewId: getters.getViewId,
|
||||
signal: lastRequestController.signal,
|
||||
search: getters.getServerSearchTerm,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
publicUrl: rootGetters['page/view/public/getIsPublic'],
|
||||
publicAuthToken: rootGetters['page/view/public/getAuthToken'],
|
||||
filters: getFilters(rootGetters, getters.getViewId),
|
||||
|
@ -446,7 +446,7 @@ export default ({ service, customPopulateRow }) => {
|
|||
includeFieldOptions,
|
||||
signal: lastRequestController.signal,
|
||||
search: getters.getServerSearchTerm,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
publicUrl: rootGetters['page/view/public/getIsPublic'],
|
||||
publicAuthToken: rootGetters['page/view/public/getAuthToken'],
|
||||
orderBy: getOrderBy(rootGetters, getters.getViewId),
|
||||
|
@ -965,7 +965,7 @@ export default ({ service, customPopulateRow }) => {
|
|||
getters.isHidingRowsNotMatchingSearch,
|
||||
fields,
|
||||
this.$registry,
|
||||
getDefaultSearchModeFromEnv(this.$env),
|
||||
getDefaultSearchModeFromEnv(this.$config),
|
||||
overrides
|
||||
)
|
||||
|
||||
|
|
|
@ -581,7 +581,7 @@ export const actions = {
|
|||
limit: requestLimit,
|
||||
signal: lastQueryController.signal,
|
||||
search: getters.getServerSearchTerm,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
publicUrl: rootGetters['page/view/public/getIsPublic'],
|
||||
publicAuthToken: rootGetters['page/view/public/getAuthToken'],
|
||||
orderBy: getOrderBy(rootGetters, getters.getLastGridId),
|
||||
|
@ -742,7 +742,7 @@ export const actions = {
|
|||
limit,
|
||||
includeFieldOptions: true,
|
||||
search: getters.getServerSearchTerm,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
publicUrl: rootGetters['page/view/public/getIsPublic'],
|
||||
publicAuthToken: rootGetters['page/view/public/getAuthToken'],
|
||||
orderBy: getOrderBy(rootGetters, getters.getLastGridId),
|
||||
|
@ -790,7 +790,7 @@ export const actions = {
|
|||
.fetchCount({
|
||||
gridId,
|
||||
search: getters.getServerSearchTerm,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
signal: lastRefreshRequestController.signal,
|
||||
publicUrl: rootGetters['page/view/public/getIsPublic'],
|
||||
publicAuthToken: rootGetters['page/view/public/getAuthToken'],
|
||||
|
@ -816,7 +816,7 @@ export const actions = {
|
|||
includeFieldOptions,
|
||||
signal: lastRefreshRequestController.signal,
|
||||
search: getters.getServerSearchTerm,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
publicUrl: rootGetters['page/view/public/getIsPublic'],
|
||||
publicAuthToken: rootGetters['page/view/public/getAuthToken'],
|
||||
orderBy: getOrderBy(rootGetters, getters.getLastGridId),
|
||||
|
@ -1016,7 +1016,7 @@ export const actions = {
|
|||
).fetchFieldAggregations({
|
||||
gridId: view.id,
|
||||
search,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
signal: lastAggregationRequest.controller.signal,
|
||||
})
|
||||
|
||||
|
@ -1286,7 +1286,7 @@ export const actions = {
|
|||
offset: startIndex,
|
||||
limit,
|
||||
search: getters.getServerSearchTerm,
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$env),
|
||||
searchMode: getDefaultSearchModeFromEnv(this.$config),
|
||||
publicUrl: rootGetters['page/view/public/getIsPublic'],
|
||||
publicAuthToken: rootGetters['page/view/public/getAuthToken'],
|
||||
orderBy: getOrderBy(rootGetters, getters.getLastGridId),
|
||||
|
@ -2218,7 +2218,7 @@ export const actions = {
|
|||
getters.isHidingRowsNotMatchingSearch,
|
||||
fields,
|
||||
this.$registry,
|
||||
getDefaultSearchModeFromEnv(this.$env),
|
||||
getDefaultSearchModeFromEnv(this.$config),
|
||||
overrides
|
||||
)
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@ export const SearchModes = {
|
|||
MODE_FT_WITH_COUNT: 'full-text-with-count',
|
||||
}
|
||||
|
||||
export function getDefaultSearchModeFromEnv($env) {
|
||||
return $env.BASEROW_USE_PG_FULLTEXT_SEARCH === 'true'
|
||||
export function getDefaultSearchModeFromEnv($config) {
|
||||
return $config.BASEROW_USE_PG_FULLTEXT_SEARCH === 'true'
|
||||
? SearchModes.MODE_FT_WITH_COUNT
|
||||
: SearchModes.MODE_COMPAT
|
||||
}
|
||||
|
|
|
@ -56,7 +56,6 @@
|
|||
"node-sass": "8.0.0",
|
||||
"normalize-scss": "^7.0.1",
|
||||
"nuxt": "2.16.3",
|
||||
"nuxt-env": "^0.1.0",
|
||||
"papaparse": "5.4.1",
|
||||
"path-to-regexp": "^1.8.0",
|
||||
"posthog-js": "^1.73.1",
|
||||
|
|
|
@ -29,7 +29,7 @@ function _createBaserowStoreAndRegistry(app, vueContext, extraPluginSetupFunc) {
|
|||
app.$client = app.client
|
||||
store.$registry = app.$registry
|
||||
store.$client = app.client
|
||||
store.$env = app.$env
|
||||
store.$config = app.$config
|
||||
store.app = app
|
||||
app.$store = store
|
||||
// Nuxt seems to allow both access patterns to get at the store?
|
||||
|
@ -103,8 +103,9 @@ export class TestApp {
|
|||
return cookieStorage[name]
|
||||
},
|
||||
},
|
||||
$env: {
|
||||
$config: {
|
||||
PUBLIC_WEB_FRONTEND_URL: 'https://localhost/',
|
||||
PRIVATE: 'http://backend:8000',
|
||||
BASEROW_USE_PG_FULLTEXT_SEARCH: 'true',
|
||||
},
|
||||
i18n: {
|
||||
|
|
Loading…
Reference in a new issue