1
0
Fork 0
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:
Jonathan Adeline 2023-08-07 11:29:29 +00:00
parent eb4d82ee10
commit 0af095785c
46 changed files with 131 additions and 159 deletions

View file

@ -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]

View file

@ -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"
}

View file

@ -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.

View file

@ -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: {

View file

@ -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: {

View file

@ -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: {

View file

@ -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}` : ''
}`

View file

@ -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

View file

@ -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: {

View file

@ -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.

View file

@ -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'))

View file

@ -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)
},
},

View file

@ -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,

View file

@ -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,

View file

@ -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' },

View file

@ -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

View file

@ -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,
},
],
}

View file

@ -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,

View file

@ -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)

View file

@ -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

View file

@ -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/'

View file

@ -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.

View file

@ -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,

View file

@ -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,

View file

@ -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)"

View file

@ -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',

View file

@ -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.

View file

@ -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}`,
})
"
/>

View file

@ -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}`,
})
"
/>

View file

@ -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) {

View file

@ -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) {

View file

@ -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', {

View file

@ -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(

View file

@ -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 })

View file

@ -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 },

View file

@ -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 },

View file

@ -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 },

View file

@ -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
}

View file

@ -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 (

View file

@ -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()
}

View file

@ -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)

View file

@ -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
)

View file

@ -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
)

View file

@ -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
}

View file

@ -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",

View file

@ -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: {