Releases: laravel-enso/enso
v9.0.0
9.0.0
This release focuses on bringing the Laravel Enso ecosystem up to date across the full stack: Laravel 13 and PHP 8.3+ on the backend, and a modern Vue 3.5 / Vite 7 / Pinia runtime on the frontend.
It also includes a complete UI redesign pass across the active Enso UI ecosystem. The goal was not only to refresh the look and feel, but also to simplify shared ownership, replace legacy styling layers with native Bulma contracts, and standardize how applications integrate routes, stores, filters, themes, and localisation.
In parallel, we revamped the public documentation platform at docs.laravel-enso.com, upgraded it to VitePress 2, synchronized the package documentation surface across the ecosystem, and brought the published docs back in line with the current Enso runtime and upgrade model.
Taken as a whole, Enso 9.0.0 is one of the largest frontend/backend releases in the history of Laravel Enso.
As part of this release reset, we also intend to close the current backlog of GitHub issues and merge requests and ask contributors to open new issues or merge requests if their reports are still relevant on top of the Enso 9 line.
Laravel 13 Compatibility
Laravel Enso 9.0.0 aligns the ecosystem with Laravel 13 and raises the minimum PHP baseline to 8.3.
Front-end
ui
- completed a major UI redesign across the active Enso UI packages
- realigned shared components, tables, filters, forms, menus, settings, and shell layouts around a cleaner Bulma-first visual language
- updated the ecosystem with a clear goal of bringing the Enso frontend stack and package contracts to a current, maintainable baseline
- normalized shared styling ownership so UI policy lives in the shared UI layer instead of being scattered across package-local overrides
frontend runtime
- migrated the frontend runtime from the legacy Vue CLI / Webpack / Vuex model to Vite and Pinia
- standardized the new frontend baseline around:
- Node 20
- Vue 3.5
- Pinia 3
- Vite 7
@vitejs/plugin-vue6vue-router4.6- Bulma 1
- Axios 1
- removed Vuex and
vuex-router-syncfrom the active runtime flow - stabilized
yarn dev --forceandyarn buildon the new toolchain - replaced legacy
require.context-driven assumptions with a Vite-compatible runtime model for package integration - introduced a clearer split for compiled frontend resources and expanded lazy loading across frontend components
- reduced shipped frontend assets and chunk sizes significantly through the new bundle split and lazy-loaded component surface
icons and shared UI dependencies
- modernized Font Awesome integration across the shared UI ecosystem
- upgraded the shared icon stack to the current Font Awesome 7 line
- moved shared components away from ad-hoc icon registries and toward direct icon-definition imports where runtime metadata is not involved
- kept a smaller explicit runtime icon registry only for metadata-driven icons that still come from backend state
- upgraded and restyled shared UI dependencies such as
v-tooltipto fit the new Bulma-first runtime and styling contract - standardized
animate.cssusage on the v4animate__*convention across the shared UI surface - added the dedicated
@enso-ui/paginationpackage to give pagination its own reusable public UI surface
loader and skeletons
- refined the general application loader behavior and moved it into its own dedicated store
- added a reusable skeleton component to complement loading states across charts, forms, and tables
filters and transport
- standardized frontend request serialization for complex filter payloads
- added a global Axios
paramsSerializerfor nested GET parameters - preserved backward compatibility where possible while making request transport explicit and consistent
- normalized Enso table boolean filters by serializing booleans as
1 / 0 - prepared the remaining filter-related packages for the stricter transport model
files
- implemented frontend pagination controls for the file browser
- added page-size selection and paginated navigation to the files UI
- aligned the file browser with the new reusable pagination surface instead of keeping it on a flat unpaginated listing
state management and bootstrap
- introduced a clear Pinia-first store convention across the ecosystem
- standardized bootstrapable stores on a
set(payload)convention - centralized frontend bootstrap through:
client/src/js/pinia/loadState.jsclient/src/js/pinia/bootstrapStores.js
- clarified store ownership across the shared packages instead of routing everything through
@enso-ui/uiinternals
routes and package integration
- aligned frontend package integration with a public-package-surface model
- local applications are expected to consume published route modules and package-owned stores instead of private
@enso-ui/ui/src/...internals - route and store discovery now follow the new bootstrap flow instead of the older implicit runtime model
themes
- replaced the older shared theming approach with a Bulma-native theming model
- moved theme ownership into
@enso-ui/themes - consolidated runtime shell and layout tokens into the active Bulma override layer
- removed dead theme entrypoints and legacy theme indirection
- introduced
light,dark, andsystemtheme behavior in the current runtime model
localisation
- simplified localisation ownership and file flow
- added
php artisan enso:localisation:scanto statically discover translation keys from backend and frontend sources - made the new localisation workflow report, deduplicate, and sync discovered keys into local JSON language files
- clarified language-file ownership and reduced the legacy mixed package/app localisation flow
- removed Arabic from the built-in shared localisation seed/fallback set in the current release
package ecosystem cleanup
- realigned active
@enso-ui/*package interdependencies around explicit ownership - moved shared package-to-package relationships out of
dependenciesand intopeerDependencies + devDependencieswhere appropriate - adopted this pattern to stop hidden nested runtime copies, make package ownership explicit, and force the host application to own the shared frontend runtime surface directly
- treated the application root as the single place where shared runtime dependencies must be installed and version-aligned
- cleaned package manifests and reduced legacy build/runtime duplication across the active frontend ecosystem
- added or completed frontend companion packages where the current release surface requires them
- started building the first meaningful layer of frontend test coverage across the active UI package surface
documentation
- revamped
docs.laravel-enso.comas part of the Enso 9 release wave - upgraded the documentation site to VitePress 2
- synchronized package documentation across the active ecosystem
- brought the published docs and migration guidance in line with the current Enso runtime, package surface, and upgrade flow
audits
- added the frontend
@enso-ui/auditscompanion package - introduced audit index pages and diff presenters for rendering row-level change payloads in the UI
- integrated audit rows with backend table definitions and user context so historical changes can be inspected consistently from the system route group
- positioned audits as the replacement path for the older history-tracker flow
Back-end
core
- required Laravel 13 and PHP 8.3
- introduced the new store-based
ProvidesStatecontract for frontend bootstrap - replaced mutation-targeted state payloads with grouped store-targeted payloads
- updated shared state building so multiple providers targeting the same store are merged before reaching the frontend
- refactored filters for the new frontend transport and state contract
frontend/backend contract
- replaced the old backend/frontend bootstrap contract based on
mutation()with a store-based contract built for Pinia - aligned Enso backend packages to emit
{ store, state }payloads instead of Vuex mutation payloads - prepared backend packages that expose filters or shared frontend state for the new frontend runtime
files
- implemented backend pagination support for file browser endpoints
- validated the requested pagination size against the configured
paginateoptions - aligned file browsing responses with paginated metadata so the new frontend controls can consume them consistently
localisation
- improved localisation ownership and backend support for the new frontend flow
- added backend support for the new localisation scan command and key reporting workflow
- improved deduplication and ownership of generated localisation keys
audits
- added the
laravel-enso/auditsbackend companion package - exposed the audit table definition, diff payloads, and route group consumed by the new frontend audit pages
- expanded the ecosystem support for browsing historical record changes through a dedicated audits flow
- positioned audits as the replacement path for the older
history-trackerpackage
ecosystem
- normalized dependency metadata and license files across the active Enso backend package set
- migrated supported packages from PHPUnit annotations to PHPUnit attributes
- realigned package constraints and companion package contracts for the Enso 9 release wave
- added or completed frontend companion package support where required by the new runtime
- increased backend test coverage substantially across the active Enso package set
Upgrade Steps
To upgrade an existing Enso application to 9.0.0, use the following sequence.
1. Update the platform baseline
- update PHP to at least 8.3. Our recommendation is...
8.0.0: Update main.yml
8.0.0
This release focuses on aligning Laravel Enso with the latest Laravel version (v12), while continuing the effort to simplify the codebase, removing legacy patterns, and improving consistency across packages.
In this release cycle, we have also invested significant effort into rewriting and improving several private packages related to the webshop ecosystem, focusing on stability, performance, and long-term scalability.
We are also planning the next iteration to focus on upgrading the front-end stack, including adopting more modern Node.js versions and refreshing key dependencies across the ecosystem.
Laravel 12 Compatibility
Laravel Enso is now fully compatible with Laravel 12 and includes alignment with the latest framework conventions.
Front-end
calendar
- updated css
card
- added collapsible prop
categories
-
improved layout
-
filtered, picture url
files
-
added thumbnail functionality
-
removed duplicated data
-
fixed date format
-
fixed actions disappearing
filters
-
implemented multiple enso filter functionality
-
fixed interval filter clear bug
monitored-emails
- added test button
services
- added ability to add acquisition price for suppliers
tasks
-
fixed toggle button from completed column
-
refactored reminder column and centered table values
themes
- added min-w-0 & is-scrollable helpers
ui
-
added force selection on search typeahead
-
added ctrl space hotkey for search bar
users
- removed delete person ability
back-end
addresses
- fixed upgrade edge case
api
-
added laravel 12 support
-
removed laravel framework dependency, already required in helpers package
-
implemented UsesBasicAuth interface;
-
added body and query parameters to log
avatars
- added laravel 12 support
charts
- removed laravel enso framework dependency, already required in helpers
companies
-
added is_public_institution column
-
addressed merge request discussion
-
removed is_tenant column and its modifiers
-
made git look up model
-
improved email validation
-
fixed null company route error in
mandataryIsNotAssociated()
core
-
added youtube to config
-
migrated to Laravel 12
-
improved preferences
data-export
- added ability to customize sheet name in async importer
data-import
- added flexible templates
dynamic-methods
- added laravel 12 support
enums
- added laravel 12 support
filters
-
fixed filter init on edge cases
-
removed laravel framework dependemncy, already required in helpers package
forms
-
fixed validation when passing array to enum options
-
removed laravel framework dependency, already required in helpers package
-
upgraded places api
-
added Referer
-
added resources
-
added publishing method
helpers
-
added loan calculator
-
added new vat rates
-
added laravel 12 support
-
refined Loan
-
added multiplers helper in vat rates
history-tracker
- added laravel 12 support
localisation
- improved preferences
logs
- fixed edge case where file size was cached
image-transformer
- removed laravel framework dependency, already required in helpers package
people
- improved email validation
rememberable
- added laravel 12 support
searchable
- implemented search provider support
select
- removed laravel framework dependency, already required in helpers package
tables
-
added fix for mappable enums
-
added ability to use relation methods
-
removed laravel framework dependency, already required in core package
-
improved preferences
tasks
-
added DynamicMethods and Abilities for tasks
-
fixed tasks without reminders
track-who
- added laravel 12 support
upgrade
-
added ability to sync roles by id during structure migration
-
removed contract
-
removed laravel framework dependency, already required in core package
-
fixed
isTexthelper
users
- improved email validation
webshop-commercial
-
dropped payment methods column
-
deprecated order contract
-
fixed orders show
-
fixed pay controller
-
deprecated invoice contract
-
finalized merge with webshop
-
removed stripe dependency
webshop
-
added nin field in user info form
-
removed mandatory nin
-
updated validation
-
fixed duplicated checkout; added loading class on checkout button
-
added sorts to returned products
-
fixed subcategories
-
added logs, attempts fix
-
fixed subcategory products
-
added missing attributes to returned product
-
attempted to mitigate effects of duplicated callback calling
-
added rating and reviewsCOunt to product resource
-
added isFavourite to Product Resource
-
temp fixed loading userfavs; send config productIdentifier to shared data
-
fixed companies
-
fixed sector display on autocomplete
-
updated Addresses and Companies Controllers for new Inertia forms
-
updated CreditCard Store Controller & others
-
moved new frontend files back to webshop package with working hmr
-
added gitignore in package public folder and addnl keys in lang ro json
-
fixed decimals
-
deprecated Order Contract
-
replaced images path with @images
-
completed account payment addresses companies layout
-
deprecated StoreOrder contract
-
deprecated invoice contract
-
finalized merge with webshop-commercial
-
extracted store in webshop commercial
-
removed unused contract
-
added cleanup observer
-
removed view service provider
-
implemented local module overwrite capability
-
displayed cart sections only when the cart was not empty
-
refactored forminput
-
added review like and dislike functionality
-
deprecated form input in account forms
-
added Featured Pages Layout and Example Page with placeholder data
-
removed unused Collapsible component
-
refactored form input
-
removed form input vue
-
replaced Toastr with Session::flash for toast messages
-
added recaptcha validation to all forms not protected by login
-
added contact form functionality
-
added activation required page
-
added registration disabled message if not allowed
-
added Order confirmation page content
-
product page done
-
payment options icons
-
fixed images
-
fixed recaptcha
-
added recently viewed products
-
implemented the new packaging unit resource
-
added subscribers
-
fixed: missing featuredPages shared prop causes crash
-
fixed: product gallery not loading images from hardcoded ceisales url
-
static Brand Catalogue page
-
added Featured Categories Slider in MegaMenu
-
fixed long product name popover not showing; restyled BrandPreview component
-
improved brand catalogue
-
made brand catalogue index section stick to top on scroll
-
improved gtm usage
-
reset cartStore upon logout
-
fixed cart reset upon logout
-
extended customisation options
-
completed mobile styling
-
fixed large product cards in CategoryPreview
-
added empty cart message
-
fixed cart page crash when address property is null
-
completed add to cart feeback
-
tweaked account layout
-
added cart summary on icon hover
-
added empty cart popup message
-
completed localization
-
fixed category menu toggle button nowrap
-
removed duplicate / unused createOrder method
-
added fastCheckOut page and extracted Account form fields into components; fixed address locality autocomplete
-
added login prompt and account creation notice to fastCheckout page
-
better error handling in fastCheckout page
-
added ability to resolve cart response from container
-
fixed add new company button
-
added custom theme overrides in PrimeVue and Sass
-
added svg import as component plugin; dynamic svg icons colors
-
made Inertia middleware more inheritable
-
implemented Sentry in new Webshop
emag
- deprecated is_tenant from company
commercial
-
added default sort for all table templates; allowed editing sale payment method for default sale channel unless sales is fulfilled
-
fixed stock rotation
-
removed search service provider
-
added ability to extend product label
-
fixed label
financials
- Modified vatrates to new requirements for august 2025
inventory
- fixed table
Upgrade Steps
To successfully upgrade to Laravel 12 and this latest version of Enso, follow these steps:
-
Update Composer dependencies: Update the Laravel Enso Core version in your
composer.jsonfile as well as any other relevant package upgrades."laravel-enso/core": "^11.0", "phpunit/phpunit": "^11.0",
-
Run composer update: Install the new dependencies by running the following command:
composer update
-
Follow the official Laravel 12 Upgrade guide: Refer to the Laravel 12 Upgrade guide, making sure to also check out the comparison tool and update your files accordingly.
-
Run pre-migration upgrade: Before migrating your database, ensure you run the upgrade preparation command:
php artisan upgrade --before-migration
-
Run migrations: Update your database structure using the migration command:
php artisan migrate
-
Run post-migration upgrade: Complete the BE upgrade process with the final command:
php artisan upgrade
-
Upgrade FE dependencies: Complete the FE upgrade process:
- add vue-router to transpile / optimize dependencies in vite.config.js
- update minimatch...
7.0.0
7.0.0
This release focuses on aligning Laravel Enso with the latest Laravel version (v11), bringing significant updates and improvements. We highly recommend upgrading your base application structure to match the Laravel 11 structure to ensure full compatibility and take advantage of new features.
Laravel 11 Compatibility
Laravel Enso is now fully compatible with Laravel 11. This update brings performance enhancements, security updates, and new features introduced in Laravel 11.
Recommendations for Upgrading to Laravel 11
We strongly suggest updating your base application to the Laravel 11 structure. For reference, you can explore the changes and updates in this merge request: Laravel Enso PR #443.
In addition to that, please follow the official Laravel 11 upgrade guide to ensure your application’s codebase is fully aligned with the new version.
front-end
addresses
- implemented additional features
datepicker
- added is-success prop
files
- removed unused code
forms
- added preview for wysiwyg fields to prevent unnecessary tinymce consumption
people
- removed extra component
select
- added is-success prop
- added is-warning prop
tables
- fixed bad timing when saving preferences
- attempted to fix filters reset
- made another fix attempt
textarea
- fixed behavior
users
- fixed reactivity
back-end
action logger
- attempted to fix missing request user
- removed upgrade file
addresses
- added additional in label
- moved geocoding to google
- fixed casing
- removed upgrade file
api
- implemented as form
companies
- implemented dynamic methods
- removed upgrade file
core
- fixed various issues
- removed upgrade files
- fixed carbon usage
data export
- replaced deprecated box/spout with maintained openspout/openspout
data import
- sanitized non-utf-8 chars
- fixed failed decoding
- removed upgrade files
- improved default sort direction
- replaced deprecated box/spout with openspout/openspout
dynamic methods
- fixed binding for dynamic methods
enums
- implemented php native enum and added autodiscovery
- split enum trait into random and select
- improved search and mapping
excel
- replaced deprecated box/spout with openspout/openspout
files
- fixed icon in resource
filters
- improved clarity
forms
- fixed validation
- improved enum validation for options
- added geocoding api endpoint
- improved reviews endpoint
helpers
- added
tosnakecasetrait for requests validators
localisation
- removed upgrade file
select
- implemented nested pivot relations
- fixed filtration for empty values
tables
- fixed exporting tables with default sorts
- improved validation error for enums
- refactored validation
- avoids file write concurrency during parallel testing
users
- fixed user seeder
versions
- updated various features
privates
webshop
- implemented new features like cookie consent
financials
- fixed upgrade inconsistencies and deprecation warnings
inventory
- added abilities on inventory in
- fixed various issues
Upgrade Steps
To successfully upgrade to Laravel 11 and this latest version of Enso, follow these steps:
-
Update Composer dependencies: Update the Laravel version in your
composer.jsonfile.composer require laravel/framework:^11.0
-
Run composer update: Install the new dependencies by running the following command:
composer update
-
Run pre-migration upgrade: Before migrating your database, ensure you run the upgrade preparation command:
php artisan upgrade --before-migration
-
Run migrations: Update your database structure using the migration command:
php artisan migrate
-
Run post-migration upgrade: Complete the upgrade process with the final command:
php artisan upgrade
-
Important! If you updated your config keys, make sure to also update your keys on the live .env
BROADCAST_DRIVER => BROADCAST_CONNECTION
MAIL_DRIVER => MAIL_MAILER
... Optional Steps
Depending on your current setup, you might want to consider additional steps for a more complete upgrade:
-
Upgrade your application structure: You can take inspiration from this PR.
-
Update .env variable names:
Laravel 11 introduced changes in the naming conventions for some environment variables. Review and update your.envfile accordingly. -
Migrate cast properties to
casts()methods:
Laravel 11 encourages using thecasts()method for handling property casts. Review your models and migrate any property casts to the newcasts()method for better structure and maintainability. -
Update your custom exports if necessary:
This commit deprecated box/spout with maintained openspout/openspout. Check if there are any implications which affect your local exports.
Make sure to test your application thoroughly after the upgrade to ensure everything works as expected with the new Laravel 11 structure and features.
v6.0.0
6.0.0
This release aims to bring our ecosystem one step closer to the latest Laravel release. The primary reason for the delay was the necessity to upgrade all dynamic relations across our entire codebase to support the native Laravel Implementation. This process required extensive testing to ensure proper compatibility.
Additionally, we took this opportunity to implement support for PHP native enums alongside our existing enum implementation. This decision was mandatory for maintaining backward compatibility while also embracing the latest features offered by PHP. Integrating these two required enum implementations further contributed to the release delay.
Here are the key highlights:
-
Laravel 10: Laravel 10 is now a mandatory requirement for the v6 release.
-
Form and Tables Packages Update: Both packages now support native PHP Enums in addition to our custom implementation, ensuring backward compatibility.
-
Automatic Dynamic Relations/Methods Registration: Dynamic relations are now registered automatically and utilize Laravel's native dynamic relation registration functionality. Dynamic methods are registered automatically as well. All dynamic methods and relations must be created under the
App\Dynamicsnamespace.
Front-end
accessories
- hides count if 0
addresses
- fixes modal multiple open/close
- improves logic segregation
- fixes default value for id in form
bookmarks
- fixes bookmarks
calendar
- removes deprecated imports
- adds colors
- fixes import
card
- fixes events
charts
- fixes rounding issue
checkbox
- fixes v-model use on prop
clipboard
- fixes size
- removes custom size
comments
- improves padding
- improves word break
companies
- adds ability to navigate to person create form from company edit form
- adds router error handler
- fixes #16
confirmation
- fixes attribute inheritance
currencies
- removes unneeded actions in store
data-import
- fixes rejected arg
- refactor due to
Typesenum deletion - adds invisible & template props in import uploader
- fixes import uploader
dropdown
- fixes selections during transition
- adds
open-upprop
files
- adds store
- adds count option on folder
- removes max width for files
- brings back
max-w - improves file layout
- adds
word-wrap:break-all
filters
- fixes input filter clear control
- fixes v-model on input filters
- supports null in core input filter
- improves label translation
- adds
xpadding for header
forms
- implements custom submit path
- adds
dirtyFieldsarray - adds
Confirmationto export list - makes all actions
<a>instead of<button> - removes confirmation modal
- extracts the new confirmation in its own component
- adds ability to pass params to select field
how-to
- raised limit for how to videos;
io
- removes redundant websockets connect
- fixes IO elapsed / remaining toggle
- improves operation template
- adds support for tasks
- makes tasks not cancellable
measurement-units
- makes form smaller
menus
- removes transition group tag from draggable
- removes unused prop
money
- fixes
modelValueprecision - fixes input for values with comma thousands separator
- fixes null handling
notifications
- removes redundant websockets connect
packaging-units
- improves form
people
- improves edit form
progress-circle
- allows string progress
progress-indicator
- fixes missing import
quick-view
- fixes animation
select
- ignores options if is server side
- fixes searchLimit condition
- fixes objects scenario
- adds open-up prop
strings
- fixes #2
switch
- improves label slots
tables
- adds event on ajax/fetch error
- implements filter state handling
- fixes initial filters backup
- improves filter state handling
- implements custom css row style
- fixes mobile controls
- adds ability to toggle selectable from ui
- clears selection when selectable is toggled
- fixes space in records info -> selection details
tabs
- improves tab id type
tasks
- removes redundant websockets connect
- update error handler in selector
themes
- fixes avatar size
- fixes tooltip arrow
- disables light classes for dark theme
typeahead
- now using trim for query length
- uses invalidRegExp in template
ui
- fixes code style
- uses await / async in store
- improves
app-update - puts
app-updateindicator in its original position - adds route getter in store
- added check for having the route in the state obj
- adds http helper in local
- fixes password reset
- adds
app-state-loadedevent - adds option to hide/show page header
- fixes edge case where the
appUpdateitem is not present - adds handling for
422errors in error handler - improves navbar item to accept array icons
users
- fixes user profile template
Back-end
action-logger
- implements
duration
addresses
- adds
namein township rememberable keys - adds
abbreviationin region rememberable keys - adds ability to update coordinates
- adds missing relations
- implements the new
geocodingKey - adds
Regionresource - adds locality name to resource
Locality - adds
addressesrelation - adds
Abilitiestrait
api
- allows string type request body
- adds timeout contract
- implements mandatory validation
- helper update
avatar
- adds minssing
unique()onfile_id
calendar
- fixes event filtering
- adds colors
charts
- depreciate when helper trait
comments
- refactor resource alias
companies
- makes
fiscal_codeunique in importer - drops
companies_reg_com_nr_unique
control-panel-api
- implements
syncPermissions
core
- removes superfluous enum
- removes .styleci.yml
- adds tiktok in config
- fixes email icons
- adds
noindexmeta
data-export
- improves export excel speed
- adds custom max contract
- adds custom count
- improves email subject for export done / export error notification
- implements
CascadesFileDeletion - adds missing
unique()onfile_id - fixes
syncExporter - improves data export by extracting iteration part; adds
CustomMininterface - fixes edge case in iterator
- Use qualified key name instead of key name
- adds notifiables ability to export
data-import
- added the purge command implementation
- removes prune batches
- makes private table builder methods protected
- adds avoids deletion conflicts on import
- added upgrade; updated migration
- set batch null on import cancellation
- implements
CascadesFileDeletion - updated cascade deletion; added missing unique index
- when restarting an import, optionally cleanup the attached
RejectedImport - improves purge command; improves table builder; fixes
rejected_importsfk - improves purge command
- fixes
deletemethod in model - fixed old
deletable($type)usages - fixes rejected load
- prioritized
RejectedDataImportForeignKeyAFTERRejectedDataImportId - fixes excel seeder
- Update
RejectedFileCreatedBy - improves excel seeder for better flexibility
- refactor due to
Typesenum deletion - fixes missing enum
- adds cancel stuck command
- implements CSV import
- reverts example import to excel
- addresses mentions
- depreciate when helper trait
- fixes exception in
Optionsservice, refactor - improves
restartmethod - adds
txtas supported type
document
- implements
CascadesFileDeletion - fixed deletion
- fixed actions
dynamic-methods
- improves dynamic methods and relations functionality, wraps core laravel dynamic relations
files
- adds file id unique upgrade
- fixes destroy redirect
- removes file in attachable; adds
CascadesFileDeletioninterface - fixes cascadable
- adds missing
unique()onfile_id - add upgrade to drop old morphable index
- improves performance in files index
- fixed upgrade order & type (manual)
- adds missing index
- adds
type_id&created_atindex - adds state for types
- improves upload controller logic
- adds
loadDatain file model - fixes icons in type index table;
- moves
is_publicinfile_typestable - fixes factory
- fixes browsing public files
form
- improves form mutators (arg handling)
- fixes args handling
- adds support for params
- adds support for pivot params & custom params
- depreciate when helper trait
- fixes encrypted columns length
- updated migrations
- addresses PR discussion
- removes static property from settings model
- adds recaptcha url field
- adds recaptcha validation rule
- improves message in recaptcha rule
- adds geocoding key
helpers
- adds round capability in Decimals
- adds use index ability in forceable index trait
- small refactor
- depreciate when helper trait
how-to
- adds minssing
unique()onfile_id
io
- improves
ioEvent - adds support for task
- reverted interface method return type
- uses
broadcastQueuemethods in event
localisation
- adds new confirmation text
- fixes translation
- improves texts
menus
- refactors the menu table
- adds filename for inline
people
- adds email in person resource
- implements
id_seriesandid_numberfields - import #23
- improves factory
- remove validator
- fixes upgrade order
- Update
IdNumber
permissions
- improves access-route gate to user cache
roles
- manages role-permissions cache
- improves cache handling
- caches permissions only in production
- improves role seeder
- reverts previous config change
- improves roles seeder
- adds user ...
v5.0.0
5.0.0
This breaking release brings the new Enso file system and upgrades all packages to Laravel 9.
The old filesystem was pretty basic and has been upgraded to something more robust by replacing the usage of polymorphic relationships with regular foreign keys (models that were using the HasFile trait now have a file relationship through a file_id column) with more features (such as favorite files) as well leaving room for future functionality.
We've taken advantage of the breaking version state, included other small changes from our backlog and made a slight change to the mechanism for locally extending package forms and tables.
Due to these changes, most packages have had a refactor and dependency list upgrade.
Front-end
clipboard
- updated clipboard size
confirmation
- removed unneded
v-bindfrom dropdown
directives
- improved
clickOutside.js
documents
- removed
Document.vuecomponent, now we useFile.vueinstead
files
- major refactor in order to work with the new file system back-end changes
- several fixes & enhancements
- added edit ability for file name
how-to
- fixed uploader
mixins
- improved
ensoFile.js, now it's constructor receives aFileresource instead of a filename
notifications
- fixed transition group
tables
- cascades reset method
- implemented number formatting for nested columns
themes
- fixed confirmation; removes duplicated & deprecated classes
ui
- added
avatarKeyin store - made content relative in default layout
- improved websockets
uploader
- cascades slot in
enso-uploader - small refactor
users
- fixed uploader
- fixed
v-click-outsiderelated bug on profile control - improved
Avatar.vue - added
Urlcomponent
back-end
All packages have been updated with regards to:
-
aligning Form builder, Table builder & Form request validation classes naming conventions, by dropping superfluous prefixes.
-
when extending forms, rather than overriding the protected constant
TemplatePath(which has now become private), we've added a protected methodtemplatePath()that is used in the forms' constructor. When extending any form builders, you should override this method if you want to use another form template. -
when extending tables, note that the protected constant
TemplatePathhas now become private, and we've updated the public methodtemplatePath(). When extending any table builders, you should override this method if you want to use another table template. -
due to the major files refactor, all packages that use files have been updated.
FileServiceProviderfile has been deleted and also removed form composer files. -
the new file system impact has also led to the need of changing the initial order of migrations. For this change it already exists an upgrade, but you should take a note that a lot of package migrations have been renamed.
-
all migrations have been upgraded in order to return an anonymous class by the new Laravel 9 style. This way we can avoid class name collision.
-
an important note is that the old
DataImportandDataExportmodels have been renamed toImportandExport, respectively.
action-logger
- updated migration style
addresses
- fixed seeders path
- updated migration classes
api
- no longer sends empty request body
- fixed api calls
- added query parameters interface
avatars
- refactor for the new file system
- updated migrations
calendar
- updated migrations
cli
- fixed synthax error in
Exceptions/WriterProvider.php - fixed template path generation for forms and tables
comments
- updated migrations
companies
- fixed seeders path
- updated migrations
control-panel-api
- fixed seeders path
- updated migrations
core
- fixed seeders path
- updated
Preferencerememberable keys - fixed password validation when resetting password and email is missing
countries
- updated
eeafor United Kingdom - fixed seeders path
- updated migrations
data-export
- refactor for the new file system
- updated migrations
- renamed
DataExportmodel toExport
data-import
- switched order for authenticate / authorize
- refactor for the new file system
- updated migrations
- renamed
DataImportmodel toImport - the excel seeder has been updated, please see upgrade steps regarding this change
documents
- refactor for the new file system
- updated migrations
files
The file system has been significantly improved and has received a lot of new features, such as:
- switched polymorphic relations to one to one
- updated migrations
- a much more user friendly interface
- added edit ability for file name
- temporary link generation for 5 minutes, 1 hour or 24 hours
- improved inline preview
- allows the transformation of private files into public files and vice versa
filters
- fixed "doesntContain" search mode
- updated migrations
helpers
- small refactor
how-to
- refactor for the new file system
- updated migrations
impersonate
- updated migration;
localisation
- added the
Full Namekey andROtranslation - fixed seeders path
- updated migrations
- the localisation files have been moved from
resources/langdirectory tolangdirectory
menus
- updated migrations
notifications
- updated migrations
- updated pusher dependency
- updated laravel snappy
- added
output()to Pdf - added return types
people
- updated migrations
permissions
- updated migrations
roles
- updated migrations
tables
- added the possibility to conditionally return a table builder using the
tableClass($request)method in addition to the$tableClassproperty, used in the table related controllers (init, data, excel) - fixed resource collection computor
- refactor for the new file system
- implemented number and date formating for nested columns from loaded relationships
tasks
- updated migrations
tutorials
- updated migrations
user-groups
- fixed seeders path
users
- fixed seeders path
- changed user
defaultPreferencesvisibility toprotected - updated migrations
- updated user preferences to use cache
Private Packages
webshop-commercial
- updated migration
- refactor for the new file system
webshop
- rebuilt assets
- updated registration form label for name to Full Name
- added default for sorting in order to address bot caching of deprecated URLs
- fixed seeders path
- updated migrations
- removed
servicesas dependency - refactor for the new file system
emag
- added missing branch from the
UpdateStocklistener; small job rename - offer now uses dynamic methods
- added conditional trim
- added new
Offer::validscope - added logic to delete awbs after download
- fixed
Joblocation; - updated migrations
hr
- fixed seeders path
- updated migrations
projects
- fixed seeders path
- updated migrations
contracts
- updated migrations
commercial
- updated the
UpdateStockValuesdue to supllier pivot refactor - shipping address is optional on store orders
- added fix for missing address
- made supplier query more specific
- added requests
- fixed issue due to
product_supplierpivot id - updated migrations
- refactor for the new file system
financials
- updated migrations
- refactor for the new file system
inventory
bundlePackingcleanup- added
withAvailablescope onProduct - updated migrations
discounts
- updated migrations
wiki
- updated migrations
- refactor for the new file system
frisbo
- fixed seeders path
- updated migrations
stripe
- updated migration
eav
- adds
publishmethodAppServiceProvider - simplified
eavvalidation - removed unused model
- added default for validator, when
eavparams payload is missing - updated migrations
sale-channels
- updated migrations
product-eav
- fixed
eavsyncing - simplified logic; removed attribute id from values pivot
- added missing model
- fixed table PK
- added default for eav sync / Update
- fixed the
getEavdynamic; transformed the$product->attributes()dynamic relationship into a method - updated migration
- fixes import
Upgrade steps
First and foremost, be sure the to read the official Laravel 9 upgrade guide to understand all implications.
- before starting to upgrade your project, please read with attention the following step:
Due to the major files package refactor, all the Enso package classes using files will be updated accordingly.
-
publish the updated files config with
php artisan vendor:publish --tag=files-config --force -
add your local models using files under the
upgradekey. The syntax is:old attachable_type name => Model::class. -
if having several models stored under the same folder, then that folder name should be added under the
nonStandardFolderskey, so that the files could be migrated according to the new convention. The new convention is that the folder will be named as the model, written camelCase. -
if you also want to rename your folder, you'll need to specify the name change under
renameFolderskey, as'old name' => 'new name'. -
for all models using files, update your migrations by adding
file_idforeign key.
$table->unsignedBigInteger('file_id')->nullable();
$table->foreign('file_id')->references('id')->on('files')
->onUpdate('restrict')->onDelete('restrict');
- if using the
ensoFile.jsmixin locally, when instantiating the class, you should pass a file resourc...
v4.9.1
4.9.1
This minor release aims to update front-end packages to use the latest bulma syntax. It also includes many improvements and bug fixes.
Front-end
auth
- fixed password confirmation bug
data-import
- added support for template params options in addition to source
directives
- simplified, improved performance & code readability of
v-click-outside
io
- updated
navbar-itemuse
notifications
- updated
navbar-itemuse
roles
- improved
configure.vueinfo
tables
- fixed bug affecting preferences saving caused by the vue3 ugrade
tasks
- updated
navbar-itemuse
themes
- several deprecated helper classes such as has-margin-small, has-padding-small and their derivates have been removed
- [v-cloak] & *:focus styling is included within the package
- since v-tooltip is globally available, its css is loaded within the themes package
ui
- fixed dynamic navbar component registration rendering
- improved
navbar-item; added show, hide and touch events
users
- fixed navbar avatar on safari
back-end
core
8ee62af updated meta: removed csrf token
countries
b4bc27f updates eea for United Kingdom
data-import
- added template params options support
permissions
- added short name in permission resource
users
- fixed user preferences reset
- changed the User
storePreferencesmethod visibility to public
Private packages
webshop
- removed deprecated css classes
- updated searchable array to use the
visibleOnWebshopdynamic
emag
- added check for response error
commercial
- added validation on external fulfilment
- fixed typo
wiki
- removed deprecated css classes
Upgrade steps
-
if you're still using the deprecated css which have now been removed, you should update:
-
has-vertically-centered-contenttois-flex is-align-items-center -
has-margin-autotoma -
has-margin-xxx,has-padding-xxxand their derivates (top, left, etc) to their corresponding bulma counterparts (m-1, m-2, ml-1, etc). See docs.For example:
has-margin-large->m-3has-margin-top-large->mt-3has-margin-right-small->mr-1has-margin-bottom-medium->mb-2has-margin-top-small->mt-1has-padding-left-large->pl-3has-padding-large->p-3has-padding-medium->p-2has-margin-top-medium->mt-2
-
-
remove
[v-cloak],*:focus&@import 'v-tooltip/dist/v-tooltip';fromclient/src/sass/enso.scss -
update the Enso version to
4.9.1inconfig/enso/config.php -
run
composer updatein the project's root -
run
yarn,yarn upgrade && yarnin/clientto ensure you have the latest versions and patches are applied. If necessary, update your patches -
php artisan enso:upgrade --before-migration -
php artisan migrate -
php artisan enso:upgrade -
as per every release, delete any local, deprecated upgrades
v4.9.0
4.9.0
This release upgrades the UI to Vue 3 and also includes under the hood refactor
for a few core components. We've tried to maintain overall component compatibility
and done our best to document the breaking changes.
Depending on how complex the UI for your project is, the upgrade may take
anywhere from a 1.5h to many days, so please take your time to go through the Enso changelog,
especially the upgrade steps AND also the Vue3 upgrade guide linked below.
Front-end
All packages have had their dependencies and dev dependencies updated and pruned.
Many packages have had linter recommended fixes.
filters
- the
DateIntervalFilter&EnsoDateIntervalFiltercomponents have been retired
laravel-validation
- added an
all()method, that returns all errors
pull-to-refresh (new)
This a new Enso package, forked from lakb248/vue-pull-refresh
and updated to work with Vue3.
select
- fixed element deselection when the select was used in 'object' mode
Private packages
inventory
- aligned products index page style & updated table filters/state
commercial
- updated the invoice issuing routes
- improved items display
emag
- fixed auto pricing controls
- fixed auto pricing conditions
- updated emag dependent filters to auto clear when deactivating emag
- fixed can-access usage; improved Emag.vue
- added new product filters for emag offers; added new visual indicator for "genius"
products
- small fix for products index styling
webshop
- form cleanup
Back-end
categories
- fixed ordering bug
core
- updated state Meta: removed csrf token
localisation
- removed the expanded sidebar key (cleanup)
tables
- fixed excel export on all scenarios
- fixed authenticates on export
- fixed style
- updated to allow sortable for nested columns (should be used carefully);
- extracted Computor from Data
- improved excel export -> fetcher needs to be redesigned
- improved excel preparing
tutorials
- updated form to use the new
permissions.optionsroute
Private packages
commercial
- updated addresses logic for the sale form
- fixed status filter
- improved stock values computation
- removed created/updated_by fields from being exportable
- bugfix: only perform invoice cancellation if invoice exits
- implemented the possibility to enable per sale channel opt-in/out for sale notifications
- fixed acquisition price in stock values Computor
- removes unneeded relation loads; fixed style
commercial
- removed the back button for the modal form
eav
- fixed group & attribute reordering bug
- small Attribute factory fix
emag
- fixed missing return
- refined stock management
- improved code to keep the local offer in sync with the emag remote offer on each upload
- improve order flow for edge cases when API is down
frisbo
- added order update webhook endpoint,
append product lot to product name and order notes - small refactor
- added logging for api callbacks
- expiration date flow enhancements
Vue Migration Build
In order to migrate a project, we will use the Vue3 Migration Build as an intermediary step, upgrade the code to make it Vue3 compatible, then finally switch to the regular Vue3 build.
Please read the official documentation linked above, so you have a better understanding of the process.
In order to use the migration build, it needs to be imported and configured:
- in
client\package.json:"@vue/compat": "^3.2.20", - in
vue.config.js, within thechainWebpackconfig:config.resolve.alias.set('vue', '@vue/compat'); config.module .rule('vue') .use('vue-loader') .tap(options => ({ ...options, compilerOptions: { compatConfig: { MODE: 2, COMPILER_V_BIND_OBJECT_ORDER: false, COMPILER_IS_ON_ELEMENT: false, }, }, })); - in
client\src\js\enso.js:Vue.configureCompat({ RENDER_FUNCTION: false, INSTANCE_LISTENERS: false, COMPONENT_V_MODEL: false, ATTR_FALSE_VALUE: false, INSTANCE_ATTRS_CLASS_STYLE: false, TRANSITION_GROUP_ROOT: false, });
The package & snippets are already present in the Enso release, but they will be commented out, so in order to enable the migration build, open the relevant files and uncomment the blocks above.
Note that the compiler migration build flags belong to the vue.config.js file and require the restart of HMR (if using it) while all other flags belong to the client\src\js\enso.js file.
Vue Dev Tools
For Vue3, a new browser devtools plugin is needed and can be installed along side the Vue2 plugin.
Upgrade Steps
In addition to upgrading the Enso UI to make it Vue3 compatible, we've also made some other changes to a few Enso components some of which may impact your local code.
-
update the following files with the latest versions
.babel.config.js.eslintrc.jsvue.config.jsclient\src\js\enso.jsclient\package.jsonclient\src\sass\enso.scss
-
enable the migration mode, as noted above
-
run
yarn && yarn upgradeand start HMR -
you should be able to login into the application and will probably have some (lots of) errors and warnings
-
the deprecated
legacyBuildflow for building the application state has been removed entirely store.js -
we have aimed to remove global components and instead import them for each use case
- the
facomponent is no longer global and needs to be imported locally, where usedimport { FontAwesomeIcon as Fa } from '@fortawesome/vue-fontawesome'; ... components: { ..., Fa, ... }, - the global
httpaxios alias is no longer available,
instead it should be injected as required:
Update:tomyMethod() { axios.post(...); }inject: ['http'] ... myMethod() { this.http.post(...); }
- the
-
if using any
@hook:...hooks, replace all usages with@vnode-...docs -
in all of your renderless components you can set the
inheritAttrs: false,attribute to eliminate warnings about inherited attributes -
$listenershas been removed / merged into$attrs. See docsYou need to remove
v-on="$listeners"usages.
Note that in such cases, you will probably need to cascade events, either directly or viav-bind="$attrs"if applicable. -
$scopedSlotsproperty is removed and all slots are exposed via$slotsas functions. See docs.You should replace
this.$scopedSlots.xxxwiththis.$slots.xxxin your render functions -
update the slot syntax, by replacing
v-slot:xxxwith#xxx -
if you are still using the deprecated named / scoped slot syntax, update it to the latest syntax first (which is already supported in 2.6)
For example, replace<template slot-scope="{ count }">to
<template #default="{ count }"> -
the
beforeDestroyhook has been renamed tobeforeUnmount- you should replace all usages project wide. See docs -
when using
$elwithin components, ensure that there is a single root within the element (e.g.<div>) -
when emitting events in components (e.g.
$emit('click')), it is recommended to declare/list the emitted events:emits: ['click'], -
for components, the
valueproperty has becomemodelValueand theinputevent has been replaced withupdate:modelValue. See docsWhen listening on 'value' changes on components, you need to replace
@input="xxx"with@update:model-value="xxx".
In Vue3 you can also have multiple v-model bindings on the same component. See docs -
in all of your renderless components you can set the
inheritAttrs: false,attribute to eliminate warnings about inherited attributes -
note that in Vue3 you can no longer programmatically destroy components as the
$destroy()method has been removed. See docs -
HTML bound attributes such as
:disabledwill be rendered asdisabled="false"for false values, and if you need to not have them rendered, the bound attribute value needs to be evaluated tonullorundefinded. See docs -
if using watch on arrays, you need to add
deep: trueotherwise the callback may not be triggered. See docs -
you no longer need to use
$set&$deleteto manage object attributes in order to keep responsiveness, you can use regular JS syntax. See docs. -
if asynchronously loading components, the syntax has changed. See [docs]...
v4.8.2
4.8.2
This aims to be the last minor release before upgrading to Vue 3 and includes many improvements, bug fixes and also several new features.
Front-end
addresses
- implemented google package
algolia (new)
- implemented settings package for Algolia
bulma
- added toggle filters
- added users as dependency
charts
- updated
Chart.vue - updated dependencies
- fixed chart instance usage
- brings back default options
- added
shortNumberfilter
data-import
- improved UX for disabled exports
emails
- updated syntax and eslint config
enums
- updated dependencies and
.eslintrc.js
files
- small refactor in index
- removed redundant chart option
filters
- added toggle filters
- added dirty to filter-state
- improved dirty watcher in filter state
forms
- added the ability to reload based on a be flag
- exposed
undo()
- fixed missing icon import
meili-search (new)
- implemented settings package for MeiliSearch
mixins
- fixed edge case with re-rendering login form after logging in
mobile-app
- added
.eslintrc.js - updated
.gitignoreand dependencies
range-slider (new)
- Vue Range Slider based on
noUiSlider
route-mapper
- updated dependencies
- updated
.eslintrc.js - refactored the mapper class; fixed bug related to optional params; improved logic/flow
scroll-to-top
- fixed bottom margin
search-mode
- renamed
algoliatosearchProvider
select
- fixed multiple select value mutations when using state options
sentry
- updated dependencies and
.eslintrc.js
strings
- fixed slug generation issue to handle cases when
regExmatching had no actual matches
tables
- improved key in table header
- reflected filtered state
- added missing
mr-1in controls - added
dangeron filter flag - added support for dropdown actions
- added debounce for filters
themes
- added
has-margin-auto - removed
bulma-checkradio - updated
bulma-extensionsdependency - imported minimized css from
bulma-extensions
typesense (new)
- typesense integration for laravel-enso
ui
- added
integrations.js - improved app update notification
- updated
AppUpdate.vue - fixed app update
v-if - made app update dropdown always visible
- improved internal
AppUpdateflow; fixed issue with showing the modal - updated bulma-extensions dependency
users
- fixed user profile level margin
back-end
activity-log
- updated for php 8
- updated
.styleci.yml
addresses
- deprecated google config key, uses settings from google package
- improved validation for case when postcode exists in the DB, but for a different country
- improved postcode validation
- added GBR addresses
- added
Geocodingservice; updatedCoordinatesto use the new service
algolia (new)
- implemented settings package for Algolia
api
- implemented custom headers
- added a throttle helper
- added
toJsonmethod to the api resource - improved adding headers to the request
- added request duration logging
- updated api logger
- decreased duration column size
- removed nullable from duration
- added public
apiEnabled: boolon Action - improved exception message
- updated method visibility
avatars
- made the avatars generators configurable
categories
- added options endpoint
- removed unneeded attribute
- added categories import
- added sync queue for the categories import; if needed, template can be locally customized
charts
- refactored to
chartjs 3 - fixes default tooltip config
- implemented backend
shortNumbers - fixed horizontal chart
cnp-validator
- updated
CnpValidator.php - required php 8
- updated
strlenusage tomb_strlen
companies
- fixed company fiscal code in factory
- added queue sync for the companies import; if needed, template can be locally customized
- updated import, added new attributes
- added fiscal code to rememberable keys
control-panel-api
- fixed stat class
core
- added structure for integrations
- improved app update event
- added a
Logintrait to work with the latest changes in laravel-ui - fixed login test for the new guard config attribute in
sanctum.php
countries
- updated eea for United Kingdom
data-import
- fixed the Template's notifies method
documentation
- added route mapper docs stub & mention about transpiling
filters
- renamed
algoliatosearchProvider; improves searchProvider results
google (new)
- implemented settings package for Google
helpers
- updated searchable trait
- added production check
- configured styleci for php8
- updated Searchable trait due to new Algolia package
- updated price computor constructor and vatPercent use
- fixed searchable for extended / binded models
- added support for meilisearch in searchable
- removed deprecated searchable trait
- fixed
Obj casts:set method now performs json encode - fixed
Cashlabel - updated
codesize/phpmdconfig rules for constant naming - removed
Sleep - added new min max utility methods to Decimals
localisation
- updated texts, added new keys & translations
- added missing cleanup for the language update test
- added missing php dependency
- made seeder reusable in local projects
logs
- improved logs collection to handle archives
- fixed tests
meili-search (new)
- implemented settings package for MeiliSearch
phpunit-pretty-print
- updated strlen usage to
Str::length
select
- opened up flexibility on Options Service instantiation from
OptionsBuilder
tables
- added support for dropdown actions
- resolved resources from service container
- updated template
tasks
- fixed export error
typesense (new)
- new typesense integration for Laravel Enso
unit-conversion (new)
- new unit converter utility classes for Laravel Enso.
upgrade
- added
getLengthinColumn - added
exists()helper for table - updated upgrade status to address change in
Symphonyconsole table - ignored upgrades from namespaces that are not within autoload
Private packages
webshop-commercial
- added webshop searchable array
- maked default ranking 0 in search provider data
- replaced the product dynamic method
WebshopSearchableArraywith a simple service - updated flow for
webshopDiscount; now we no longer fall through to general supplier discount but use webshop company if no specific cliend discount exits - used float casts for searchable attributes
- updated webshop order implementation
- fixed class path and deprecated
Online
webshop
- moved search provider product index to webshop from algolia
- hides price and discount when no stock available
- removed
webshop-shadowrole - added
isActiveto theBaseFilters@facetsarray (excluded facets) - moved searchable attributes to webshop from webshop commercial
- updated contract & account order actions
- updated
BaseFilters.php - added availability filters
- updated discount observer
- hides empty filters
- added price filter
- added
priceFiltered()getter - added services for search providers
- removed
PaymentMethodsenum; - added payment config
- added default sorting to newest
- builded the new price filter
- implemented most popular sort
- various fixes, improvements and refactors
emag
- refactored add invoice -> upload invoice
- refactored product index use
- removed
ValidateStoreRequestrequest,MissingOffernotification, deprecatedparents()setter call, measurment units implementation, checker scopes & methods, recheck & cleanup flows andnotSyncedYetscenarios branch - offer download throws exception on error; categories sync service deletes any old emag categories
- updated order flow: now stopping before generating awb if not fully reserved
- emag categories now have parent id
- implemented awb schedule
- added vat id to the offer update resource and conversionable unit Enums
- updated
CreateCategoryEmagCategoryPivotTableandCreateEmagOffersTablemigration - now an offer is made inactive when we do not have stock
- removed deprecated
NullableCategoryIdupgrade - added
emagDiscount()dynamic for services, new headers to all emag requests and check for sync / when not empty - log now also sends email notification; added checker jobs failure handling
- made the buy button rank array key
optional - set number of offers & best offer sale price as nullable
- renamed
last_checked_attochecked_at - added check for the presence of the emag settings table for further scheduling
- refactors
fetchPicture(s)todownloadPictures - added new emag status
- added upgrade to drop offers
discount_percent - removed
auto_pricingfrom theOffertable resource and urls from the settings form and migration - removed download after each operation; updated offer fill, using DI resource, new genius column
- added upgrade for removal of old settings url columns
- added commands for activation/deactivation of the emag api
- various fixes and improvements
commercial
- enabled cancel
- removed sort by
created_by/updated_by - removed By columns from being searchable
- added limit for product labels
- updated products template
- refactored
grntogoodsReceivedNote - added
bulkStockRemoval - added limit and ordering for bulk stock removal;
- updated sale cancellation policy to exclude invoiced sales
- added locks
- updated limit to cover all cases
- allowed sale fulfill, on default channel & internal warehouses when missing address
- renamed
externallyFullfilled - added quick fix for sales payment form
- added awb schedule ...
v4.8.1
4.8.1
Front-end
For most of our frontend packages we've added router error handling.
addresses
- fixed case when address does not have locality/city
charts
- updated
Chart.vue
companies
- refactored
slot-scopetov-scope
control-panel
- improved layout
- fixed index and stat value format
datepicker
- fixes edge case when attempting to change value during picker reset
forms
- clears errors before autosave
mixins
- added
413error code handling
modal
- fixes modal and modal template
notifications
- fixed
Notificationcomponent registration for cases where we might revoke the default notification permission
products
- fixed small bug due to being unable to create slug when name is null
- reverted check for null, and moved it to the slug method
sentry
- added ingored errors (for
ChunkLoadError) - added
UnhandledRejectionto ignored
strings
- added string validation
- casted args to string
- refactored strings
- updated methods to also handle null parameters, in which case they return an empty string
tables
- fixed number formatter when
fullRecordInfois false - added ongoing request cancel in before destroy to avoid various timing errors; fixed and refactored
NumberFormatter - renamed method in number formatter
typeahead
- added
force-selection
ui
- adds sentry context
- removed duplicated filters
- fixed navbar item registration
- fixed text in dark theme on error pages
- added maintenance mode page
- fixed router error handler; improved middleware
users
- fixed user profile layout
back-end
action-logger
- refactors action logger middleware
- updates
.styleci.yml - removes redundant argument
addresses
- fixed code style
avatars
- improved
gravatar; renamed observer toUser
companies
- added company fiscal code request validation
control-panel
- drops org url
- adds sentry org to config
- improves config, adds env vars
- fixes return types; refactors switch to matches
- updates id signature & implements id provider
- adds
is_activein table builder for apps
control-panel-api
- improves middleware registration
- extracts api middleware group in the api package
- improves database sensor
- removes digits for request monitor
- improves request monitor
- extracts id provider
- improves logic; adds danger class for outdated versions
- fixed type in Services\Statistics
control-panel-common
- added missing return types in contracts
- added
IdProviderabstract class
core
.gitIgnore- adds alias for
ensure-frontent-requests-are-statefulmiddleware - extras middleware registration in separate provider
- updates
.styleci.yml - style update
- removes
core-apiroute group - improves
Logouttrait to work with non spa env - reverts logout
- New State logic - customization flexibility #393
- used
App::makeinstead of new for providers instantiation for flexibility on customizing states.
data-export
- fixed export error notification
- added custom row action contract
forms
- fixed section visibility set automatically to visible in the builder
helpers
- added
forceableindex - added cascades observers trait
localisation
- updated translations for
webshopreviews - added php version 8 for styleci cfg
roles
- improved syntax in config writer
select
- Options ordering - more sorting flexibility. #46
- created new select config option 'sortByOptions' for controling Select Options sorting.
- used new config 'sortByOptions' inside Options get method
sentry
- added prefix for recent exceptions; added
dedupeIntervalin publisheable config
tables
- fixed button name check (needed only for row)
- fixed tests
users
- added policy fixes
- implemented cascades observers
Privates
webshop-commercial
- updated middleware names
webshop
-
added exception when attempting navigation to unavailable pages; fixes #46
-
removed log
-
updated cookie consent blade
-
cleanup of unused routes; added local auth middleware instead of package
-
customized verifiy active state for webshop
-
makes product filters a partial;
-
built with latest sentry version
-
disabled the form button after submitting a review to avoid double clicks
-
updated the Review Submitted notif to include the product name
emag
-
handled setting attribute for when value is array; ref #30
-
updated offer generation for bundle
-
updated new offer resource for bundle products
-
updated resource re:ean for packages
financials
-
updated flow
-
removed hard coded logic for shipping service in XML generation
wiki
-
fixes login route
-
adds verify active state
frisbo
- adds bundle publishing ability
api
- added logs
- adds core-api midleware group
fetcher
-
updates gitlab ci and vue.config
-
increased the timeout limit
Upgrade steps
To upgrade:
- run
composer update - run
yarn,yarn upgrade && yarnto ensure you have the latest package versions and patches are applied. If necessary, update your patch files. php artisan enso:upgrade --before-migrationphp artisan migratephp artisan enso:upgradeto execute the upgrades- if you need to customize the select options sort method, you can do so by publishing the select config using
php artisan vendor:publish --tag=select-config --forceand updating thesortByOptionskey as needed. - make sure permissions are properly configured for each role and then save/refresh the roles configuration files
- update the Enso version to
4.8.1inconfig/enso/config.php
v4.8.0
4.8.0
This new release adds the possibility for back-end packages to publish their own state to the front-end as well migrates the framework & packages to PHP 8.0. Where applicable, updated packages to take advantage of the new language features.
Front-end
Most of the packages received a dependency list cleanup.
bulma
- added enhanced progress indicator
- added
ProgressIndicatorcomponent export
charts
- fixed labels update on structure change
- added
displayfunction prop
enums
- renamed the internal
i18nattribute to_i18n, to avoid potention conflicts with enum keys
financials
- fixed supplier invoice index layout
localisation
- improved store module
products
- improved the product form to update slug dynamically
- improved product picture styling/layout in table & form
- added newly computed supplier discounted price to the form
progress-indicator
- implemented enhanced indicator; various progress indicator improvements
rating
- updated mobile bottom position
scroll-to-top
- updated mobile bottom position
strings
- fixed the slug helper
tables
- removed the already deprecated
moneysupport; templates should now usenumber- more details are found in the upgrade steps - added customizable total label via the template's
totalLabelproperty - fixed page toggling
ui
- improved store module to allow for automatic package store registration
- small refactor and various fixes
- added sentry spike protection
user-groups
- removed unneeded file
Back-end
- all packages have had the route
requiresyntax updated toreqire __DIR__./xxx.php - all packages that were using
moneyconfiguration for numeric formatting have been updated to use the already availablenumberconfiguration - all packages that were including data imports, have been updated so that importers respect the new methods' signatures
- all
get_class($instance)usages refactored to$instance::class - seeders and factories have been updated, and where it made sense, helper methods (such as
test()) were added which create a different factory state (such as for testing)
action-logger
- code cleanup
activity-log
- route refactor
api (new)
- new package that provides boileplate for implementing APIs
categories
- fixed stacked bar chart
charts
- added
containsnested scope
companies
- extracted user state to the users package
core
- extracted user state to the users package
currencies
- removed
FixesCurrencyApiexception - refactored to use the new
apipackage
data-export
- added
data_exports.nameindex upgrade
data-import
- improved error logging for local environments
- updated interfaces to pass the import model instead of params/user
- added avoids deletion conflicts and updated delete method
- added
notifiesboolean flag in json template andnotifiableIdsconfig option - added
paramsto optional attributes
files
- improved the file resource
helpers
- disabled algolia syncing when not in production
- fixed searchable
- added price computor
- added new custom cast for
Object
localisation
- added & updated various keys & translations
measurement-units
- added the name attribute to the rememberable keys config array
- added
MeasurementUnitsenum
products
- updated price computor use
- updated product visibility in the supplier resource
- added newly computed supplier discounted price
- added
generateSlughelper - added
part_numberindex onproduct_supplierpivot - updated
package_quantitytype to int
roles
- added config options for restricting user groups
- improved visible scope
sentry
- extracted sentry functionality from the Core package
services
- made measurement unit not nullable in the table
- improved upgrade
upgrade
- renamed
nullableColumn method toisNullable - added
isSigned,isUnsignedhelpers,getPrecisionandgetScalefor decimals
users (new)
- extracted user functionality from the Core package
- removed title from profile builder
- added state provider
- improved
changeGrouppolicy
user-groups (new)
- extracted user groups functionality from the Core package
- added config options for restricting user groups
- improved visible scope
tables
- added customizable total label
- removed the already deprecated
moneysupport; templates should now usenumber- more details are found in the upgrade steps
Upgrade steps
- run
composer updatein the project's root - run the upgrade commands (both regular and
before-migration) to ensure
database & strucure is up to date, since this release cleans up a lot of package upgrades - upgrade your machine to php8
- in
composer.jsonupdate the following dependencies to the given versions:"laravel-enso/core": "^7.0","sentry/sentry-laravel": "^2.0.0""laravel-enso/phpunit-pretty-print": "^1.0","nunomaduro/phpinsights": "^2.0",
- search & replace in your local project (including the database folder) the following namespaces:
Core\Models\UserGroup->UserGroups\Models\UserGroupCore\Enums\UserGroups->UserGroups\Enums\UserGroupsCore\\Enums\\UserGroups->UserGroups\\Enums\\UserGroupsCore\Models\User->Users\Models\UserCore\Policies\User->Users\Policies\UserCore\Models\Session->Users\Models\SessionCore\Http\Controllers\Administration\Users->Users\Http\ControllersCore\Http\Controllers\Administration\UserGroups->UserGroups\Http\ControllersCore\Tables\Administration\Users->Users\TabelsCore\Forms\Administration\Users->Users\FormsCore\Http\Resources\User->Users\Http\Resources\UserCore\\Http\\Resources\\User->Users\\Http\\Resources\\UserCore\Http\Requests\ValidateUserRequest->Users\Http\Requests\ValidateUserRequestCore\Database\Factories\UserFactory->Users\Database\Factories\UserFactoryCore\Database\Seeders\UserGroupSeeder->UserGroups\Database\Seeders\UserGroupSeederCore\Database\Seeders\UserSeeder->Users\Database\Seeders\UserSeeder
- remove from
config/insights.phpthe deprecated:
use ObjectCalisthenics\Sniffs\Files\FunctionLengthSniff;
use ObjectCalisthenics\Sniffs\Metrics\MethodPerClassLimitSniff;
use ObjectCalisthenics\Sniffs\NamingConventions\ElementNameMinimalLengthSniff;
- run
composer updatein the project's root
- update any local person/people factories and seeders and remove the
titleattribute as it has been dropped - for your local imports, for the importer & validator classes, update the following method signatures (& logic where necessary):
- run:
public function run(Obj $row, DataImport $import); - after:
public function after(DataImport $import); - authorizes:
public function authorizes(DataImport $import): bool; - before:
public function before(DataImport $import);
- run:
- for your local table JSON templates, change any
moneykeys tonumber, and remove any "thousand" & "decimal" attributes. Number supportsprecision,symbolandtemplate(e.g. "%v %s" -%vfor value,%sfor symbol) - local
storage/app/.gitignoreshould be updated to ignore all and look like thisYou may also remove* !.gitignore.gitignorefiles from individual enso created, app sub-folders (exceptpublic) - check the local
config/enso/tables.phpfile and if theexport.pathkey is present, update it toexport.folder - local state:
- remove the local state binding from
App\Providers\AppServiceProvider:CoreLocalState::class => LocalState::class, - remove the
App\Services\LocalStateclass after moving any logic to one or more state builder services - from
client/src/js/enso.js, remove the import:import './localState'; - remove the file
client/src/js/localState.js - if you moved logic from the old
LocalStateclass, update the fileclient/src/js/store/local.jsas required, otherwise you may delete it. Note that theclient/src/js/storefolder MUST be present.
- remove the local state binding from
- compare
config/enso/config.phpwithvendor/laravel-enso/core/config/config.php
and remove any extra, deprecated keys - still in
config/enso/config.phpupdate the Enso version to 4.8.0 - compare
config/enso/addresses.phpwithvendor/laravel-enso/addresses/config/addresses.phpand remove any extra, deprecated keys - update the
passwordconfig/enso/auth.phpkey as follows:'password' => [ 'lifetime' => env('PASSWORD_LIFETIME', 0), 'minLength' => env('PASSWORD_MIN_LENGTH', 6), 'mixedCase' => (bool) env('PASSWORD_MIXED_CASE', 0), 'numeric' => (bool) env('PASSWORD_NUMERIC', 0), 'special' => (bool) env('PASSWORD_SPECIAL', 0), ], - from
Database\Seeders\DatabaseSeeder, from therun()method's unit tests running branch, you may delete the following seeders, as the respective factories have been updated to no longer require this:CountrySeeder::class, RegionSeeder::class, TownshipSeeder::class, LocalitySeeder::class, - update/rename the following
.envvariables:PASSWORD_LENGTH->PASSWORD_MIN_LENGTHPASSWORD_NUMERIC_CHARACTERS->PASSWORD_NUMERICPASSWORD_SPECIAL_CHARACTERS->PASSWORD_SPECIALPASSWORD_UPPER_CASE_CHARACTERS->PASSWORD_MIXED_CASE
- replace
LaravelEnso\Core\Exceptions\Sentryusage and import withLaravelEnso\Sentry\Exceptions\Handlerin `App\Exceptions\Handler.ph...