v1.0
v1.1.0
To add support for forms and actions in UI, a lot of breaking changes occured in this version. Please review each breaking change in release notes carefully when upgrading your baked version. Also read through new features and improvements, and expect a lot of change in your baked generated files.
Features
- Dynamic routing is now supported and can be used when;
- navigating through pages,
r => r.RootDynamic(...)orr => r.ChildDynamic(...) - fetching data from backend,
rd.Params = Computed.UseRoute("params"); - posting data to backend,
ra.Params = Computed.UseRoute("params");
- navigating through pages,
- Two new page generator functions are implemented
Type<TDomainType, TPageSchema>(): Renders given domain type as a page using given page schemaMethod<TDomainType, TPageSchema>(methodName:): Renders given domain method as a page using given page schema
RouteAttributeis added along with.SetTypeRoute<T>(...)and.SetMethodRoute<T>(...)extensions to specify routes in domain metadata toBakenow executes givenActiondefined inComponentDescriptorimplementations upon model change orsubmiteventBakenow supports reload and show/hide reactions- Use
ReloadOnandShowOnto bind them to an event - Use
ReloadWhenandShowWhento bind them to a page context value
- Use
useActionExecutercomposable is now added to executeComposite,Local,PublishandRemoteactions with given configurationPage,LayoutandErrorcomponents now provide an event bus to publish page-wide events along with a page context reactive object be used in conventions- When path with id route parameter is added such as
/my-entity/{id}, it's route param will be automatically resolved from the first property that hasIdAttribute
AwaitLoadingutility component is now added which contains slots to help rendering skeleton and content according toloadingstateButtoncomponent is now addedCompositecomponent is now added to add multiple components to a single component slotConstraintsnow allows you to define constraints on values of triggers so that reactions can happen only on certain conditionsContentsutility component is now added that rendersList<Content>with responsive stylingActionsAsDataPanelsUxFeatureis modified to add data panel to any content in any page, expectGetmethods to be rendered as data panel under any page's content list
DataTablenow supports row based actions viaActionspropertyListIsDataTableUxFeatureandObjectWithListIsDataTableUxFeatureboth now add and fill actions column automatically
Dialogcomponent is now added which displays given content in dialog with action supportFieldsetcomponent is now added that renders an object in a field-set paneFieldschema is also added to represent a property with a label
FormPageis now added to render action methods as full pagesInputTextandInputNumbercomponents are now introduced along with their basic conventionsSimpleFormcomponent is now added for rendering a basic form with inputs with dialog supportSimplePageis now added to render simple pages with title and contents along with its basic conventions- New UX features are introduced in
Monolithrecipe- Actions as Buttons: to render non-
GETactions as buttons - Actions are Contents: to render
GETactions as contents - Data Table defaults: to set defaults for all
DataTablecomponents - Description Property: to configure description properties to allow them occupy more space in UI
- Properties as Fieldset: to render properties of an object in a fieldset
- Routed Types as Nav Links: to render types as nav link under data table columns
- Actions as Buttons: to render non-
Breaking Changes
[...baked].vuepage is now not used,*.page.jsonfile paths are used as route patterns and rendered directly withPage.vue, you may remove it from your projectbaseURLis renamed toapiBaseUrland config is now set in root ofbakemodule options and no longer available throughdataFetcherFromType<TDomainType>()page generator is removed, now you need to specify page schema usingType<TDomainType, TPageSchema>()extensionReportPageis renamed toTabbedPage- All
ComponentsandDomainComponentshelpers are updated accordingly .b-ReportPage--gridclass is now removed, use.b-Contentsto override css for that element
- All
ReportPage.TabandReportPage.Tab.Contentis nowTabandContentrespectively- All
ComponentsandDomainComponentshelpers are updated accordingly
- All
Parameterschema is renamed toInputsParameterParameterdomain component helper is renamed toParameterInputParametercomponent helper is renamed toInput
DataPanel.Parametersproperty is renamed toInputsQueryParametersproperty ofTabbedPage(formerReportPage) is renamed toInputsParameters.vueis renamed toInputs.vueQueryParameters.vueis now removed, useInputswith all of its inputs'queryBoundset totrueto get the same behavior- Unlike
QueryParameters,Inputspass an event object{ uniqueKey, values }to itsonChangedevent
- Unlike
TypeWithOnlyGetIsReportPageUX feature is removed, and addingTabbedPage(formerReportPage) component to a type is moved toDefaultThemeFeatureInjectedDatais renamed toContextDataInjected()is now removed, useContextproperty- Use
Context.Model(...)to access model data during actions - Parent data access has changed
Injected(options: i => i.DataKey = InjectedData.DataKey.ParentData) // old usage Context.Parent(options: cd => cd.Prop = "data") // new usage - Custom injected data is now removed,
DataPanelprovides"parameters"key in parent context to provide its parameter optionsInjected(options: i => i.DataKey = InjectedData.DataKey.Custom) // old usage Context.Parent(options: cd => cd.Prop = "parameters") // new usage DataTablenow injects row data using parent context under"row"key// previously data table was injecting row data in an hard-coded way Context.Parent(options: cd => cd.Prop = "row") // new usage- Use
Context.Page(...)to access to page context values - Use
Context.Response(...)to access to remote action's response which is available only for the post action of a remote action
- Use
- Data keys are removed
Propnow supports property chaining
- In
useContextcomposableinjectPageandprovidePageare renamed toinjectPageContextandprovidePageContextrespectivelyinjectDataandprovideDataare renamed toinjectParentContextandprovideParentContextrespectively
ComputedData.Argsis now changed toOptionswithIDatatype- Built-in composables now migrated to options object pattern with named fields
- For your custom computed data composables that were using args, you should migrate them to options object pattern to allow values from descriptors
Composablesnow provide helpers instead of ui composable file keysdata: Computed(Composables.UseError) // old usage data: Computed.UseError() // new usageuseRoutecomposable now accepts property name as parameter to accessparams,queryuseQuerycomposable is now removed, useuseRoutecomposable withqueryoption{ data = Computed(Composables.UseQuery) // old usage data = Computed.UseRoute("query") // new usage }Noneis renamed toMissingComponentDataTable.Column.Propis renamed toKeyDataTable.Componenttype is changed toIComponentDescriptorConditionalis changed fromSchematoComponent*PageContextKeyproperties are now removed from components and schemas- use the new publish action object to set values to the page context
component.Schema.PageContextKey = "key" // old usage component.Action = Publish.PageContextValue("key"); // new usage - use the new reaction system to subscribe to page context changes
component.Schema.ShowWhen = "key"; // old usage component.ShowWhen("key"); // new usage component.Schema.ShowWhen = "key:value"; // old usage component.ShowWhen("key", Is("value")); // new usage component.Schema.ShowWhen = "!key:value"; // old usage component.ShowWhen("key", IsNot("value")); // new usage
- use the new publish action object to set values to the page context
Content(formerReportPage.Tab.Content) support forshowWhenis completely removed, use its component's reaction system to hide a contentlg:col-span-2class is now passed directly to content's component instead of a wrapperdiv
DeferredTabContenthad a div to show/hide child, it is now removed andhiddenprop is passed directly to the griddivInputsnow doesn't have a layout styling, any component that uses it should wrap it and introduceflexstylingEnumSelectandEnumSelectButtoninDomainComponentsare renamed toParameterSelectandParameterSelectButton- They still require an
InlineDataschema on the parameter type
- They still require an
- Data composables
computeis renamed tocomputeSyncandcomputeAsyncis renamed tocompute useFormat.format()is now removed, which was used for route building, useusePathBuilderwith named route params insteadActionsAreGroupedAsTabsUxFeatureis now removedMonolithrecipe now usesActionsAreContentsUxFeature
LabelAttributeis moved toBaked.Theme.Defaultnamespace
Improvements
Parametersnow accept parameter class attribute for each parameterRemoveComponentandRemoveSchemahelper extensions are now addedGetRequiredComponent<T>(...)andGetComponent<T>(...)extensions are now added to query a specific component type at a given pathContextData, formerInjectedData, now hasTargetPropproperty to map givenPropkey value to the corresponding propertyUiLayernow hasMinConventionOrderandMaxConventionOrderto allow inserting conventions before or after all conventionsMissingComponent, formerNone, component is now added when a component is required but none was configured- It also leaves a post-build warning that includes the domain source name and the component path
MissingComponent, formerNone, component now contains a sample code to help developer add the missing component to the pathuseContextnow hasinjectContextDatahelper to get all the default context datauseDataFetcherrequires, so that you can passcontext.injectContextData()directly tocontextDataoption when fetching data usinguseDataFetcherLayoutnow supports app-widepageContextandeventsthat are different from those coming fromPagewhich are page-wideIAction,IDataandIComponentDescriptornow implement+operator to easily convert them into aCompositeAction,CompositeDataandCompontentDescriptor<Composite>component.Data += Context.Parent(options: cd => cd.Prop = "parameters");Inputshas become a pure utility component after removing wrapper div andflexstylingNavLinknow supports named route parameters and query which both can be provided from schema asIDataNavLinknow hasIconpropertyPageContext.Sitemapis nowIReadOnlyCollectionAddRemoveChildCodingStyleFeaturenow removesNewprefix in addition toAddandCreateAdd/Remove...Attributeconventions now providerequiresIndex:parameter to allow postponing add/remove attribute conventions that won't require index (such as UI component and schema attributes) after building indices- UI conventions are now added after all API attributes get configured and are
safe to use API configurations such as HTTP method of
ActionModelAttribute - Unlike schema conventions, UI component conventions were allowed to be added to non API method and parameters, fixed
Bugfixes
- Nested types in generic classes were causing build error, fixed
- Adding configured plugins was causing error when resolver was not defined,
fixed by defaulting resolver to
MetaUrl
Library Upgrades
| NuGet Package | Old Version | New Version |
|---|---|---|
| Humanizer.Core | 2.14.1 | 3.0.1 |
| Microsoft.AspNetCore.Authentication.JwtBearer | 9.0.10 | 9.0.11 |
| Microsoft.AspNetCore.Mvc.NewtonsoftJson | 9.0.10 | 9.0.11 |
| Microsoft.AspNetCore.Mvc.Testing | 9.0.10 | 9.0.11 |
| Microsoft.CodeAnalysis.CSharp | 4.14.0 | 5.0.0 |
| Microsoft.Data.Sqlite.Core | 9.0.10 | 10.0.1 |
| Microsoft.Extensions.Caching.Abstractions | 9.0.10 | 10.0.1 |
| Microsoft.Extensions.Configuration.Abstractions | 9.0.10 | 10.0.1 |
| Microsoft.Extensions.Configuration.Binder | 9.0.10 | 10.0.1 |
| Microsoft.Extensions.FileProviders.Abstractions | 9.0.10 | 10.0.1 |
| Microsoft.Extensions.Localization | 9.0.10 | 10.0.1 |
| Microsoft.Extensions.Localization.Abstractions | 9.0.10 | 10.0.1 |
| Microsoft.Extensions.Logging.Abstractions | 9.0.10 | 10.0.1 |
| Microsoft.Extensions.TimeProvider.Testing | 9.10.0 | 10.1.0 |
| Microsoft.NET.Test.Sdk | 18.0.0 | 18.0.1 |
| MySql.Data | 9.4.0 | 9.5.0 |
| NHibernate.Extensions.Sqlite | 9.0.8 | 9.0.11 |
| NUnit3TestAdapter | 5.2.0 | 6.0.1 |
| Npgsql | 9.0.4 | 10.0.1 |
| System.IdentityModel.Tokens.Jwt | 8.14.0 | 8.15.0 |
| npm Package | Old Version | New Version |
|---|---|---|
| @nuxtjs/i18n | 10.1.1 | 10.2.1 |
| @primeuix/themes | 1.2.5 | 2.0.2 |
| primevue | 4.4.1 | 4.5.4 |
v1.0.3
Improvements
PluginBasenow takes base path and resolver setting. By default:Resolver: looking at the root directory of the projectBasePath: set to thepluginsfolder under theappdirectory
Bugfixes
- In new plugins, only search for the plugin's js file under the module, fixed
v1.0.2
Bugfixes
- Token not updated in headers in
$fetchrequests, fixed - The incorrect order of
authinterceptor, fixed - Build was failing when there is a nested under a generic class, fixed
v1.0.1
Improvements
- New
showSafeLinksproperty added toErrorInfoto controlSafeLinksvisibility - New
customMessageproperty added toErrorInfoto control whether to use the default safe links message or a custom one. - Add
decodeandoffChangedmethods touseTokencomposable. - Packages keys updated in
locale.tr.restextandlocale.en.restext. Make sure update locale files
v1.0.0
This is the first stable release of Baked.
There are no code changes or issue fixes compared to v0.19.3. The purpose of
this release is to mark v0.19.3 as the baseline for future stable updates.