Skip to content

Releases: laravel-enso/enso

v3.0.0

14 Mar 08:30
Compare
Choose a tag to compare

General

Goals

We are always trying to move towards logic normalization (be it back end or front end), having the packages encapsulated, easy to work on, maintain, extend and customize.

Keeping the front-end assets together with the back-end code as well as having to publish everything on updates, managing what to overwrite or keep separate, was clearly not natural.

V3 is a big step in the right direction with the extraction of the front-end assets from the Composer packages and their move to individual NPM repositories.

Rewrite

All the VueJS components have been rewritten (around 20k LOC have been updated/refactored), and now there is a more logical flow, components communicate better with each other, there's a greater degree of re-usability, removed duplicated logic, less lines of code (the old middleware is gone) and even a bit of extra functionality.

We went for "composition over inheritance" favoring slots over props.

Where it was feasible we created renderless components.

We made use of dependency injection to replace global mixins or to share the state in specific components / libs.

After the refactor most of the middlewares were removed.

We tried to remove all the scoped scss styling from the vue components, opening them up for local customization

We added friendly aliases for imports.

NPM packages

We strived to create packages for every piece of functionality. This is still an ongoing process.

All the new packages can be found under the @enso-ui organisation on both github and npmjs.

For the active components we went for encapsulating the front end behavior in renderless components, and creating template wrappers.

Theming and styling

As before, Enso ships with two themes, one dark and one light.
The themes and the overall styling have been organized better, offer the possibility of easier customization and can be found in the @enso-ui/themes package.

It's easier to style specific components on both themes by creating a single scss file that uses variables, and place this file under the /components folder

Development & Customization

If previously, the best/only way to customize some of the pages was to create your own local copies and then making sure you overwrite the default Enso pages with your own versions, now you can customize the assets much easier. You can do this by either rewriting core-routes in your local project and point to local pages, or you can use (patch-package)[https://www.npmjs.com/package/patch-package] and customize anything in a package without having to manually maintain the differences.

You can easily write your own version for any asset while taking advantage of the existing behaviour contained in the renderless components. This even makes switching Enso from Bulma to the CSS framework of your choice much easier.

Therefore, for most packages, you have the possibility to:

  • customize the components within the packages and then use patch-package, or
  • locally create your own version of the component and change the imports to use your local component

For the theme customization you can:

  • customize the styles within the theme package and then use patch-package, or
  • create your own theme, locally, and change the theme import in webpack.mix.js

You can develop your own components and pages by importing just the bits and pieces you need.

Remember, should you need a custom behavior for a component, or your own version of a component with different styling you can build it your own way as most complex components have the core logic encapsulated in renderless components.

If making package fixes we kindly ask you to also open a github issue and a pull request, since this helps the whole community.

Enso vs Standalone

In the past, even if we're done our best to make some of the components work outside of the Enso ecosystem, there hasn't been a clear distinction between the integrated and the standalone components.

With the rewrite, all the packages were designed to be also Enso independent, and may be used in any vue project.

If you are developing your project within the Enso ecosystem, the Enso versions of the components offer a tighter integration into the framework,
automatically determining and using:

  • the user's locale
  • dynamically determined routes
  • the internationalization helper
  • the app's error handling
  • the user's date format

Bug Fixes & Improvements

  • page transitions are in better sync
  • the theme changing system was refactored and it's more efficient
  • the bookmarks bar is sticky
  • the document title is properly handled / translated
  • totals & numbers alignment in vue table
  • several levels of span removed in vue table
  • several edge cases fixed in vue-select

New Packages

Accessories (@enso-ui/accessories)

Addresses.vue, Comments.vue, Documents.vue
  • the controls property is no longer available
AddressesCard.vue, CommentsCard.vue, DocumentsCard.vue
  • the open property has been replaced to collapsed

Charts (@enso-ui/charts)

Chart.vue
  • a new formatter property is available, type function used to format the datalabels values
ChartCard.vue
  • a new errorHandler property is available
EnsoChartCard.vue

Forms (@enso-ui/forms)

VueForm.vue
  • a new errorHandler property is available
  • whole sections can now be inserted into custom slots made available for this purpose
  • the following events are available:
    • ready
    • loaded - each time the template gets fetched
    • submit
    • show
    • destroy
  • the Tabs component events are cascaded

Datepicker.vue (@enso-ui/datepicker)

  • the name property is no longer available

Divider.vue (@enso-ui/divider)

  • has a correspondent divider.scss in @enso-ui/themes, now looks good on the dark theme.

Money.vue (@enso-ui/money)

VueSwitch.vue (@enso-ui/switch)

  • the required property is no longer available
  • the type & size props is no longer available
  • Bulma classes can be set directly on the component (is-large is-warning)

Wysiwyg.vue (@enso-ui/wysiwyg)

  • tiptap was updated from 0.17.* to 1.7.*
  • now supports tables

Select.vue (@enso-ui/select)

VueSelect
  • the limit property has been renamed to paginate
  • the trackBy is now sent from the front-end to the back-end, which means this property is no longer needed in the back-end
  • the following events are now available:
    • select
    • deselect
    • clear
    • add-tag
    • input
EnsoSelect
  • new

Filters (@enso-ui/filters)

VueFilter.vue
  • the length property has been replaced with paginate
  • the validator property has been removed
  • if icons is used then the options object will use the icon key instead of label
EnsoFilter.vue
  • new
DateFilter
  • last week and last month were changed to 7 days & 30 days
EnsoDateFilter.vue
  • new
EnsoDateIntervalFilter.vue
  • new
EnsoIntervalFilter.vue
  • new
VueSelectFilter.vue -> SelectFilter.vue
VueSelectFilter.vue -> SelectFilter.vue
EnsoSelectFilter.vue
  • new
IntervalFilter.vue
  • is located in the @enso-ui/filters package

Notification.vue -> Toastr.vue (@enso-ui/toastr)

  • the container property has been removed and toastr-notifications is used by default
  • the i18n property has been removed
  • the html property has been added

Card.vue (@enso-ui/card)

  • the nested property has been removed. The nesting is handled automatically
  • the icon & title properties have been removed, in favor of using the default slot of the CardHeader component
  • the search property has been deprecated & removed
  • the badge property has been removed, in favor of using the default slot of the CardBadge component
  • the refresh property has been removed, in favor of using the CardRefresh component
  • the fixed property has been deprecated & removed. The card by default is non collapsible but when using the CardCollapse component within the controls slot, it becomes collapsible
  • the removable property has been removed in favor of the CardRemove component
  • the controls property has been deprecated & removed
  • the overlay property has been renamed as loading
  • the scrollable property has been deprecated & removed
  • the transition property has been added and is required if using transitions

Note that now the card has become more modular, so instead of giving properties, you'll be using other components to build the card to your heart's desire, achieving the previous functionality and going beyond.

Dropdown.vue (@enso-ui/dropdown)

  • added disabled property
  • height & width were removed and need to be managed in the wrapper component
  • hidesManually has been renamed to manual
  • used the new dropdown-indicator
  • built upon a renderless component
  • handles keyboard events: Esc, Tab, Enter
DropdownIndicator.vue (@enso-ui/dropdown-indicator)
  • reusable arrow with state

Modal (@enso-ui/modal)

Modal.vue (@enso-ui/modal)
  • the card property has been removed
  • the container property has been replaced with portal
ModalCard.vue
  • the container property has been replaced with portal
Overlay.vue -> Loader.vue (@enso-ui/loader)
  • the component has been removed and replaced with Loader
  • Loader is now located in the @enso-ui/loader package
  • the loader now has an improved animation and uses a transition for a better experience
Popover.vue -> Confirmation.vue (@enso-ui/cofirmation)

Tabs (@enso-ui/tabs)

Tabs.vue
  • the component design has been updated under the hood, switching from event based communication ...
Read more

v2.16.3

13 Feb 07:29
Compare
Choose a tag to compare

Small bug fixes, composer & npm packages updates

v2.16.2

03 Feb 15:32
Compare
Choose a tag to compare

Improvements

  • adds a new system for collection missing translation keys, optimizing the number of needed server requests
  • moves the IO logic in its own package, laravel-enso/io
  • refactors / improves the IO ui
  • refactors DataImport / DataExport to make use of the new helpers available for IO Operations
  • removes the chunk option from config/enso/datatable.php. The chunk is determined dinamically now
  • fixes missing header bug in VueDatatable excel exports, on every sheet
  • fixes exporting hidden columns (!visible) in vue datatable
  • fixes icon rendering bug in menu manager table when using fa icons with other prefix than fas
  • updates all Enso's tables to use the new cache feature

To upgrade

  • run composer update
  • run yarn run dev

v2.16.1

02 Feb 08:37
Compare
Choose a tag to compare

The public assets were removed from the git repo.

If you would like the same approach for your own project match the .gitignore file with the one from the main repo (the public folder in particular) and make a commit with the new file.

After run git rm -r --cached ./, perform a second commit and that's it.

Beware that if you do that you will have to compile the assets in the deployment process.

v2.16.0

31 Jan 18:50
Compare
Choose a tag to compare

Starting with this version Enso gets native multitenancy support, thanks to the our newest package laravel-enso/multitenancy

Improvements

  • for more information on multitenancy, take a look at the documentation
  • adds caching support for totals in tables; this can be have a great positive impact in large tables.
    For more info check the docs
  • strengthens the user -> person -> company -> userGroup -> roles policies, getting ready for MT :D
  • upgrades horizon to 2.0.x

Bug Fixes

  • fixes a bug in vue select when the selected value is (int) 0
  • fixes a bug in typeahead when using the filter function. This bug affected the searchable functionality
  • other minor bug fixes

Upgrade steps:

  • update in composer.json: "laravel-enso/core": "3.7.*"
  • update your database.php config file and make sure that you have a system connection that is also configured as default and an optionally tenant connection. Use the file from the main repository as an example.
  • run composer update
  • run php artisan enso:upgrade
  • update CompanyFactory with the one from the demo repository
  • update .env.example && .env.testing if needed
  • update the horizon.php & datatable.php configuration files with the ones from the main repository

v2.15.3

31 Jan 18:49
Compare
Choose a tag to compare

Improvements

  • improves vue-table BE filtering
  • makes fullInfoRecordInfo available in vue-table templates
  • refreshes the table example page
  • allows Obj properties to contain dash
  • updates the default values in config/enso/auth.php
  • makes the position field require a company to be selected, in People
  • adds FE permissions check for company people management
  • upgrades the filters (vue-filter, vue-select-filter, date-filter, date-interval-filter, interval-filter)
    • adds a compact prop
    • makes the filters of the same height in both compact and non compact mode
    • allows stacking of more filters horizontally
    • adds an all option for DateFilter
    • changes selection in vue-filter to warning

Bug Fixes

  • fixes filtering reporting bug in vue-table's ui
  • fixes a bug when using fullInfoRecordInfo
  • fixes money format in vue-table
  • fixes the .is-naked helper class for .button

Upgrade instructions

  • composer update
  • yarn upgrade
  • yarn run dev

v2.15.2

26 Jan 15:07
Compare
Choose a tag to compare

Changes

Starting now Enso supports custom password policies via config.

You have the option to configure the password's:
- lifetime (in days)
- length
- min upper case letters
- min numeric characters
- min special characters
- max login attempts per minute

If you leave the lifetime null or 0 the user will never be required to change his password.

Once the lifetime is configured the user will receive notifications upon login when he has less than 3 days until his current password becomes invalid.

Bug Fixes

  • fixes a bug when clearing unread notifications
  • fixes a warning in <password-strength>

Upgrade instructions

  • run composer update
  • run php artisan enso:upgrade
  • publish the core configs if you want to customize the auth params
  • configure in .env your desired password params -> see config/enso/auth.php for the available options

2.15.1

24 Jan 15:49
Compare
Choose a tag to compare

In this version we focused on greatly improving the assets compiling process. With the new configuration build times dropped by ~ 75% for production.

Changes

General
  • improves webpack.mix.js
  • includes manifest.js and vendor.js in index.blade.php to support vendor extraction
  • updates in all the js file (with the new linter / rules)
Core
  • moves UserGroup pages to the publishing list
  • adds AR and PT languages support in local date-fns i18n
  • adds manifest.json and vendor.js to index.blade.php to make use of webpack's vendor extraction
Charts
  • renames get() => fetch() in <chart-card>
Addresses, Comments, Documents, Discussions, CompanyPeople
  • renames get() => fetch() in <*-card> wrapper

Bugs

  • fixes <address-card> refresh (get => fetch)

Upgrade instructions

  • update in composer.json: "laravel-enso/core": "3.6.*"
  • run composer update
  • delete your local node_modules, yarn.lock, package-lock.json
  • update the following local files with the ones from the main repo
    • webpack.mix.js
    • .eslintrc.js
    • package.json
    • .babelrc
  • run yarn
  • compile
  • run in tinker the following command:
    • LaravelEnso\PermissionManager\app\Models\Permission::where('name', 'LIKE', 'administration.companies.contacts.%')->delete(); (it was a typo in the enso:upgrade command)

v2.15.0

21 Jan 17:34
Compare
Choose a tag to compare

Changes

This version aimed to allow direct association of users to companies via persons.
This will provide a good structure for creating users that will belong to different organisations (clients for instance)
and the related restrictions when accessing application's resources.

The old contacts structure is deprecated. The associated people are now called company people.

An upgrade command is provided that takes care of all the database structural updates and transforms the old
contacts / mandataries to company people.

Addresses, Comments, Discussions, Documents
  • refactors the count update tracking
Companies
  • removes deprecated command
  • removes the deprecated contact request validation (including customization)
  • removes mandatary_position from the table / form
  • reorganizes the company form
  • restricts the mandatary to the list of associated people
  • creates the adminstration.companies.people structure
  • limits the company selection when using the CompanySelectController for users that do not belong to AdminGroup
  • reuses the PersonSelectController for company people
  • updates the people() relation in Company.php
  • removes the deprecated contactFormTemplate from companies.php config file
  • updates the CompanyFactory
  • removes the deprecated ContactFactory
  • replaces the deprecated /resources/js/components/enso/contacts/ components with /resources/js/components/enso/companies/
  • updates the implementation of accessories in the Edit.vue page
  • updates the routes
  • replaces ContactTest with CompanyPeopleTest
Core
  • updates the Upgrade command to take care of 3.3.* => ^3.4 upgrades
  • refactors the role change authorization in UserController
  • adds the AdminGroupId constant to the UserGroup model
  • adds the belongsToAdminGroup() helper to the User model
  • refines the user delete error messages
  • updates the UserSeeder
  • fixes a bug when having more than 2 level nested menus
Discussions
  • fixes discussion delete
DataImport
  • fixes cell sanitization
  • fixes header normalization
  • fixes tests
FormBuilder
  • adds selected tab name to _params on submit
  • fixes modal visibility in an edge case
People
  • adds PersonPolicy
  • adds appellative & position to PersonSelectControllers's query attributes
  • drops the gender column and adds a gender() helper that determines the gender by the title value; Adds a isMandatary() helper
  • adds a company() relation to the Person model
  • makes the form tabbed; adds company_id and position to the table / form
  • updates the PersonFactory
  • updates the implementation of accessories in the Edit.vue page
  • updates the tests
Select
  • fetches the option list when clicking on the No options label
  • adds cursor:pointer to the .select-value class
  • makes the request object (optional) available for the select controllers
StructureManager
  • updates the stubs for select controllers and form pages
TrackWho
  • adds return type to relations. This will help when requesting the relations in contracts
VueComponents
  • refactors accessories; now it can use any kind of accessory
  • updates tabs to emit the selected event when mounted

Upgrade instructions - estimated time per project ~ 5min

  • update in composer.json: "laravel-enso/core": "3.5.*"
  • run composer update
  • run php artisan migrate
  • run php artisan enso:upgrade
  • update CompanyFactory and PersonFactory and UserSeeder with the ones from the packages
  • remove ContactFactory
  • remove /resources/js/components/enso/contacts/

Note:
If you customized the company / person form / table / pages you will have to manually update them accordingly...

v2.14.1

19 Jan 06:10
Compare
Choose a tag to compare

Bug Fixes

  • fixes header normalization in Data Import
  • fixes the role configurator
  • adds the missing searchOperator from datatable config that was breaking the table search
  • fixes tabs position in formbuilder to properly display select's dropdown
  • updates structure manager's from create / edit stubs for enso-form
  • removes a redundant test in Searchable that was causing problems on certain env's
  • prevents form submisison when used in a form for file.vue

Improvements

  • adds an exception on export when another export is running for the same user / table
  • adds a compact prop to vue-filter
  • adds translations for the tutorial navigation buttons

Note

The Documentation is up to date now