Indice.Features.Cases.UI
8.61.0
See the version list below for details.
dotnet add package Indice.Features.Cases.UI --version 8.61.0
NuGet\Install-Package Indice.Features.Cases.UI -Version 8.61.0
<PackageReference Include="Indice.Features.Cases.UI" Version="8.61.0" />
<PackageVersion Include="Indice.Features.Cases.UI" Version="8.61.0" />
<PackageReference Include="Indice.Features.Cases.UI" />
paket add Indice.Features.Cases.UI --version 8.61.0
#r "nuget: Indice.Features.Cases.UI, 8.61.0"
#:package Indice.Features.Cases.UI@8.61.0
#addin nuget:?package=Indice.Features.Cases.UI&version=8.61.0
#tool nuget:?package=Indice.Features.Cases.UI&version=8.61.0
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Added
- The case relation key: in the case details "Basic info" panel, and as a cases list filter
(
CaseListFilter.RelationKey, shown by default). The related cases tab follows the key instead of theExternalCorrelationKeymetadata entry. Translation keys:cases.relationKey,caseDetails.relationKey. - The case details page shows its content in tabs: the case data form, the case attachments as a flat list (open / download), the data versions (paged and searchable by author, each version rendered read-only with the case type layout) and the related cases (when there are any).
- Case data form renderers for what the JSON Forms angular-material set supports and the Cases form did not:
nested objects (
Controlon an object property, so schemas without a UI schema render at any depth),Labelelements,options.multi(textarea),options.toggle,options.slider,format: date-time/time, arrays of enum values (checkboxes),oneOf/anyOf/allOf, theListWithDetailelement, andoptions.table: true(with optionaloptions.columns) for arrays. Elements no renderer accepts show their value as JSON instead of "No applicable renderer found". imageUriwidget (options.widget: "imageUri") for string fields: the image is picked from a file (image/*, stored as adata:uri, up tooptions.maxSizebytes, 1 MB by default) or given as an externalhttps://url, with a preview; read-only views show the image. Translation keys:jsonforms.imageUri.*.- Read-only cases
- When the user cannot open cases, the cases list shows an info button where the "New case" button would be, explaining why.
CasesUIOptions.DashboardChannels: the dashboard shows a "by case type" and a "by status" report for each listed case channel, a row per channel. Defaults toManagedandExternal; an empty list shows none. These reports followDashboardTagsthroughGroupedByCasetype/GroupedByStatus. A channel is labelled by itschannels.<name>translation when there is one, otherwise by its name.- A case type is created in a four-step wizard: general → schema, layout & translations → configuration → checkpoint types. "Save and continue" on the configuration step creates the case type, and the last step lists its checkpoint types to add. The schema and layout are edited side by side, with the translations below them. Editing a case type shows the same parts as tabs (checkpoint types included), with a red dot on tabs that have errors.
- Case type translations are edited in forms instead of JSON (saved in the same
translations/layoutTranslationsformat):- title and description per app language; a language with a description but no title cannot be saved, since the server would show it an empty title;
- form texts: every
title,placeholder,enumNamesandhelpvaluetext of the schema and layout (the properties the server translates) with its translation, with progress, search, "untranslated" / "unused" filters and removal of translations whose text is gone. A warning lists thelabels of a JSON Forms UI schema layout, which the server does not translate.
- The checkpoint type create / edit pages take a
returnUrlquery parameter; opened from a case type (wizard or edit page), they return to its checkpoint types.
Changed
- On a case type's list, "New case" is shown only when that case type can be created, and opens with it already chosen.
- The channel reports replace the fixed Agent/Customer (branch/eBanking) dashboard reports, so the
Agent*/Customer*entries ofDashboardTagsno longer select a report; to hide the channel reports setDashboardChannelsto an empty list. Translation keys:dashboard.agentGroupedByCasetype,dashboard.customerGroupedByCasetype,dashboard.agentGroupedByStatusanddashboard.customerGroupedByStatusare replaced bydashboard.channelGroupedByCasetype/dashboard.channelGroupedByStatus(with a{{channel}}parameter) andchannels.Managed/channels.External. - The
case-channelUI schema option treats the legacyAgent/Customerchannel names asManaged/External. - The JSON fields of the case type form (schema, layout, translations, configs) use a code editor (CodeMirror) instead of plain textareas: syntax highlighting, line numbers, bracket matching, folding and inline JSON parse errors.
- Empty case type translations are no longer saved (the server would replace the text with an empty string).
Translation keys:
caseTypes.form.translations,caseTypes.form.layoutTranslations,caseTypes.form.sectionDataandcaseTypes.form.fixJsonare removed;caseTypes.steps.*,caseTypes.translations.*,caseTypes.form.schemaHint,caseTypes.form.layoutHint,caseTypes.edit.fixTabs,common.steps,common.stepState.*,common.stepOf,common.hasErrors,common.nextandcommon.doneare added.
Fixed
- Editable checkboxes in the case data form could not be ticked.
- Side panes (new case, saved queries) did not scroll, so the new-case pane cut off the case type list when there were many. The pane body now scrolls under a fixed header and footer, with a thin scrollbar.
- Opening an attachment (attachments tab, timeline comments, form file fields) no longer runs uploaded script: only PDF and PNG / JPEG / GIF / WebP / BMP images open in a new tab, every other type (SVG, HTML, ...) is downloaded. Opened files, and the case PDF, no longer stay in memory until the page reloads, and a blocked popup now downloads the file instead of doing nothing.
[8.50.0] - 2026-06-16
Overriding / extending translations
Default implementation covers all the previous el.json keys and more (previously hardcoded UI html,ts etc), but if you want to override any of them or add your own,
you can layer a second resource onto the same cases-i18n endpoint with AddTranslationsResource.
The keys for the new resources are the same as the previous keys in el.json but with dots instead of camelCase,
and prefixed with the page name. For example, the key groupedByCasetype in el.json becomes dashboard.groupedByCasetype in the new resource file.
Note: You can find the rest of the keys in Indice.Features.Cases.Server project, inside the Resources folder.
Previous keys in el.json example:
{
"dashboard": {
"groupedByCasetype": "Συνολικές Υποθέσεις ανά Τύπο Υπόθεσης"
}
}
New resource en/neutral example:
<data name="dashboard.groupedByCasetype" xml:space="preserve">
<value>Total Cases by Case Type</value>
</data>
New resource el example:
<data name="dashboard.groupedByCasetype" xml:space="preserve">
<value>Συνολικές Υποθέσεις ανά Τύπο Υπόθεσης</value>
</data>
Example override:
// resourceName: "MyApp.Cases.Translations" -> look for MyApp.Cases.Translations.{culture}.resx embedded resources * inside a Resources folder * (by default)
// endpointRoutePattern: null -> reuse the default cases-i18n endpoint
// resourceLocation: "MyApp.Host" -> look for embedded resources in the MyApp.Host assembly
builder.Services.AddTranslationsResource( resourceName: "MyApp.Cases.Translations",
endpointRoutePattern: null, resourceLocation: "MyApp.Host");
Make the added resource actually resolve. All resources sharing the
endpoint are resolved in one pass; if any one can't find its embedded manifest, the entire request
throws MissingManifestResourceException. For your resource to resolve:
- Provide a neutral
.resx(e.g.MyApp.Cases.Translations.resx), not only culture-specific ones. - Mark the
.resxfiles asEmbeddedResource. - With
ResourcesPath = "Resources"(the platform default), place them under aResourcesfolder so the manifest name is{Assembly}.Resources.{baseName}. Pass the base name without theResources.prefix — theResourcesPathadds it. - Pass the correct assembly name as
resourceLocation, and ensure that assembly'sRootNamespacematches its assembly name.
Note: You can remove the previous translation file el.json as it is no longer needed.
Disabling the new endpoints.
By default, the system will automatically map the built-in translation endpoints.<br>
However, if you have integrated your own custom translation service and wish to bypass the provided endpoints entirely,
you can easily opt out of this default behavior. Simply update your startup configuration by setting CaseServerOptions.MapTranslations to false
builder.AddCaseServer(options => { options.PathPrefix = "/api"; // rest of configs...
options.MapTranslations = false; });
[8.42.2] - 2026-06-04
Fixed
- A bug when the configuration had
ReferenceNumberfilter enabledm, the filter was not shown.
[7.31.2] - 2024-10-11
Added
UnauthorizedComponentfromIndice.Angularlibrary to handle Forbidden requests.
[7.28.3] - 2024-08-30
Added
GridColumnConfigproperty to CaseType, you can change your lib-list-view to display custom columns.
[7.23.3] - 2024-06-20
Added
- The selected specific case type that is selected by the side navbar menu (navlinks) is now being displayed in the title
- When clicking on specific case type from the menu, the filter can now no longer be removed
[7.23.2] - 2024-06-05
Added
IsMenuItemproperty to CaseType, you can now have all your cases displayed in a separate category as a menu item based on their case typeGridFilterConfigproperty to CaseType, you can add a case type specific filter to your searchOptions dropdown.
For example, you can edit a case type from the UI and put a
SearchOptionjson formatted string like so:
[
{
"field": "RequestId",
"name": "REQUEST ID",
"dataType": "string"
}
]
[7.20.2] - 2024-02-22
Changed
- Global renaming on case name greek wording.
Αίτηση→Υπόθεση
- Row height of Case & Case Type list View has been reduced.
- Case custom Action buttons have been aligned to the left to conform with case form elements.
Added
label-onlywidget component has been extended to handlehrefelements.label-onlywidget component has been extended to handle elements that need data-binding from other form data, eg.extraType = "data-bind".
Bugfix
- Number data types on
label-onlywidget component are now displayed correctly.
[7.20.1] - 2024-02-14
Added
label-onlywidget component to handle form input data as a simple label in cases BackOffice. Supports enum, currency & bool type conversions.- Disables Add button from readonly array types & other improvements.
[7.4.1] - 2023-08-29
Added
hrefwidget component to handle links in cases backoffice.
[7.4.0] - 2023-08-29
Added
- SPA settings to control which filters & columns are visible in the cases list view.
- ReferenceNumber translation using the key
cases.referenceNumber&caseDetails.referenceNumber - CasesUIOptions to control which filters & columns are visible in the cases list view.
Example to override the visible filters & columns
app.UseCasesUI(options => {
// Filter using only: ReferenceNumber, CustomerId, CustomerName,
// TaxId, CaseTypeCode
options.CaseListFilters = new HashSet<CaseListFilter>() {
CaseListFilter.ReferenceNumber,
CaseListFilter.CustomerId,
CaseListFilter.CustomerName,
CaseListFilter.TaxId,
CaseListFilter.CaseTypeCodes,
};
// Display only the columns: ReferenceNumber, CustomerId,
// CustomerName, TaxId, CaseType, AssignedTo. SubmitDate
options.CaseListColumns = new HashSet<CaseListColumn>() {
CaseListColumn.ReferenceNumber,
CaseListColumn.CustomerId,
CaseListColumn.CustomerName,
CaseListColumn.TaxId,
CaseListColumn.CaseType,
CaseListColumn.AssignedTo,
CaseListColumn.SubmitDate
};
});
[7.3.6] - 2023-07-06
Bugfix
- PDF button visibility is calculated from the correct property
checkpointType.status.
[7.3.5] - 2023-07-03
Bugfix
- Tailwind
ng-indiceclasses were overriding back-office action buttons, making them transparent.
[7.3.4] - 2023-07-03
Added
- "not-equals" and "contains" operators to GetCases list filters.
[7.3.2] - 2023-06-29
Added
- Overridable translation support for
dashboard,cases,case-detailspages using@ngx-translate.
Example to override default el.json file
app.UseCasesUI(options => {
// This is the absolute path to the folder that contains the el.json
options.I18nAssets = "/assets/cases/i18n";
});
- Added the ability to control which canvases (dashboardTags) should be enabled for the dashboard
Example enabling only two canvases
app.UseCasesUI(options => {
options.DashboardTags = new List<string>() {
"GroupedByCasetype",
"GroupedByStatus"
};
CheckpointTypeTranslations to cases list, checkpointtype filter, case details and timeline.
[7.1.8] - 2023-05-26
Bugfix
- CaseForm now allows empty layout and shows json schema correctly
[7.0.5] - 2023-03-30
Added
checkpointsThatAllowDownloadas a case type Config option
[7.0.4 - 2023-03-27]
Added
- Notification subscriptions now use case type Categories & Ordering
[7.0.3 - 2023-03-27]
Added
- layoutNode option
case-channelthat indicates whether the field is visible based on case's channel. - lookup caching
[6.12.2] - 2023-03-22
Added
- Categories & Ordering for case types
- WYSIWYG widget, using
ngx-quill
[6.11.3] - 2023-03-15
Changed
- allow negative numbers to
currency-widget
[6.11.2] - 2023-03-15
Added
- Create new case side pane redesign
- Property
LangatCasesUIOptionsfor handling the attribute<html lang='XXX'>from the options.
This change will require from the consumer api to handle the language. Eg:
app.UseCasesUI(options => {
// ...
options.Lang = "el";
});
- onInit layout callback, now can return and set the entity to the ajsf form
- onInit layout callback, now it can access the
case.metadataproperty
example layout that sets the data.isLegal property
{
"backoffice": [
{
// mv: modelValue, f: form (entity), md: case metadata
"onInit": "function(mv,f,md) {f = f || {}; if(md.LegalEntity === '1' || md.LegalEntity.toLowerCase() === 'true') {f.isLegal = true;} return f; }",
...
]
}
[6.10.6] - 2023-03-13
Changed
- Redesigned the create case side panel. Removed the drop down for picking a case type. Now it displays all the available case types. Made the title dynamically change based on the wizard step. Minor design changes for picking customer number. Created a new component for displaying all the available case types.
[6.10.5] - 2023-03-02
Changed
- Case type form for create/update is simplified. Only case type entity is being edited.
[6.10.4] - 2023-03-01
Changed
notificationsroute can only be seen & navigated by non-admin users- use
lib-toggle-buttoncomponent from@indice/ng-componentsnpm package
Fixed
- modal bugs introduced from
@indice/ng-componentsnpm package latest version
[6.10.1] - 2023-02-15
Added
- Dashboard with stats, filtered by role
[6.9.1] - 2023-02-07
Changed
- Notification Subscriptions are now per case type
[6.6.0] - 2023-01-30
- Jumped to 6.6.0 to match other Indice Packages
[6.5.1] - 2023-01-24
Fixed
- Angular build
[6.5.0] - 2023-01-24
Added
- Support for net7
Changed
- Changes following the API refactoring in dto names
JSON.stringify(data)is no longer needed to send json data to a case. Case data request is dynamic.JSON.parse(data)is no longer needed for parsing. Case data response is dynamic.
Removed
- Support for net3.1
[6.4.3] - 2023-01-10
Added
- add min/max date configuration for
date-widgetthrough layout options - momentjs dependency
[6.4.2] - 2023-01-10
Added
- a lookup-selector widget
Fixed
- a minor typeahead bug in lookup widget
[6.4.0] - 2022-12-22
- Jumped to 6.4.0 to match other Indice Packages
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Indice.AspNetCore.EmbeddedUI (>= 8.61.0)
-
net8.0
- Indice.AspNetCore.EmbeddedUI (>= 8.61.0)
-
net9.0
- Indice.AspNetCore.EmbeddedUI (>= 8.61.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 8.61.1 | 44 | 10/27/2026 |
| 8.61.0 | 85 | 10/26/2026 |
| 8.60.0 | 104 | 10/22/2026 |
| 8.59.1-beta03 | 94 | 10/21/2026 |
| 8.59.1-beta02 | 96 | 10/21/2026 |
| 8.59.1-beta01 | 92 | 10/20/2026 |
| 8.59.0 | 109 | 10/20/2026 |
| 8.58.0 | 134 | 10/7/2026 |
| 8.57.1 | 146 | 10/1/2026 |
| 8.57.0 | 123 | 9/23/2026 |
| 8.56.0 | 143 | 9/7/2026 |
| 8.55.0 | 125 | 9/3/2026 |
| 8.54.0 | 177 | 7/23/2026 |
| 8.53.0 | 144 | 7/21/2026 |
| 8.52.0 | 155 | 7/17/2026 |
| 8.51.1 | 149 | 7/10/2026 |
| 8.51.0 | 141 | 7/7/2026 |
| 8.50.1 | 341 | 7/1/2026 |
| 8.50.0 | 164 | 6/25/2026 |
| 8.50.0-rc01 | 140 | 6/19/2026 |