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(...) or r => r.ChildDynamic(...)
    • fetching data from backend, rd.Params = Computed.UseRoute("params");
    • posting data to backend, ra.Params = Computed.UseRoute("params");
  • Two new page generator functions are implemented
    • Type<TDomainType, TPageSchema>(): Renders given domain type as a page using given page schema
    • Method<TDomainType, TPageSchema>(methodName:): Renders given domain method as a page using given page schema
  • RouteAttribute is added along with .SetTypeRoute<T>(...) and .SetMethodRoute<T>(...) extensions to specify routes in domain metadata to
  • Bake now executes given Action defined in ComponentDescriptor implementations upon model change or submit event
  • Bake now supports reload and show/hide reactions
    • Use ReloadOn and ShowOn to bind them to an event
    • Use ReloadWhen and ShowWhen to bind them to a page context value
  • useActionExecuter composable is now added to execute Composite, Local, Publish and Remote actions with given configuration
    • Page, Layout and Error components 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 has IdAttribute
  • AwaitLoading utility component is now added which contains slots to help rendering skeleton and content according to loading state
  • Button component is now added
  • Composite component is now added to add multiple components to a single component slot
  • Constraints now allows you to define constraints on values of triggers so that reactions can happen only on certain conditions
  • Contents utility component is now added that renders List<Content> with responsive styling
    • ActionsAsDataPanelsUxFeature is modified to add data panel to any content in any page, expect Get methods to be rendered as data panel under any page's content list
  • DataTable now supports row based actions via Actions property
    • ListIsDataTableUxFeature and ObjectWithListIsDataTableUxFeature both now add and fill actions column automatically
  • Dialog component is now added which displays given content in dialog with action support
  • Fieldset component is now added that renders an object in a field-set pane
    • Field schema is also added to represent a property with a label
  • FormPage is now added to render action methods as full pages
  • InputText and InputNumber components are now introduced along with their basic conventions
  • SimpleForm component is now added for rendering a basic form with inputs with dialog support
  • SimplePage is now added to render simple pages with title and contents along with its basic conventions
  • New UX features are introduced in Monolith recipe
    • Actions as Buttons: to render non-GET actions as buttons
    • Actions are Contents: to render GET actions as contents
    • Data Table defaults: to set defaults for all DataTable components
    • 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

Breaking Changes

  • [...baked].vue page is now not used, *.page.json file paths are used as route patterns and rendered directly with Page.vue, you may remove it from your project
  • baseURL is renamed to apiBaseUrl and config is now set in root of bake module options and no longer available through dataFetcher
  • FromType<TDomainType>() page generator is removed, now you need to specify page schema using Type<TDomainType, TPageSchema>() extension
  • ReportPage is renamed to TabbedPage
    • All Components and DomainComponents helpers are updated accordingly
    • .b-ReportPage--grid class is now removed, use .b-Contents to override css for that element
  • ReportPage.Tab and ReportPage.Tab.Content is now Tab and Content respectively
    • All Components and DomainComponents helpers are updated accordingly
  • Parameter schema is renamed to Inputs
    • ParameterParameter domain component helper is renamed to ParameterInput
    • Parameter component helper is renamed to Input
  • DataPanel.Parameters property is renamed to Inputs
  • QueryParameters property of TabbedPage (former ReportPage) is renamed to Inputs
  • Parameters.vue is renamed to Inputs.vue
  • QueryParameters.vue is now removed, use Inputs with all of its inputs' queryBound set to true to get the same behavior
    • Unlike QueryParameters, Inputs pass an event object { uniqueKey, values } to its onChanged event
  • TypeWithOnlyGetIsReportPage UX feature is removed, and adding TabbedPage (former ReportPage) component to a type is moved to DefaultThemeFeature
  • InjectedData is renamed to ContextData
    • Injected() is now removed, use Context property
      • 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, DataPanel provides "parameters" key in parent context to provide its parameter options
        Injected(options: i => i.DataKey = InjectedData.DataKey.Custom) // old usage
        Context.Parent(options: cd => cd.Prop = "parameters") // new usage
        
      • DataTable now 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
    • Data keys are removed
    • Prop now supports property chaining
  • In useContext composable
    • injectPage and providePage are renamed to injectPageContext and providePageContext respectively
    • injectData and provideData are renamed to injectParentContext and provideParentContext respectively
  • ComputedData.Args is now changed to Options with IData type
    • 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
  • Composables now provide helpers instead of ui composable file keys
    data: Computed(Composables.UseError) // old usage
    data: Computed.UseError() // new usage
    
  • useRoute composable now accepts property name as parameter to access params, query
  • useQuery composable is now removed, use useRoute composable with query option
    {
      data = Computed(Composables.UseQuery) // old usage
      data = Computed.UseRoute("query") // new usage
    }
    
  • None is renamed to MissingComponent
  • DataTable.Column.Prop is renamed to Key
  • DataTable.Component type is changed to IComponentDescriptor
  • Conditional is changed from Schema to Component
  • *PageContextKey properties 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
      
  • Content (former ReportPage.Tab.Content) support for showWhen is completely removed, use its component's reaction system to hide a content
    • lg:col-span-2 class is now passed directly to content's component instead of a wrapper div
  • DeferredTabContent had a div to show/hide child, it is now removed and hidden prop is passed directly to the grid div
  • Inputs now doesn't have a layout styling, any component that uses it should wrap it and introduce flex styling
  • EnumSelect and EnumSelectButton in DomainComponents are renamed to ParameterSelect and ParameterSelectButton
    • They still require an InlineData schema on the parameter type
  • Data composables compute is renamed to computeSync and computeAsync is renamed to compute
  • useFormat.format() is now removed, which was used for route building, use usePathBuilder with named route params instead
  • ActionsAreGroupedAsTabsUxFeature is now removed
    • Monolith recipe now uses ActionsAreContentsUxFeature
  • LabelAttribute is moved to Baked.Theme.Default namespace

Improvements

  • Parameters now accept parameter class attribute for each parameter
  • RemoveComponent and RemoveSchema helper extensions are now added
  • GetRequiredComponent<T>(...) and GetComponent<T>(...) extensions are now added to query a specific component type at a given path
  • ContextData, former InjectedData, now has TargetProp property to map given Prop key value to the corresponding property
  • UiLayer now has MinConventionOrder and MaxConventionOrder to allow inserting conventions before or after all conventions
  • MissingComponent, former None, 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, former None, component now contains a sample code to help developer add the missing component to the path
  • useContext now has injectContextData helper to get all the default context data useDataFetcher requires, so that you can pass context.injectContextData() directly to contextData option when fetching data using useDataFetcher
  • Layout now supports app-wide pageContext and events that are different from those coming from Page which are page-wide
  • IAction, IData and IComponentDescriptor now implement + operator to easily convert them into a CompositeAction, CompositeData and CompontentDescriptor<Composite>
    component.Data += Context.Parent(options: cd => cd.Prop = "parameters");
    
  • Inputs has become a pure utility component after removing wrapper div and flex styling
  • NavLink now supports named route parameters and query which both can be provided from schema as IData
  • NavLink now has Icon property
  • PageContext.Sitemap is now IReadOnlyCollection
  • AddRemoveChildCodingStyleFeature now removes New prefix in addition to Add and Create
  • Add/Remove...Attribute conventions now provide requiresIndex: 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 PackageOld VersionNew Version
Humanizer.Core2.14.13.0.1
Microsoft.AspNetCore.Authentication.JwtBearer9.0.109.0.11
Microsoft.AspNetCore.Mvc.NewtonsoftJson9.0.109.0.11
Microsoft.AspNetCore.Mvc.Testing9.0.109.0.11
Microsoft.CodeAnalysis.CSharp4.14.05.0.0
Microsoft.Data.Sqlite.Core9.0.1010.0.1
Microsoft.Extensions.Caching.Abstractions9.0.1010.0.1
Microsoft.Extensions.Configuration.Abstractions9.0.1010.0.1
Microsoft.Extensions.Configuration.Binder9.0.1010.0.1
Microsoft.Extensions.FileProviders.Abstractions9.0.1010.0.1
Microsoft.Extensions.Localization9.0.1010.0.1
Microsoft.Extensions.Localization.Abstractions9.0.1010.0.1
Microsoft.Extensions.Logging.Abstractions9.0.1010.0.1
Microsoft.Extensions.TimeProvider.Testing9.10.010.1.0
Microsoft.NET.Test.Sdk18.0.018.0.1
MySql.Data9.4.09.5.0
NHibernate.Extensions.Sqlite9.0.89.0.11
NUnit3TestAdapter5.2.06.0.1
Npgsql9.0.410.0.1
System.IdentityModel.Tokens.Jwt8.14.08.15.0
npm PackageOld VersionNew Version
@nuxtjs/i18n10.1.110.2.1
@primeuix/themes1.2.52.0.2
primevue4.4.14.5.4

v1.0.3

Improvements

  • PluginBase now takes base path and resolver setting. By default:
    • Resolver: looking at the root directory of the project
    • BasePath: set to the plugins folder under the app directory

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 $fetch requests, fixed
  • The incorrect order of auth interceptor, fixed
  • Build was failing when there is a nested under a generic class, fixed

v1.0.1

Improvements

  • New showSafeLinks property added to ErrorInfo to control SafeLinks visibility
  • New customMessage property added to ErrorInfo to control whether to use the default safe links message or a custom one.
  • Add decode and offChanged methods to useToken composable.
  • Packages keys updated in locale.tr.restext and locale.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.