Upgrade to v3

Help developers to move from v2 to v3. Please read carefully and integrate the following breaking changes to ensure a smooth update.

Breaking changes

Cors configuration

Set CORS credentials: true if you're using custom CORS configuration. See how to configure CORS headers.

Lumber
Rails
Express/Sequelize
Express/Mongoose

With Lumber, the CORS headers are automatically configured for you in your app.js file, so you shouldn't have to worry about it. Here is how they're configured:

app.js
var express = require('express');
var cors = require('cors');
var app = express();
// ...
app.use(cors({
origin: [/\.forestadmin\.com$/],
allowedHeaders: ['Authorization', 'X-Requested-With', 'Content-Type'],
credentials: true
}));
// ...
module.exports = app;

We use the Rack CORS Gem for this purpose.

Gemfile
# Gemfile
source 'https://rubygems.org'
# ...
gem 'forest_liana'
gem 'rack-cors'
/config/application.rb
module LiveDemoRails
class Application < Rails::Application
# ...
# For Rails 5, use the class Rack::Cors. For Rails 4, you MUST use the string 'Rack::Cors'.
config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'app.forestadmin.com'
resource '*',
headers: :any,
methods: :any,
expose: ['Content-Disposition'],
credentials: true
end
end
end
end

Add the allowedOrigins line as follows:

app.js
var express = require('express');
var cors = require('cors');
var app = express();
// ...
app.use(cors({
origin: [/\.forestadmin\.com$/],
allowedHeaders: ['Authorization', 'X-Requested-With', 'Content-Type'],
credentials: true
}));
// ...
module.exports = app;

Add the allowedOrigins line as follows:

app.js
var express = require('express');
var cors = require('cors');
var app = express();
// ...
app.use(cors({
origin: [/\.forestadmin\.com$/],
allowedHeaders: ['Authorization', 'X-Requested-With', 'Content-Type'],
credentials: true
}));
// ...
module.exports = app;

Global smart action

Smart actions defined as follows global: true will no longer be considered as global.

Please now use type: 'global'.

Lumber
Rails
Express/sequelize
Express/mongoose

Before

/forest/products.js
const Liana = require('forest-express-sequelize');
const models = require('../models');
Liana.collection('products', {
actions: [{
name: 'Import data',
global: true
}],
});

After

/forest/products.js
const Liana = require('forest-express-sequelize');
const models = require('../models');
Liana.collection('products', {
actions: [{
name: 'Import data',
type: 'global'
}],
});

Before

lib/forest_liana/collections/product.rb
class Forest::Product
include ForestLiana::Collection
collection :Product
action 'Import data',
global: true
# ...
end

After

lib/forest_liana/collections/product.rb
class Forest::Product
include ForestLiana::Collection
collection :Product
action 'Import data',
type: 'global'
# ...
end

Before

/forest/products.js
const Liana = require('forest-express-sequelize');
const models = require('../models');
Liana.collection('products', {
actions: [{
name: 'Import data',
global: true
}],
});

After

/forest/products.js
const Liana = require('forest-express-sequelize');
const models = require('../models');
Liana.collection('products', {
actions: [{
name: 'Import data',
type: 'global'
}],
});

Before

/forest/products.js
const Liana = require('forest-express-mongoose');
const models = require('../models');
Liana.collection('products', {
actions: [{
name: 'Import data',
global: true
}],
});

After

/forest/products.js
const Liana = require('forest-express-mongoose');
const models = require('../models');
Liana.collection('products', {
actions: [{
name: 'Import data',
type: 'global'
}],
});

Schema versioning

On server start - only in development environments - the liana will generate a .forestadmin-schema.json file reflecting your Forest Admin schema.

If you change your models or database, Forest Admin will automatically load a new schema to keep the layout up to date.

Do not edit this file. It will be automatically generated on server start only in development environments.

This file must be deployed for any remote environment (staging, production, etc.), as it will be used to generate your Forest Admin UI.

Version this file. It will give you more visibility on the changes detected by Forest Admin.

In the following example, we have added two fields on the invoices table:

  • emailSent

  • quadernoId

Versioning the.forestadmin-schema.json file allows you to easily visualize the changes.

.forestadmin-schema.json versioning example

Changelogs

This release note covers only the major changes. To learn more, please refer to the changelogs in our different repositories: