Internally replaced react-base-table
with a custom implementation of the
editable table. This means a big enhancement in performance
Collections and entity schemas have been merged into one single concept. All the fields related to entity schemas have been moved to the collection level. We felt it was redundant and the distribution of logic between those 2 concepts was a bit arbitrary.
Now you don't need to save an entity to use its id (e.g. in storage callbacks). The side dialog does not get closed automatically on save.
- Fix for bug when saving new entities with React 18.
- Fix for entity collections in read-only mode showing incorrect resolved properties
- Fix for filter combinations bug
- Enabled phone authentication
- Added max size validation for file uploads
- Fix for draggable bug in arrays with duplicated values.
- Reversed icons in header tables. Also, now the initial sort option is "asc" as it is typical in most apps.
- Fix for cursor jumping to the end of an inline text field
- Added
LoginViewProps
toFirebaseCMSApp
. You can use it to customise the login flow, using thedisableSignupScreen
prop to prevent users from creating accounts inpassword
mode. And to display aNoUserComponent
- when the user logging in
password
mode is not found - Fix for hidden CMS views bug.
- Fix for array select filters
- Fixed inline date popups
- Fix for not editable tables not updating on data changes
- Fixed edge case of references in arrays not being resolved properly with property builders. Thanks, Paul Aranzamendez!
- Fix for Portal import bug related to mui 5.4 version.
- Allowing
optional
custom ids - Small cosmetic updates
- Fix for "heap limit Allocation failed" error
- Fix for array components losing focus
- Added custom
regexMessage
for displaying when there is a stringregex
validation error. - Property builders now include the
previousValues
prop, in case you need to compare the updates with the original values (only in the form view and the popup view in the collection). - Changed page not found error message.
- Drag and drop implementation replaced for
react-beautiful-dnd
, for simpler code and better performance. - Fix callbacks to open side panel, (by Kyle Fang)
- Fix for latest version of
react-router
types - General dependencies update
- Many internal React eslint warning fixes
- Optional
dependencies
prop inAdditionalFieldDelegate
so that additional columns are always up-to-date when they depend on another entity property. Just pass an array of property keys
- Many performance enhancements, related to avoiding re-renders, especially in the entity collection view table cells.
- Fix for popup form field in the collection view, not displaying the correct field in some occasions.
- Fix for side dialog not opening when creating a new entity
- Performance tweaks
useSchemaRegistry
has been removed and all it's functionality has been merged intouseNavigationContext
- Not found page when reaching a non-existing route.
- Indicator for selected page in navigation drawer
- Some performance enhancements
- Fix for missing
index.js
export in version beta6 - Internal rework for persisting user configuration, like collection sizes or column widths.
- New custom login screen that replaces FirebaseUi.
- Replaced
react-csv
with custom CSV implementation - The previous changes were blocking SSR and build tools such as Vite, but more testing is needed.
- New type added
EntitySchemaResolver
, used mostly internally for resolving entity schemas (that means computing the property builders and transforming them to aResolvedEntitySchema
)
- Fix for collections not refreshing correctly
- [BREAKING]
schemaResolver
at theFireCMS
level has been renamed toschemaOverrideHandler
.
snackbarController
added toFireCMSContext
so it can be used in callbacks.width
parameter added toSideEntityController
'sopen
function, so you can select the width of the side view.- The user selection regarding dark mode is now persisted in local storage (if different from the system selection)
- Fix for data not being refreshed correctly in collections.
- Added additional props to
NavigationBuilder
andAuthenticator
, includingdataSource
andstorageSource
. These are useful if you need to fetch some data from your datasource (such as if you want to check if a logged user has an entry in Firestore) and apply the corresponding permissions or navigation. - Added
SelectionController
toEntityCollectionView
. You can useuseSelectionController
and pass it your customEntityCollectionView
if you want to control the selected entities. If you are usingFirebaseCMSApp
as an entry point, you can define yourAutheticator
as:
import { User as FirebaseUser } from "firebase/auth";
const myAuthenticator: Authenticator<FirebaseUser> = async ({
user,
authController
}) => {
console.log("Allowing access to", user?.email);
// ...
return true;
};
- Implemented dark mode for markdown fields
- Column sizes and collections tables are now persisted in local storage
- The
User
types have been replaced by generics all through the app. Types likeAuthController
orNavigationBuilder
now have a generic argument that allows to define the user type. In the case of - Internal work around to prevent collections going back to the start due to Firestore returning incomplete collection data.
- [BREAKING]
useCollectionFetch
now usessortBy
in the format[Extract<keyof M, string>, "asc" | "desc"]
for consistency - [BREAKING]
extraActions
inEntityCollection
now receivesselectionController
instead ofselectedEntities
. - Fix for filters in tables including
enumValues
EntityCollectionTable
has been renamed toEntityCollectionView
- Reference visual fix 144
- Removed
entityId
toPropertyBuilder
when copying an entity 145 - Fix and reimplemented navigation blocking behaviour 146
- Hiding correctly
hidden
properties if they are in a `MapProperty
- New
Table
component used internally byCollectionTable
.Table
is not coupled with our entities and collections models and can be used as a single component. It includes generic sorting and filtering capabilities.
- When copying an entity the permission used is
create
now, instead ofedit
. - Fix for entities not being saved when new or copy was clicked
- Fix for multiple delete keeping old state.
- Fix multiple form styles.
- Fix for array of number enums.
Added hidden
configuration to disabled fields:
buildProperty({
dataType: "string",
title: "Hidden field",
disabled: {
hidden: true
}
})
Many breaking changes in this version unfortunately, but it's for the better! We have done a lot of internal refactorings with the primary goal of making internal and external APIs more predictable and consistent.
You can find a list of all the changes and help in Migrating from alpha versions
- Added post process to storage metadata. @zhigang1992 thanks!
- Disabling add button on disabled array properties
- Fix for broken custom entity views and new entities.
[BREAKING] Big types refactor. This only affects you if you use Typescript.
All the key signatures affecting schemas (EntitySchema
and related) have
changed from EntitySchema<Key extends string = string>
to EntitySchema<M>
where M
is simply your model, though you can omit it.
You are now encouraged to define your model like:
type Product = {
name: string;
price: number;
}
const productSchema = buildSchema<Product>({
// ...
properties: {
name: {
dataType: "string",
// ...
},
// ...
}
// ...
});
If you would still like to use inferred types from schemas using something like
typeof productSchema
, you can still do it if you wrap it in a new type
InferSchemaType
, but this is not encouraged. In the previous
example InferSchemaType<typeOf productSchema>
is the same type as Product
.
Related changes:
- Wherever you had defined your own schema, using
buildSchema()
and where using that as a type parameter, it can be changed to the defined type or just removed. buildSchemaFrom
has been deleted since now it's identical tobuildSchema
If you need more info: https://firecms.co/blog/types_refactor
- Fix for changes in forms not updating correctly when a real time update happened in Firestore
- Fix for popup view position
- Fix for popup view validating only the corresponding cell and not the whole property, which was provoking unfixable saving errors.
- [BREAKING]
EntityCustomViewBuilder
has been renamed toEntityCustomView
- Big form performance enhancements
- Fixes related to
oneOf
array properties. - Fixed missing permission error in cell
- Added
collectionPath
toPropertyBuilder
collectionPath
andcontext
toExtraActionsParams
- Green border indicator on collection tables to indicate that the value was saved successfully in Firestore.
- New
oneOf
field inArrayProperty
. This new configuration allows the user to build complex array of objects structures, where the object is determined by a discriminator ortype
field and stored in thevalue
field (both those fields are customizable). You can se an example of this in the content of blog entries in the demo - You can now add custom views to your entity schemas, that get rendered next to the entity form. You can use these views for anything you need, such as rendering a custom form, building a dashboard or displaying a post preview.
- The
collectionPath
and appcontext
props have been added toPermissionBuilder
so you can get better info of the context of an entity.
- Subcollection views and new schema custom views are now displayed side by side when you open the tabs in the side view (useful for better context switching)
- The markdown component has been replaced by a better one.
- Many bugfixes in the form popup view and enhanced behaviour. You can now keep a popup open and continue editing other fields. The popup doesn't close automatically now when you click on a different cell.
- [BREAKING] renamed
useAuthContext
touseAuthController
- Including
authController
inPermissionBuilder
so you can access additional data for a user. - Improved sample code and quickstart to include custom user logic
- Filtering in collections has been changed from a single dropdown to dropdowns in each column header.
- Added Timestamp filters
filterableProperties
has no longer effect since every field is filterable now and will be removed in the future.
indexes
property where you can specify the indexes in your Firestore configuration. That allows to filter/sort by multiple properties.
- Big internal refactor to have a better modularised code, also to generate better docs
- [BREAKING] EntityCollectionView (previously renamed to EntityCollection) has been removed. Simply rename to EntityCollection
- Fix for export component that was fetching the complete collections on mount. Now opening the CMS does not trigger excessive reads by default.
- Internal type fixes.
- [BREAKING]
ArrayProperty
first generic type changed from T to T[] - [BREAKING]
CMSFormField
component (used for generating custom fields) has been replaced by a function calledbuildPropertyField
that takes the same props - Fix for jumping search bar while loading
- [BREAKING] Change EntityStatus from JS enum to TS type. This only affects you if you are using a save callback.
- [BREAKING] AlgoliaTextSearchDelegate is now a function instead of a class. You instantiate it the same, just remove the new keyword
- Added
extra
andsetExtra
fields inauthController
to store custom user data.
- Fix for home page
- Minor layout updates
- Removed
authResult
from auth context since it was actually useless and confusing
- Allowing adding customized columns to CSV exports
- Added builder
- Allowing changing pagination size
- Allowing multiple paths per CMSView and
hideFromNavigation
flag added
- [BREAKING] Material dependencies have been moved to
peerDependencies
If your build breaks, simply add these dependencies to your project:
"@mui/material": "^4.11.4",
"@mui/icons-material": "^4.11.2",
"@mui/lab": "^4.0.0-alpha.58",
"@material-ui/pickers": "^3.3.10",
- Custom id values are now trimmed
- Fix for entity actions dropdown
- Fix for being able to use side entity dialogs without having a rendered main view
- [BREAKING] If you are using provider and main view, you need to move the theme related fields from the main view to the provider (colors and fonts)
- Fix for unique in array validation and null values
- New
uniqueInArray
validation prop. If you set it totrue
, the user will only be allowed to have the value of that property once in the parentArrayProperty
. It works on direct children properties or on first level children of aMapProperty
(if set as the.of
property of theArrayProperty
)
- Fix for dates in new documents, being set to the current time
- The popup form field in the table now has a save button instead of saving automatically.
- Mono typeface import css has been removed from the core library and needs to be imported in every implementation now, like the Rubik typeface. Examples and Readme updated. Useful for SSR.
- Enhanced feedback for references configuration errors, no longer crashing the app.
- Changed double click behaviour in collections table to open the inline editor, replaced by a triple click. You can double click to select the content of the cell.
- Fix for navigation loading bug using NavigationBuilder
CMSApp
has been split internally into 3 components:CMSApp
which now is only in charge of initialising FirebaseCMSAppProvider
which is in charge of providing all the contexts used by the CMS hooks.CMSMainView
which includes the views of the app including login screen and main collection and entity components. You can see an example here
- Fix for a bug when saving entities.
- [BREAKING]
AuthContextController
has been renamed toAuthController
- Added
useNavigationFrom
hook andgetNavigationFrom
- Added
context
to save and delete callbacks, so you can accessgetNavigationFrom
from within them. NavigationBuilder
now supports returning a promise with the navigation result, useful if you need to check permissions based on the logged user.
- [BREAKING]
SchemaSidePanelProps
has been renamed toSchemaConfig
used in theschemaResolver
prop. - [BREAKING]
useAppConfigContext
has been renamed touseCMSAppContext
- Fix for broken collection detail buttons
- Added unique fields validation
- Internal refactor of CollectionTable.tsx to improve its reusability
- Added example shaped array custom fields in the
example
folder
- Adaptations to make it easier to implement custom fields and use the internal CMS fields bound to properties.
- [BREAKING]
fieldProps
in the property fields configuration has been renamed tocustomProps
- [BREAKING]
customPreview
in the property fields configuration has been renamed topreview
- You don't need to specify an
of
props in array properties or aproperties
prop in map properties, if you specify a custom field
- Allowing customizing enum chip colors. You can now specify the color key to
the
EnumValueConfig
. You can also pass aMap
instead of a plain object if you need to ensure the order of the elements.
- Fix for Firebase peer dependency.
- [BREAKING]
EnumValues
is no longer generic.
- Added callback for selecting file name when uploading files to an entity.
- Improved permissions system. You can now set
create
,edit
ordelete
permissions in the collection config. Those permissions can be set on a per user basis, using a builder. - In the same way, you can now change the main navigation based on the logged user.
- The
navigation
prop inCMSApp
now can take an object where you define your collections like until now, but also the custom views that were found in the root level. - [BREAKING]
AdditionalView
is now calledCMSView
- [BREAKING]
customViews
in the mainCMSAppProps
has been moved under the new navigation object. - [BREAKING]
deleteEnabled
andeditEnabled
have been removed from collections in favor of newpermissions
object.
- Home page and possibility to add descriptions to collections using Markdown
- Allowing overriding locale (only used for changing date formats for now)
- Allowing customizing date formats with the parameter
dateTimeFormat
- Fix for firecmsco#59 (Algolia missing properties)
- Added ids to export
- Bigger drawer.
- Fix for schema resolving issue.
- Fix for react-router routes, they need to be exact now
- Added export function in collection views, enabled by default but can be disabled.
- Enhanced table performance by reducing the number of divs
- Added
clearMissingValues
to map property config, allowing missing properties from field values to be deleted from Firestore. - Added assigned size to custom previews.
- MUI
disableEnforceFocus
is now enabled for entity dialogs
- Enhanced disabled fields in table mode
- Changed behavior of custom fields in table mode
- You can now change entity properties on the fly, allowing for conditional fields, by using a builder that receives the current values.
- The
disabled
flag has changed behavior. It now renders the corresponding field as disabled, instead of a preview. You can use the new flagreadOnly
to preserve the previous state - Fix for empty strings on hooks and default values were causing a crash.
- Fix for additional column keys when defining collections.
- [BREAKING]
CMSFieldProps
is now calledFieldProps
- [BREAKING]
FormFieldProps
is now calledCMSFormFieldProps
- [BREAKING]
createFormField
is no longer passed as an argument inCMSFieldProps
and it has been replaced with aCMSFormField
, that is a React component that takes the same props. You most probably don't need this unless you are building nested custom fields.
- Fixed bug when switching subcollections in entity view.
- Fix for drag and drop arrays
schemaResolver
props in the CMSApp level that allows overriding schemas and configs in the side dialog panels
useSideEntityController
hook, allows to open the side dialog programmatically and override the entity schemas.- New custom field for arrays of references, in form and table mode
initialSort
to collections views.
- Removed full size entity view, in favor of side lateral menu. Also when typing directly URLs pointing to entities.
- Fix for form validation of untouched new entities.
- Implemented FirebaseUi to allow for all possible Firebase login types.
- Added a
context
object in theCMSFieldProps
that allows developers to access the context of the form, such as other field values. This is useful for creating conditional fields. - Fix for buttons in rows of tables with no inline editing.
- [BREAKING] The developer defined props in custom fields can be accessed now
under the
customProps
property, instead of directly.
- Users are able to select entities now
- Developers can now define custom actions in the collections, using a builder.
- Possibility to copy existing entities
- Two internal contexts are now exposed in the library:
useSnackbarController
anduseAuthContext
. More details in the README file - Thanks to @faizaand and @Snivik for the PRs!
onFirebaseInit
callback on the CMSApp called after Firebase initialisation. Useful for using the local emulator.
- Fixed initial values bug when creating new entities and validation.
- Added
showError
prop to CMSFieldProps
- Fixed click behaviour of tables when inline editing is disabled.
- More consistent map property previews
- Table performance improvements
- Inline editing of tables. Tables are now editable by default. There are two
new parameters you can set in entity collection views.
editEnabled
defaults to true. If false, the users will not be able to edit or create new entities.inlineEditing
defaults to true. If false, the users can still edit the content, but the inline editing is disabled. The side panel is still enabled.
- [BREAKING] The custom fields API has been refactored and simplified. The Formik props have been abstracted away and only the relevant fields are exposed. You can find the new props here an example of the new implementation here
- Fixed date autovalues generating modified form prompt, even if it wasn't
- Internal refactor of CMSApp.tsx and contexts.
- [BREAKING] String properties config multiline value can no longer take a number and only accepts boolean values. Numbers used to be used to indicate the number of rows but TextField now grow automatically based on the content.
- Refactor of PreviewComponent to display better error messages when values are of an unexpected type.
- Dependencies update and cleanup.
- Added grouping and breadcrumbs to additional views and redesign.
- Array of enums fix when the value coming from Firestore is not an array
- A cosmetic fix for enum chips.
- Added deleted entity on delete hook
- [BREAKING] The deletion hook has been moved from the collection view to the entity schema.
- Fixed error when saving new entities
- Minor side navigation fix
- Side navigation now stacks subcollections
- Fix for bug that was causing values not mapped as properties not to be saved.
- Internal refactor of preview properties
- Changed API for saveEntity
- Fix for composite reference paths such as "sites/en/product" References pointing to collection with a composite path were failing to locate the proper collection
- Reference fields now include the reference key
- You can now filter array properties
- Fix for initializing values to null, was colliding with enum validation.
- If you specify both a firebase config and are running in Firebase hosting, the specified config has now priority over the one found in the environment.
- Allowing grouping of main navigation entries
- Drag and drop reordering for storage fields
group
field in root navigation entries allow to group items into subcategories.
- Adaptive wider size to subcollections seen in the entity side menu, which allows for a better layout of the table.
- Collection cells fade out if overflowed, instead of allowing scrolling
- Auto values for timestamps. You can now set the
autoValue
property to timestamps to update the date to the current one eitheron_create
(only when the entity is created) oron_update
(every time it is saved) - Markdown field with preview for string properties. Set the flag
markdown
to true in the CMS field config. - Drag and drop feature for default arrays, allowing reorder
- Reference field do not need to provide a schema or filter or search delegate
of the target collection. All these properties are inferred from the
collection path and the corresponding collection view. So setting an absolute
path such as
products
will look into that path and find the corresponding view.
- The lateral menu now is open on close based on the main navigation and has specific urls.
- You can now add a custom view to the main AppBar
- Clicking on an entity in a collection now opens a lateral menu with an editable form instead of a preview.
- Dropdown in entity collections to change row height. Added
defaultSize
to config.
- Removed
small
property in collections in favor ofdefaultSize
.
columnWidth
field in properties to indicate the width of columns
- Fix for wrong subcollections url.
- Lateral panel for having entities info in context
- Revamped collection table for allow infinite scrolling and enhanced performance
- Big general redesign
- Changed the layout of forms to single column. Removed
forceFullWidth
flag in properties. - Renamed
urlMediaType
tourl
in the string property configuration.