@beinformed/ui 1.9.0-beta.6 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/esm/constants/Settings.js +10 -8
  3. package/esm/constants/Settings.js.map +1 -1
  4. package/esm/hooks/useForm.js.map +1 -1
  5. package/esm/hooks/useNotification.js.map +1 -1
  6. package/esm/hooks/useRouter.js.map +1 -1
  7. package/esm/models/attributes/AttributeContent.js +126 -58
  8. package/esm/models/attributes/AttributeContent.js.map +1 -1
  9. package/esm/models/attributes/AttributeDataHelper.js +1 -1
  10. package/esm/models/attributes/AttributeDataHelper.js.map +1 -1
  11. package/esm/models/attributes/AttributeModel.js +3 -3
  12. package/esm/models/attributes/AttributeModel.js.map +1 -1
  13. package/esm/models/attributes/ChoiceAttributeOptionModel.js +4 -4
  14. package/esm/models/attributes/ChoiceAttributeOptionModel.js.map +1 -1
  15. package/esm/models/attributes/HelptextAttributeModel.js +17 -1
  16. package/esm/models/attributes/HelptextAttributeModel.js.map +1 -1
  17. package/esm/models/caseview/CaseViewModel.js +26 -12
  18. package/esm/models/caseview/CaseViewModel.js.map +1 -1
  19. package/esm/models/content/SectionModel.js +2 -1
  20. package/esm/models/content/SectionModel.js.map +1 -1
  21. package/esm/models/content/SubSectionModel.js +3 -1
  22. package/esm/models/content/SubSectionModel.js.map +1 -1
  23. package/esm/models/contentconfiguration/ContentConfigurationResults.js +2 -2
  24. package/esm/models/contentconfiguration/ContentConfigurationResults.js.map +1 -1
  25. package/esm/models/form/FormObjectModel.js +8 -2
  26. package/esm/models/form/FormObjectModel.js.map +1 -1
  27. package/esm/models/layouthint/LayoutHintCollection.js +3 -2
  28. package/esm/models/layouthint/LayoutHintCollection.js.map +1 -1
  29. package/esm/models/list/ListDetailModel.js +25 -0
  30. package/esm/models/list/ListDetailModel.js.map +1 -1
  31. package/esm/models/list/ListModel.js +22 -16
  32. package/esm/models/list/ListModel.js.map +1 -1
  33. package/esm/models/panels/GroupingPanelModel.js +19 -17
  34. package/esm/models/panels/GroupingPanelModel.js.map +1 -1
  35. package/esm/modularui/ModularUIRequest.js +2 -1
  36. package/esm/modularui/ModularUIRequest.js.map +1 -1
  37. package/esm/utils/helpers/text.js +19 -0
  38. package/esm/utils/helpers/text.js.map +1 -0
  39. package/esm/utils/index.js +2 -1
  40. package/esm/utils/index.js.map +1 -1
  41. package/lib/constants/Settings.js +12 -1
  42. package/lib/constants/Settings.js.flow +9 -5
  43. package/lib/constants/Settings.js.map +1 -1
  44. package/lib/hooks/useForm.js.flow +10 -5
  45. package/lib/hooks/useForm.js.map +1 -1
  46. package/lib/hooks/useNotification.js.flow +5 -2
  47. package/lib/hooks/useNotification.js.map +1 -1
  48. package/lib/hooks/useRouter.js.flow +12 -5
  49. package/lib/hooks/useRouter.js.map +1 -1
  50. package/lib/models/attributes/AttributeContent.js +136 -59
  51. package/lib/models/attributes/AttributeContent.js.flow +91 -39
  52. package/lib/models/attributes/AttributeContent.js.map +1 -1
  53. package/lib/models/attributes/AttributeDataHelper.js +1 -1
  54. package/lib/models/attributes/AttributeDataHelper.js.flow +2 -1
  55. package/lib/models/attributes/AttributeDataHelper.js.map +1 -1
  56. package/lib/models/attributes/AttributeModel.js +1 -1
  57. package/lib/models/attributes/AttributeModel.js.flow +2 -3
  58. package/lib/models/attributes/AttributeModel.js.map +1 -1
  59. package/lib/models/attributes/ChoiceAttributeOptionModel.js +3 -3
  60. package/lib/models/attributes/ChoiceAttributeOptionModel.js.flow +4 -7
  61. package/lib/models/attributes/ChoiceAttributeOptionModel.js.map +1 -1
  62. package/lib/models/attributes/HelptextAttributeModel.js +17 -1
  63. package/lib/models/attributes/HelptextAttributeModel.js.flow +11 -1
  64. package/lib/models/attributes/HelptextAttributeModel.js.map +1 -1
  65. package/lib/models/attributes/__tests__/AttributeContent.spec.js.flow +10 -2
  66. package/lib/models/attributes/__tests__/AttributeDataHelper.spec.js.flow +9 -3
  67. package/lib/models/attributes/__tests__/HelptextAttributeModel.spec.js.flow +39 -1
  68. package/lib/models/caseview/CaseViewModel.js +27 -13
  69. package/lib/models/caseview/CaseViewModel.js.flow +17 -7
  70. package/lib/models/caseview/CaseViewModel.js.map +1 -1
  71. package/lib/models/caseview/__tests__/CaseViewModel.spec.js.flow +68 -184
  72. package/lib/models/concepts/__mock__/business_scenario.js.flow +14 -1
  73. package/lib/models/concepts/__mock__/conceptdetail.js.flow +15 -6
  74. package/lib/models/concepts/__tests__/BusinessScenarioModel.spec.js.flow +5 -6
  75. package/lib/models/concepts/__tests__/ConceptDetailModel.spec.js.flow +58 -3
  76. package/lib/models/content/SectionModel.js +3 -1
  77. package/lib/models/content/SectionModel.js.flow +2 -1
  78. package/lib/models/content/SectionModel.js.map +1 -1
  79. package/lib/models/content/SubSectionModel.js +4 -1
  80. package/lib/models/content/SubSectionModel.js.flow +3 -1
  81. package/lib/models/content/SubSectionModel.js.map +1 -1
  82. package/lib/models/contentconfiguration/ContentConfigurationResults.js +2 -2
  83. package/lib/models/contentconfiguration/ContentConfigurationResults.js.flow +2 -2
  84. package/lib/models/contentconfiguration/ContentConfigurationResults.js.map +1 -1
  85. package/lib/models/contentconfiguration/__tests__/ContentConfigurationResults.spec.js.flow +6 -6
  86. package/lib/models/form/FormObjectModel.js +8 -2
  87. package/lib/models/form/FormObjectModel.js.flow +5 -1
  88. package/lib/models/form/FormObjectModel.js.map +1 -1
  89. package/lib/models/form/__tests__/FormObjectModel.spec.js.flow +2 -2
  90. package/lib/models/layouthint/LayoutHintCollection.js +4 -2
  91. package/lib/models/layouthint/LayoutHintCollection.js.flow +8 -7
  92. package/lib/models/layouthint/LayoutHintCollection.js.map +1 -1
  93. package/lib/models/list/ListDetailModel.js +25 -0
  94. package/lib/models/list/ListDetailModel.js.flow +19 -0
  95. package/lib/models/list/ListDetailModel.js.map +1 -1
  96. package/lib/models/list/ListModel.js +23 -16
  97. package/lib/models/list/ListModel.js.flow +9 -5
  98. package/lib/models/list/ListModel.js.map +1 -1
  99. package/lib/models/list/__tests__/ListDetailModel.spec.js.flow +64 -0
  100. package/lib/models/list/__tests__/ListModel.spec.js.flow +64 -2
  101. package/lib/models/panels/GroupingPanelModel.js +21 -18
  102. package/lib/models/panels/GroupingPanelModel.js.flow +10 -9
  103. package/lib/models/panels/GroupingPanelModel.js.map +1 -1
  104. package/lib/models/panels/__tests__/GroupingPanelModel.spec.js.flow +90 -0
  105. package/lib/models/types.js.flow +38 -11
  106. package/lib/modularui/ModularUIRequest.js +2 -1
  107. package/lib/modularui/ModularUIRequest.js.flow +1 -0
  108. package/lib/modularui/ModularUIRequest.js.map +1 -1
  109. package/lib/utils/helpers/text.js +28 -0
  110. package/lib/utils/helpers/text.js.flow +23 -0
  111. package/lib/utils/helpers/text.js.map +1 -0
  112. package/lib/utils/index.js +14 -0
  113. package/lib/utils/index.js.flow +1 -0
  114. package/lib/utils/index.js.map +1 -1
  115. package/package.json +13 -13
  116. package/src/constants/Settings.js +9 -5
  117. package/src/hooks/useForm.js +10 -5
  118. package/src/hooks/useNotification.js +5 -2
  119. package/src/hooks/useRouter.js +12 -5
  120. package/src/models/attributes/AttributeContent.js +91 -39
  121. package/src/models/attributes/AttributeDataHelper.js +2 -1
  122. package/src/models/attributes/AttributeModel.js +2 -3
  123. package/src/models/attributes/ChoiceAttributeOptionModel.js +4 -7
  124. package/src/models/attributes/HelptextAttributeModel.js +11 -1
  125. package/src/models/attributes/__tests__/AttributeContent.spec.js +10 -2
  126. package/src/models/attributes/__tests__/AttributeDataHelper.spec.js +9 -3
  127. package/src/models/attributes/__tests__/HelptextAttributeModel.spec.js +39 -1
  128. package/src/models/caseview/CaseViewModel.js +17 -7
  129. package/src/models/caseview/__tests__/CaseViewModel.spec.js +68 -184
  130. package/src/models/caseview/__tests__/caseview.json +38 -0
  131. package/src/models/caseview/__tests__/caseviewContributions.json +147 -0
  132. package/src/models/concepts/__mock__/business_scenario.js +14 -1
  133. package/src/models/concepts/__mock__/business_scenario_step.json +64 -0
  134. package/src/models/concepts/__mock__/conceptdetail.js +15 -6
  135. package/src/models/concepts/__mock__/conceptdetail_data.json +117 -17
  136. package/src/models/concepts/__mock__/concepttype_Calculation.json +75 -0
  137. package/src/models/concepts/__tests__/BusinessScenarioModel.spec.js +5 -6
  138. package/src/models/concepts/__tests__/ConceptDetailModel.spec.js +58 -3
  139. package/src/models/content/SectionModel.js +2 -1
  140. package/src/models/content/SubSectionModel.js +3 -1
  141. package/src/models/contentconfiguration/ContentConfigurationResults.js +2 -2
  142. package/src/models/contentconfiguration/__tests__/ContentConfigurationResults.spec.js +6 -6
  143. package/src/models/form/FormObjectModel.js +5 -1
  144. package/src/models/form/__tests__/FormObjectModel.spec.js +2 -2
  145. package/src/models/form/__tests__/FormWithContentData.json +1 -0
  146. package/src/models/layouthint/LayoutHintCollection.js +8 -7
  147. package/src/models/list/ListDetailModel.js +19 -0
  148. package/src/models/list/ListModel.js +9 -5
  149. package/src/models/list/__tests__/ListDetailModel.spec.js +64 -0
  150. package/src/models/list/__tests__/ListModel.spec.js +64 -2
  151. package/src/models/list/__tests__/caselist-34.contributions.json +1 -1
  152. package/src/models/list/__tests__/listContributions.json +1 -1
  153. package/src/models/panels/GroupingPanelModel.js +10 -9
  154. package/src/models/panels/__tests__/GroupingPanelModel.spec.js +90 -0
  155. package/src/models/panels/__tests__/groupingPanel.json +30 -0
  156. package/src/models/panels/__tests__/groupingPanelContributions.json +46 -0
  157. package/src/models/types.js +38 -11
  158. package/src/modularui/ModularUIRequest.js +1 -0
  159. package/src/utils/helpers/text.js +23 -0
  160. package/src/utils/index.js +1 -0
@@ -98,12 +98,16 @@ export default class ListModel extends ResourceModel {
98
98
  * Getting the introduction text
99
99
  */
100
100
  get introtext(): string {
101
- if (this.contributions.texts) {
102
- const text = this.contributions.texts.find(
103
- (item) => item.type === "master"
104
- );
101
+ if (this.data.text) {
102
+ return this.data.text.message ?? this.data.text;
103
+ }
104
+
105
+ if (this.contributions.text) {
106
+ return this.contributions.text.message ?? this.contributions.text;
107
+ }
105
108
 
106
- return text ? text.text : "";
109
+ if (Array.isArray(this.contributions.texts)) {
110
+ return this.contributions.texts[0].text;
107
111
  }
108
112
 
109
113
  return "";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/models/list/ListModel.js"],"names":["ListModel","layouthint","has","SHOW_ONE_RESULT_AS_DETAIL","listItemCollection","length","listItem","listDetailLink","selflink","targetModel","ListDetailModel","models","detail","childModel","type","contributions","label","texts","text","item","listitemCollection","ListItemCollection","_embedded","getData","Array","isArray","ConfigurationException","key","collection","results","result","createListItem","resultItem","listitemData","listitemContributions","data","dynamicschema","listitemModelInput","ModularUIResponse","ListItemModel","_listItemCollection","createListItemCollection","_detail","listitemHref","selfhref","listitem","equals","setSelfHref","_grouping","setGrouping","GroupingModel","grouping","contexts","hasGroups","hasItems","HIDE_WHEN_EMPTY","hasResults","actionCollection","isEmpty","filterCollection","hasActiveFilters","id","decodedId","decodeURIComponent","toString","href","_paging","setPaging","PagingModel","paging","_sorting","setSorting","SortingModel","getSortingLabels","sorting","_filterCollection","setFilters","FilterCollection","listkey","filter","_actionCollection","setActionCollection","ActionCollection","actions","selfLink","links","getLinkByKey","ListHref","_selfhref","_headers","setHeaders","tempHeaders","forEach","attributes","attribute","listHeader","ListHeaderModel","exists","some","tempHeader","CASEVIEW_LINK","push","sortingLabels","attributeKey","actionType","getActionsByType","resourcetype","ResourceModel"],"mappings":"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","sourcesContent":["// @flow\nimport { ConfigurationException } from \"../../exceptions\";\n\nimport ModularUIResponse from \"../../modularui/ModularUIResponse\";\n\nimport ListItemCollection from \"../list/ListItemCollection\";\nimport ListDetailModel from \"../list/ListDetailModel\";\nimport ActionCollection from \"../actions/ActionCollection\";\nimport FilterCollection from \"../filters/FilterCollection\";\nimport GroupingModel from \"../grouping/GroupingModel\";\nimport ListHeaderModel from \"../list/ListHeaderModel\";\nimport ListHref from \"../href/ListHref\";\nimport ListItemModel from \"../list/ListItemModel\";\nimport PagingModel from \"../paging/PagingModel\";\nimport ResourceModel from \"../base/ResourceModel\";\nimport SortingModel from \"../sorting/SortingModel\";\nimport {\n CASEVIEW_LINK,\n HIDE_WHEN_EMPTY,\n SHOW_ONE_RESULT_AS_DETAIL,\n} from \"../../constants/LayoutHints\";\n\nimport type { ModularUIModel } from \"../types\";\nimport type LinkModel from \"../links/LinkModel\";\n\n/**\n * Defines a list object\n */\nexport default class ListModel extends ResourceModel {\n _detail: ?ListDetailModel = null;\n _headers: Array<ListHeaderModel>;\n _paging: PagingModel;\n _filterCollection: FilterCollection;\n _sorting: SortingModel;\n _actionCollection: ActionCollection;\n _listItemCollection: ListItemCollection;\n _grouping: GroupingModel;\n _selfhref: ListHref;\n\n /**\n */\n get type(): string {\n return \"List\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n (data.contributions.resourcetype.endsWith(\"List\") ||\n data.contributions.resourcetype.endsWith(\"ListPanel\") ||\n [\n \"DatastoreRelatedDatastorePanel\",\n \"list-related-cases\",\n \"CaseRelatedDataStorePanel\",\n \"RecordPanel\",\n \"EventHistoryPanel\",\n \"NotePanel\",\n \"AppointmentPanel\",\n \"DocumentPanel\",\n \"AssignmentPanel\",\n ].includes(data.contributions.resourcetype))\n );\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n if (\n this.layouthint.has(SHOW_ONE_RESULT_AS_DETAIL) &&\n this.listItemCollection.length === 1\n ) {\n return this.listItemCollection.map((listItem) => {\n const listDetailLink = listItem.selflink;\n listDetailLink.targetModel = ListDetailModel;\n return listDetailLink;\n });\n }\n\n return [];\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n this.detail = models.find((childModel) => childModel.type === \"ListDetail\");\n }\n\n /**\n * Getting the label of the list\n */\n get label(): string {\n return this.contributions.label;\n }\n\n /**\n * Getting the introduction text\n */\n get introtext(): string {\n if (this.contributions.texts) {\n const text = this.contributions.texts.find(\n (item) => item.type === \"master\"\n );\n\n return text ? text.text : \"\";\n }\n\n return \"\";\n }\n\n /**\n * Create a listitem collection from the data and contributions of a list\n */\n createListItemCollection(): ListItemCollection {\n const listitemCollection = new ListItemCollection();\n\n const _embedded = this.getData(\"_embedded\");\n if (_embedded !== null) {\n if (Array.isArray(_embedded)) {\n throw new ConfigurationException(\n `One record panel with multiple tables is not supported, place all types in one panel for the panel with key ${this.key}`\n );\n }\n\n listitemCollection.collection = _embedded.results.map((result) =>\n this.createListItem(result)\n );\n }\n\n return listitemCollection;\n }\n\n /**\n * Create a ListItem\n */\n createListItem(resultItem: Object): ListItemModel {\n const [key] = Object.keys(resultItem);\n const listitemData = resultItem[key];\n const listitemContributions = this.contributions.results[key];\n\n if (this.data.dynamicschema) {\n listitemData.dynamicschema = this.data.dynamicschema;\n }\n\n const listitemModelInput = new ModularUIResponse();\n listitemModelInput.key = key;\n listitemModelInput.data = listitemData;\n listitemModelInput.contributions = listitemContributions;\n\n return new ListItemModel(listitemModelInput);\n }\n\n /**\n * Getting the results\n */\n get listItemCollection(): ListItemCollection {\n if (!this._listItemCollection) {\n this._listItemCollection = this.createListItemCollection();\n }\n\n return this._listItemCollection;\n }\n\n /**\n * Set results\n */\n set listItemCollection(listItemCollection: ListItemCollection) {\n this._listItemCollection = listItemCollection;\n }\n\n /**\n * Getting the detail\n */\n get detail(): ?ListDetailModel {\n return this._detail;\n }\n\n /**\n * Add detail model to the {ListModel}\n */\n set detail(detail: ?ModularUIModel) {\n if (detail instanceof ListDetailModel) {\n const listitemHref = detail.selfhref;\n\n const listitem = this.listItemCollection.find((listItem) =>\n listItem.selfhref.equals(listitemHref)\n );\n\n if (listitem) {\n detail.listitem = listitem;\n }\n\n this._detail = detail;\n }\n\n this.setSelfHref();\n }\n\n /**\n * Retrieve grouping information\n */\n get grouping(): GroupingModel {\n if (!this._grouping) {\n this._grouping = this.setGrouping();\n }\n\n return this._grouping;\n }\n\n /**\n */\n setGrouping(): GroupingModel {\n return new GroupingModel(\n { ...this.data.grouping, dynamicschema: this.data.dynamicschema },\n this.contributions.contexts\n );\n }\n\n /**\n */\n hasGrouping(): boolean {\n return this.grouping.hasGroups();\n }\n\n /**\n * Check if list has results\n */\n hasResults(): boolean {\n return this.listItemCollection.hasItems;\n }\n\n /**\n */\n get shouldHide(): boolean {\n return (\n this.layouthint.has(HIDE_WHEN_EMPTY) &&\n !this.hasResults() &&\n this.actionCollection.isEmpty &&\n !this.filterCollection.hasActiveFilters()\n );\n }\n\n /**\n * Get list item by ID\n */\n getListItemById(id: string | number): ListItemModel | null {\n const decodedId = decodeURIComponent(id.toString());\n return this.listItemCollection.find(\n (result) => result.id.toString() === decodedId\n );\n }\n\n /**\n * Get list item by Href\n */\n getListItemByHref(href: ListHref): ListItemModel | null {\n return this.listItemCollection.find((result) =>\n result.selfhref.equals(href)\n );\n }\n\n /**\n * Getting paging information\n */\n get paging(): PagingModel {\n if (!this._paging) {\n this._paging = this.setPaging();\n }\n return this._paging;\n }\n\n /**\n */\n setPaging(): PagingModel {\n return new PagingModel(this.data.paging, this.contributions.paging);\n }\n\n /**\n * Getting sorting information\n */\n get sorting(): SortingModel {\n if (!this._sorting) {\n this._sorting = this.setSorting();\n }\n\n return this._sorting;\n }\n\n /**\n */\n setSorting(): SortingModel {\n return new SortingModel(\n this.contributions,\n this.getSortingLabels(),\n this.grouping,\n this.data.sorting\n );\n }\n\n /**\n * Getting the filters\n */\n get filterCollection(): FilterCollection {\n if (!this._filterCollection) {\n this._filterCollection = this.setFilters();\n }\n\n return this._filterCollection;\n }\n\n /**\n * Set filterCollection\n */\n set filterCollection(filterCollection: FilterCollection) {\n this._filterCollection = filterCollection;\n }\n\n /**\n */\n setFilters(): FilterCollection {\n return new FilterCollection(this.data.filter, {\n listkey: this.key,\n filter: this.contributions.filter,\n contexts: this.contributions.contexts,\n dynamicschema: this.data.dynamicschema,\n });\n }\n\n /**\n * Indicates if list results are filtered\n */\n isFiltered(): boolean {\n return this.filterCollection.hasActiveFilters();\n }\n\n /**\n * Getting actions\n */\n get actionCollection(): ActionCollection {\n if (!this._actionCollection) {\n this._actionCollection = this.setActionCollection();\n }\n return this._actionCollection;\n }\n\n /**\n */\n setActionCollection(): ActionCollection {\n return new ActionCollection(this.data.actions, this.contributions.actions);\n }\n\n /**\n * Contains this model list data\n */\n hasList(): boolean {\n return this.key != null;\n }\n\n /**\n * Sets self href from links collection\n */\n setSelfHref(): ListHref {\n const selfLink = this.links ? this.links.getLinkByKey(\"self\") : null;\n\n if (selfLink !== null) {\n return new ListHref(selfLink.href, this);\n }\n\n return new ListHref();\n }\n\n /**\n * Getting the self link of this list\n */\n get selfhref(): ListHref {\n if (!this._selfhref) {\n this._selfhref = this.setSelfHref();\n }\n return this._selfhref;\n }\n\n /**\n * Getting the headers of this list\n */\n get headers(): Array<ListHeaderModel> {\n if (!this._headers) {\n this._headers = this.setHeaders();\n }\n\n return this._headers;\n }\n\n /**\n * Set initial headers of list\n */\n setHeaders(): Array<ListHeaderModel> {\n const tempHeaders = [];\n\n if (this.contributions.results) {\n const { results } = this.contributions;\n\n Object.keys(results).forEach((key) => {\n results[key].attributes.forEach((attribute) => {\n const listHeader = new ListHeaderModel(attribute, this.sorting);\n\n const exists = tempHeaders.some((tempHeader) =>\n tempHeader.equals(listHeader)\n );\n\n if (!exists && !listHeader.layouthint.has(CASEVIEW_LINK)) {\n tempHeaders.push(listHeader);\n }\n });\n });\n }\n\n return tempHeaders;\n }\n\n /**\n */\n getSortingLabels(): { [string]: string } {\n const sortingLabels = {};\n\n if (this.contributions.results) {\n const { results } = this.contributions;\n Object.keys(results).forEach((key) => {\n results[key].attributes.forEach((attribute) => {\n const attributeKey = Object.keys(attribute)[0];\n sortingLabels[attributeKey] = attribute[attributeKey].label;\n });\n });\n }\n\n return sortingLabels;\n }\n\n /**\n * Retrieve all actions by type\n */\n getActionsByType(actionType: string): ActionCollection {\n return this.actionCollection.getActionsByType(actionType);\n }\n}\n"],"file":"ListModel.js"}
1
+ {"version":3,"sources":["../../../src/models/list/ListModel.js"],"names":["ListModel","layouthint","has","SHOW_ONE_RESULT_AS_DETAIL","listItemCollection","length","listItem","listDetailLink","selflink","targetModel","ListDetailModel","models","detail","childModel","type","contributions","label","data","text","message","Array","isArray","texts","listitemCollection","ListItemCollection","_embedded","getData","ConfigurationException","key","collection","results","result","createListItem","resultItem","listitemData","listitemContributions","dynamicschema","listitemModelInput","ModularUIResponse","ListItemModel","_listItemCollection","createListItemCollection","_detail","listitemHref","selfhref","listitem","equals","setSelfHref","_grouping","setGrouping","GroupingModel","grouping","contexts","hasGroups","hasItems","HIDE_WHEN_EMPTY","hasResults","actionCollection","isEmpty","filterCollection","hasActiveFilters","id","decodedId","decodeURIComponent","toString","href","_paging","setPaging","PagingModel","paging","_sorting","setSorting","SortingModel","getSortingLabels","sorting","_filterCollection","setFilters","FilterCollection","listkey","filter","_actionCollection","setActionCollection","ActionCollection","actions","selfLink","links","getLinkByKey","ListHref","_selfhref","_headers","setHeaders","tempHeaders","forEach","attributes","attribute","listHeader","ListHeaderModel","exists","some","tempHeader","CASEVIEW_LINK","push","sortingLabels","attributeKey","actionType","getActionsByType","resourcetype","ResourceModel"],"mappings":"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","sourcesContent":["// @flow\nimport { ConfigurationException } from \"../../exceptions\";\n\nimport ModularUIResponse from \"../../modularui/ModularUIResponse\";\n\nimport ListItemCollection from \"../list/ListItemCollection\";\nimport ListDetailModel from \"../list/ListDetailModel\";\nimport ActionCollection from \"../actions/ActionCollection\";\nimport FilterCollection from \"../filters/FilterCollection\";\nimport GroupingModel from \"../grouping/GroupingModel\";\nimport ListHeaderModel from \"../list/ListHeaderModel\";\nimport ListHref from \"../href/ListHref\";\nimport ListItemModel from \"../list/ListItemModel\";\nimport PagingModel from \"../paging/PagingModel\";\nimport ResourceModel from \"../base/ResourceModel\";\nimport SortingModel from \"../sorting/SortingModel\";\nimport {\n CASEVIEW_LINK,\n HIDE_WHEN_EMPTY,\n SHOW_ONE_RESULT_AS_DETAIL,\n} from \"../../constants/LayoutHints\";\n\nimport type { ModularUIModel } from \"../types\";\nimport type LinkModel from \"../links/LinkModel\";\n\n/**\n * Defines a list object\n */\nexport default class ListModel extends ResourceModel {\n _detail: ?ListDetailModel = null;\n _headers: Array<ListHeaderModel>;\n _paging: PagingModel;\n _filterCollection: FilterCollection;\n _sorting: SortingModel;\n _actionCollection: ActionCollection;\n _listItemCollection: ListItemCollection;\n _grouping: GroupingModel;\n _selfhref: ListHref;\n\n /**\n */\n get type(): string {\n return \"List\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n (data.contributions.resourcetype.endsWith(\"List\") ||\n data.contributions.resourcetype.endsWith(\"ListPanel\") ||\n [\n \"DatastoreRelatedDatastorePanel\",\n \"list-related-cases\",\n \"CaseRelatedDataStorePanel\",\n \"RecordPanel\",\n \"EventHistoryPanel\",\n \"NotePanel\",\n \"AppointmentPanel\",\n \"DocumentPanel\",\n \"AssignmentPanel\",\n ].includes(data.contributions.resourcetype))\n );\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n if (\n this.layouthint.has(SHOW_ONE_RESULT_AS_DETAIL) &&\n this.listItemCollection.length === 1\n ) {\n return this.listItemCollection.map((listItem) => {\n const listDetailLink = listItem.selflink;\n listDetailLink.targetModel = ListDetailModel;\n return listDetailLink;\n });\n }\n\n return [];\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n this.detail = models.find((childModel) => childModel.type === \"ListDetail\");\n }\n\n /**\n * Getting the label of the list\n */\n get label(): string {\n return this.contributions.label;\n }\n\n /**\n * Getting the introduction text\n */\n get introtext(): string {\n if (this.data.text) {\n return this.data.text.message ?? this.data.text;\n }\n\n if (this.contributions.text) {\n return this.contributions.text.message ?? this.contributions.text;\n }\n\n if (Array.isArray(this.contributions.texts)) {\n return this.contributions.texts[0].text;\n }\n\n return \"\";\n }\n\n /**\n * Create a listitem collection from the data and contributions of a list\n */\n createListItemCollection(): ListItemCollection {\n const listitemCollection = new ListItemCollection();\n\n const _embedded = this.getData(\"_embedded\");\n if (_embedded !== null) {\n if (Array.isArray(_embedded)) {\n throw new ConfigurationException(\n `One record panel with multiple tables is not supported, place all types in one panel for the panel with key ${this.key}`\n );\n }\n\n listitemCollection.collection = _embedded.results.map((result) =>\n this.createListItem(result)\n );\n }\n\n return listitemCollection;\n }\n\n /**\n * Create a ListItem\n */\n createListItem(resultItem: Object): ListItemModel {\n const [key] = Object.keys(resultItem);\n const listitemData = resultItem[key];\n const listitemContributions = this.contributions.results[key];\n\n if (this.data.dynamicschema) {\n listitemData.dynamicschema = this.data.dynamicschema;\n }\n\n const listitemModelInput = new ModularUIResponse();\n listitemModelInput.key = key;\n listitemModelInput.data = listitemData;\n listitemModelInput.contributions = listitemContributions;\n\n return new ListItemModel(listitemModelInput);\n }\n\n /**\n * Getting the results\n */\n get listItemCollection(): ListItemCollection {\n if (!this._listItemCollection) {\n this._listItemCollection = this.createListItemCollection();\n }\n\n return this._listItemCollection;\n }\n\n /**\n * Set results\n */\n set listItemCollection(listItemCollection: ListItemCollection) {\n this._listItemCollection = listItemCollection;\n }\n\n /**\n * Getting the detail\n */\n get detail(): ?ListDetailModel {\n return this._detail;\n }\n\n /**\n * Add detail model to the {ListModel}\n */\n set detail(detail: ?ModularUIModel) {\n if (detail instanceof ListDetailModel) {\n const listitemHref = detail.selfhref;\n\n const listitem = this.listItemCollection.find((listItem) =>\n listItem.selfhref.equals(listitemHref)\n );\n\n if (listitem) {\n detail.listitem = listitem;\n }\n\n this._detail = detail;\n }\n\n this.setSelfHref();\n }\n\n /**\n * Retrieve grouping information\n */\n get grouping(): GroupingModel {\n if (!this._grouping) {\n this._grouping = this.setGrouping();\n }\n\n return this._grouping;\n }\n\n /**\n */\n setGrouping(): GroupingModel {\n return new GroupingModel(\n { ...this.data.grouping, dynamicschema: this.data.dynamicschema },\n this.contributions.contexts\n );\n }\n\n /**\n */\n hasGrouping(): boolean {\n return this.grouping.hasGroups();\n }\n\n /**\n * Check if list has results\n */\n hasResults(): boolean {\n return this.listItemCollection.hasItems;\n }\n\n /**\n */\n get shouldHide(): boolean {\n return (\n this.layouthint.has(HIDE_WHEN_EMPTY) &&\n !this.hasResults() &&\n this.actionCollection.isEmpty &&\n !this.filterCollection.hasActiveFilters()\n );\n }\n\n /**\n * Get list item by ID\n */\n getListItemById(id: string | number): ListItemModel | null {\n const decodedId = decodeURIComponent(id.toString());\n return this.listItemCollection.find(\n (result) => result.id.toString() === decodedId\n );\n }\n\n /**\n * Get list item by Href\n */\n getListItemByHref(href: ListHref): ListItemModel | null {\n return this.listItemCollection.find((result) =>\n result.selfhref.equals(href)\n );\n }\n\n /**\n * Getting paging information\n */\n get paging(): PagingModel {\n if (!this._paging) {\n this._paging = this.setPaging();\n }\n return this._paging;\n }\n\n /**\n */\n setPaging(): PagingModel {\n return new PagingModel(this.data.paging, this.contributions.paging);\n }\n\n /**\n * Getting sorting information\n */\n get sorting(): SortingModel {\n if (!this._sorting) {\n this._sorting = this.setSorting();\n }\n\n return this._sorting;\n }\n\n /**\n */\n setSorting(): SortingModel {\n return new SortingModel(\n this.contributions,\n this.getSortingLabels(),\n this.grouping,\n this.data.sorting\n );\n }\n\n /**\n * Getting the filters\n */\n get filterCollection(): FilterCollection {\n if (!this._filterCollection) {\n this._filterCollection = this.setFilters();\n }\n\n return this._filterCollection;\n }\n\n /**\n * Set filterCollection\n */\n set filterCollection(filterCollection: FilterCollection) {\n this._filterCollection = filterCollection;\n }\n\n /**\n */\n setFilters(): FilterCollection {\n return new FilterCollection(this.data.filter, {\n listkey: this.key,\n filter: this.contributions.filter,\n contexts: this.contributions.contexts,\n dynamicschema: this.data.dynamicschema,\n });\n }\n\n /**\n * Indicates if list results are filtered\n */\n isFiltered(): boolean {\n return this.filterCollection.hasActiveFilters();\n }\n\n /**\n * Getting actions\n */\n get actionCollection(): ActionCollection {\n if (!this._actionCollection) {\n this._actionCollection = this.setActionCollection();\n }\n return this._actionCollection;\n }\n\n /**\n */\n setActionCollection(): ActionCollection {\n return new ActionCollection(this.data.actions, this.contributions.actions);\n }\n\n /**\n * Contains this model list data\n */\n hasList(): boolean {\n return this.key != null;\n }\n\n /**\n * Sets self href from links collection\n */\n setSelfHref(): ListHref {\n const selfLink = this.links ? this.links.getLinkByKey(\"self\") : null;\n\n if (selfLink !== null) {\n return new ListHref(selfLink.href, this);\n }\n\n return new ListHref();\n }\n\n /**\n * Getting the self link of this list\n */\n get selfhref(): ListHref {\n if (!this._selfhref) {\n this._selfhref = this.setSelfHref();\n }\n return this._selfhref;\n }\n\n /**\n * Getting the headers of this list\n */\n get headers(): Array<ListHeaderModel> {\n if (!this._headers) {\n this._headers = this.setHeaders();\n }\n\n return this._headers;\n }\n\n /**\n * Set initial headers of list\n */\n setHeaders(): Array<ListHeaderModel> {\n const tempHeaders = [];\n\n if (this.contributions.results) {\n const { results } = this.contributions;\n\n Object.keys(results).forEach((key) => {\n results[key].attributes.forEach((attribute) => {\n const listHeader = new ListHeaderModel(attribute, this.sorting);\n\n const exists = tempHeaders.some((tempHeader) =>\n tempHeader.equals(listHeader)\n );\n\n if (!exists && !listHeader.layouthint.has(CASEVIEW_LINK)) {\n tempHeaders.push(listHeader);\n }\n });\n });\n }\n\n return tempHeaders;\n }\n\n /**\n */\n getSortingLabels(): { [string]: string } {\n const sortingLabels = {};\n\n if (this.contributions.results) {\n const { results } = this.contributions;\n Object.keys(results).forEach((key) => {\n results[key].attributes.forEach((attribute) => {\n const attributeKey = Object.keys(attribute)[0];\n sortingLabels[attributeKey] = attribute[attributeKey].label;\n });\n });\n }\n\n return sortingLabels;\n }\n\n /**\n * Retrieve all actions by type\n */\n getActionsByType(actionType: string): ActionCollection {\n return this.actionCollection.getActionsByType(actionType);\n }\n}\n"],"file":"ListModel.js"}
@@ -27,4 +27,68 @@ describe("listDetailModel", () => {
27
27
  "Highly Inappropriate Tales for Young People"
28
28
  );
29
29
  });
30
+
31
+ it("should be able to handle different kind of introtext", () => {
32
+ const listdetailOldStructure = new ListDetailModel({
33
+ key: "Book",
34
+ data: data.Book,
35
+ contributions: contributions.Book,
36
+ });
37
+
38
+ expect(listdetailOldStructure.introtext).toBe("<p>This is introtext</p>");
39
+
40
+ const listdetailFromDataPlain = new ListDetailModel({
41
+ key: "Book",
42
+ data: {
43
+ _text: "<p>This is introtext</p>",
44
+ ...data.Book,
45
+ },
46
+ contributions: contributions.Book,
47
+ });
48
+
49
+ expect(listdetailFromDataPlain.introtext).toBe("<p>This is introtext</p>");
50
+
51
+ const listdetailFromDataApplicationMessage = new ListDetailModel({
52
+ key: "Book",
53
+ data: {
54
+ ...data.Book,
55
+ _text: {
56
+ message: "<p>This is introtext</p>",
57
+ },
58
+ },
59
+ contributions: contributions.Book,
60
+ });
61
+
62
+ expect(listdetailFromDataApplicationMessage.introtext).toBe(
63
+ "<p>This is introtext</p>"
64
+ );
65
+
66
+ const listdetailFromNewContributionsRawTextMessage = new ListDetailModel({
67
+ key: "Book",
68
+ data: data.Book,
69
+ contributions: {
70
+ ...contributions.Book,
71
+ text: {
72
+ message: "<p>This is introtext</p>",
73
+ },
74
+ },
75
+ });
76
+
77
+ expect(listdetailFromNewContributionsRawTextMessage.introtext).toBe(
78
+ "<p>This is introtext</p>"
79
+ );
80
+
81
+ const listdetailFromNewContributionsSimpleMessage = new ListDetailModel({
82
+ key: "Book",
83
+ data: data.Book,
84
+ contributions: {
85
+ ...contributions.Book,
86
+ text: "<p>This is introtext</p>",
87
+ },
88
+ });
89
+
90
+ expect(listdetailFromNewContributionsSimpleMessage.introtext).toBe(
91
+ "<p>This is introtext</p>"
92
+ );
93
+ });
30
94
  });
@@ -54,8 +54,70 @@ describe("listModel spec", () => {
54
54
 
55
55
  expect(list.headers).toHaveLength(6);
56
56
 
57
- expect(list.introtext).toStrictEqual(
58
- "<p>This is a list of <em>books</em><br />For each book the <strong>contributers</strong> and the <strong>publishers</strong> are added as <u>additional details</u>.<br />For more information see amazon</p>"
57
+ expect(list.introtext).toStrictEqual("<p>This is introtext</p>");
58
+ });
59
+
60
+ it("should be able to handle different kind of introtext", () => {
61
+ const listOldStructure = new ListModel({
62
+ key: "Books",
63
+ data: mockList.Books,
64
+ contributions: mockListContributions.Books,
65
+ });
66
+
67
+ expect(listOldStructure.introtext).toBe("<p>This is introtext</p>");
68
+
69
+ const listFromDataPlain = new ListModel({
70
+ key: "Books",
71
+ data: {
72
+ text: "<p>This is introtext</p>",
73
+ ...mockList.Books,
74
+ },
75
+ contributions: mockListContributions.Books,
76
+ });
77
+
78
+ expect(listFromDataPlain.introtext).toBe("<p>This is introtext</p>");
79
+
80
+ const listFromDataApplicationMessage = new ListModel({
81
+ key: "Books",
82
+ data: {
83
+ ...mockList.Books,
84
+ text: {
85
+ message: "<p>This is introtext</p>",
86
+ },
87
+ },
88
+ contributions: mockListContributions.Books,
89
+ });
90
+
91
+ expect(listFromDataApplicationMessage.introtext).toBe(
92
+ "<p>This is introtext</p>"
93
+ );
94
+
95
+ const listFromNewContributionsRawTextMessage = new ListModel({
96
+ key: "Books",
97
+ data: mockList.Books,
98
+ contributions: {
99
+ ...mockListContributions.Books,
100
+ text: {
101
+ message: "<p>This is introtext</p>",
102
+ },
103
+ },
104
+ });
105
+
106
+ expect(listFromNewContributionsRawTextMessage.introtext).toBe(
107
+ "<p>This is introtext</p>"
108
+ );
109
+
110
+ const listFromNewContributionsSimpleMessage = new ListModel({
111
+ key: "Books",
112
+ data: mockList.Books,
113
+ contributions: {
114
+ ...mockListContributions.Books,
115
+ text: "<p>This is introtext</p>",
116
+ },
117
+ });
118
+
119
+ expect(listFromNewContributionsSimpleMessage.introtext).toBe(
120
+ "<p>This is introtext</p>"
59
121
  );
60
122
  });
61
123
  });
@@ -9,12 +9,12 @@ Object.defineProperty(exports, "__esModule", {
9
9
  });
10
10
  exports.default = void 0;
11
11
 
12
- var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
13
-
14
12
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
15
13
 
16
14
  var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
17
15
 
16
+ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
17
+
18
18
  var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
19
19
 
20
20
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
@@ -123,11 +123,7 @@ var GroupingPanelModel = /*#__PURE__*/function (_ResourceModel) {
123
123
  }, {
124
124
  key: "hasIntroText",
125
125
  value: function hasIntroText() {
126
- var _context;
127
-
128
- return this.contributions.texts && (0, _find.default)(_context = this.contributions.texts).call(_context, function (item) {
129
- return item.type === "master";
130
- });
126
+ return this.introtext !== "";
131
127
  }
132
128
  /**
133
129
  * Getting the introduction text configured on the grouping panel
@@ -136,13 +132,20 @@ var GroupingPanelModel = /*#__PURE__*/function (_ResourceModel) {
136
132
  }, {
137
133
  key: "introtext",
138
134
  get: function get() {
139
- if (this.contributions.texts) {
140
- var _context2;
135
+ if (this.data._text) {
136
+ var _this$data$_text$mess;
141
137
 
142
- var text = (0, _find.default)(_context2 = this.contributions.texts).call(_context2, function (item) {
143
- return item.type === "master";
144
- });
145
- return text ? text.text : "";
138
+ return (_this$data$_text$mess = this.data._text.message) !== null && _this$data$_text$mess !== void 0 ? _this$data$_text$mess : this.data._text;
139
+ }
140
+
141
+ if (this.contributions.text) {
142
+ var _this$contributions$t;
143
+
144
+ return (_this$contributions$t = this.contributions.text.message) !== null && _this$contributions$t !== void 0 ? _this$contributions$t : this.contributions.text;
145
+ }
146
+
147
+ if (Array.isArray(this.contributions.texts)) {
148
+ return this.contributions.texts[0].text;
146
149
  }
147
150
 
148
151
  return "";
@@ -153,15 +156,15 @@ var GroupingPanelModel = /*#__PURE__*/function (_ResourceModel) {
153
156
  }, {
154
157
  key: "createTaskGroupCollection",
155
158
  value: function createTaskGroupCollection() {
156
- var _context3;
159
+ var _context;
157
160
 
158
161
  var allTaskgroupsData = this.getData("taskgroups", []);
159
162
  var allTaskgroupsContributions = this.getContribution("taskgroups", []);
160
- this.taskGroupCollection = (0, _map.default)(_context3 = (0, _filter.default)(allTaskgroupsData).call(allTaskgroupsData, function (taskgroup) {
163
+ this.taskGroupCollection = (0, _map.default)(_context = (0, _filter.default)(allTaskgroupsData).call(allTaskgroupsData, function (taskgroup) {
161
164
  return allTaskgroupsContributions.some(function (taskgroupContribution) {
162
165
  return taskgroupContribution.name === taskgroup.name;
163
166
  });
164
- })).call(_context3, function (taskgroup) {
167
+ })).call(_context, function (taskgroup) {
165
168
  var taskgroupContributions = (0, _find.default)(allTaskgroupsContributions).call(allTaskgroupsContributions, function (taskgroupContribution) {
166
169
  return taskgroupContribution.name === taskgroup.name;
167
170
  });
@@ -205,9 +208,9 @@ var GroupingPanelModel = /*#__PURE__*/function (_ResourceModel) {
205
208
  }], [{
206
209
  key: "isApplicableModel",
207
210
  value: function isApplicableModel(data) {
208
- var _context4;
211
+ var _context2;
209
212
 
210
- return data.contributions.resourcetype && (0, _includes.default)(_context4 = ["GroupingPanel", "CaseTabGroupingPanel", "TabGroupingPanel"]).call(_context4, data.contributions.resourcetype);
213
+ return data.contributions.resourcetype && (0, _includes.default)(_context2 = ["GroupingPanel", "CaseTabGroupingPanel", "TabGroupingPanel"]).call(_context2, data.contributions.resourcetype);
211
214
  }
212
215
  }]);
213
216
  return GroupingPanelModel;
@@ -78,22 +78,23 @@ export default class GroupingPanelModel extends ResourceModel {
78
78
  * Check if an introtext exists for this caseview
79
79
  */
80
80
  hasIntroText(): boolean {
81
- return (
82
- this.contributions.texts &&
83
- this.contributions.texts.find((item) => item.type === "master")
84
- );
81
+ return this.introtext !== "";
85
82
  }
86
83
 
87
84
  /**
88
85
  * Getting the introduction text configured on the grouping panel
89
86
  */
90
87
  get introtext(): string {
91
- if (this.contributions.texts) {
92
- const text = this.contributions.texts.find(
93
- (item) => item.type === "master"
94
- );
88
+ if (this.data._text) {
89
+ return this.data._text.message ?? this.data._text;
90
+ }
91
+
92
+ if (this.contributions.text) {
93
+ return this.contributions.text.message ?? this.contributions.text;
94
+ }
95
95
 
96
- return text ? text.text : "";
96
+ if (Array.isArray(this.contributions.texts)) {
97
+ return this.contributions.texts[0].text;
97
98
  }
98
99
 
99
100
  return "";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/models/panels/GroupingPanelModel.js"],"names":["GroupingPanelModel","modularuiResponse","createTaskGroupCollection","contributions","label","links","getLinksByGroup","all","models","taskGroups","i","length","TaskGroupModel","push","taskGroupCollection","add","texts","item","type","text","allTaskgroupsData","getData","allTaskgroupsContributions","getContribution","taskgroup","some","taskgroupContribution","name","taskgroupContributions","create","_taskGroupCollection","taskgroups","TaskGroupCollection","hasItems","hasTasks","data","resourcetype","ResourceModel"],"mappings":"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","sourcesContent":["// @flow\nimport ResourceModel from \"../base/ResourceModel\";\nimport TaskGroupCollection from \"../taskgroup/TaskGroupCollection\";\n\nimport TaskGroupModel from \"../taskgroup/TaskGroupModel\";\n\nimport type { ModularUIResponse } from \"../../modularui\";\nimport type { ModularUIModel } from \"../types\";\nimport type LinkModel from \"../links/LinkModel\";\nimport type LinkCollection from \"../links/LinkCollection\";\n\n/**\n * Panel that groups other panels\n */\nexport default class GroupingPanelModel extends ResourceModel {\n _taskGroupCollection: TaskGroupCollection;\n\n /**\n * Constructs GroupingPanel\n */\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this.createTaskGroupCollection();\n }\n\n /**\n */\n get type(): string {\n return \"GroupingPanel\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n [\"GroupingPanel\", \"CaseTabGroupingPanel\", \"TabGroupingPanel\"].includes(\n data.contributions.resourcetype\n )\n );\n }\n\n /**\n * Getting the label of the panel\n */\n get label(): string {\n return this.contributions.label;\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n return this.links.getLinksByGroup(\"taskgroup\").all;\n }\n\n /**\n */\n get panelLinks(): LinkCollection {\n return this.links.getLinksByGroup(\"panel\");\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n const taskGroups = [];\n\n for (let i = 0; i < models.length; i++) {\n if (models[i] instanceof TaskGroupModel) {\n taskGroups.push(models[i]);\n }\n }\n\n this.taskGroupCollection.add(taskGroups);\n }\n\n /**\n * Check if an introtext exists for this caseview\n */\n hasIntroText(): boolean {\n return (\n this.contributions.texts &&\n this.contributions.texts.find((item) => item.type === \"master\")\n );\n }\n\n /**\n * Getting the introduction text configured on the grouping panel\n */\n get introtext(): string {\n if (this.contributions.texts) {\n const text = this.contributions.texts.find(\n (item) => item.type === \"master\"\n );\n\n return text ? text.text : \"\";\n }\n\n return \"\";\n }\n\n /**\n */\n createTaskGroupCollection() {\n const allTaskgroupsData = this.getData(\"taskgroups\", []);\n const allTaskgroupsContributions = this.getContribution(\"taskgroups\", []);\n\n this.taskGroupCollection = allTaskgroupsData\n .filter((taskgroup) =>\n allTaskgroupsContributions.some(\n (taskgroupContribution) =>\n taskgroupContribution.name === taskgroup.name\n )\n )\n .map((taskgroup) => {\n const taskgroupContributions = allTaskgroupsContributions.find(\n (taskgroupContribution) =>\n taskgroupContribution.name === taskgroup.name\n );\n\n return TaskGroupModel.create(\n taskgroup.name,\n taskgroup,\n taskgroupContributions\n );\n });\n }\n\n /**\n * Setting the taskgroup panel collection\n */\n set taskGroupCollection(taskgroups: Array<TaskGroupModel>) {\n this._taskGroupCollection = new TaskGroupCollection(taskgroups);\n }\n\n /**\n * Getting the taskgrouppanels on the tab\n */\n get taskGroupCollection(): TaskGroupCollection {\n return this._taskGroupCollection;\n }\n\n /**\n * Has taskgroups\n */\n hasTaskGroups(): boolean {\n return this.taskGroupCollection && this.taskGroupCollection.hasItems;\n }\n\n /**\n * Has tasks\n */\n hasTasks(): boolean {\n return this.taskGroupCollection.hasTasks();\n }\n}\n"],"file":"GroupingPanelModel.js"}
1
+ {"version":3,"sources":["../../../src/models/panels/GroupingPanelModel.js"],"names":["GroupingPanelModel","modularuiResponse","createTaskGroupCollection","contributions","label","links","getLinksByGroup","all","models","taskGroups","i","length","TaskGroupModel","push","taskGroupCollection","add","introtext","data","_text","message","text","Array","isArray","texts","allTaskgroupsData","getData","allTaskgroupsContributions","getContribution","taskgroup","some","taskgroupContribution","name","taskgroupContributions","create","_taskGroupCollection","taskgroups","TaskGroupCollection","hasItems","hasTasks","resourcetype","ResourceModel"],"mappings":"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","sourcesContent":["// @flow\nimport ResourceModel from \"../base/ResourceModel\";\nimport TaskGroupCollection from \"../taskgroup/TaskGroupCollection\";\n\nimport TaskGroupModel from \"../taskgroup/TaskGroupModel\";\n\nimport type { ModularUIResponse } from \"../../modularui\";\nimport type { ModularUIModel } from \"../types\";\nimport type LinkModel from \"../links/LinkModel\";\nimport type LinkCollection from \"../links/LinkCollection\";\n\n/**\n * Panel that groups other panels\n */\nexport default class GroupingPanelModel extends ResourceModel {\n _taskGroupCollection: TaskGroupCollection;\n\n /**\n * Constructs GroupingPanel\n */\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this.createTaskGroupCollection();\n }\n\n /**\n */\n get type(): string {\n return \"GroupingPanel\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n [\"GroupingPanel\", \"CaseTabGroupingPanel\", \"TabGroupingPanel\"].includes(\n data.contributions.resourcetype\n )\n );\n }\n\n /**\n * Getting the label of the panel\n */\n get label(): string {\n return this.contributions.label;\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n return this.links.getLinksByGroup(\"taskgroup\").all;\n }\n\n /**\n */\n get panelLinks(): LinkCollection {\n return this.links.getLinksByGroup(\"panel\");\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n const taskGroups = [];\n\n for (let i = 0; i < models.length; i++) {\n if (models[i] instanceof TaskGroupModel) {\n taskGroups.push(models[i]);\n }\n }\n\n this.taskGroupCollection.add(taskGroups);\n }\n\n /**\n * Check if an introtext exists for this caseview\n */\n hasIntroText(): boolean {\n return this.introtext !== \"\";\n }\n\n /**\n * Getting the introduction text configured on the grouping panel\n */\n get introtext(): string {\n if (this.data._text) {\n return this.data._text.message ?? this.data._text;\n }\n\n if (this.contributions.text) {\n return this.contributions.text.message ?? this.contributions.text;\n }\n\n if (Array.isArray(this.contributions.texts)) {\n return this.contributions.texts[0].text;\n }\n\n return \"\";\n }\n\n /**\n */\n createTaskGroupCollection() {\n const allTaskgroupsData = this.getData(\"taskgroups\", []);\n const allTaskgroupsContributions = this.getContribution(\"taskgroups\", []);\n\n this.taskGroupCollection = allTaskgroupsData\n .filter((taskgroup) =>\n allTaskgroupsContributions.some(\n (taskgroupContribution) =>\n taskgroupContribution.name === taskgroup.name\n )\n )\n .map((taskgroup) => {\n const taskgroupContributions = allTaskgroupsContributions.find(\n (taskgroupContribution) =>\n taskgroupContribution.name === taskgroup.name\n );\n\n return TaskGroupModel.create(\n taskgroup.name,\n taskgroup,\n taskgroupContributions\n );\n });\n }\n\n /**\n * Setting the taskgroup panel collection\n */\n set taskGroupCollection(taskgroups: Array<TaskGroupModel>) {\n this._taskGroupCollection = new TaskGroupCollection(taskgroups);\n }\n\n /**\n * Getting the taskgrouppanels on the tab\n */\n get taskGroupCollection(): TaskGroupCollection {\n return this._taskGroupCollection;\n }\n\n /**\n * Has taskgroups\n */\n hasTaskGroups(): boolean {\n return this.taskGroupCollection && this.taskGroupCollection.hasItems;\n }\n\n /**\n * Has tasks\n */\n hasTasks(): boolean {\n return this.taskGroupCollection.hasTasks();\n }\n}\n"],"file":"GroupingPanelModel.js"}
@@ -1,5 +1,9 @@
1
1
  import GroupingPanelModel from "../GroupingPanelModel";
2
2
 
3
+ import panelJson from "./groupingPanel.json";
4
+ import panelContributionsJson from "./groupingPanelContributions.json";
5
+ import CaseViewModel from "../../caseview/CaseViewModel";
6
+
3
7
  describe("groupingPanelModel", () => {
4
8
  it("should be able to create an empty GroupingPanelModel object", () => {
5
9
  const groupingPanel = new GroupingPanelModel();
@@ -30,4 +34,90 @@ describe("groupingPanelModel", () => {
30
34
  })
31
35
  ).toBe(true);
32
36
  });
37
+
38
+ it("should be able to create a grouping panel from a typical modular UI json structure", () => {
39
+ const groupingPanel = new GroupingPanelModel({
40
+ key: "AskingQuestions",
41
+ data: panelJson,
42
+ contributions: panelContributionsJson,
43
+ });
44
+
45
+ expect(groupingPanel).toBeInstanceOf(GroupingPanelModel);
46
+
47
+ expect(groupingPanel.key).toBe("AskingQuestions");
48
+ expect(groupingPanel.label).toBe("Asking questions");
49
+
50
+ expect(groupingPanel.links).toHaveLength(8);
51
+ expect(groupingPanel.panelLinks).toHaveLength(1);
52
+
53
+ expect(groupingPanel.hasIntroText()).toBe(true);
54
+ });
55
+
56
+ it("should be able to handle different kind of introtext", () => {
57
+ const groupingPanelOldStructure = new CaseViewModel({
58
+ key: "Book",
59
+ data: panelJson,
60
+ contributions: panelContributionsJson,
61
+ });
62
+
63
+ expect(groupingPanelOldStructure.introtext).toBe(
64
+ "<p>This is introtext</p>"
65
+ );
66
+
67
+ const groupingPanelFromDataPlain = new CaseViewModel({
68
+ key: "Book",
69
+ data: {
70
+ _text: "<p>This is introtext</p>",
71
+ ...panelJson,
72
+ },
73
+ contributions: panelContributionsJson,
74
+ });
75
+
76
+ expect(groupingPanelFromDataPlain.introtext).toBe(
77
+ "<p>This is introtext</p>"
78
+ );
79
+
80
+ const groupingPanelFromDataApplicationMessage = new CaseViewModel({
81
+ key: "Book",
82
+ data: {
83
+ ...panelJson,
84
+ _text: {
85
+ message: "<p>This is introtext</p>",
86
+ },
87
+ },
88
+ contributions: panelContributionsJson,
89
+ });
90
+
91
+ expect(groupingPanelFromDataApplicationMessage.introtext).toBe(
92
+ "<p>This is introtext</p>"
93
+ );
94
+
95
+ const groupingPanelFromNewContributionsRawTextMessage = new CaseViewModel({
96
+ key: "Book",
97
+ data: panelJson,
98
+ contributions: {
99
+ ...panelContributionsJson,
100
+ text: {
101
+ message: "<p>This is introtext</p>",
102
+ },
103
+ },
104
+ });
105
+
106
+ expect(groupingPanelFromNewContributionsRawTextMessage.introtext).toBe(
107
+ "<p>This is introtext</p>"
108
+ );
109
+
110
+ const groupingPanelFromNewContributionsSimpleMessage = new CaseViewModel({
111
+ key: "Book",
112
+ data: panelJson,
113
+ contributions: {
114
+ ...panelContributionsJson,
115
+ text: "<p>This is introtext</p>",
116
+ },
117
+ });
118
+
119
+ expect(groupingPanelFromNewContributionsSimpleMessage.introtext).toBe(
120
+ "<p>This is introtext</p>"
121
+ );
122
+ });
33
123
  });
@@ -44,6 +44,7 @@ import type LookupOptionsModel from "./lookup/LookupOptionsModel";
44
44
  import type BaseFilterModel from "./filters/BaseFilterModel";
45
45
  import type AttributeCollection from "./attributes/AttributeCollection";
46
46
  import type AttributeModel from "./attributes/AttributeModel";
47
+ import type LayoutHintCollection from "./layouthint/LayoutHintCollection";
47
48
 
48
49
  export type ModularUIModel =
49
50
  | ApplicationModel
@@ -176,49 +177,75 @@ export type FilesizeConstraintsType = {
176
177
  };
177
178
 
178
179
  export type PropertyData = { type: string, label: string, value: string };
179
- export type TextFragmentData = { type: string, label: string, text: string };
180
+ export type TextFragmentData = {
181
+ type: string,
182
+ label: string,
183
+ text: string | { id?: string, message: string, properties?: Object },
184
+ };
180
185
  export type SectionData = {
181
186
  id: string,
182
187
  type: string,
183
188
  label?: string,
184
189
  number?: string,
185
- body: string,
190
+ body: string | { id?: string, message: string, properties?: Object },
186
191
  _links: { self: { href: string } },
187
192
  childSections: Array<SectionData>,
188
193
  subSections: Array<SectionData>,
189
194
  };
190
195
 
191
- export type PropertiesElement = {
192
- propertiesElement: {
196
+ export type PropertyElement = {
197
+ propertyElement: {
193
198
  label: string,
194
- id: string,
199
+ layouthint: Array<string>,
195
200
  properties: Array<PropertyData>,
196
201
  },
197
202
  };
198
203
  export type TextFragmentElement = {
199
204
  textFragmentElement: {
200
205
  label: string,
201
- id: string,
206
+ layouthint: Array<string>,
202
207
  textfragments: Array<TextFragmentData>,
203
208
  },
204
209
  };
205
210
  export type ContentElement = {
206
211
  contentElement: {
207
212
  label: string,
213
+ layouthint: Array<string>,
208
214
  sections: Array<SectionData>,
209
215
  },
210
216
  };
211
- export type ContentData = {
212
- label: string | null,
213
- elements: Array<PropertiesElement | TextFragmentElement | ContentElement>,
214
- };
215
217
 
218
+ type PropertyElementMapped = {
219
+ propertyElement: {
220
+ label: string,
221
+ layouthint: LayoutHintCollection,
222
+ properties: Array<PropertyData>,
223
+ },
224
+ };
225
+ type TextFragmentElementMapped = {
226
+ textFragmentElement: {
227
+ label: string,
228
+ layouthint: LayoutHintCollection,
229
+ textfragments: Array<TextFragmentData>,
230
+ },
231
+ };
216
232
  type ContentElementMapped = {
217
233
  contentElement: {
218
234
  label: string,
235
+ layouthint: LayoutHintCollection,
219
236
  sections: Array<SectionModel>,
220
237
  },
221
238
  };
239
+
222
240
  export type ContentAll = Array<
223
- PropertiesElement | TextFragmentElement | ContentElementMapped
241
+ PropertyElementMapped | TextFragmentElementMapped | ContentElementMapped
224
242
  >;
243
+
244
+ export type ContentData = {
245
+ header: {
246
+ label?: string,
247
+ description?: { id?: string, message: string, properties?: Object },
248
+ },
249
+ label?: string,
250
+ elements: Array<PropertyElement | TextFragmentElement | ContentElement>,
251
+ };
@@ -659,7 +659,8 @@ var ModularUIRequest = /*#__PURE__*/function () {
659
659
  var prevData = typeof this.options.data === "string" ? JSON.parse(this.options.data) : this.options.data;
660
660
 
661
661
  if (model instanceof _FormModel.default) {
662
- var newData = JSON.parse(model.validationData);
662
+ var newData = JSON.parse(model.validationData); // $FlowFixMe incompatible-call
663
+
663
664
  return (0, _stringify.default)((0, _deepmerge.default)(prevData || {}, newData));
664
665
  }
665
666
 
@@ -475,6 +475,7 @@ class ModularUIRequest {
475
475
 
476
476
  if (model instanceof FormModel) {
477
477
  const newData = JSON.parse(model.validationData);
478
+ // $FlowFixMe incompatible-call
478
479
  return JSON.stringify(deepmerge(prevData || {}, newData));
479
480
  }
480
481