# Release notes

## Release 2.0.0 (February 2023)

### Breaking Changes

• The framework has been renamed "Simian" and namespaces have adjusted accordingly:
• simian.gui.* contains the majority of the classes, all components and utility functions can be found here.
• simian.local.* contains the code to run an app locally.
• simian.examples.* contains the examples.
• The json field in the payload produced by guiInit has been renamed to form to better reflect its contents.
• The composed component HtmlTable has been removed, use the component HtmlTable instead.
• Accordingly the Content.createTable, Content.updateTable, utils.createCustomTable and utils.updateTable functions have been removed.
• The FontSize options for EditGrid and DataGrid have been removed.
• (Python): Deprecated Plotly methods have been removed:
• Plotly.fromPayload is replaced by utils.getSubmissionData.
• Plotly.updatePayload is replaced by utils.setSubmissionData.
• getSubmissionData for DataGrid, DataTables and EditGrid by default returns a list of dicts (Python) or a struct array (MATLAB).
• The setOutputAs method can be used to return a pandas DataFrame or a MATLAB table.
• getSubmissionData for DateTime and Day by default returns a string.
• The setOutputAs method can be used to return a datetime object.
• The positional argument keys in Tabs.setContent is now an optional, named argument.

### Changed

• (MATLAB): The Date and DateTime objects now use data type datetime.
• (MATLAB): utils.getSubmissionData returns a struct for DataGrid, DataTables, EditGrid and Pages.
• The output type can be changed to table using obj.setOutputAs("table").
• (MATLAB): the Component's attributes property may now also contain a containers.Map value.
• (MATLAB): The figure window is not maximized at startup.
• Use the Uiformio(_, Fullscreen=true) to set the window full screen.
• Use the Uiformio(_, Maximized=true) to maximize the window.
• Use the Uiformio(_, Size=[width, height]) to set the window size.
• The Pages composed component is deprecated.
• The deployment portal now includes a caching option for back-ends that have no access to Redis or drive.
• File caching saves the cache in the home folder by default.

## Release 1.5.0 (October 2022)

• addComponentsFromTable function for building forms using a table/DataFrame.
• File component support.
• ResultFile custom component.
• Improved getting and setting submission data for Plotly component.
• Callback dispatching for button events.
• getSessionFolder function.
• getNewRows method of the DataTables component.
• (MATLAB): Support for setting the data of a DataTables component using string, logical, and numeric arrays.
• (MATLAB): The buildArchive function for conveniently building a deployable archive (available as of MATLAB R2020b).
• Significant improvements to documentation:
• Added Python code snippets to the BallThrower example.
• Clarified setup and deployment.
• Added more details and options for multiple components and functions.
• Significant improvements to the deployment portal:
• Built-in user/group management authentication/authorization.
• Improved visibility of front-end versions used by apps.
• Added a going down for maintenance switch.
• Instance management in admin portal.
• Added an overview of what Simian Suite releases there are and how they can be combined.
• Improved application instance handling.
• Improved nginx configuration primer including caching of static data.

### Changed

• (MATLAB): Added support for MATLAB release R2022b.
• (Python): Added support for Python 3.10.
• Python deployment entrypoint wrapper functions add an extra layer to the root of their responses to improve handling of errors encountered in the back-end. Existing wrapper functions keep working with their current back-end type. For Azure and Flask an _v2 version is available that uses the new wrapper version. The ownR back-end type works for both response structures. FastAPI is new.

### Deprecated

• The Address component.

### Fixed

• (Python): An error no longer occurs when initializing an application with a namespace consisting of multiple parts (apps_collection.MyApp).
• (MATLAB): The value input of the choose and type gestures of the testing functionality now support char arrays as inputs in addition to strings.
• Setting submission data for EditGrid components if layout components are involved.
• Error handling when using Redis cache.
• Behavior of applications holding multiple editable DataTables components.

## Release 1.4.1 (April 2022)

### Fixed

• (MATLAB): Error dialogs popping up multiple times after clicking Reload App in local mode.
• Update behaviour of calculated values and custom logic.

## Release 1.4.0 (April 2022)

• The ScaleToParentWidth option for the setLocalImage method of the HtmlElement component.
• DataTables:
• (MATLAB): Getting the data of a DataTables component when its default value (no rows) is set now returns a table with 0 rows instead of triggering an error.
• (MATLAB): If a DataTables component has one row and an event is triggered, the row no longer disappears.
• Documentation on how to dynamically change the options of a Selectboxes component.
• More validation to the inputs of the setSubmissionData utility function for DataGrid, EditGrid and DataTables components. Keys of the value to set must match those of the columns of the component being set.
• The Html component for displaying HTML that can be set through the submission data.
• The HtmlTable component for displaying HTML tables that can be set through the submission data.

### Changed

• (MATLAB): Added support for MATLAB release R2022a.
• The custom table functionality will be deprecated in a future release.
• The new HtmlTable component is now the preferred way of displaying HTML tables in your application (as opposed to composed component HtmlTable).

## Release 1.3.1 (March 2022)

### Changed

• No downloadEnd event is triggered any more.

### Fixed

• (MATLAB): The getSubmissionData utility function for table-like components (such as DataGrids) that have one row where at least one of the columns has an empty value.
• The triggerHappy functionality when there is a DataTables component with editable rows and no other event has taken place yet.

## Release 1.3.0 (February 2022)

• Support for providing a parent component when performing gestures using the testing functionality.
• The addCustomClass method for all components for adding custom classes to your components.
• (MATLAB): The DefaultValue name-value pair of the Pages component for setting an initial value of the component.
• (MATLAB): The FontSize name-value pair of the Pages and EditGrid components for setting the font-size of the data in the table.
• A Frequently Asked Questions (FAQ) and How to section to the documentation.
• (Python): The HtmlTable component, which was already available in MATLAB.
• Documentation for Component properties:
• customConditional
• multiple
• prefix
• suffix
• tabindex
• Documentation on the customization of DateTime components.
• The showCharCount and showWordCount properties for the TextArea component.
• The Parent name-value pair for the update method of the StatusIndicator component.
• The getColumn method for the DataGrid and EditGrid components.
• The addTab, getTab and fillTabs methods for the Tabs component.
• The collapsed property for the Panel component.
• Collapsible Panels can be initially collapsed.
• The navbar now has a configurable logo, title and subtitle.
• Dismissable alert messages can be shown.
• Button setEvent() method now checks whether the event name is reserved by Form.io, and if so throws an error.
• When the configured cache cannot be reached from the webframework back-end, an alert is shown under the navigation bar.
• DataTables can now be used to create and configure tables. DataTables have built-in options for sorting, filtering, search, pagination and more.
• Changes to the settings in the form can now be flagged in the navigation bar.
• utils.encodeImage function can encode image files, so that they can be put in the payload and be shown in the form.

### Changed

• The documentation has been updated and expanded to incorporate the changes that were made to the webframework. Users new to the webframework should now also have better guidance in understanding the webframework and setting up their first forms.
• (MATLAB): Functions related to the Pages, StatusIndicator, and Uiformio classes now accept UpperCamelCased name-value pairs. In a future release, lowerCamelCased name-value pairs will no longer be supported by these functions.
• The setContent method of the Columns component now supports creating the columns without components in them and outputs the Column objects that are created. This allows for a more top-down approach in which the columns are created before filling them with child components.
• (MATLAB): The defaultValue property of a Plotly is now an object of utils.Plotly, allowing for easy plotting during initialization.
• (MATLAB): Supports MATLAB release R2021b.
• When an error is caught by the framework, an alert message will be shown to the user.
• Ball Thrower example has a button to illustrate the error handling for errors thrown from the back-end.
• utils.setSubmissionData() now has two outputs. The first one is still the payload. The second output contains the modified data input, in the form it was put in the payload by setSubmissionData.
• (MATLAB) Error class now allows string values for its attributes.
• DatePickerConfiguration now checks whether the minimum and maximum dates are formatted correctly and whether the minimum date is not larger than the maximum date.
• DataMap now has a TextField component as its default valueComponent.
• EditGrid templates modified to use the tableView property of the child components to determine the contents of the collapsed rows in the EditGrid component.

### Fixed

• The getSubmissionData and setSubmissionData utility functions for combinations of Container, DataGrid and EditGrid components.
• The setRowGroups method for the DataGrid for single row groups.
• The Currency and PhoneNumber classes for testing your application.
• (MATLAB): The setValues method of the Selectboxes now supports cell array inputs.
• (MATLAB): When the utils.Plotly.getObj method could not find data for the given combination of key, nested form and parent, an error is thrown instead of simply ignoring it. See the Plotly component.
• Handling of the Parent name-value pair by the setSubmissionData utility function.
• The setSubmissionData utility function for non-unique combinations of parent and nested forms.
• The Pages component no longer triggers an infinite update loop when an invalid value is put in it.

## Release 1.2.1 (August 2021)

### Fixed

• The ballthrower example guiEvent code.
• The install script for adding the right folders to the MATLAB path.
• The simian.gui_v2_0_0.doc function for opening the documentation.

## Release 1.2.0 (July 2021)

• Calling the setSubmissionData utilility now works for numeric arrays when filling DataGrids or EditGrids.
• Displaying data can now be done efficiently using the HtmlTable composed component. Values can be highlighted using font coloring.

### Changed

• The default value of the clearOnHide property is now false to avoid unexpected behaviour.

### Deprecated

• Highlighting of data in DataGrids. Use the composed component HtmlTable for this. Note that these are not editable.

## Release 1.1.0 (June 2021)

• The custom option for the action of a Button component.
• The decimalLimit property for Number components.
• The labelPosition property for the following components:

### Changed

• When using the EventOnBlur class to trigger events when specific components lose focus:
• Instead of empty, payload.key is now [path][rowNr][componentKey] with rowNr 0-based.
• An event is only triggered when the value has actually changed, not when the value is non-empty.
• Performance of the getSubmissionData and setSubmissionData utilility functions is drastically improved.
• In local MATLAB mode, the form no longer automatically regains focus when MATLAB is done handling an event.
• Syntax for highlighting values of components and improved its performance.

### Deprecated

• The labelPosition property for Checkbox components.

### Fixed

• Applying custom css in deployed mode.
• The labelPosition property.