@researchdatabox/redbox-core 0.0.0-bootstrap.0

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 (934) hide show
  1. package/dist/Attachment.d.ts +17 -0
  2. package/dist/Attachment.d.ts.map +1 -0
  3. package/dist/Attachment.js +40 -0
  4. package/dist/CoreController.d.ts +202 -0
  5. package/dist/CoreController.d.ts.map +1 -0
  6. package/dist/CoreController.js +688 -0
  7. package/dist/CoreService.d.ts +95 -0
  8. package/dist/CoreService.d.ts.map +1 -0
  9. package/dist/CoreService.js +295 -0
  10. package/dist/Datastream.d.ts +11 -0
  11. package/dist/Datastream.d.ts.map +1 -0
  12. package/dist/Datastream.js +38 -0
  13. package/dist/DatastreamService.d.ts +19 -0
  14. package/dist/DatastreamService.d.ts.map +1 -0
  15. package/dist/DatastreamService.js +3 -0
  16. package/dist/DatastreamServiceResponse.d.ts +12 -0
  17. package/dist/DatastreamServiceResponse.d.ts.map +1 -0
  18. package/dist/DatastreamServiceResponse.js +37 -0
  19. package/dist/IntegrationAuditParams.d.ts.map +1 -0
  20. package/dist/Logger.d.ts +16 -0
  21. package/dist/Logger.d.ts.map +1 -0
  22. package/dist/Logger.js +3 -0
  23. package/dist/QueueService.d.ts +9 -0
  24. package/dist/QueueService.d.ts.map +1 -0
  25. package/dist/QueueService.js +21 -0
  26. package/dist/RecordAuditParams.d.ts +6 -0
  27. package/dist/RecordAuditParams.d.ts.map +1 -0
  28. package/dist/RecordAuditParams.js +10 -0
  29. package/dist/RecordsService.d.ts +39 -0
  30. package/dist/RecordsService.d.ts.map +1 -0
  31. package/dist/RecordsService.js +3 -0
  32. package/dist/SearchService.d.ts +8 -0
  33. package/dist/SearchService.d.ts.map +1 -0
  34. package/dist/SearchService.js +3 -0
  35. package/dist/StorageService.d.ts +27 -0
  36. package/dist/StorageService.d.ts.map +1 -0
  37. package/dist/StorageService.js +3 -0
  38. package/dist/StorageServiceResponse.d.ts +16 -0
  39. package/dist/StorageServiceResponse.d.ts.map +1 -0
  40. package/dist/StorageServiceResponse.js +41 -0
  41. package/dist/bootstrap.d.ts +32 -0
  42. package/dist/bootstrap.d.ts.map +1 -0
  43. package/dist/bootstrap.js +172 -0
  44. package/dist/config/action.config.d.ts +13 -0
  45. package/dist/config/action.config.d.ts.map +1 -0
  46. package/dist/config/action.config.js +9 -0
  47. package/dist/config/agendaQueue.config.d.ts +49 -0
  48. package/dist/config/agendaQueue.config.d.ts.map +1 -0
  49. package/dist/config/agendaQueue.config.js +71 -0
  50. package/dist/config/api.config.d.ts +9 -0
  51. package/dist/config/api.config.d.ts.map +1 -0
  52. package/dist/config/api.config.js +11 -0
  53. package/dist/config/appmode.config.d.ts +12 -0
  54. package/dist/config/appmode.config.d.ts.map +1 -0
  55. package/dist/config/appmode.config.js +12 -0
  56. package/dist/config/auth.config.d.ts +15 -0
  57. package/dist/config/auth.config.d.ts.map +1 -0
  58. package/dist/config/auth.config.js +81 -0
  59. package/dist/config/autoreload.config.d.ts +18 -0
  60. package/dist/config/autoreload.config.d.ts.map +1 -0
  61. package/dist/config/autoreload.config.js +21 -0
  62. package/dist/config/blueprints.config.d.ts +28 -0
  63. package/dist/config/blueprints.config.d.ts.map +1 -0
  64. package/dist/config/blueprints.config.js +15 -0
  65. package/dist/config/bootstrap.config.d.ts +15 -0
  66. package/dist/config/bootstrap.config.d.ts.map +1 -0
  67. package/dist/config/bootstrap.config.js +12 -0
  68. package/dist/config/branding.config.d.ts +19 -0
  69. package/dist/config/branding.config.d.ts.map +1 -0
  70. package/dist/config/branding.config.js +109 -0
  71. package/dist/config/brandingConfigurationDefaults.config.d.ts +134 -0
  72. package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -0
  73. package/dist/config/brandingConfigurationDefaults.config.js +283 -0
  74. package/dist/config/companion.config.d.ts +41 -0
  75. package/dist/config/companion.config.d.ts.map +1 -0
  76. package/dist/config/companion.config.js +61 -0
  77. package/dist/config/cors.config.d.ts +22 -0
  78. package/dist/config/cors.config.d.ts.map +1 -0
  79. package/dist/config/cors.config.js +11 -0
  80. package/dist/config/crontab.config.d.ts +22 -0
  81. package/dist/config/crontab.config.d.ts.map +1 -0
  82. package/dist/config/crontab.config.js +18 -0
  83. package/dist/config/csp.config.d.ts +53 -0
  84. package/dist/config/csp.config.d.ts.map +1 -0
  85. package/dist/config/csp.config.js +32 -0
  86. package/dist/config/custom.config.d.ts +16 -0
  87. package/dist/config/custom.config.d.ts.map +1 -0
  88. package/dist/config/custom.config.js +22 -0
  89. package/dist/config/custom_cache.config.d.ts +14 -0
  90. package/dist/config/custom_cache.config.d.ts.map +1 -0
  91. package/dist/config/custom_cache.config.js +13 -0
  92. package/dist/config/dashboardtype.config.d.ts +45 -0
  93. package/dist/config/dashboardtype.config.d.ts.map +1 -0
  94. package/dist/config/dashboardtype.config.js +98 -0
  95. package/dist/config/datacite.config.d.ts +51 -0
  96. package/dist/config/datacite.config.d.ts.map +1 -0
  97. package/dist/config/datacite.config.js +44 -0
  98. package/dist/config/datapubs.config.d.ts +72 -0
  99. package/dist/config/datapubs.config.d.ts.map +1 -0
  100. package/dist/config/datapubs.config.js +74 -0
  101. package/dist/config/datastores.config.d.ts +20 -0
  102. package/dist/config/datastores.config.d.ts.map +1 -0
  103. package/dist/config/datastores.config.js +21 -0
  104. package/dist/config/dompurify.config.d.ts +65 -0
  105. package/dist/config/dompurify.config.d.ts.map +1 -0
  106. package/dist/config/dompurify.config.js +181 -0
  107. package/dist/config/dynamicasset.config.d.ts +13 -0
  108. package/dist/config/dynamicasset.config.d.ts.map +1 -0
  109. package/dist/config/dynamicasset.config.js +18 -0
  110. package/dist/config/dynamicconfig.config.d.ts +12 -0
  111. package/dist/config/dynamicconfig.config.d.ts.map +1 -0
  112. package/dist/config/dynamicconfig.config.js +13 -0
  113. package/dist/config/emailnotification.config.d.ts +49 -0
  114. package/dist/config/emailnotification.config.d.ts.map +1 -0
  115. package/dist/config/emailnotification.config.js +37 -0
  116. package/dist/config/figshareAPI.config.d.ts +116 -0
  117. package/dist/config/figshareAPI.config.d.ts.map +1 -0
  118. package/dist/config/figshareAPI.config.js +857 -0
  119. package/dist/config/figshareAPIEnv.config.d.ts +11 -0
  120. package/dist/config/figshareAPIEnv.config.d.ts.map +1 -0
  121. package/dist/config/figshareAPIEnv.config.js +13 -0
  122. package/dist/config/figshareDev.config.d.ts.map +1 -0
  123. package/dist/config/figshareRedboxFORMapping.config.d.ts +15 -0
  124. package/dist/config/figshareRedboxFORMapping.config.d.ts.map +1 -0
  125. package/dist/config/figshareRedboxFORMapping.config.js +7458 -0
  126. package/dist/config/form.config.d.ts +20 -0
  127. package/dist/config/form.config.d.ts.map +1 -0
  128. package/dist/config/form.config.js +11 -0
  129. package/dist/config/globals.config.d.ts +20 -0
  130. package/dist/config/globals.config.d.ts.map +1 -0
  131. package/dist/config/globals.config.js +52 -0
  132. package/dist/config/http.config.d.ts +57 -0
  133. package/dist/config/http.config.d.ts.map +1 -0
  134. package/dist/config/http.config.js +462 -0
  135. package/dist/config/i18n.config.d.ts +38 -0
  136. package/dist/config/i18n.config.d.ts.map +1 -0
  137. package/dist/config/i18n.config.js +30 -0
  138. package/dist/config/index.d.ts +306 -0
  139. package/dist/config/index.d.ts.map +1 -0
  140. package/dist/config/index.js +240 -0
  141. package/dist/config/jsonld.config.d.ts +19 -0
  142. package/dist/config/jsonld.config.d.ts.map +1 -0
  143. package/dist/config/jsonld.config.js +33 -0
  144. package/dist/config/log.config.d.ts +20 -0
  145. package/dist/config/log.config.d.ts.map +1 -0
  146. package/dist/config/log.config.js +157 -0
  147. package/dist/config/lognamespace.config.d.ts +13 -0
  148. package/dist/config/lognamespace.config.d.ts.map +1 -0
  149. package/dist/config/lognamespace.config.js +17 -0
  150. package/dist/config/mint.config.d.ts +23 -0
  151. package/dist/config/mint.config.d.ts.map +1 -0
  152. package/dist/config/mint.config.js +20 -0
  153. package/dist/config/models.config.d.ts +37 -0
  154. package/dist/config/models.config.d.ts.map +1 -0
  155. package/dist/config/models.config.js +23 -0
  156. package/dist/config/namedQuery.config.d.ts +26 -0
  157. package/dist/config/namedQuery.config.d.ts.map +1 -0
  158. package/dist/config/namedQuery.config.js +358 -0
  159. package/dist/config/ng2.config.d.ts +11 -0
  160. package/dist/config/ng2.config.d.ts.map +1 -0
  161. package/dist/config/ng2.config.js +12 -0
  162. package/dist/config/orcid.config.d.ts +12 -0
  163. package/dist/config/orcid.config.d.ts.map +1 -0
  164. package/dist/config/orcid.config.js +13 -0
  165. package/dist/config/orm.config.d.ts +12 -0
  166. package/dist/config/orm.config.d.ts.map +1 -0
  167. package/dist/config/orm.config.js +13 -0
  168. package/dist/config/peopleSearch.config.d.ts +14 -0
  169. package/dist/config/peopleSearch.config.d.ts.map +1 -0
  170. package/dist/config/peopleSearch.config.js +15 -0
  171. package/dist/config/policies.config.d.ts +18 -0
  172. package/dist/config/policies.config.d.ts.map +1 -0
  173. package/dist/config/policies.config.js +65 -0
  174. package/dist/config/queue.config.d.ts +12 -0
  175. package/dist/config/queue.config.d.ts.map +1 -0
  176. package/dist/config/queue.config.js +13 -0
  177. package/dist/config/raid.config.d.ts +66 -0
  178. package/dist/config/raid.config.d.ts.map +1 -0
  179. package/dist/config/raid.config.js +272 -0
  180. package/dist/config/record.config.d.ts +74 -0
  181. package/dist/config/record.config.d.ts.map +1 -0
  182. package/dist/config/record.config.js +104 -0
  183. package/dist/config/recordtype.config.d.ts +66 -0
  184. package/dist/config/recordtype.config.d.ts.map +1 -0
  185. package/dist/config/recordtype.config.js +660 -0
  186. package/dist/config/redboxSession.config.d.ts +29 -0
  187. package/dist/config/redboxSession.config.d.ts.map +1 -0
  188. package/dist/config/redboxSession.config.js +14 -0
  189. package/dist/config/redboxToCkan.config.d.ts +17 -0
  190. package/dist/config/redboxToCkan.config.d.ts.map +1 -0
  191. package/dist/config/redboxToCkan.config.js +18 -0
  192. package/dist/config/relatedObjectsFormDefinition.config.d.ts.map +1 -0
  193. package/dist/config/report.config.d.ts +46 -0
  194. package/dist/config/report.config.d.ts.map +1 -0
  195. package/dist/config/report.config.js +54 -0
  196. package/dist/config/reusableContributorFormDefinitions.config.d.ts +3 -0
  197. package/dist/config/reusableContributorFormDefinitions.config.d.ts.map +1 -0
  198. package/dist/config/reusableContributorFormDefinitions.config.js +408 -0
  199. package/dist/config/reusableFormDefinitions.config.d.ts +16 -0
  200. package/dist/config/reusableFormDefinitions.config.d.ts.map +1 -0
  201. package/dist/config/reusableFormDefinitions.config.js +41 -0
  202. package/dist/config/reusableRelatedObjectsFormDefinitions.config.d.ts +22 -0
  203. package/dist/config/reusableRelatedObjectsFormDefinitions.config.d.ts.map +1 -0
  204. package/dist/config/reusableRelatedObjectsFormDefinitions.config.js +291 -0
  205. package/dist/config/reusableViewFormDefinitions.config.d.ts +3 -0
  206. package/dist/config/reusableViewFormDefinitions.config.d.ts.map +1 -0
  207. package/dist/config/reusableViewFormDefinitions.config.js +140 -0
  208. package/dist/config/routes.config.d.ts +21 -0
  209. package/dist/config/routes.config.d.ts.map +1 -0
  210. package/dist/config/routes.config.js +389 -0
  211. package/dist/config/search.config.d.ts +9 -0
  212. package/dist/config/search.config.d.ts.map +1 -0
  213. package/dist/config/search.config.js +11 -0
  214. package/dist/config/security.config.d.ts +22 -0
  215. package/dist/config/security.config.d.ts.map +1 -0
  216. package/dist/config/security.config.js +14 -0
  217. package/dist/config/session.config.d.ts +37 -0
  218. package/dist/config/session.config.d.ts.map +1 -0
  219. package/dist/config/session.config.js +11 -0
  220. package/dist/config/sockets.config.d.ts +17 -0
  221. package/dist/config/sockets.config.d.ts.map +1 -0
  222. package/dist/config/sockets.config.js +12 -0
  223. package/dist/config/solr.config.d.ts +73 -0
  224. package/dist/config/solr.config.d.ts.map +1 -0
  225. package/dist/config/solr.config.js +79 -0
  226. package/dist/config/static_assets.config.d.ts +10 -0
  227. package/dist/config/static_assets.config.d.ts.map +1 -0
  228. package/dist/config/static_assets.config.js +12 -0
  229. package/dist/config/storage.config.d.ts +42 -0
  230. package/dist/config/storage.config.d.ts.map +1 -0
  231. package/dist/config/storage.config.js +30 -0
  232. package/dist/config/typescript.config.d.ts +12 -0
  233. package/dist/config/typescript.config.d.ts.map +1 -0
  234. package/dist/config/typescript.config.js +13 -0
  235. package/dist/config/validators.config.d.ts +13 -0
  236. package/dist/config/validators.config.d.ts.map +1 -0
  237. package/dist/config/validators.config.js +15 -0
  238. package/dist/config/views.config.d.ts +20 -0
  239. package/dist/config/views.config.d.ts.map +1 -0
  240. package/dist/config/views.config.js +20 -0
  241. package/dist/config/vocab.config.d.ts +58 -0
  242. package/dist/config/vocab.config.d.ts.map +1 -0
  243. package/dist/config/vocab.config.js +58 -0
  244. package/dist/config/webpack.config.d.ts +16 -0
  245. package/dist/config/webpack.config.d.ts.map +1 -0
  246. package/dist/config/webpack.config.js +153 -0
  247. package/dist/config/workflow.config.d.ts +76 -0
  248. package/dist/config/workflow.config.d.ts.map +1 -0
  249. package/dist/config/workflow.config.js +339 -0
  250. package/dist/config/workspacetype.config.d.ts +23 -0
  251. package/dist/config/workspacetype.config.d.ts.map +1 -0
  252. package/dist/config/workspacetype.config.js +19 -0
  253. package/dist/configmodels/AdminSidebarConfig.d.ts +352 -0
  254. package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -0
  255. package/dist/configmodels/AdminSidebarConfig.js +163 -0
  256. package/dist/configmodels/AppConfig.interface.d.ts +4 -0
  257. package/dist/configmodels/AppConfig.interface.d.ts.map +1 -0
  258. package/dist/configmodels/AppConfig.interface.js +10 -0
  259. package/dist/configmodels/AuthorizedDomainsEmails.d.ts +43 -0
  260. package/dist/configmodels/AuthorizedDomainsEmails.d.ts.map +1 -0
  261. package/dist/configmodels/AuthorizedDomainsEmails.js +49 -0
  262. package/dist/configmodels/ConfigModels.d.ts +22 -0
  263. package/dist/configmodels/ConfigModels.d.ts.map +1 -0
  264. package/dist/configmodels/ConfigModels.js +98 -0
  265. package/dist/configmodels/DoiPublishing.d.ts.map +1 -0
  266. package/dist/configmodels/FigsharePublishing.d.ts.map +1 -0
  267. package/dist/configmodels/HomePanelConfig.d.ts +244 -0
  268. package/dist/configmodels/HomePanelConfig.d.ts.map +1 -0
  269. package/dist/configmodels/HomePanelConfig.js +132 -0
  270. package/dist/configmodels/MenuConfig.d.ts +203 -0
  271. package/dist/configmodels/MenuConfig.d.ts.map +1 -0
  272. package/dist/configmodels/MenuConfig.js +158 -0
  273. package/dist/configmodels/SystemMessage.d.ts +24 -0
  274. package/dist/configmodels/SystemMessage.d.ts.map +1 -0
  275. package/dist/configmodels/SystemMessage.js +30 -0
  276. package/dist/controllers/ActionController.d.ts +21 -0
  277. package/dist/controllers/ActionController.d.ts.map +1 -0
  278. package/dist/controllers/ActionController.js +41 -0
  279. package/dist/controllers/AdminController.d.ts +45 -0
  280. package/dist/controllers/AdminController.d.ts.map +1 -0
  281. package/dist/controllers/AdminController.js +498 -0
  282. package/dist/controllers/AppConfigController.d.ts +25 -0
  283. package/dist/controllers/AppConfigController.d.ts.map +1 -0
  284. package/dist/controllers/AppConfigController.js +90 -0
  285. package/dist/controllers/AsynchController.d.ts +30 -0
  286. package/dist/controllers/AsynchController.d.ts.map +1 -0
  287. package/dist/controllers/AsynchController.js +146 -0
  288. package/dist/controllers/BrandingAppController.d.ts +21 -0
  289. package/dist/controllers/BrandingAppController.d.ts.map +1 -0
  290. package/dist/controllers/BrandingAppController.js +144 -0
  291. package/dist/controllers/BrandingController.d.ts +64 -0
  292. package/dist/controllers/BrandingController.d.ts.map +1 -0
  293. package/dist/controllers/BrandingController.js +256 -0
  294. package/dist/controllers/DynamicAssetController.d.ts +67 -0
  295. package/dist/controllers/DynamicAssetController.d.ts.map +1 -0
  296. package/dist/controllers/DynamicAssetController.js +225 -0
  297. package/dist/controllers/EmailController.d.ts +35 -0
  298. package/dist/controllers/EmailController.d.ts.map +1 -0
  299. package/dist/controllers/EmailController.js +138 -0
  300. package/dist/controllers/ExportController.d.ts +22 -0
  301. package/dist/controllers/ExportController.d.ts.map +1 -0
  302. package/dist/controllers/ExportController.js +73 -0
  303. package/dist/controllers/FormVocabularyController.d.ts +12 -0
  304. package/dist/controllers/FormVocabularyController.d.ts.map +1 -0
  305. package/dist/controllers/FormVocabularyController.js +218 -0
  306. package/dist/controllers/RecordAuditController.d.ts +25 -0
  307. package/dist/controllers/RecordAuditController.d.ts.map +1 -0
  308. package/dist/controllers/RecordAuditController.js +74 -0
  309. package/dist/controllers/RecordController.d.ts +114 -0
  310. package/dist/controllers/RecordController.d.ts.map +1 -0
  311. package/dist/controllers/RecordController.js +1614 -0
  312. package/dist/controllers/RenderViewController.d.ts +14 -0
  313. package/dist/controllers/RenderViewController.d.ts.map +1 -0
  314. package/dist/controllers/RenderViewController.js +30 -0
  315. package/dist/controllers/ReportController.d.ts +25 -0
  316. package/dist/controllers/ReportController.d.ts.map +1 -0
  317. package/dist/controllers/ReportController.js +80 -0
  318. package/dist/controllers/ReportsController.d.ts +22 -0
  319. package/dist/controllers/ReportsController.d.ts.map +1 -0
  320. package/dist/controllers/ReportsController.js +37 -0
  321. package/dist/controllers/TranslationController.d.ts +27 -0
  322. package/dist/controllers/TranslationController.d.ts.map +1 -0
  323. package/dist/controllers/TranslationController.js +245 -0
  324. package/dist/controllers/UserController.d.ts +50 -0
  325. package/dist/controllers/UserController.d.ts.map +1 -0
  326. package/dist/controllers/UserController.js +518 -0
  327. package/dist/controllers/VocabController.d.ts +43 -0
  328. package/dist/controllers/VocabController.d.ts.map +1 -0
  329. package/dist/controllers/VocabController.js +190 -0
  330. package/dist/controllers/VocabularyController.d.ts +23 -0
  331. package/dist/controllers/VocabularyController.d.ts.map +1 -0
  332. package/dist/controllers/VocabularyController.js +344 -0
  333. package/dist/controllers/WorkspaceAsyncController.d.ts +18 -0
  334. package/dist/controllers/WorkspaceAsyncController.d.ts.map +1 -0
  335. package/dist/controllers/WorkspaceAsyncController.js +63 -0
  336. package/dist/controllers/WorkspaceTypesController.d.ts +19 -0
  337. package/dist/controllers/WorkspaceTypesController.d.ts.map +1 -0
  338. package/dist/controllers/WorkspaceTypesController.js +96 -0
  339. package/dist/controllers/index.d.ts +8 -0
  340. package/dist/controllers/index.d.ts.map +1 -0
  341. package/dist/controllers/index.js +159 -0
  342. package/dist/controllers/webservice/AdminController.d.ts +20 -0
  343. package/dist/controllers/webservice/AdminController.d.ts.map +1 -0
  344. package/dist/controllers/webservice/AdminController.js +83 -0
  345. package/dist/controllers/webservice/AppConfigController.d.ts +25 -0
  346. package/dist/controllers/webservice/AppConfigController.d.ts.map +1 -0
  347. package/dist/controllers/webservice/AppConfigController.js +72 -0
  348. package/dist/controllers/webservice/BrandingController.d.ts +13 -0
  349. package/dist/controllers/webservice/BrandingController.d.ts.map +1 -0
  350. package/dist/controllers/webservice/BrandingController.js +147 -0
  351. package/dist/controllers/webservice/ExportController.d.ts +22 -0
  352. package/dist/controllers/webservice/ExportController.d.ts.map +1 -0
  353. package/dist/controllers/webservice/ExportController.js +67 -0
  354. package/dist/controllers/webservice/FormManagementController.d.ts +24 -0
  355. package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -0
  356. package/dist/controllers/webservice/FormManagementController.js +79 -0
  357. package/dist/controllers/webservice/IntegrationAuditController.d.ts.map +1 -0
  358. package/dist/controllers/webservice/RecordController.d.ts +65 -0
  359. package/dist/controllers/webservice/RecordController.d.ts.map +1 -0
  360. package/dist/controllers/webservice/RecordController.js +1348 -0
  361. package/dist/controllers/webservice/RecordTypeController.d.ts +24 -0
  362. package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -0
  363. package/dist/controllers/webservice/RecordTypeController.js +70 -0
  364. package/dist/controllers/webservice/ReportController.d.ts +22 -0
  365. package/dist/controllers/webservice/ReportController.d.ts.map +1 -0
  366. package/dist/controllers/webservice/ReportController.js +74 -0
  367. package/dist/controllers/webservice/SearchController.d.ts +28 -0
  368. package/dist/controllers/webservice/SearchController.d.ts.map +1 -0
  369. package/dist/controllers/webservice/SearchController.js +123 -0
  370. package/dist/controllers/webservice/TranslationController.d.ts +18 -0
  371. package/dist/controllers/webservice/TranslationController.d.ts.map +1 -0
  372. package/dist/controllers/webservice/TranslationController.js +226 -0
  373. package/dist/controllers/webservice/UserManagementController.d.ts +38 -0
  374. package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -0
  375. package/dist/controllers/webservice/UserManagementController.js +608 -0
  376. package/dist/controllers/webservice/VocabularyController.d.ts +18 -0
  377. package/dist/controllers/webservice/VocabularyController.d.ts.map +1 -0
  378. package/dist/controllers/webservice/VocabularyController.js +172 -0
  379. package/dist/decorator/PopulateExportedMethods.decorator.d.ts +4 -0
  380. package/dist/decorator/PopulateExportedMethods.decorator.d.ts.map +1 -0
  381. package/dist/decorator/PopulateExportedMethods.decorator.js +22 -0
  382. package/dist/decorator/index.d.ts +2 -0
  383. package/dist/decorator/index.d.ts.map +1 -0
  384. package/dist/decorator/index.js +6 -0
  385. package/dist/decorators/Associations.d.ts +4 -0
  386. package/dist/decorators/Associations.d.ts.map +1 -0
  387. package/dist/decorators/Associations.js +12 -0
  388. package/dist/decorators/Attr.d.ts +4 -0
  389. package/dist/decorators/Attr.d.ts.map +1 -0
  390. package/dist/decorators/Attr.js +34 -0
  391. package/dist/decorators/Entity.d.ts +3 -0
  392. package/dist/decorators/Entity.d.ts.map +1 -0
  393. package/dist/decorators/Entity.js +29 -0
  394. package/dist/decorators/Lifecycle.d.ts +10 -0
  395. package/dist/decorators/Lifecycle.d.ts.map +1 -0
  396. package/dist/decorators/Lifecycle.js +26 -0
  397. package/dist/decorators/index.d.ts +8 -0
  398. package/dist/decorators/index.d.ts.map +1 -0
  399. package/dist/decorators/index.js +35 -0
  400. package/dist/decorators/registry.d.ts +8 -0
  401. package/dist/decorators/registry.d.ts.map +1 -0
  402. package/dist/decorators/registry.js +68 -0
  403. package/dist/decorators/types.d.ts +81 -0
  404. package/dist/decorators/types.d.ts.map +1 -0
  405. package/dist/decorators/types.js +4 -0
  406. package/dist/decorators/utils.d.ts +5 -0
  407. package/dist/decorators/utils.d.ts.map +1 -0
  408. package/dist/decorators/utils.js +68 -0
  409. package/dist/form-config/dataPublication-1.0-draft.d.ts.map +1 -0
  410. package/dist/form-config/dataPublication-1.0-embargoed.d.ts.map +1 -0
  411. package/dist/form-config/dataPublication-1.0-published.d.ts.map +1 -0
  412. package/dist/form-config/dataPublication-1.0-queued.d.ts.map +1 -0
  413. package/dist/form-config/dataPublication-1.0-retired.d.ts.map +1 -0
  414. package/dist/form-config/dataRecord-1.0-draft.d.ts +4 -0
  415. package/dist/form-config/dataRecord-1.0-draft.d.ts.map +1 -0
  416. package/dist/form-config/dataRecord-1.0-draft.js +1042 -0
  417. package/dist/form-config/default-1.0-draft.d.ts +4 -0
  418. package/dist/form-config/default-1.0-draft.d.ts.map +1 -0
  419. package/dist/form-config/default-1.0-draft.js +1132 -0
  420. package/dist/form-config/generated-view-only.d.ts +12 -0
  421. package/dist/form-config/generated-view-only.d.ts.map +1 -0
  422. package/dist/form-config/generated-view-only.js +169 -0
  423. package/dist/form-config/index.d.ts +3 -0
  424. package/dist/form-config/index.d.ts.map +1 -0
  425. package/dist/form-config/index.js +15 -0
  426. package/dist/hooks/defineRedboxHook.d.ts +31 -0
  427. package/dist/hooks/defineRedboxHook.d.ts.map +1 -0
  428. package/dist/hooks/defineRedboxHook.js +47 -0
  429. package/dist/hooks/index.d.ts +9 -0
  430. package/dist/hooks/index.d.ts.map +1 -0
  431. package/dist/hooks/index.js +13 -0
  432. package/dist/hooks/webpack.d.ts +27 -0
  433. package/dist/hooks/webpack.d.ts.map +1 -0
  434. package/dist/hooks/webpack.js +82 -0
  435. package/dist/index.d.ts +58 -0
  436. package/dist/index.d.ts.map +1 -0
  437. package/dist/index.js +116 -0
  438. package/dist/loader/bootstrapShimRuntime.d.ts +8 -0
  439. package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -0
  440. package/dist/loader/bootstrapShimRuntime.js +83 -0
  441. package/dist/loader/index.d.ts +93 -0
  442. package/dist/loader/index.d.ts.map +1 -0
  443. package/dist/loader/index.js +767 -0
  444. package/dist/middleware/redboxSession.d.ts +6 -0
  445. package/dist/middleware/redboxSession.d.ts.map +1 -0
  446. package/dist/middleware/redboxSession.js +60 -0
  447. package/dist/model/APIActionResponse.d.ts +6 -0
  448. package/dist/model/APIActionResponse.d.ts.map +1 -0
  449. package/dist/model/APIActionResponse.js +13 -0
  450. package/dist/model/APIErrorResponse.d.ts +6 -0
  451. package/dist/model/APIErrorResponse.d.ts.map +1 -0
  452. package/dist/model/APIErrorResponse.js +13 -0
  453. package/dist/model/APIHarvestResponse.d.ts +9 -0
  454. package/dist/model/APIHarvestResponse.d.ts.map +1 -0
  455. package/dist/model/APIHarvestResponse.js +19 -0
  456. package/dist/model/APIObjectActionResponse.d.ts +7 -0
  457. package/dist/model/APIObjectActionResponse.d.ts.map +1 -0
  458. package/dist/model/APIObjectActionResponse.js +15 -0
  459. package/dist/model/BuildResponse.d.ts +47 -0
  460. package/dist/model/BuildResponse.d.ts.map +1 -0
  461. package/dist/model/BuildResponse.js +5 -0
  462. package/dist/model/DashboardTypeResponseModel.d.ts +6 -0
  463. package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -0
  464. package/dist/model/DashboardTypeResponseModel.js +13 -0
  465. package/dist/model/ListAPIResponse.d.ts +7 -0
  466. package/dist/model/ListAPIResponse.d.ts.map +1 -0
  467. package/dist/model/ListAPIResponse.js +12 -0
  468. package/dist/model/ListAPISummary.d.ts +7 -0
  469. package/dist/model/ListAPISummary.d.ts.map +1 -0
  470. package/dist/model/ListAPISummary.js +12 -0
  471. package/dist/model/RBValidationError.d.ts +62 -0
  472. package/dist/model/RBValidationError.d.ts.map +1 -0
  473. package/dist/model/RBValidationError.js +98 -0
  474. package/dist/model/RecordTypeResponseModel.d.ts +10 -0
  475. package/dist/model/RecordTypeResponseModel.d.ts.map +1 -0
  476. package/dist/model/RecordTypeResponseModel.js +19 -0
  477. package/dist/model/RequestDetails.d.ts +27 -0
  478. package/dist/model/RequestDetails.d.ts.map +1 -0
  479. package/dist/model/RequestDetails.js +53 -0
  480. package/dist/model/SolrDocument.d.ts +17 -0
  481. package/dist/model/SolrDocument.d.ts.map +1 -0
  482. package/dist/model/SolrDocument.js +30 -0
  483. package/dist/model/api/APIResponseVersion2.d.ts +107 -0
  484. package/dist/model/api/APIResponseVersion2.d.ts.map +1 -0
  485. package/dist/model/api/APIResponseVersion2.js +3 -0
  486. package/dist/model/api/APIVersions.d.ts +9 -0
  487. package/dist/model/api/APIVersions.d.ts.map +1 -0
  488. package/dist/model/api/APIVersions.js +11 -0
  489. package/dist/model/api/CreateUserAPIResponse.d.ts +9 -0
  490. package/dist/model/api/CreateUserAPIResponse.d.ts.map +1 -0
  491. package/dist/model/api/CreateUserAPIResponse.js +13 -0
  492. package/dist/model/api/FigshareArticleCreate.d.ts +11 -0
  493. package/dist/model/api/FigshareArticleCreate.d.ts.map +1 -0
  494. package/dist/model/api/FigshareArticleCreate.js +16 -0
  495. package/dist/model/api/FigshareArticleEmbargo.d.ts +11 -0
  496. package/dist/model/api/FigshareArticleEmbargo.d.ts.map +1 -0
  497. package/dist/model/api/FigshareArticleEmbargo.js +23 -0
  498. package/dist/model/api/FigshareArticleUpdate.d.ts +13 -0
  499. package/dist/model/api/FigshareArticleUpdate.d.ts.map +1 -0
  500. package/dist/model/api/FigshareArticleUpdate.js +20 -0
  501. package/dist/model/api/UserAPITokenAPIResponse.d.ts +6 -0
  502. package/dist/model/api/UserAPITokenAPIResponse.d.ts.map +1 -0
  503. package/dist/model/api/UserAPITokenAPIResponse.js +10 -0
  504. package/dist/model/api/index.d.ts +8 -0
  505. package/dist/model/api/index.d.ts.map +1 -0
  506. package/dist/model/api/index.js +16 -0
  507. package/dist/model/config/ReportConfig.d.ts +50 -0
  508. package/dist/model/config/ReportConfig.d.ts.map +1 -0
  509. package/dist/model/config/ReportConfig.js +58 -0
  510. package/dist/model/config/SolrConfig.d.ts +72 -0
  511. package/dist/model/config/SolrConfig.d.ts.map +1 -0
  512. package/dist/model/config/SolrConfig.js +41 -0
  513. package/dist/model/config/VocabQueryConfig.d.ts +30 -0
  514. package/dist/model/config/VocabQueryConfig.d.ts.map +1 -0
  515. package/dist/model/config/VocabQueryConfig.js +32 -0
  516. package/dist/model/config/index.d.ts +4 -0
  517. package/dist/model/config/index.d.ts.map +1 -0
  518. package/dist/model/config/index.js +20 -0
  519. package/dist/model/index.d.ts +16 -0
  520. package/dist/model/index.d.ts.map +1 -0
  521. package/dist/model/index.js +45 -0
  522. package/dist/model/storage/AppConfigModel.d.ts +9 -0
  523. package/dist/model/storage/AppConfigModel.d.ts.map +1 -0
  524. package/dist/model/storage/AppConfigModel.js +3 -0
  525. package/dist/model/storage/AsynchProgressModel.d.ts +18 -0
  526. package/dist/model/storage/AsynchProgressModel.d.ts.map +1 -0
  527. package/dist/model/storage/AsynchProgressModel.js +3 -0
  528. package/dist/model/storage/BrandingModel.d.ts +24 -0
  529. package/dist/model/storage/BrandingModel.d.ts.map +1 -0
  530. package/dist/model/storage/BrandingModel.js +60 -0
  531. package/dist/model/storage/CacheEntryModel.d.ts +6 -0
  532. package/dist/model/storage/CacheEntryModel.d.ts.map +1 -0
  533. package/dist/model/storage/CacheEntryModel.js +3 -0
  534. package/dist/model/storage/CounterModel.d.ts +7 -0
  535. package/dist/model/storage/CounterModel.d.ts.map +1 -0
  536. package/dist/model/storage/CounterModel.js +3 -0
  537. package/dist/model/storage/DashboardTypeModel.d.ts +9 -0
  538. package/dist/model/storage/DashboardTypeModel.d.ts.map +1 -0
  539. package/dist/model/storage/DashboardTypeModel.js +3 -0
  540. package/dist/model/storage/DeletedRecordModel.d.ts +7 -0
  541. package/dist/model/storage/DeletedRecordModel.d.ts.map +1 -0
  542. package/dist/model/storage/DeletedRecordModel.js +3 -0
  543. package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -0
  544. package/dist/model/storage/NamedQueryModel.d.ts +13 -0
  545. package/dist/model/storage/NamedQueryModel.d.ts.map +1 -0
  546. package/dist/model/storage/NamedQueryModel.js +17 -0
  547. package/dist/model/storage/RecordAuditModel.d.ts +15 -0
  548. package/dist/model/storage/RecordAuditModel.d.ts.map +1 -0
  549. package/dist/model/storage/RecordAuditModel.js +28 -0
  550. package/dist/model/storage/RecordModel.d.ts +42 -0
  551. package/dist/model/storage/RecordModel.d.ts.map +1 -0
  552. package/dist/model/storage/RecordModel.js +3 -0
  553. package/dist/model/storage/RecordTypeModel.d.ts +36 -0
  554. package/dist/model/storage/RecordTypeModel.d.ts.map +1 -0
  555. package/dist/model/storage/RecordTypeModel.js +43 -0
  556. package/dist/model/storage/ReportModel.d.ts +5 -0
  557. package/dist/model/storage/ReportModel.d.ts.map +1 -0
  558. package/dist/model/storage/ReportModel.js +3 -0
  559. package/dist/model/storage/RoleModel.d.ts +9 -0
  560. package/dist/model/storage/RoleModel.d.ts.map +1 -0
  561. package/dist/model/storage/RoleModel.js +12 -0
  562. package/dist/model/storage/UserAuditModel.d.ts +9 -0
  563. package/dist/model/storage/UserAuditModel.d.ts.map +1 -0
  564. package/dist/model/storage/UserAuditModel.js +3 -0
  565. package/dist/model/storage/UserLinkModel.d.ts +14 -0
  566. package/dist/model/storage/UserLinkModel.d.ts.map +1 -0
  567. package/dist/model/storage/UserLinkModel.js +18 -0
  568. package/dist/model/storage/UserModel.d.ts +25 -0
  569. package/dist/model/storage/UserModel.d.ts.map +1 -0
  570. package/dist/model/storage/UserModel.js +26 -0
  571. package/dist/model/storage/WorkflowStepModel.d.ts +11 -0
  572. package/dist/model/storage/WorkflowStepModel.d.ts.map +1 -0
  573. package/dist/model/storage/WorkflowStepModel.js +3 -0
  574. package/dist/model/storage/WorkspaceAppModel.d.ts +8 -0
  575. package/dist/model/storage/WorkspaceAppModel.d.ts.map +1 -0
  576. package/dist/model/storage/WorkspaceAppModel.js +3 -0
  577. package/dist/model/storage/index.d.ts +18 -0
  578. package/dist/model/storage/index.d.ts.map +1 -0
  579. package/dist/model/storage/index.js +19 -0
  580. package/dist/policies/brandingAndPortal.d.ts +9 -0
  581. package/dist/policies/brandingAndPortal.d.ts.map +1 -0
  582. package/dist/policies/brandingAndPortal.js +34 -0
  583. package/dist/policies/checkAuth.d.ts +9 -0
  584. package/dist/policies/checkAuth.d.ts.map +1 -0
  585. package/dist/policies/checkAuth.js +64 -0
  586. package/dist/policies/checkBrandingValid.d.ts +9 -0
  587. package/dist/policies/checkBrandingValid.d.ts.map +1 -0
  588. package/dist/policies/checkBrandingValid.js +40 -0
  589. package/dist/policies/companionAttachmentUploadAuth.d.ts +9 -0
  590. package/dist/policies/companionAttachmentUploadAuth.d.ts.map +1 -0
  591. package/dist/policies/companionAttachmentUploadAuth.js +221 -0
  592. package/dist/policies/contentSecurityPolicy.d.ts +23 -0
  593. package/dist/policies/contentSecurityPolicy.d.ts.map +1 -0
  594. package/dist/policies/contentSecurityPolicy.js +135 -0
  595. package/dist/policies/disallowedHeadRequestHandler.d.ts +8 -0
  596. package/dist/policies/disallowedHeadRequestHandler.d.ts.map +1 -0
  597. package/dist/policies/disallowedHeadRequestHandler.js +17 -0
  598. package/dist/policies/i18nLanguages.d.ts +8 -0
  599. package/dist/policies/i18nLanguages.d.ts.map +1 -0
  600. package/dist/policies/i18nLanguages.js +56 -0
  601. package/dist/policies/index.d.ts +52 -0
  602. package/dist/policies/index.d.ts.map +1 -0
  603. package/dist/policies/index.js +70 -0
  604. package/dist/policies/isAuthenticated.d.ts +9 -0
  605. package/dist/policies/isAuthenticated.d.ts.map +1 -0
  606. package/dist/policies/isAuthenticated.js +19 -0
  607. package/dist/policies/isWebServiceAuthenticated.d.ts +9 -0
  608. package/dist/policies/isWebServiceAuthenticated.d.ts.map +1 -0
  609. package/dist/policies/isWebServiceAuthenticated.js +25 -0
  610. package/dist/policies/menuResolver.d.ts +11 -0
  611. package/dist/policies/menuResolver.d.ts.map +1 -0
  612. package/dist/policies/menuResolver.js +58 -0
  613. package/dist/policies/noCache.d.ts +9 -0
  614. package/dist/policies/noCache.d.ts.map +1 -0
  615. package/dist/policies/noCache.js +34 -0
  616. package/dist/policies/prepWs.d.ts +9 -0
  617. package/dist/policies/prepWs.d.ts.map +1 -0
  618. package/dist/policies/prepWs.js +23 -0
  619. package/dist/policies/sessionAuth.d.ts +11 -0
  620. package/dist/policies/sessionAuth.d.ts.map +1 -0
  621. package/dist/policies/sessionAuth.js +23 -0
  622. package/dist/policies/setLang.d.ts +8 -0
  623. package/dist/policies/setLang.d.ts.map +1 -0
  624. package/dist/policies/setLang.js +13 -0
  625. package/dist/responses/badRequest.d.ts +22 -0
  626. package/dist/responses/badRequest.d.ts.map +1 -0
  627. package/dist/responses/badRequest.js +66 -0
  628. package/dist/responses/created.d.ts +22 -0
  629. package/dist/responses/created.d.ts.map +1 -0
  630. package/dist/responses/created.js +55 -0
  631. package/dist/responses/forbidden.d.ts +22 -0
  632. package/dist/responses/forbidden.d.ts.map +1 -0
  633. package/dist/responses/forbidden.js +66 -0
  634. package/dist/responses/index.d.ts +6 -0
  635. package/dist/responses/index.d.ts.map +1 -0
  636. package/dist/responses/index.js +22 -0
  637. package/dist/responses/ok.d.ts +26 -0
  638. package/dist/responses/ok.d.ts.map +1 -0
  639. package/dist/responses/ok.js +59 -0
  640. package/dist/responses/serverError.d.ts +22 -0
  641. package/dist/responses/serverError.d.ts.map +1 -0
  642. package/dist/responses/serverError.js +66 -0
  643. package/dist/sails.d.ts +238 -0
  644. package/dist/sails.d.ts.map +1 -0
  645. package/dist/sails.js +3 -0
  646. package/dist/services/AgendaQueueService.d.ts +58 -0
  647. package/dist/services/AgendaQueueService.d.ts.map +1 -0
  648. package/dist/services/AgendaQueueService.js +225 -0
  649. package/dist/services/AppConfigService.d.ts +59 -0
  650. package/dist/services/AppConfigService.d.ts.map +1 -0
  651. package/dist/services/AppConfigService.js +273 -0
  652. package/dist/services/AsynchsService.d.ts +20 -0
  653. package/dist/services/AsynchsService.d.ts.map +1 -0
  654. package/dist/services/AsynchsService.js +64 -0
  655. package/dist/services/BrandingLogoService.d.ts +47 -0
  656. package/dist/services/BrandingLogoService.d.ts.map +1 -0
  657. package/dist/services/BrandingLogoService.js +212 -0
  658. package/dist/services/BrandingService.d.ts +70 -0
  659. package/dist/services/BrandingService.d.ts.map +1 -0
  660. package/dist/services/BrandingService.js +332 -0
  661. package/dist/services/CacheService.d.ts +25 -0
  662. package/dist/services/CacheService.d.ts.map +1 -0
  663. package/dist/services/CacheService.js +153 -0
  664. package/dist/services/ConfigService.d.ts +23 -0
  665. package/dist/services/ConfigService.d.ts.map +1 -0
  666. package/dist/services/ConfigService.js +379 -0
  667. package/dist/services/ContrastService.d.ts +77 -0
  668. package/dist/services/ContrastService.d.ts.map +1 -0
  669. package/dist/services/ContrastService.js +218 -0
  670. package/dist/services/DashboardTypesService.d.ts +98 -0
  671. package/dist/services/DashboardTypesService.d.ts.map +1 -0
  672. package/dist/services/DashboardTypesService.js +291 -0
  673. package/dist/services/DoiService.d.ts +36 -0
  674. package/dist/services/DoiService.d.ts.map +1 -0
  675. package/dist/services/DoiService.js +494 -0
  676. package/dist/services/DomSanitizerService.d.ts +105 -0
  677. package/dist/services/DomSanitizerService.d.ts.map +1 -0
  678. package/dist/services/DomSanitizerService.js +506 -0
  679. package/dist/services/EmailService.d.ts +185 -0
  680. package/dist/services/EmailService.d.ts.map +1 -0
  681. package/dist/services/EmailService.js +527 -0
  682. package/dist/services/FigshareService.d.ts +75 -0
  683. package/dist/services/FigshareService.d.ts.map +1 -0
  684. package/dist/services/FigshareService.js +2193 -0
  685. package/dist/services/FormRecordConsistencyService.d.ts +156 -0
  686. package/dist/services/FormRecordConsistencyService.d.ts.map +1 -0
  687. package/dist/services/FormRecordConsistencyService.js +516 -0
  688. package/dist/services/FormsService.d.ts +65 -0
  689. package/dist/services/FormsService.d.ts.map +1 -0
  690. package/dist/services/FormsService.js +580 -0
  691. package/dist/services/I18nEntriesService.d.ts +80 -0
  692. package/dist/services/I18nEntriesService.d.ts.map +1 -0
  693. package/dist/services/I18nEntriesService.js +469 -0
  694. package/dist/services/IntegrationAuditService.d.ts.map +1 -0
  695. package/dist/services/NamedQueryService.d.ts +87 -0
  696. package/dist/services/NamedQueryService.d.ts.map +1 -0
  697. package/dist/services/NamedQueryService.js +396 -0
  698. package/dist/services/NavigationService.d.ts +115 -0
  699. package/dist/services/NavigationService.d.ts.map +1 -0
  700. package/dist/services/NavigationService.js +553 -0
  701. package/dist/services/OniService.d.ts +77 -0
  702. package/dist/services/OniService.d.ts.map +1 -0
  703. package/dist/services/OniService.js +753 -0
  704. package/dist/services/OrcidService.d.ts +30 -0
  705. package/dist/services/OrcidService.d.ts.map +1 -0
  706. package/dist/services/OrcidService.js +126 -0
  707. package/dist/services/PathRulesService.d.ts +57 -0
  708. package/dist/services/PathRulesService.d.ts.map +1 -0
  709. package/dist/services/PathRulesService.js +129 -0
  710. package/dist/services/RDMPService.d.ts +102 -0
  711. package/dist/services/RDMPService.d.ts.map +1 -0
  712. package/dist/services/RDMPService.js +767 -0
  713. package/dist/services/RaidService.d.ts +83 -0
  714. package/dist/services/RaidService.d.ts.map +1 -0
  715. package/dist/services/RaidService.js +556 -0
  716. package/dist/services/RecordTypesService.d.ts +27 -0
  717. package/dist/services/RecordTypesService.d.ts.map +1 -0
  718. package/dist/services/RecordTypesService.js +106 -0
  719. package/dist/services/RecordsService.d.ts +129 -0
  720. package/dist/services/RecordsService.d.ts.map +1 -0
  721. package/dist/services/RecordsService.js +1477 -0
  722. package/dist/services/ReportsService.d.ts +99 -0
  723. package/dist/services/ReportsService.d.ts.map +1 -0
  724. package/dist/services/ReportsService.js +475 -0
  725. package/dist/services/RolesService.d.ts +41 -0
  726. package/dist/services/RolesService.d.ts.map +1 -0
  727. package/dist/services/RolesService.js +171 -0
  728. package/dist/services/RvaImportService.d.ts +56 -0
  729. package/dist/services/RvaImportService.d.ts.map +1 -0
  730. package/dist/services/RvaImportService.js +410 -0
  731. package/dist/services/SassCompilerService.d.ts +26 -0
  732. package/dist/services/SassCompilerService.d.ts.map +1 -0
  733. package/dist/services/SassCompilerService.js +201 -0
  734. package/dist/services/SolrSearchService.d.ts +52 -0
  735. package/dist/services/SolrSearchService.d.ts.map +1 -0
  736. package/dist/services/SolrSearchService.js +463 -0
  737. package/dist/services/StandardDatastreamService.d.ts +66 -0
  738. package/dist/services/StandardDatastreamService.d.ts.map +1 -0
  739. package/dist/services/StandardDatastreamService.js +297 -0
  740. package/dist/services/StorageManagerService.d.ts +90 -0
  741. package/dist/services/StorageManagerService.d.ts.map +1 -0
  742. package/dist/services/StorageManagerService.js +234 -0
  743. package/dist/services/TemplateService.d.ts +65 -0
  744. package/dist/services/TemplateService.d.ts.map +1 -0
  745. package/dist/services/TemplateService.js +208 -0
  746. package/dist/services/TranslationService.d.ts +38 -0
  747. package/dist/services/TranslationService.d.ts.map +1 -0
  748. package/dist/services/TranslationService.js +358 -0
  749. package/dist/services/TriggerService.d.ts +72 -0
  750. package/dist/services/TriggerService.d.ts.map +1 -0
  751. package/dist/services/TriggerService.js +554 -0
  752. package/dist/services/UsersService.d.ts +174 -0
  753. package/dist/services/UsersService.d.ts.map +1 -0
  754. package/dist/services/UsersService.js +2108 -0
  755. package/dist/services/ViewUtilsService.d.ts +36 -0
  756. package/dist/services/ViewUtilsService.d.ts.map +1 -0
  757. package/dist/services/ViewUtilsService.js +120 -0
  758. package/dist/services/VocabService.d.ts +81 -0
  759. package/dist/services/VocabService.d.ts.map +1 -0
  760. package/dist/services/VocabService.js +424 -0
  761. package/dist/services/VocabularyService.d.ts +115 -0
  762. package/dist/services/VocabularyService.d.ts.map +1 -0
  763. package/dist/services/VocabularyService.js +752 -0
  764. package/dist/services/WorkflowStepsService.d.ts +29 -0
  765. package/dist/services/WorkflowStepsService.d.ts.map +1 -0
  766. package/dist/services/WorkflowStepsService.js +110 -0
  767. package/dist/services/WorkspaceAsyncService.d.ts +34 -0
  768. package/dist/services/WorkspaceAsyncService.d.ts.map +1 -0
  769. package/dist/services/WorkspaceAsyncService.js +68 -0
  770. package/dist/services/WorkspaceService.d.ts +67 -0
  771. package/dist/services/WorkspaceService.d.ts.map +1 -0
  772. package/dist/services/WorkspaceService.js +148 -0
  773. package/dist/services/WorkspaceTypesService.d.ts +33 -0
  774. package/dist/services/WorkspaceTypesService.d.ts.map +1 -0
  775. package/dist/services/WorkspaceTypesService.js +89 -0
  776. package/dist/services/doi-v2/audit.d.ts.map +1 -0
  777. package/dist/services/doi-v2/bindings.d.ts.map +1 -0
  778. package/dist/services/doi-v2/config.d.ts.map +1 -0
  779. package/dist/services/doi-v2/context.d.ts.map +1 -0
  780. package/dist/services/doi-v2/http.d.ts.map +1 -0
  781. package/dist/services/doi-v2/payload.d.ts.map +1 -0
  782. package/dist/services/doi-v2/profiles.d.ts.map +1 -0
  783. package/dist/services/doi-v2/runtime.d.ts.map +1 -0
  784. package/dist/services/doi-v2/types.d.ts.map +1 -0
  785. package/dist/services/figshare-v2/assets.d.ts.map +1 -0
  786. package/dist/services/figshare-v2/bindings.d.ts.map +1 -0
  787. package/dist/services/figshare-v2/config.d.ts.map +1 -0
  788. package/dist/services/figshare-v2/context.d.ts.map +1 -0
  789. package/dist/services/figshare-v2/embargo.d.ts.map +1 -0
  790. package/dist/services/figshare-v2/http.d.ts.map +1 -0
  791. package/dist/services/figshare-v2/metadata.d.ts.map +1 -0
  792. package/dist/services/figshare-v2/observability.d.ts.map +1 -0
  793. package/dist/services/figshare-v2/plan.d.ts.map +1 -0
  794. package/dist/services/figshare-v2/publish.d.ts.map +1 -0
  795. package/dist/services/figshare-v2/queue.d.ts.map +1 -0
  796. package/dist/services/figshare-v2/runtime.d.ts.map +1 -0
  797. package/dist/services/figshare-v2/types.d.ts.map +1 -0
  798. package/dist/services/figshare-v2/workflow.d.ts.map +1 -0
  799. package/dist/services/figshare-v2/writeback.d.ts.map +1 -0
  800. package/dist/services/index.d.ts +136 -0
  801. package/dist/services/index.d.ts.map +1 -0
  802. package/dist/services/index.js +276 -0
  803. package/dist/shims/index.d.ts +9 -0
  804. package/dist/shims/index.d.ts.map +1 -0
  805. package/dist/shims/index.js +15 -0
  806. package/dist/shims/momentShim.d.ts +7 -0
  807. package/dist/shims/momentShim.d.ts.map +1 -0
  808. package/dist/shims/momentShim.js +69 -0
  809. package/dist/transformers/ExportJSONTransformer.d.ts +16 -0
  810. package/dist/transformers/ExportJSONTransformer.d.ts.map +1 -0
  811. package/dist/transformers/ExportJSONTransformer.js +90 -0
  812. package/dist/utilities/ContextVariableUtils.d.ts +8 -0
  813. package/dist/utilities/ContextVariableUtils.d.ts.map +1 -0
  814. package/dist/utilities/ContextVariableUtils.js +91 -0
  815. package/dist/utilities/TransactionUtils.d.ts +7 -0
  816. package/dist/utilities/TransactionUtils.d.ts.map +1 -0
  817. package/dist/utilities/TransactionUtils.js +25 -0
  818. package/dist/visitor/attachment-fields.visitor.d.ts +37 -0
  819. package/dist/visitor/attachment-fields.visitor.d.ts.map +1 -0
  820. package/dist/visitor/attachment-fields.visitor.js +93 -0
  821. package/dist/visitor/client.visitor.d.ts +211 -0
  822. package/dist/visitor/client.visitor.d.ts.map +1 -0
  823. package/dist/visitor/client.visitor.js +865 -0
  824. package/dist/visitor/construct.visitor.d.ts +219 -0
  825. package/dist/visitor/construct.visitor.d.ts.map +1 -0
  826. package/dist/visitor/construct.visitor.js +1499 -0
  827. package/dist/visitor/context-variables.visitor.d.ts +51 -0
  828. package/dist/visitor/context-variables.visitor.d.ts.map +1 -0
  829. package/dist/visitor/context-variables.visitor.js +192 -0
  830. package/dist/visitor/data-value.visitor.d.ts +159 -0
  831. package/dist/visitor/data-value.visitor.d.ts.map +1 -0
  832. package/dist/visitor/data-value.visitor.js +310 -0
  833. package/dist/visitor/json-type-def.visitor.d.ts +155 -0
  834. package/dist/visitor/json-type-def.visitor.d.ts.map +1 -0
  835. package/dist/visitor/json-type-def.visitor.js +384 -0
  836. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +244 -0
  837. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -0
  838. package/dist/visitor/migrate-config-v4-v5.visitor.js +2941 -0
  839. package/dist/visitor/template.visitor.d.ts +163 -0
  840. package/dist/visitor/template.visitor.d.ts.map +1 -0
  841. package/dist/visitor/template.visitor.js +397 -0
  842. package/dist/visitor/validator.visitor.d.ts +123 -0
  843. package/dist/visitor/validator.visitor.d.ts.map +1 -0
  844. package/dist/visitor/validator.visitor.js +480 -0
  845. package/dist/visitor/visitor-helpers.d.ts +15 -0
  846. package/dist/visitor/visitor-helpers.d.ts.map +1 -0
  847. package/dist/visitor/visitor-helpers.js +191 -0
  848. package/dist/visitor/vocab-inline.visitor.d.ts +33 -0
  849. package/dist/visitor/vocab-inline.visitor.d.ts.map +1 -0
  850. package/dist/visitor/vocab-inline.visitor.js +173 -0
  851. package/dist/waterline-models/AppConfig.d.ts +19 -0
  852. package/dist/waterline-models/AppConfig.d.ts.map +1 -0
  853. package/dist/waterline-models/AppConfig.js +38 -0
  854. package/dist/waterline-models/AsynchProgress.d.ts +37 -0
  855. package/dist/waterline-models/AsynchProgress.d.ts.map +1 -0
  856. package/dist/waterline-models/AsynchProgress.js +83 -0
  857. package/dist/waterline-models/BrandingConfig.d.ts +28 -0
  858. package/dist/waterline-models/BrandingConfig.d.ts.map +1 -0
  859. package/dist/waterline-models/BrandingConfig.js +132 -0
  860. package/dist/waterline-models/BrandingConfigHistory.d.ts +25 -0
  861. package/dist/waterline-models/BrandingConfigHistory.d.ts.map +1 -0
  862. package/dist/waterline-models/BrandingConfigHistory.js +66 -0
  863. package/dist/waterline-models/CacheEntry.d.ts +18 -0
  864. package/dist/waterline-models/CacheEntry.d.ts.map +1 -0
  865. package/dist/waterline-models/CacheEntry.js +38 -0
  866. package/dist/waterline-models/Counter.d.ts +19 -0
  867. package/dist/waterline-models/Counter.d.ts.map +1 -0
  868. package/dist/waterline-models/Counter.js +38 -0
  869. package/dist/waterline-models/DashboardType.d.ts +23 -0
  870. package/dist/waterline-models/DashboardType.d.ts.map +1 -0
  871. package/dist/waterline-models/DashboardType.js +53 -0
  872. package/dist/waterline-models/Form.d.ts +21 -0
  873. package/dist/waterline-models/Form.d.ts.map +1 -0
  874. package/dist/waterline-models/Form.js +38 -0
  875. package/dist/waterline-models/I18nBundle.d.ts +29 -0
  876. package/dist/waterline-models/I18nBundle.d.ts.map +1 -0
  877. package/dist/waterline-models/I18nBundle.js +85 -0
  878. package/dist/waterline-models/I18nTranslation.d.ts +32 -0
  879. package/dist/waterline-models/I18nTranslation.d.ts.map +1 -0
  880. package/dist/waterline-models/I18nTranslation.js +110 -0
  881. package/dist/waterline-models/NamedQuery.d.ts +29 -0
  882. package/dist/waterline-models/NamedQuery.d.ts.map +1 -0
  883. package/dist/waterline-models/NamedQuery.js +68 -0
  884. package/dist/waterline-models/PathRule.d.ts +26 -0
  885. package/dist/waterline-models/PathRule.d.ts.map +1 -0
  886. package/dist/waterline-models/PathRule.js +53 -0
  887. package/dist/waterline-models/RBReport.d.ts +38 -0
  888. package/dist/waterline-models/RBReport.d.ts.map +1 -0
  889. package/dist/waterline-models/RBReport.js +73 -0
  890. package/dist/waterline-models/RecordType.d.ts +37 -0
  891. package/dist/waterline-models/RecordType.d.ts.map +1 -0
  892. package/dist/waterline-models/RecordType.js +88 -0
  893. package/dist/waterline-models/Role.d.ts +19 -0
  894. package/dist/waterline-models/Role.d.ts.map +1 -0
  895. package/dist/waterline-models/Role.js +38 -0
  896. package/dist/waterline-models/ThemeConfig.d.ts +16 -0
  897. package/dist/waterline-models/ThemeConfig.d.ts.map +1 -0
  898. package/dist/waterline-models/ThemeConfig.js +33 -0
  899. package/dist/waterline-models/User.d.ts +50 -0
  900. package/dist/waterline-models/User.d.ts.map +1 -0
  901. package/dist/waterline-models/User.js +151 -0
  902. package/dist/waterline-models/UserAudit.d.ts +18 -0
  903. package/dist/waterline-models/UserAudit.d.ts.map +1 -0
  904. package/dist/waterline-models/UserAudit.js +38 -0
  905. package/dist/waterline-models/UserLink.d.ts +30 -0
  906. package/dist/waterline-models/UserLink.d.ts.map +1 -0
  907. package/dist/waterline-models/UserLink.js +62 -0
  908. package/dist/waterline-models/Vocabulary.d.ts +38 -0
  909. package/dist/waterline-models/Vocabulary.d.ts.map +1 -0
  910. package/dist/waterline-models/Vocabulary.js +183 -0
  911. package/dist/waterline-models/VocabularyEntry.d.ts +33 -0
  912. package/dist/waterline-models/VocabularyEntry.d.ts.map +1 -0
  913. package/dist/waterline-models/VocabularyEntry.js +210 -0
  914. package/dist/waterline-models/WorkflowStep.d.ts +25 -0
  915. package/dist/waterline-models/WorkflowStep.d.ts.map +1 -0
  916. package/dist/waterline-models/WorkflowStep.js +53 -0
  917. package/dist/waterline-models/WorkspaceApp.d.ts +19 -0
  918. package/dist/waterline-models/WorkspaceApp.d.ts.map +1 -0
  919. package/dist/waterline-models/WorkspaceApp.js +50 -0
  920. package/dist/waterline-models/WorkspaceAsync.d.ts +32 -0
  921. package/dist/waterline-models/WorkspaceAsync.d.ts.map +1 -0
  922. package/dist/waterline-models/WorkspaceAsync.js +73 -0
  923. package/dist/waterline-models/WorkspaceType.d.ts +25 -0
  924. package/dist/waterline-models/WorkspaceType.d.ts.map +1 -0
  925. package/dist/waterline-models/WorkspaceType.js +53 -0
  926. package/dist/waterline-models/index.d.ts +53 -0
  927. package/dist/waterline-models/index.d.ts.map +1 -0
  928. package/dist/waterline-models/index.js +99 -0
  929. package/dist/waterline-models/types.d.ts +8 -0
  930. package/dist/waterline-models/types.d.ts.map +1 -0
  931. package/dist/waterline-models/types.js +3 -0
  932. package/package.json +150 -0
  933. package/redbox-loader-templates/bootstrap-shim.js.hbs +17 -0
  934. package/redbox-loader-templates/form-config-index.js.hbs +11 -0
@@ -0,0 +1,1499 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConstructFormConfigVisitor = void 0;
4
+ const lodash_1 = require("lodash");
5
+ const sails_ng_common_1 = require("@researchdatabox/sails-ng-common");
6
+ const sails_ng_common_2 = require("@researchdatabox/sails-ng-common");
7
+ const sails_ng_common_3 = require("@researchdatabox/sails-ng-common");
8
+ const sails_ng_common_4 = require("@researchdatabox/sails-ng-common");
9
+ const sails_ng_common_5 = require("@researchdatabox/sails-ng-common");
10
+ const sails_ng_common_6 = require("@researchdatabox/sails-ng-common");
11
+ const sails_ng_common_7 = require("@researchdatabox/sails-ng-common");
12
+ const sails_ng_common_8 = require("@researchdatabox/sails-ng-common");
13
+ const sails_ng_common_9 = require("@researchdatabox/sails-ng-common");
14
+ const sails_ng_common_10 = require("@researchdatabox/sails-ng-common");
15
+ const sails_ng_common_11 = require("@researchdatabox/sails-ng-common");
16
+ const sails_ng_common_12 = require("@researchdatabox/sails-ng-common");
17
+ const sails_ng_common_13 = require("@researchdatabox/sails-ng-common");
18
+ const sails_ng_common_14 = require("@researchdatabox/sails-ng-common");
19
+ const sails_ng_common_15 = require("@researchdatabox/sails-ng-common");
20
+ const sails_ng_common_16 = require("@researchdatabox/sails-ng-common");
21
+ const sails_ng_common_17 = require("@researchdatabox/sails-ng-common");
22
+ const sails_ng_common_18 = require("@researchdatabox/sails-ng-common");
23
+ const sails_ng_common_19 = require("@researchdatabox/sails-ng-common");
24
+ const sails_ng_common_20 = require("@researchdatabox/sails-ng-common");
25
+ const sails_ng_common_21 = require("@researchdatabox/sails-ng-common");
26
+ const sails_ng_common_22 = require("@researchdatabox/sails-ng-common");
27
+ const sails_ng_common_23 = require("@researchdatabox/sails-ng-common");
28
+ const sails_ng_common_24 = require("@researchdatabox/sails-ng-common");
29
+ const sails_ng_common_25 = require("@researchdatabox/sails-ng-common");
30
+ const sails_ng_common_26 = require("@researchdatabox/sails-ng-common");
31
+ const sails_ng_common_27 = require("@researchdatabox/sails-ng-common");
32
+ const sails_ng_common_28 = require("@researchdatabox/sails-ng-common");
33
+ const sails_ng_common_29 = require("@researchdatabox/sails-ng-common");
34
+ const sails_ng_common_30 = require("@researchdatabox/sails-ng-common");
35
+ const sails_ng_common_31 = require("@researchdatabox/sails-ng-common");
36
+ const sails_ng_common_32 = require("@researchdatabox/sails-ng-common");
37
+ const sails_ng_common_33 = require("@researchdatabox/sails-ng-common");
38
+ const sails_ng_common_34 = require("@researchdatabox/sails-ng-common");
39
+ const sails_ng_common_35 = require("@researchdatabox/sails-ng-common");
40
+ const sails_ng_common_36 = require("@researchdatabox/sails-ng-common");
41
+ const sails_ng_common_37 = require("@researchdatabox/sails-ng-common");
42
+ const sails_ng_common_38 = require("@researchdatabox/sails-ng-common");
43
+ const sails_ng_common_39 = require("@researchdatabox/sails-ng-common");
44
+ const sails_ng_common_40 = require("@researchdatabox/sails-ng-common");
45
+ const sails_ng_common_41 = require("@researchdatabox/sails-ng-common");
46
+ const sails_ng_common_42 = require("@researchdatabox/sails-ng-common");
47
+ const sails_ng_common_43 = require("@researchdatabox/sails-ng-common");
48
+ const sails_ng_common_44 = require("@researchdatabox/sails-ng-common");
49
+ const sails_ng_common_45 = require("@researchdatabox/sails-ng-common");
50
+ const sails_ng_common_46 = require("@researchdatabox/sails-ng-common");
51
+ const sails_ng_common_47 = require("@researchdatabox/sails-ng-common");
52
+ const sails_ng_common_48 = require("@researchdatabox/sails-ng-common");
53
+ const sails_ng_common_49 = require("@researchdatabox/sails-ng-common");
54
+ const sails_ng_common_50 = require("@researchdatabox/sails-ng-common");
55
+ const sails_ng_common_51 = require("@researchdatabox/sails-ng-common");
56
+ const sails_ng_common_52 = require("@researchdatabox/sails-ng-common");
57
+ const sails_ng_common_53 = require("@researchdatabox/sails-ng-common");
58
+ const sails_ng_common_54 = require("@researchdatabox/sails-ng-common");
59
+ const sails_ng_common_55 = require("@researchdatabox/sails-ng-common");
60
+ const sails_ng_common_56 = require("@researchdatabox/sails-ng-common");
61
+ const sails_ng_common_57 = require("@researchdatabox/sails-ng-common");
62
+ const sails_ng_common_58 = require("@researchdatabox/sails-ng-common");
63
+ const sails_ng_common_59 = require("@researchdatabox/sails-ng-common");
64
+ const sails_ng_common_60 = require("@researchdatabox/sails-ng-common");
65
+ const sails_ng_common_61 = require("@researchdatabox/sails-ng-common");
66
+ const sails_ng_common_62 = require("@researchdatabox/sails-ng-common");
67
+ const sails_ng_common_63 = require("@researchdatabox/sails-ng-common");
68
+ const sails_ng_common_64 = require("@researchdatabox/sails-ng-common");
69
+ const sails_ng_common_65 = require("@researchdatabox/sails-ng-common");
70
+ const sails_ng_common_66 = require("@researchdatabox/sails-ng-common");
71
+ const sails_ng_common_67 = require("@researchdatabox/sails-ng-common");
72
+ const sails_ng_common_68 = require("@researchdatabox/sails-ng-common");
73
+ const sails_ng_common_69 = require("@researchdatabox/sails-ng-common");
74
+ const sails_ng_common_70 = require("@researchdatabox/sails-ng-common");
75
+ const sails_ng_common_71 = require("@researchdatabox/sails-ng-common");
76
+ const sails_ng_common_72 = require("@researchdatabox/sails-ng-common");
77
+ /**
78
+ * Visit each form config frame and create an instance of the associated class.
79
+ *
80
+ * This visitor performs the tasks needed to create form component class instances:
81
+ * - populate the instance properties from the form config data
82
+ * - assign the created classes to the expected property to build the component hierarchy
83
+ * - populate the model.config.value and/or the properties specific to a component from either a record or the form defaults
84
+ * - when using form defaults, provide default values from ancestors to descendants, so the descendants can either use their default or an ancestors default
85
+ * - expand reusable form config to the actual form config
86
+ * - transform component definitions to be a different component(s)
87
+ */
88
+ class ConstructFormConfigVisitor extends sails_ng_common_2.FormConfigVisitor {
89
+ logName = 'ConstructFormConfigVisitor';
90
+ formMode;
91
+ recordValues;
92
+ extractedDefaultValues;
93
+ mostRecentRepeatableElementTemplatePath;
94
+ data;
95
+ reusableFormDefs;
96
+ formConfig;
97
+ formOverride;
98
+ formPathHelper;
99
+ sharedProps;
100
+ validatorsSupport;
101
+ constructor(logger) {
102
+ super(logger);
103
+ this.formMode = 'view';
104
+ this.recordValues = null;
105
+ this.extractedDefaultValues = {};
106
+ this.mostRecentRepeatableElementTemplatePath = null;
107
+ this.data = { name: '', componentDefinitions: [] };
108
+ this.reusableFormDefs = {};
109
+ this.formConfig = new sails_ng_common_1.FormConfig();
110
+ this.formOverride = new sails_ng_common_71.FormOverride(logger);
111
+ this.formPathHelper = new sails_ng_common_72.FormPathHelper(logger, this);
112
+ this.sharedProps = new sails_ng_common_72.PropertiesHelper();
113
+ this.validatorsSupport = new sails_ng_common_1.ValidatorsSupport();
114
+ }
115
+ /**
116
+ * Start the visitor.
117
+ * @param options Configure the visitor.
118
+ * @param options.data The form config to construct into class instances.
119
+ * @param options.reusableFormDefs The reusable form definitions. Default empty.
120
+ * @param options.formMode The currently active form mode. Defaults to 'view'.
121
+ * @param options.record The record metadata values. Set to undefined or null to use the form default values.
122
+ */
123
+ start(options) {
124
+ this.data = (0, lodash_1.cloneDeep)(options.data);
125
+ this.reusableFormDefs = options.reusableFormDefs ?? {};
126
+ this.formMode = options.formMode ?? 'view';
127
+ // When options.record is null or undefined, use the form defaults. Otherwise, use recordValues only.
128
+ // This allows for specifying an empty record '{}' and using that instead of the defaults.
129
+ this.recordValues = options.record === null || options.record === undefined ? null : options.record;
130
+ // Collect the form config defaults.
131
+ // The defaults always need to be extract so they are available to any repeatable components.
132
+ this.extractedDefaultValues = {};
133
+ this.mostRecentRepeatableElementTemplatePath = null;
134
+ this.formPathHelper.reset();
135
+ this.formConfig = new sails_ng_common_1.FormConfig();
136
+ this.formConfig.accept(this);
137
+ return this.formConfig;
138
+ }
139
+ /* Form Config */
140
+ visitFormConfig(item) {
141
+ const currentData = this.getData();
142
+ if (!(0, sails_ng_common_70.isTypeFormConfig)(currentData)) {
143
+ throw new Error(`Invalid FormConfigFrame at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
144
+ }
145
+ // Set the simple properties, using the class instance property values as the defaults.
146
+ this.sharedProps.setPropOverride('name', item, currentData);
147
+ this.sharedProps.setPropOverride('type', item, currentData);
148
+ this.sharedProps.setPropOverride('domElementType', item, currentData);
149
+ this.sharedProps.setPropOverride('domId', item, currentData);
150
+ this.sharedProps.setPropOverride('viewCssClasses', item, currentData);
151
+ this.sharedProps.setPropOverride('editCssClasses', item, currentData);
152
+ this.sharedProps.setPropOverride('defaultComponentConfig', item, currentData);
153
+ this.sharedProps.setPropOverride('enabledValidationGroups', item, currentData);
154
+ this.sharedProps.setPropOverride('validators', item, currentData);
155
+ this.sharedProps.setPropOverride('validationGroups', item, currentData);
156
+ this.sharedProps.setPropOverride('defaultLayoutComponent', item, currentData);
157
+ this.sharedProps.setPropOverride('debugValue', item, currentData);
158
+ this.sharedProps.setPropOverride('expressions', item, currentData);
159
+ // Behaviours are a form-level concern. Unlike component expressions they do
160
+ // not belong to a specific field subtree, so they are copied here at the top
161
+ // of the construct phase and later handled by the template/client visitors.
162
+ // v1 keeps the data as plain config instead of constructing dedicated model
163
+ // classes because the runtime consumes the config directly.
164
+ this.sharedProps.setPropOverride('behaviours', item, currentData);
165
+ this.sharedProps.setPropOverride('attachmentFields', item, currentData);
166
+ // Ensure the default validation groups are present.
167
+ if (!item.validationGroups) {
168
+ item.validationGroups = {};
169
+ }
170
+ if (!Object.hasOwn(item.validationGroups, 'all')) {
171
+ item.validationGroups['all'] = {
172
+ description: 'Validate all fields with validators.',
173
+ initialMembership: 'all',
174
+ };
175
+ }
176
+ if (!Object.hasOwn(item.validationGroups, 'none')) {
177
+ item.validationGroups['none'] = {
178
+ description: 'Validate none of the fields.',
179
+ initialMembership: 'none',
180
+ };
181
+ }
182
+ this.validatorsSupport.checkValidationGroups(item.validationGroups, item.enabledValidationGroups ?? []);
183
+ currentData.componentDefinitions = this.formOverride.applyOverridesReusable(currentData?.componentDefinitions ?? [], this.reusableFormDefs);
184
+ // Visit the components
185
+ currentData.componentDefinitions.forEach((componentDefinition, index) => {
186
+ const formComponent = this.constructFormComponent(componentDefinition);
187
+ // Visit children
188
+ const testing = this.formPathHelper.lineagePathsForFormConfigComponentDefinition(formComponent, index);
189
+ this.formPathHelper.acceptFormPath(formComponent, testing);
190
+ // After the construction is done, apply any transforms
191
+ const itemTransformed = this.applyConstructPhaseTransform(formComponent);
192
+ // Store the instance on the item
193
+ item.componentDefinitions.push(itemTransformed);
194
+ });
195
+ }
196
+ /* SimpleInput */
197
+ visitSimpleInputFieldComponentDefinition(item) {
198
+ // Get the current raw data for constructing the class instance.
199
+ const currentData = this.getData();
200
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_7.SimpleInputComponentName)) {
201
+ throw new Error(`Invalid ${sails_ng_common_7.SimpleInputComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
202
+ }
203
+ const config = currentData?.config;
204
+ // Create the class instance for the config
205
+ item.config = new sails_ng_common_8.SimpleInputFieldComponentConfig();
206
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
207
+ this.sharedProps.setPropOverride('type', item.config, config);
208
+ this.sharedProps.setPropOverride('placeholder', item.config, config);
209
+ }
210
+ visitSimpleInputFieldModelDefinition(item) {
211
+ // Get the current raw data for constructing the class instance.
212
+ const currentData = this.getData();
213
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_7.SimpleInputModelName)) {
214
+ throw new Error(`Invalid ${sails_ng_common_7.SimpleInputModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
215
+ }
216
+ // Create the class instance for the config
217
+ item.config = new sails_ng_common_8.SimpleInputFieldModelConfig();
218
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
219
+ this.setModelValue(item, currentData?.config);
220
+ }
221
+ visitSimpleInputFormComponentDefinition(item) {
222
+ this.populateFormComponent(item);
223
+ }
224
+ /* Content */
225
+ visitContentFieldComponentDefinition(item) {
226
+ // Get the current raw data for constructing the class instance.
227
+ const currentData = this.getData();
228
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_16.ContentComponentName)) {
229
+ throw new Error(`Invalid ${sails_ng_common_16.ContentComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
230
+ }
231
+ const config = currentData?.config;
232
+ // Create the class instance for the config
233
+ item.config = new sails_ng_common_41.ContentFieldComponentConfig();
234
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
235
+ this.sharedProps.setPropOverride('template', item.config, config);
236
+ this.sharedProps.setPropOverride('content', item.config, config);
237
+ this.sharedProps.setPropOverride('contentIsTranslationCode', item.config, config);
238
+ }
239
+ visitContentFormComponentDefinition(item) {
240
+ // TODO: does the content component require the data model?
241
+ this.populateFormComponent(item);
242
+ }
243
+ /* Repeatable */
244
+ visitRepeatableFieldComponentDefinition(item) {
245
+ // Get the current raw data for constructing the class instance.
246
+ const currentData = this.getData();
247
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_4.RepeatableComponentName)) {
248
+ throw new Error(`Invalid ${sails_ng_common_4.RepeatableComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
249
+ }
250
+ const frame = currentData?.config;
251
+ // Create the class instance for the config
252
+ item.config = new sails_ng_common_5.RepeatableFieldComponentConfig();
253
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, frame);
254
+ this.sharedProps.setPropOverride('addButtonShow', item.config, frame);
255
+ this.sharedProps.setPropOverride('allowZeroRows', item.config, frame);
256
+ this.sharedProps.setPropOverride('hideWhenZeroRows', item.config, frame);
257
+ const currentFormConfigPath = this.formPathHelper.formPath.formConfig;
258
+ if (!(0, sails_ng_common_70.isTypeFormComponentDefinition)(frame?.elementTemplate)) {
259
+ throw new Error(`Invalid elementTemplate for repeatable at '${currentFormConfigPath}'.`);
260
+ }
261
+ const compDefs = this.formOverride.applyOverridesReusable([frame?.elementTemplate], this.reusableFormDefs);
262
+ const compDefLength = compDefs?.length ?? 0;
263
+ if (compDefLength !== 1) {
264
+ throw new Error(`Repeatable element template overrides must result in exactly one item, got ${compDefLength} at '${currentFormConfigPath}'.`);
265
+ }
266
+ frame.elementTemplate = compDefs[0];
267
+ // The element template name must be falsy.
268
+ // It is also allowed for a ReusableComponent to have a replaceName that is falsy.
269
+ const elementTemplateName = frame.elementTemplate?.name;
270
+ const elementTemplateClass = frame.elementTemplate?.component?.class;
271
+ const elementTemplateReplaceName = frame.elementTemplate?.overrides?.replaceName;
272
+ const nameIsFalsy = !elementTemplateName;
273
+ const nameWillBeTransformedToFalsy = elementTemplateReplaceName === null || elementTemplateReplaceName === '';
274
+ if (!nameIsFalsy && !nameWillBeTransformedToFalsy) {
275
+ this.logger.error(`Repeatable element template must have a 'falsy' name: elementTemplateName '${JSON.stringify(elementTemplateName)}' ` +
276
+ `elementTemplateClass ${JSON.stringify(elementTemplateClass)} elementTemplateReplaceName ${JSON.stringify(elementTemplateReplaceName)}`);
277
+ throw new Error(`Repeatable element template must have a 'falsy' name, got ${JSON.stringify(frame.elementTemplate?.name)} at ${JSON.stringify(currentFormConfigPath)}.`);
278
+ }
279
+ // Track the most recent element template.
280
+ // - Ensure newEntryValue is used only in elementTemplate definitions.
281
+ // - Ensure defaultValue is not defined in elementTemplate or any nested components.
282
+ const previousMostRecentRepeatableElementTemplatePath = this.mostRecentRepeatableElementTemplatePath === null ? null : [...this.mostRecentRepeatableElementTemplatePath];
283
+ this.mostRecentRepeatableElementTemplatePath = [...currentFormConfigPath, 'config', 'elementTemplate'];
284
+ const formComponent = this.constructFormComponent(frame.elementTemplate);
285
+ // Continue the construction
286
+ this.formPathHelper.acceptFormPath(formComponent, this.formPathHelper.lineagePathsForRepeatableFieldComponentDefinition(formComponent));
287
+ // Repeatable elements must use RepeatableElementLayout so item rows render remove controls.
288
+ if (formComponent.layout) {
289
+ formComponent.layout.class = sails_ng_common_4.RepeatableElementLayoutName;
290
+ }
291
+ // After the construction is done, apply any transforms
292
+ const itemTransformed = this.applyConstructPhaseTransform(formComponent);
293
+ // Store the instance on the item
294
+ item.config.elementTemplate = itemTransformed;
295
+ this.mostRecentRepeatableElementTemplatePath = previousMostRecentRepeatableElementTemplatePath;
296
+ }
297
+ visitRepeatableFieldModelDefinition(item) {
298
+ // Get the current raw data for constructing the class instance.
299
+ const currentData = this.getData();
300
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_4.RepeatableModelName)) {
301
+ throw new Error(`Invalid ${sails_ng_common_4.RepeatableModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
302
+ }
303
+ // Create the class instance for the config
304
+ item.config = new sails_ng_common_5.RepeatableFieldModelConfig();
305
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
306
+ this.setModelValue(item, currentData?.config);
307
+ }
308
+ visitRepeatableElementFieldLayoutDefinition(item) {
309
+ // Get the current raw data for constructing the class instance.
310
+ const currentData = this.getData();
311
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_4.RepeatableElementLayoutName)) {
312
+ throw new Error(`Invalid ${sails_ng_common_4.RepeatableElementLayoutName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
313
+ }
314
+ // Create the class instance for the config
315
+ item.config = new sails_ng_common_5.RepeatableElementFieldLayoutConfig();
316
+ this.sharedProps.sharedPopulateFieldLayoutConfig(item.config, currentData?.config);
317
+ }
318
+ visitRepeatableFormComponentDefinition(item) {
319
+ this.populateFormComponent(item);
320
+ }
321
+ /* Validation Summary */
322
+ visitValidationSummaryFieldComponentDefinition(item) {
323
+ // Get the current raw data for constructing the class instance.
324
+ const currentData = this.getData();
325
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_66.ValidationSummaryComponentName)) {
326
+ throw new Error(`Invalid ${sails_ng_common_66.ValidationSummaryComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
327
+ }
328
+ const config = currentData?.config;
329
+ // Create the class instance for the config
330
+ item.config = new sails_ng_common_67.ValidationSummaryFieldComponentConfig();
331
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
332
+ }
333
+ visitValidationSummaryFormComponentDefinition(item) {
334
+ this.populateFormComponent(item);
335
+ }
336
+ /* Save Status */
337
+ visitSaveStatusFieldComponentDefinition(item) {
338
+ const currentData = this.getData();
339
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_68.SaveStatusComponentName)) {
340
+ throw new Error(`Invalid ${sails_ng_common_68.SaveStatusComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
341
+ }
342
+ const config = currentData?.config;
343
+ item.config = new sails_ng_common_69.SaveStatusFieldComponentConfig();
344
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
345
+ }
346
+ visitSaveStatusFormComponentDefinition(item) {
347
+ this.populateFormComponent(item);
348
+ }
349
+ /* Group */
350
+ visitGroupFieldComponentDefinition(item) {
351
+ // Get the current raw data for constructing the class instance.
352
+ const currentData = this.getData();
353
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_3.GroupFieldComponentName)) {
354
+ throw new Error(`Invalid ${sails_ng_common_3.GroupFieldComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
355
+ }
356
+ const frame = currentData?.config ?? { componentDefinitions: [] };
357
+ // Create the class instance for the config
358
+ item.config = new sails_ng_common_6.GroupFieldComponentConfig();
359
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, frame);
360
+ frame.componentDefinitions = this.formOverride.applyOverridesReusable(frame?.componentDefinitions ?? [], this.reusableFormDefs);
361
+ // Visit the components
362
+ frame.componentDefinitions.forEach((componentDefinition, index) => {
363
+ const formComponent = this.constructFormComponent(componentDefinition);
364
+ // Continue the construction
365
+ this.formPathHelper.acceptFormPath(formComponent, this.formPathHelper.lineagePathsForGroupFieldComponentDefinition(formComponent, index));
366
+ // After the construction is done, apply any transforms
367
+ const itemTransformed = this.applyConstructPhaseTransform(formComponent);
368
+ // Store the instance on the item
369
+ item.config?.componentDefinitions.push(itemTransformed);
370
+ });
371
+ }
372
+ visitGroupFieldModelDefinition(item) {
373
+ // Get the current raw data for constructing the class instance.
374
+ const currentData = this.getData();
375
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_3.GroupFieldModelName)) {
376
+ throw new Error(`Invalid ${sails_ng_common_3.GroupFieldModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
377
+ }
378
+ // Create the class instance for the config
379
+ item.config = new sails_ng_common_6.GroupFieldModelConfig();
380
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
381
+ this.setModelValue(item, currentData?.config);
382
+ }
383
+ visitGroupFormComponentDefinition(item) {
384
+ this.populateFormComponent(item);
385
+ }
386
+ /* Tab */
387
+ visitTabFieldComponentDefinition(item) {
388
+ // Get the current raw data for constructing the class instance.
389
+ const currentData = this.getData();
390
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_17.TabComponentName)) {
391
+ throw new Error(`Invalid ${sails_ng_common_17.TabComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
392
+ }
393
+ const frame = currentData?.config ?? { tabs: [] };
394
+ // Create the class instance for the config
395
+ item.config = new sails_ng_common_18.TabFieldComponentConfig();
396
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, frame);
397
+ const compDefs = this.formOverride.applyOverridesReusable(frame?.tabs ?? [], this.reusableFormDefs);
398
+ const tabs = [];
399
+ for (const compDef of compDefs) {
400
+ if ((0, sails_ng_common_70.isTypeFormComponentDefinitionName)(compDef, sails_ng_common_21.TabContentComponentName)) {
401
+ tabs.push(compDef);
402
+ }
403
+ else {
404
+ this.logger.warn(`Invalid ${sails_ng_common_21.TabContentComponentName} entry skipped at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(compDef)}`);
405
+ }
406
+ }
407
+ frame.tabs = tabs;
408
+ // Visit the components
409
+ frame?.tabs.forEach((componentDefinition, index) => {
410
+ if ((0, sails_ng_common_70.isTypeFormComponentDefinitionName)(componentDefinition, sails_ng_common_21.TabContentComponentName)) {
411
+ const formComponent = this.constructFormComponent(componentDefinition);
412
+ // Continue the construction
413
+ this.formPathHelper.acceptFormPath(formComponent, this.formPathHelper.lineagePathsForTabFieldComponentDefinition(formComponent, index));
414
+ // After the construction is done, apply any transforms
415
+ // TODO: Use type assert for now.
416
+ // The Map<string,T> type in dictionary.model.ts should map specific string -> specific type.
417
+ // It currently maps string -> type union, which is too loose, as it doesn't imply that a particular string key maps to one type.
418
+ const itemTransformed = this.applyConstructPhaseTransform(formComponent);
419
+ // Store the instance on the item
420
+ item.config?.tabs.push(itemTransformed);
421
+ }
422
+ });
423
+ }
424
+ visitTabFieldLayoutDefinition(item) {
425
+ // Get the current raw data for constructing the class instance.
426
+ const currentData = this.getData();
427
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_17.TabLayoutName)) {
428
+ throw new Error(`Invalid ${sails_ng_common_17.TabLayoutName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
429
+ }
430
+ const config = currentData?.config;
431
+ // Create the class instance for the config
432
+ item.config = new sails_ng_common_18.TabFieldLayoutConfig();
433
+ this.sharedProps.sharedPopulateFieldLayoutConfig(item.config, config);
434
+ this.sharedProps.setPropOverride('buttonSectionCssClass', item.config, config);
435
+ this.sharedProps.setPropOverride('tabShellCssClass', item.config, config);
436
+ this.sharedProps.setPropOverride('tabNavWrapperCssClass', item.config, config);
437
+ this.sharedProps.setPropOverride('tabPanelWrapperCssClass', item.config, config);
438
+ this.sharedProps.setPropOverride('tabPaneCssClass', item.config, config);
439
+ this.sharedProps.setPropOverride('tabPaneActiveCssClass', item.config, config);
440
+ this.sharedProps.setPropOverride('buttonSectionAriaOrientation', item.config, config);
441
+ }
442
+ visitTabFormComponentDefinition(item) {
443
+ this.populateFormComponent(item);
444
+ }
445
+ /* Accordion */
446
+ visitAccordionFieldComponentDefinition(item) {
447
+ const currentData = this.getData();
448
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_19.AccordionComponentName)) {
449
+ throw new Error(`Invalid ${sails_ng_common_19.AccordionComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
450
+ }
451
+ const frame = currentData?.config ?? { panels: [] };
452
+ item.config = new sails_ng_common_20.AccordionFieldComponentConfig();
453
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, frame);
454
+ this.sharedProps.setPropOverride('startingOpenMode', item.config, frame);
455
+ const compDefs = this.formOverride.applyOverridesReusable(frame?.panels ?? [], this.reusableFormDefs);
456
+ const panels = [];
457
+ for (const compDef of compDefs) {
458
+ if ((0, sails_ng_common_70.isTypeFormComponentDefinitionName)(compDef, sails_ng_common_19.AccordionPanelComponentName)) {
459
+ panels.push(compDef);
460
+ }
461
+ else {
462
+ this.logger.warn(`Invalid ${sails_ng_common_19.AccordionPanelComponentName} entry skipped at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(compDef)}`);
463
+ }
464
+ }
465
+ frame.panels = panels;
466
+ frame.panels.forEach((componentDefinition, index) => {
467
+ if ((0, sails_ng_common_70.isTypeFormComponentDefinitionName)(componentDefinition, sails_ng_common_19.AccordionPanelComponentName)) {
468
+ const formComponent = this.constructFormComponent(componentDefinition);
469
+ this.formPathHelper.acceptFormPath(formComponent, this.formPathHelper.lineagePathsForAccordionFieldComponentDefinition(formComponent, index));
470
+ const itemTransformed = this.applyConstructPhaseTransform(formComponent);
471
+ item.config?.panels.push(itemTransformed);
472
+ }
473
+ });
474
+ }
475
+ visitAccordionFieldLayoutDefinition(item) {
476
+ const currentData = this.getData();
477
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_19.AccordionLayoutName)) {
478
+ throw new Error(`Invalid ${sails_ng_common_19.AccordionLayoutName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
479
+ }
480
+ const config = currentData?.config;
481
+ item.config = new sails_ng_common_20.AccordionFieldLayoutConfig();
482
+ this.sharedProps.sharedPopulateFieldLayoutConfig(item.config, config);
483
+ }
484
+ visitAccordionFormComponentDefinition(item) {
485
+ this.populateFormComponent(item);
486
+ }
487
+ visitAccordionPanelFieldComponentDefinition(item) {
488
+ const currentData = this.getData();
489
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_19.AccordionPanelComponentName)) {
490
+ throw new Error(`Invalid ${sails_ng_common_19.AccordionPanelComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
491
+ }
492
+ const config = currentData?.config ?? { componentDefinitions: [] };
493
+ item.config = new sails_ng_common_20.AccordionPanelFieldComponentConfig();
494
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
495
+ config.componentDefinitions = this.formOverride.applyOverridesReusable(config?.componentDefinitions ?? [], this.reusableFormDefs);
496
+ config.componentDefinitions.forEach((componentDefinition, index) => {
497
+ const formComponent = this.constructFormComponent(componentDefinition);
498
+ this.formPathHelper.acceptFormPath(formComponent, this.formPathHelper.lineagePathsForAccordionPanelFieldComponentDefinition(formComponent, index));
499
+ const itemTransformed = this.applyConstructPhaseTransform(formComponent);
500
+ item.config?.componentDefinitions.push(itemTransformed);
501
+ });
502
+ }
503
+ visitAccordionPanelFieldLayoutDefinition(item) {
504
+ const currentData = this.getData();
505
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_19.AccordionPanelLayoutName)) {
506
+ throw new Error(`Invalid ${sails_ng_common_19.AccordionPanelLayoutName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
507
+ }
508
+ const config = currentData?.config;
509
+ item.config = new sails_ng_common_20.AccordionPanelFieldLayoutConfig();
510
+ this.sharedProps.sharedPopulateFieldLayoutConfig(item.config, config);
511
+ this.sharedProps.setPropOverride('buttonLabel', item.config, config);
512
+ }
513
+ visitAccordionPanelFormComponentDefinition(item) {
514
+ this.populateFormComponent(item);
515
+ }
516
+ /* Tab Content */
517
+ visitTabContentFieldComponentDefinition(item) {
518
+ // Get the current raw data for constructing the class instance.
519
+ const currentData = this.getData();
520
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_21.TabContentComponentName)) {
521
+ throw new Error(`Invalid ${sails_ng_common_21.TabContentComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
522
+ }
523
+ const config = currentData?.config ?? { componentDefinitions: [] };
524
+ // Create the class instance for the config
525
+ item.config = new sails_ng_common_22.TabContentFieldComponentConfig();
526
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
527
+ this.sharedProps.setPropOverride('selected', item.config, config);
528
+ config.componentDefinitions = this.formOverride.applyOverridesReusable(config?.componentDefinitions ?? [], this.reusableFormDefs);
529
+ // Visit the components
530
+ config?.componentDefinitions.forEach((componentDefinition, index) => {
531
+ let formComponent;
532
+ try {
533
+ formComponent = this.constructFormComponent(componentDefinition);
534
+ }
535
+ catch (error) {
536
+ const errorMessage = error instanceof Error ? error.message : `${error}`;
537
+ throw new Error(`Invalid tab-content component definition at '${this.formPathHelper.formPath.formConfig}' index ${index}: ${errorMessage}`);
538
+ }
539
+ // Continue the construction
540
+ this.formPathHelper.acceptFormPath(formComponent, this.formPathHelper.lineagePathsForTabContentFieldComponentDefinition(formComponent, index));
541
+ // After the construction is done, apply any transforms
542
+ const itemTransformed = this.applyConstructPhaseTransform(formComponent);
543
+ // Store the instance on the item
544
+ item.config?.componentDefinitions.push(itemTransformed);
545
+ });
546
+ }
547
+ visitTabContentFieldLayoutDefinition(item) {
548
+ // Get the current raw data for constructing the class instance.
549
+ const currentData = this.getData();
550
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_21.TabContentLayoutName)) {
551
+ throw new Error(`Invalid ${sails_ng_common_21.TabContentLayoutName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
552
+ }
553
+ const config = currentData?.config;
554
+ // Create the class instance for the config
555
+ item.config = new sails_ng_common_22.TabContentFieldLayoutConfig();
556
+ this.sharedProps.sharedPopulateFieldLayoutConfig(item.config, config);
557
+ this.sharedProps.setPropOverride('buttonLabel', item.config, config);
558
+ }
559
+ visitTabContentFormComponentDefinition(item) {
560
+ this.populateFormComponent(item);
561
+ }
562
+ /* Save Button */
563
+ visitSaveButtonFieldComponentDefinition(item) {
564
+ // Get the current raw data for constructing the class instance.
565
+ const currentData = this.getData();
566
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_58.SaveButtonComponentName)) {
567
+ throw new Error(`Invalid ${sails_ng_common_58.SaveButtonComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
568
+ }
569
+ const config = currentData?.config;
570
+ // Create the class instance for the config
571
+ item.config = new sails_ng_common_59.SaveButtonFieldComponentConfig();
572
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
573
+ this.sharedProps.setPropOverride('targetStep', item.config, config);
574
+ this.sharedProps.setPropOverride('forceSave', item.config, config);
575
+ this.sharedProps.setPropOverride('labelSaving', item.config, config);
576
+ this.sharedProps.setPropOverride('buttonCssClasses', item.config, config);
577
+ }
578
+ visitSaveButtonFormComponentDefinition(item) {
579
+ this.populateFormComponent(item);
580
+ }
581
+ /* Cancel Button */
582
+ visitCancelButtonFieldComponentDefinition(item) {
583
+ // Get the current raw data for constructing the class instance.
584
+ const currentData = this.getData();
585
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_60.CancelButtonComponentName)) {
586
+ throw new Error(`Invalid ${sails_ng_common_60.CancelButtonComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
587
+ }
588
+ const config = currentData?.config;
589
+ // Create the class instance for the config
590
+ item.config = new sails_ng_common_61.CancelButtonFieldComponentConfig();
591
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
592
+ this.sharedProps.setPropOverride('confirmationMessage', item.config, config);
593
+ this.sharedProps.setPropOverride('confirmationTitle', item.config, config);
594
+ this.sharedProps.setPropOverride('cancelButtonMessage', item.config, config);
595
+ this.sharedProps.setPropOverride('confirmButtonMessage', item.config, config);
596
+ this.sharedProps.setPropOverride('buttonCssClasses', item.config, config);
597
+ }
598
+ visitCancelButtonFormComponentDefinition(item) {
599
+ this.populateFormComponent(item);
600
+ }
601
+ /* Delete Button */
602
+ visitDeleteButtonFieldComponentDefinition(item) {
603
+ const currentData = this.getData();
604
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_62.DeleteButtonComponentName)) {
605
+ throw new Error(`Invalid ${sails_ng_common_62.DeleteButtonComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
606
+ }
607
+ const config = currentData?.config;
608
+ item.config = new sails_ng_common_63.DeleteButtonFieldComponentConfig();
609
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
610
+ this.sharedProps.setPropOverride('buttonCssClasses', item.config, config);
611
+ this.sharedProps.setPropOverride('closeOnDelete', item.config, config);
612
+ this.sharedProps.setPropOverride('redirectLocation', item.config, config);
613
+ this.sharedProps.setPropOverride('redirectDelaySeconds', item.config, config);
614
+ this.sharedProps.setPropOverride('confirmationMessage', item.config, config);
615
+ this.sharedProps.setPropOverride('confirmationTitle', item.config, config);
616
+ this.sharedProps.setPropOverride('cancelButtonMessage', item.config, config);
617
+ this.sharedProps.setPropOverride('confirmButtonMessage', item.config, config);
618
+ }
619
+ visitDeleteButtonFormComponentDefinition(item) {
620
+ this.populateFormComponent(item);
621
+ }
622
+ /* Tab Nav Button */
623
+ visitTabNavButtonFieldComponentDefinition(item) {
624
+ // Get the current raw data for constructing the class instance.
625
+ const currentData = this.getData();
626
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_64.TabNavButtonComponentName)) {
627
+ throw new Error(`Invalid ${sails_ng_common_64.TabNavButtonComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
628
+ }
629
+ const config = currentData?.config;
630
+ // Create the class instance for the config
631
+ item.config = new sails_ng_common_65.TabNavButtonFieldComponentConfig();
632
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
633
+ this.sharedProps.setPropOverride('prevLabel', item.config, config);
634
+ this.sharedProps.setPropOverride('nextLabel', item.config, config);
635
+ this.sharedProps.setPropOverride('targetTabContainerId', item.config, config);
636
+ this.sharedProps.setPropOverride('endDisplayMode', item.config, config);
637
+ }
638
+ visitTabNavButtonFormComponentDefinition(item) {
639
+ this.populateFormComponent(item);
640
+ }
641
+ /* Text Area */
642
+ visitTextAreaFieldComponentDefinition(item) {
643
+ // Get the current raw data for constructing the class instance.
644
+ const currentData = this.getData();
645
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_23.TextAreaComponentName)) {
646
+ throw new Error(`Invalid ${sails_ng_common_23.TextAreaComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
647
+ }
648
+ const config = currentData?.config;
649
+ // Create the class instance for the config
650
+ item.config = new sails_ng_common_24.TextAreaFieldComponentConfig();
651
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
652
+ this.sharedProps.setPropOverride('rows', item.config, config);
653
+ this.sharedProps.setPropOverride('cols', item.config, config);
654
+ this.sharedProps.setPropOverride('placeholder', item.config, config);
655
+ }
656
+ visitTextAreaFieldModelDefinition(item) {
657
+ // Get the current raw data for constructing the class instance.
658
+ const currentData = this.getData();
659
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_23.TextAreaModelName)) {
660
+ throw new Error(`Invalid ${sails_ng_common_23.TextAreaModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
661
+ }
662
+ // Create the class instance for the config
663
+ item.config = new sails_ng_common_24.TextAreaFieldModelConfig();
664
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
665
+ this.setModelValue(item, currentData?.config);
666
+ }
667
+ visitTextAreaFormComponentDefinition(item) {
668
+ this.populateFormComponent(item);
669
+ }
670
+ /* Rich Text Editor */
671
+ visitRichTextEditorFieldComponentDefinition(item) {
672
+ const currentData = this.getData();
673
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_25.RichTextEditorComponentName)) {
674
+ throw new Error(`Invalid ${sails_ng_common_25.RichTextEditorComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
675
+ }
676
+ const config = currentData?.config;
677
+ item.config = new sails_ng_common_26.RichTextEditorFieldComponentConfig();
678
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
679
+ this.sharedProps.setPropOverride('outputFormat', item.config, config);
680
+ this.sharedProps.setPropOverride('showSourceToggle', item.config, config);
681
+ this.sharedProps.setPropOverride('toolbar', item.config, config);
682
+ this.sharedProps.setPropOverride('minHeight', item.config, config);
683
+ this.sharedProps.setPropOverride('placeholder', item.config, config);
684
+ }
685
+ visitRichTextEditorFieldModelDefinition(item) {
686
+ const currentData = this.getData();
687
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_25.RichTextEditorModelName)) {
688
+ throw new Error(`Invalid ${sails_ng_common_25.RichTextEditorModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
689
+ }
690
+ item.config = new sails_ng_common_26.RichTextEditorFieldModelConfig();
691
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
692
+ this.setModelValue(item, currentData?.config);
693
+ }
694
+ visitRichTextEditorFormComponentDefinition(item) {
695
+ this.populateFormComponent(item);
696
+ this.ensureRichTextViewOverride(item);
697
+ }
698
+ /* Map */
699
+ visitMapFieldComponentDefinition(item) {
700
+ const currentData = this.getData();
701
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_27.MapComponentName)) {
702
+ throw new Error(`Invalid ${sails_ng_common_27.MapComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
703
+ }
704
+ const config = currentData?.config;
705
+ item.config = new sails_ng_common_28.MapFieldComponentConfig();
706
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
707
+ this.sharedProps.setPropOverride('center', item.config, config);
708
+ this.sharedProps.setPropOverride('zoom', item.config, config);
709
+ this.sharedProps.setPropOverride('mapHeight', item.config, config);
710
+ this.sharedProps.setPropOverride('tileLayers', item.config, config);
711
+ this.sharedProps.setPropOverride('enabledModes', item.config, config);
712
+ this.sharedProps.setPropOverride('enableImport', item.config, config);
713
+ this.sharedProps.setPropOverride('coordinatesHelp', item.config, config);
714
+ item.config.enabledModes = this.sanitizeMapEnabledModes(item.config.enabledModes, 'construct');
715
+ }
716
+ visitMapFieldModelDefinition(item) {
717
+ const currentData = this.getData();
718
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_27.MapModelName)) {
719
+ throw new Error(`Invalid ${sails_ng_common_27.MapModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
720
+ }
721
+ item.config = new sails_ng_common_28.MapFieldModelConfig();
722
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
723
+ this.setModelValue(item, currentData?.config);
724
+ }
725
+ visitMapFormComponentDefinition(item) {
726
+ this.populateFormComponent(item);
727
+ }
728
+ /* File Upload */
729
+ visitFileUploadFieldComponentDefinition(item) {
730
+ const currentData = this.getData();
731
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_29.FileUploadComponentName)) {
732
+ throw new Error(`Invalid ${sails_ng_common_29.FileUploadComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
733
+ }
734
+ const config = currentData?.config;
735
+ item.config = new sails_ng_common_30.FileUploadFieldComponentConfig();
736
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
737
+ this.sharedProps.setPropOverride('restrictions', item.config, config);
738
+ this.sharedProps.setPropOverride('enabledSources', item.config, config);
739
+ this.sharedProps.setPropOverride('companionUrl', item.config, config);
740
+ this.sharedProps.setPropOverride('allowUploadWithoutSave', item.config, config);
741
+ this.sharedProps.setPropOverride('uppyDashboardNote', item.config, config);
742
+ this.sharedProps.setPropOverride('tusHeaders', item.config, config);
743
+ }
744
+ visitFileUploadFieldModelDefinition(item) {
745
+ const currentData = this.getData();
746
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_29.FileUploadModelName)) {
747
+ throw new Error(`Invalid ${sails_ng_common_29.FileUploadModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
748
+ }
749
+ item.config = new sails_ng_common_30.FileUploadFieldModelConfig();
750
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
751
+ this.setModelValue(item, currentData?.config);
752
+ }
753
+ visitFileUploadFormComponentDefinition(item) {
754
+ this.populateFormComponent(item);
755
+ }
756
+ /* PDF List */
757
+ visitPDFListFieldComponentDefinition(item) {
758
+ const currentData = this.getData();
759
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_31.PDFListComponentName)) {
760
+ throw new Error(`Invalid ${sails_ng_common_31.PDFListComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
761
+ }
762
+ const config = currentData?.config;
763
+ item.config = new sails_ng_common_32.PDFListFieldComponentConfig();
764
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
765
+ this.sharedProps.setPropOverride('startsWith', item.config, config);
766
+ this.sharedProps.setPropOverride('recentPdfLimit', item.config, config);
767
+ this.sharedProps.setPropOverride('showVersionCounter', item.config, config);
768
+ this.sharedProps.setPropOverride('showVersionColumn', item.config, config);
769
+ this.sharedProps.setPropOverride('versionColumnValueField', item.config, config);
770
+ this.sharedProps.setPropOverride('versionColumnLabelKey', item.config, config);
771
+ this.sharedProps.setPropOverride('useVersionLabelForFileName', item.config, config);
772
+ this.sharedProps.setPropOverride('downloadBtnLabel', item.config, config);
773
+ this.sharedProps.setPropOverride('downloadPreviousBtnLabel', item.config, config);
774
+ this.sharedProps.setPropOverride('downloadPrefix', item.config, config);
775
+ this.sharedProps.setPropOverride('fileNameTemplate', item.config, config);
776
+ }
777
+ visitPDFListFieldModelDefinition(item) {
778
+ const currentData = this.getData();
779
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_31.PDFListModelName)) {
780
+ throw new Error(`Invalid ${sails_ng_common_31.PDFListModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
781
+ }
782
+ item.config = new sails_ng_common_32.PDFListFieldModelConfig();
783
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
784
+ this.setModelValue(item, currentData?.config);
785
+ }
786
+ visitPDFListFormComponentDefinition(item) {
787
+ this.populateFormComponent(item);
788
+ }
789
+ /* Record Metadata Retriever */
790
+ visitRecordMetadataRetrieverFieldComponentDefinition(item) {
791
+ const currentData = this.getData();
792
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_33.RecordMetadataRetrieverComponentName)) {
793
+ throw new Error(`Invalid ${sails_ng_common_33.RecordMetadataRetrieverComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
794
+ }
795
+ item.config = new sails_ng_common_34.RecordMetadataRetrieverFieldComponentConfig();
796
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, currentData?.config);
797
+ }
798
+ visitRecordMetadataRetrieverFormComponentDefinition(item) {
799
+ this.populateFormComponent(item);
800
+ }
801
+ /* Data Location */
802
+ visitDataLocationFieldComponentDefinition(item) {
803
+ const currentData = this.getData();
804
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_35.DataLocationComponentName)) {
805
+ throw new Error(`Invalid ${sails_ng_common_35.DataLocationComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
806
+ }
807
+ const config = currentData?.config;
808
+ item.config = new sails_ng_common_36.DataLocationFieldComponentConfig();
809
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
810
+ this.sharedProps.setPropOverride('restrictions', item.config, config);
811
+ this.sharedProps.setPropOverride('enabledSources', item.config, config);
812
+ this.sharedProps.setPropOverride('companionUrl', item.config, config);
813
+ this.sharedProps.setPropOverride('allowUploadWithoutSave', item.config, config);
814
+ this.sharedProps.setPropOverride('uppyDashboardNote', item.config, config);
815
+ this.sharedProps.setPropOverride('tusHeaders', item.config, config);
816
+ this.sharedProps.setPropOverride('notesEnabled', item.config, config);
817
+ this.sharedProps.setPropOverride('iscEnabled', item.config, config);
818
+ this.sharedProps.setPropOverride('iscHeader', item.config, config);
819
+ this.sharedProps.setPropOverride('defaultSelect', item.config, config);
820
+ this.sharedProps.setPropOverride('securityClassificationOptions', item.config, config);
821
+ this.sharedProps.setPropOverride('locationAddText', item.config, config);
822
+ this.sharedProps.setPropOverride('typeHeader', item.config, config);
823
+ this.sharedProps.setPropOverride('locationHeader', item.config, config);
824
+ this.sharedProps.setPropOverride('notesHeader', item.config, config);
825
+ this.sharedProps.setPropOverride('columns', item.config, config);
826
+ this.sharedProps.setPropOverride('editNotesButtonText', item.config, config);
827
+ this.sharedProps.setPropOverride('editNotesTitle', item.config, config);
828
+ this.sharedProps.setPropOverride('cancelEditNotesButtonText', item.config, config);
829
+ this.sharedProps.setPropOverride('applyEditNotesButtonText', item.config, config);
830
+ this.sharedProps.setPropOverride('editNotesCssClasses', item.config, config);
831
+ this.sharedProps.setPropOverride('dataTypes', item.config, config);
832
+ this.sharedProps.setPropOverride('dataTypeLookup', item.config, config);
833
+ this.sharedProps.setPropOverride('hideNotesForLocationTypes', item.config, config);
834
+ }
835
+ visitDataLocationFieldModelDefinition(item) {
836
+ const currentData = this.getData();
837
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_35.DataLocationModelName)) {
838
+ throw new Error(`Invalid ${sails_ng_common_35.DataLocationModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
839
+ }
840
+ item.config = new sails_ng_common_36.DataLocationFieldModelConfig();
841
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
842
+ this.setModelValue(item, currentData?.config);
843
+ }
844
+ visitDataLocationFormComponentDefinition(item) {
845
+ this.populateFormComponent(item);
846
+ }
847
+ // Construct the refresh trigger as a pure component definition. The click
848
+ // token is synthetic, so no model instance should be created here.
849
+ visitPublishDataLocationRefreshFieldComponentDefinition(item) {
850
+ const currentData = this.getData();
851
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_37.PublishDataLocationRefreshComponentName)) {
852
+ throw new Error(`Invalid ${sails_ng_common_37.PublishDataLocationRefreshComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
853
+ }
854
+ item.config = new sails_ng_common_38.PublishDataLocationRefreshFieldComponentConfig();
855
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, currentData?.config);
856
+ }
857
+ visitPublishDataLocationRefreshFormComponentDefinition(item) {
858
+ this.populateFormComponent(item);
859
+ }
860
+ visitPublishDataLocationSelectorFieldComponentDefinition(item) {
861
+ const currentData = this.getData();
862
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_39.PublishDataLocationSelectorComponentName)) {
863
+ throw new Error(`Invalid ${sails_ng_common_39.PublishDataLocationSelectorComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
864
+ }
865
+ const config = currentData?.config;
866
+ item.config = new sails_ng_common_40.PublishDataLocationSelectorFieldComponentConfig();
867
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
868
+ this.sharedProps.setPropOverride('columns', item.config, config);
869
+ this.sharedProps.setPropOverride('editNotesButtonText', item.config, config);
870
+ this.sharedProps.setPropOverride('editNotesTitle', item.config, config);
871
+ this.sharedProps.setPropOverride('cancelEditNotesButtonText', item.config, config);
872
+ this.sharedProps.setPropOverride('applyEditNotesButtonText', item.config, config);
873
+ this.sharedProps.setPropOverride('editNotesCssClasses', item.config, config);
874
+ this.sharedProps.setPropOverride('typeHeader', item.config, config);
875
+ this.sharedProps.setPropOverride('locationHeader', item.config, config);
876
+ this.sharedProps.setPropOverride('notesHeader', item.config, config);
877
+ this.sharedProps.setPropOverride('iscHeader', item.config, config);
878
+ this.sharedProps.setPropOverride('iscEnabled', item.config, config);
879
+ this.sharedProps.setPropOverride('notesEnabled', item.config, config);
880
+ this.sharedProps.setPropOverride('noLocationSelectedText', item.config, config);
881
+ this.sharedProps.setPropOverride('noLocationSelectedHelp', item.config, config);
882
+ this.sharedProps.setPropOverride('publicCheck', item.config, config);
883
+ this.sharedProps.setPropOverride('selectionCriteria', item.config, config);
884
+ this.sharedProps.setPropOverride('dataTypes', item.config, config);
885
+ this.sharedProps.setPropOverride('dataTypeLookup', item.config, config);
886
+ }
887
+ visitPublishDataLocationSelectorFieldModelDefinition(item) {
888
+ const currentData = this.getData();
889
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_39.PublishDataLocationSelectorModelName)) {
890
+ throw new Error(`Invalid ${sails_ng_common_39.PublishDataLocationSelectorModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
891
+ }
892
+ item.config = new sails_ng_common_40.PublishDataLocationSelectorFieldModelConfig();
893
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
894
+ this.setModelValue(item, currentData?.config);
895
+ }
896
+ visitPublishDataLocationSelectorFormComponentDefinition(item) {
897
+ this.populateFormComponent(item);
898
+ }
899
+ /* Default Layout */
900
+ visitDefaultFieldLayoutDefinition(item) {
901
+ // Get the current raw data for constructing the class instance.
902
+ const currentData = this.getData();
903
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_9.DefaultLayoutName)) {
904
+ throw new Error(`Invalid ${sails_ng_common_9.DefaultLayoutName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
905
+ }
906
+ // Create the class instance for the config
907
+ item.config = new sails_ng_common_10.DefaultFieldLayoutConfig();
908
+ this.sharedProps.sharedPopulateFieldLayoutConfig(item.config, currentData?.config);
909
+ }
910
+ visitInlineFieldLayoutDefinition(item) {
911
+ // Get the current raw data for constructing the class instance.
912
+ const currentData = this.getData();
913
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_13.InlineLayoutName)) {
914
+ throw new Error(`Invalid ${sails_ng_common_13.InlineLayoutName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
915
+ }
916
+ item.config = new sails_ng_common_14.InlineFieldLayoutConfig();
917
+ this.sharedProps.sharedPopulateFieldLayoutConfig(item.config, currentData?.config);
918
+ }
919
+ visitActionRowFieldLayoutDefinition(item) {
920
+ const currentData = this.getData();
921
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_11.ActionRowLayoutName)) {
922
+ throw new Error(`Invalid ${sails_ng_common_11.ActionRowLayoutName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
923
+ }
924
+ const config = currentData?.config;
925
+ item.config = new sails_ng_common_12.ActionRowFieldLayoutConfig();
926
+ this.sharedProps.sharedPopulateFieldLayoutConfig(item.config, config);
927
+ this.sharedProps.setPropOverride('containerCssClass', item.config, config);
928
+ this.sharedProps.setPropOverride('alignment', item.config, config);
929
+ this.sharedProps.setPropOverride('wrap', item.config, config);
930
+ this.sharedProps.setPropOverride('slotCssClass', item.config, config);
931
+ this.sharedProps.setPropOverride('compact', item.config, config);
932
+ }
933
+ /* Checkbox Input */
934
+ visitCheckboxInputFieldComponentDefinition(item) {
935
+ // Get the current raw data for constructing the class instance.
936
+ const currentData = this.getData();
937
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_46.CheckboxInputComponentName)) {
938
+ throw new Error(`Invalid ${sails_ng_common_46.CheckboxInputComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
939
+ }
940
+ const config = currentData?.config;
941
+ // Create the class instance for the config
942
+ item.config = new sails_ng_common_47.CheckboxInputFieldComponentConfig();
943
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
944
+ this.sharedProps.setPropOverride('placeholder', item.config, config);
945
+ this.sharedProps.setPropOverride('options', item.config, config);
946
+ this.sharedProps.setPropOverride('multipleValues', item.config, config);
947
+ this.sharedProps.setPropOverride('vocabRef', item.config, config);
948
+ this.sharedProps.setPropOverride('inlineVocab', item.config, config);
949
+ }
950
+ visitCheckboxInputFieldModelDefinition(item) {
951
+ // Get the current raw data for constructing the class instance.
952
+ const currentData = this.getData();
953
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_46.CheckboxInputModelName)) {
954
+ throw new Error(`Invalid ${sails_ng_common_46.CheckboxInputModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
955
+ }
956
+ // Create the class instance for the config
957
+ item.config = new sails_ng_common_47.CheckboxInputFieldModelConfig();
958
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
959
+ this.setModelValue(item, currentData?.config);
960
+ }
961
+ visitCheckboxInputFormComponentDefinition(item) {
962
+ this.populateFormComponent(item);
963
+ }
964
+ /* Checkbox Tree */
965
+ visitCheckboxTreeFieldComponentDefinition(item) {
966
+ // Get the current raw data for constructing the class instance.
967
+ const currentData = this.getData();
968
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_48.CheckboxTreeComponentName)) {
969
+ throw new Error(`Invalid ${sails_ng_common_48.CheckboxTreeComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
970
+ }
971
+ const config = currentData?.config;
972
+ // Create the class instance for the config
973
+ item.config = new sails_ng_common_49.CheckboxTreeFieldComponentConfig();
974
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
975
+ this.sharedProps.setPropOverride('vocabRef', item.config, config);
976
+ this.sharedProps.setPropOverride('inlineVocab', item.config, config);
977
+ this.sharedProps.setPropOverride('treeData', item.config, config);
978
+ this.sharedProps.setPropOverride('leafOnly', item.config, config);
979
+ this.sharedProps.setPropOverride('maxDepth', item.config, config);
980
+ this.sharedProps.setPropOverride('labelTemplate', item.config, config);
981
+ }
982
+ visitCheckboxTreeFieldModelDefinition(item) {
983
+ // Get the current raw data for constructing the class instance.
984
+ const currentData = this.getData();
985
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_48.CheckboxTreeModelName)) {
986
+ throw new Error(`Invalid ${sails_ng_common_48.CheckboxTreeModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
987
+ }
988
+ // Create the class instance for the config
989
+ item.config = new sails_ng_common_49.CheckboxTreeFieldModelConfig();
990
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
991
+ this.setModelValue(item, currentData?.config);
992
+ }
993
+ visitCheckboxTreeFormComponentDefinition(item) {
994
+ this.populateFormComponent(item);
995
+ }
996
+ /* Record Selector */
997
+ visitRecordSelectorFieldComponentDefinition(item) {
998
+ const currentData = this.getData();
999
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_50.RecordSelectorComponentName)) {
1000
+ throw new Error(`Invalid ${sails_ng_common_50.RecordSelectorComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1001
+ }
1002
+ const config = currentData?.config;
1003
+ item.config = new sails_ng_common_51.RecordSelectorFieldComponentConfig();
1004
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
1005
+ this.sharedProps.setPropOverride('columnTitle', item.config, config);
1006
+ this.sharedProps.setPropOverride('recordType', item.config, config);
1007
+ this.sharedProps.setPropOverride('workflowState', item.config, config);
1008
+ this.sharedProps.setPropOverride('filterMode', item.config, config);
1009
+ this.sharedProps.setPropOverride('filterFields', item.config, config);
1010
+ }
1011
+ visitRecordSelectorFieldModelDefinition(item) {
1012
+ const currentData = this.getData();
1013
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_50.RecordSelectorModelName)) {
1014
+ throw new Error(`Invalid ${sails_ng_common_50.RecordSelectorModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1015
+ }
1016
+ item.config = new sails_ng_common_51.RecordSelectorFieldModelConfig();
1017
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
1018
+ this.setModelValue(item, currentData?.config);
1019
+ }
1020
+ visitRecordSelectorFormComponentDefinition(item) {
1021
+ this.populateFormComponent(item);
1022
+ }
1023
+ /* Dropdown Input */
1024
+ visitDropdownInputFieldComponentDefinition(item) {
1025
+ // Get the current raw data for constructing the class instance.
1026
+ const currentData = this.getData();
1027
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_42.DropdownInputComponentName)) {
1028
+ throw new Error(`Invalid ${sails_ng_common_42.DropdownInputComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1029
+ }
1030
+ const config = currentData?.config;
1031
+ // Create the class instance for the config
1032
+ item.config = new sails_ng_common_43.DropdownInputFieldComponentConfig();
1033
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
1034
+ this.sharedProps.setPropOverride('placeholder', item.config, config);
1035
+ this.sharedProps.setPropOverride('options', item.config, config);
1036
+ this.sharedProps.setPropOverride('vocabRef', item.config, config);
1037
+ this.sharedProps.setPropOverride('inlineVocab', item.config, config);
1038
+ }
1039
+ visitDropdownInputFieldModelDefinition(item) {
1040
+ // Get the current raw data for constructing the class instance.
1041
+ const currentData = this.getData();
1042
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_42.DropdownInputModelName)) {
1043
+ throw new Error(`Invalid ${sails_ng_common_42.DropdownInputModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1044
+ }
1045
+ // Create the class instance for the config
1046
+ item.config = new sails_ng_common_43.DropdownInputFieldModelConfig();
1047
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
1048
+ this.setModelValue(item, currentData?.config);
1049
+ }
1050
+ visitDropdownInputFormComponentDefinition(item) {
1051
+ this.populateFormComponent(item);
1052
+ }
1053
+ /* Typeahead Input */
1054
+ visitTypeaheadInputFieldComponentDefinition(item) {
1055
+ const currentData = this.getData();
1056
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_44.TypeaheadInputComponentName)) {
1057
+ throw new Error(`Invalid ${sails_ng_common_44.TypeaheadInputComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1058
+ }
1059
+ const config = currentData?.config;
1060
+ item.config = new sails_ng_common_45.TypeaheadInputFieldComponentConfig();
1061
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
1062
+ this.sharedProps.setPropOverride('sourceType', item.config, config);
1063
+ this.sharedProps.setPropOverride('staticOptions', item.config, config);
1064
+ this.sharedProps.setPropOverride('vocabRef', item.config, config);
1065
+ this.sharedProps.setPropOverride('queryId', item.config, config);
1066
+ this.sharedProps.setPropOverride('provider', item.config, config);
1067
+ this.sharedProps.setPropOverride('resultArrayProperty', item.config, config);
1068
+ this.sharedProps.setPropOverride('labelField', item.config, config);
1069
+ this.sharedProps.setPropOverride('labelTemplate', item.config, config);
1070
+ this.sharedProps.setPropOverride('valueField', item.config, config);
1071
+ this.sharedProps.setPropOverride('minChars', item.config, config);
1072
+ this.sharedProps.setPropOverride('debounceMs', item.config, config);
1073
+ this.sharedProps.setPropOverride('maxResults', item.config, config);
1074
+ this.sharedProps.setPropOverride('requireSelection', item.config, config);
1075
+ this.sharedProps.setPropOverride('valueMode', item.config, config);
1076
+ this.sharedProps.setPropOverride('cacheResults', item.config, config);
1077
+ this.sharedProps.setPropOverride('multiSelect', item.config, config);
1078
+ this.sharedProps.setPropOverride('placeholder', item.config, config);
1079
+ this.sharedProps.setPropOverride('readOnlyAfterSelect', item.config, config);
1080
+ const sourceType = item.config.sourceType ?? 'static';
1081
+ if (sourceType === 'namedQuery') {
1082
+ if (!item.config.labelField) {
1083
+ item.config.labelField = 'label';
1084
+ }
1085
+ if (!item.config.valueField) {
1086
+ item.config.valueField = 'value';
1087
+ }
1088
+ if (config?.cacheResults === undefined) {
1089
+ item.config.cacheResults = false;
1090
+ }
1091
+ }
1092
+ else if (config?.cacheResults === undefined) {
1093
+ item.config.cacheResults = true;
1094
+ }
1095
+ const minChars = Number(item.config.minChars);
1096
+ const debounceMs = Number(item.config.debounceMs);
1097
+ const maxResults = Number(item.config.maxResults);
1098
+ if (!Number.isInteger(minChars) || minChars < 0) {
1099
+ item.config.minChars = 2;
1100
+ }
1101
+ if (!Number.isInteger(debounceMs) || debounceMs < 0) {
1102
+ item.config.debounceMs = 250;
1103
+ }
1104
+ if (!Number.isInteger(maxResults) || maxResults <= 0) {
1105
+ item.config.maxResults = 25;
1106
+ }
1107
+ item.config.requireSelection = Boolean(item.config.requireSelection);
1108
+ item.config.multiSelect = Boolean(item.config.multiSelect);
1109
+ }
1110
+ visitTypeaheadInputFieldModelDefinition(item) {
1111
+ const currentData = this.getData();
1112
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_44.TypeaheadInputModelName)) {
1113
+ throw new Error(`Invalid ${sails_ng_common_44.TypeaheadInputModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1114
+ }
1115
+ item.config = new sails_ng_common_45.TypeaheadInputFieldModelConfig();
1116
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
1117
+ this.setModelValue(item, currentData?.config);
1118
+ }
1119
+ visitTypeaheadInputFormComponentDefinition(item) {
1120
+ this.populateFormComponent(item);
1121
+ }
1122
+ /* Radio Input */
1123
+ visitRadioInputFieldComponentDefinition(item) {
1124
+ // Get the current raw data for constructing the class instance.
1125
+ const currentData = this.getData();
1126
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_52.RadioInputComponentName)) {
1127
+ throw new Error(`Invalid ${sails_ng_common_52.RadioInputComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1128
+ }
1129
+ const config = currentData?.config;
1130
+ // Create the class instance for the config
1131
+ item.config = new sails_ng_common_53.RadioInputFieldComponentConfig();
1132
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
1133
+ this.sharedProps.setPropOverride('options', item.config, config);
1134
+ this.sharedProps.setPropOverride('vocabRef', item.config, config);
1135
+ this.sharedProps.setPropOverride('inlineVocab', item.config, config);
1136
+ }
1137
+ visitRadioInputFieldModelDefinition(item) {
1138
+ // Get the current raw data for constructing the class instance.
1139
+ const currentData = this.getData();
1140
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_52.RadioInputModelName)) {
1141
+ throw new Error(`Invalid ${sails_ng_common_52.RadioInputModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1142
+ }
1143
+ // Create the class instance for the config
1144
+ item.config = new sails_ng_common_53.RadioInputFieldModelConfig();
1145
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
1146
+ this.setModelValue(item, currentData?.config);
1147
+ }
1148
+ visitRadioInputFormComponentDefinition(item) {
1149
+ this.populateFormComponent(item);
1150
+ }
1151
+ /* Date Input */
1152
+ visitDateInputFieldComponentDefinition(item) {
1153
+ // Get the current raw data for constructing the class instance.
1154
+ const currentData = this.getData();
1155
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_54.DateInputComponentName)) {
1156
+ throw new Error(`Invalid ${sails_ng_common_54.DateInputComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1157
+ }
1158
+ const config = currentData?.config;
1159
+ // Create the class instance for the config
1160
+ item.config = new sails_ng_common_55.DateInputFieldComponentConfig();
1161
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, config);
1162
+ this.sharedProps.setPropOverride('placeholder', item.config, config);
1163
+ this.sharedProps.setPropOverride('dateFormat', item.config, config);
1164
+ this.sharedProps.setPropOverride('showWeekNumbers', item.config, config);
1165
+ this.sharedProps.setPropOverride('containerClass', item.config, config);
1166
+ this.sharedProps.setPropOverride('enableTimePicker', item.config, config);
1167
+ this.sharedProps.setPropOverride('bsFullConfig', item.config, config);
1168
+ }
1169
+ visitDateInputFieldModelDefinition(item) {
1170
+ // Get the current raw data for constructing the class instance.
1171
+ const currentData = this.getData();
1172
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_54.DateInputModelName)) {
1173
+ throw new Error(`Invalid ${sails_ng_common_54.DateInputModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1174
+ }
1175
+ // Create the class instance for the config
1176
+ item.config = new sails_ng_common_55.DateInputFieldModelConfig();
1177
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
1178
+ this.setModelValue(item, currentData?.config);
1179
+ }
1180
+ visitDateInputFormComponentDefinition(item) {
1181
+ this.populateFormComponent(item);
1182
+ }
1183
+ /* Question Tree */
1184
+ visitQuestionTreeFieldComponentDefinition(item) {
1185
+ const currentData = this.getData();
1186
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_56.QuestionTreeComponentName)) {
1187
+ throw new Error(`Invalid ${sails_ng_common_56.QuestionTreeComponentName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1188
+ }
1189
+ const configFrame = currentData?.config ?? { availableOutcomes: [], questions: [], componentDefinitions: [] };
1190
+ item.config = new sails_ng_common_57.QuestionTreeFieldComponentConfig();
1191
+ this.sharedProps.sharedPopulateFieldComponentConfig(item.config, configFrame);
1192
+ this.sharedProps.setPropOverride('availableOutcomes', item.config, configFrame);
1193
+ this.sharedProps.setPropOverride('availableMeta', item.config, configFrame);
1194
+ this.sharedProps.setPropOverride('questions', item.config, configFrame);
1195
+ // Transform the question tree questions DSL into reusable components.
1196
+ configFrame.componentDefinitions = this.formOverride.applyQuestionTreeDsl(this.formPathHelper.modelName, this.formPathHelper.formPath, item);
1197
+ // Apply the reusable component overrides.
1198
+ configFrame.componentDefinitions = this.formOverride.applyQuestionTreeFrames(this.formOverride.applyOverridesReusable(configFrame?.componentDefinitions ?? [], this.reusableFormDefs));
1199
+ configFrame.componentDefinitions.forEach((componentDefinition, index) => {
1200
+ const formComponent = this.constructFormComponent(componentDefinition);
1201
+ this.formPathHelper.acceptFormPath(formComponent, this.formPathHelper.lineagePathsForQuestionTreeFieldComponentDefinition(formComponent, index));
1202
+ // Preserve the generated question controls until the parent QuestionTree view transform runs.
1203
+ const itemTransformed = this.formMode === 'view'
1204
+ ? formComponent
1205
+ : this.formOverride.applyOverrideTransform(formComponent, this.formMode);
1206
+ // Store the instance on the item
1207
+ item.config?.componentDefinitions.push(itemTransformed);
1208
+ });
1209
+ }
1210
+ visitQuestionTreeFieldModelDefinition(item) {
1211
+ const currentData = this.getData();
1212
+ if (!(0, sails_ng_common_70.isTypeFieldDefinitionName)(currentData, sails_ng_common_56.QuestionTreeModelName)) {
1213
+ throw new Error(`Invalid ${sails_ng_common_56.QuestionTreeModelName} at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1214
+ }
1215
+ item.config = new sails_ng_common_57.QuestionTreeFieldModelConfig();
1216
+ this.sharedProps.sharedPopulateFieldModelConfig(item.config, currentData?.config);
1217
+ this.setModelValue(item, currentData?.config);
1218
+ }
1219
+ visitQuestionTreeFormComponentDefinition(item) {
1220
+ this.populateFormComponent(item);
1221
+ }
1222
+ /* Shared */
1223
+ constructFormComponent(item) {
1224
+ return this.sharedProps.sharedConstructFormComponent(item);
1225
+ }
1226
+ populateFormComponent(item) {
1227
+ const currentData = this.getData();
1228
+ if (!(0, sails_ng_common_70.isTypeFormComponentDefinition)(currentData)) {
1229
+ throw new Error(`Invalid FormComponentDefinition at '${this.formPathHelper.formPath.formConfig}': ${JSON.stringify(currentData)}`);
1230
+ }
1231
+ // NOTE: Leaving expressions form-level processing placeholder, currently unused and unimplemented.
1232
+ // Set the expressions
1233
+ item.expressions = [];
1234
+ const expressionNames = new Set();
1235
+ for (const exprData of currentData.expressions ?? []) {
1236
+ if (expressionNames.has(exprData.name)) {
1237
+ throw new Error(`Duplicate name in expression: ${exprData.name}`);
1238
+ }
1239
+ expressionNames.add(exprData.name);
1240
+ const exprItem = new sails_ng_common_15.FormExpressionsConfig();
1241
+ exprItem.name = exprData.name;
1242
+ exprItem.description = exprData.description;
1243
+ exprItem.config = exprData.config;
1244
+ if (!exprItem.config) {
1245
+ throw new Error(`Missing config for expression: ${exprData.name}`);
1246
+ }
1247
+ item.expressions.push(exprItem);
1248
+ }
1249
+ const itemName = item?.name ?? '';
1250
+ const itemDefaultValue = currentData?.model?.config?.defaultValue;
1251
+ // Merge the default value if form default values are being used and item has a default value.
1252
+ // Repeatable elementTemplate and descendants cannot declare a defaultValue.
1253
+ const isElementTemplate = this.isMostRecentRepeatableElementTemplate();
1254
+ const isElementTemplateDescendant = this.isRepeatableElementTemplateDescendant();
1255
+ if (!isElementTemplate && !isElementTemplateDescendant) {
1256
+ this.mergeDefaultValues(itemName, itemDefaultValue);
1257
+ }
1258
+ // Continue visiting
1259
+ this.formPathHelper.acceptFormComponentDefinition(item);
1260
+ }
1261
+ applyConstructPhaseTransform(formComponent) {
1262
+ if (this.formMode === 'view') {
1263
+ const className = formComponent?.component?.class;
1264
+ const shouldDeferToClientViewTransform = className === sails_ng_common_56.QuestionTreeComponentName ||
1265
+ className === sails_ng_common_4.RepeatableComponentName ||
1266
+ (className === sails_ng_common_3.GroupFieldComponentName && formComponent?.layout?.class !== sails_ng_common_11.ActionRowLayoutName);
1267
+ if (shouldDeferToClientViewTransform) {
1268
+ return formComponent;
1269
+ }
1270
+ }
1271
+ return this.formOverride.applyOverrideTransform(formComponent, this.formMode, {
1272
+ phase: 'construct',
1273
+ reusableFormDefs: this.reusableFormDefs,
1274
+ });
1275
+ }
1276
+ ensureRichTextViewOverride(item) {
1277
+ const allowModes = item?.constraints?.allowModes;
1278
+ const hasExplicitViewMode = Array.isArray(allowModes) && allowModes.includes('view');
1279
+ const existingViewComponent = item?.overrides?.formModeClasses?.view?.component;
1280
+ if (!hasExplicitViewMode || existingViewComponent !== undefined) {
1281
+ return;
1282
+ }
1283
+ item.overrides = {
1284
+ ...(item.overrides ?? {}),
1285
+ formModeClasses: {
1286
+ ...(item.overrides?.formModeClasses ?? {}),
1287
+ view: {
1288
+ ...(item.overrides?.formModeClasses?.view ?? {}),
1289
+ component: sails_ng_common_16.ContentComponentName,
1290
+ },
1291
+ },
1292
+ };
1293
+ }
1294
+ /**
1295
+ * Set the model value from the record values.
1296
+ * @param item The field model component instance.
1297
+ * @param config The field model form config.
1298
+ * @protected
1299
+ */
1300
+ setModelValue(item, config) {
1301
+ // Use defaultValue in form config, not value.
1302
+ if (item?.config?.value !== undefined || config?.value !== undefined) {
1303
+ throw new Error(`${this.logName}: Use 'model.config.defaultValue' in form config ` +
1304
+ `instead of 'model.config.value' - item: ${JSON.stringify(item)} config: ${JSON.stringify(config)}`);
1305
+ }
1306
+ if (item.config === null || item.config === undefined) {
1307
+ throw new Error(`${this.logName}: Missing config for item: ${JSON.stringify(item)}`);
1308
+ }
1309
+ const isElementTemplate = this.isMostRecentRepeatableElementTemplate();
1310
+ const isElementTemplateDescendant = this.isRepeatableElementTemplateDescendant();
1311
+ // Only elementTemplates can use newEntryValue.
1312
+ if (!isElementTemplate && (item.config.newEntryValue !== undefined || config?.newEntryValue !== undefined)) {
1313
+ throw new Error(`${this.logName}: Only repeatable elementTemplates can define 'model.config.newEntryValue', ` +
1314
+ `use 'model.config.defaultValue' in other places ` +
1315
+ `- item: ${JSON.stringify(item)} config: ${JSON.stringify(config)}`);
1316
+ }
1317
+ // The elementTemplate definitions cannot have a defaultValue.
1318
+ if (isElementTemplate && (item.config.defaultValue !== undefined || config?.defaultValue !== undefined)) {
1319
+ throw new Error(`${this.logName}: Set the repeatable elementTemplate new item default ` +
1320
+ `using 'elementTemplate.model.config.newEntryValue', not 'elementTemplate.model.config.defaultValue', ` +
1321
+ `set the repeatable default in 'repeatable.model.config.defaultValue' ` +
1322
+ `- item: ${JSON.stringify(item)} config: ${JSON.stringify(config)}`);
1323
+ }
1324
+ // Components in an elementTemplate cannot set default values.
1325
+ if (isElementTemplateDescendant && (item.config.defaultValue !== undefined || config?.defaultValue !== undefined)) {
1326
+ throw new Error(`${this.logName}: Set the repeatable elementTemplate descendant component new item default ` +
1327
+ `using 'elementTemplate.model.config.newEntryValue', ` +
1328
+ `set the repeatable default in 'repeatable.model.config.defaultValue', ` +
1329
+ `not the descendant components ` +
1330
+ `- item: ${JSON.stringify(item)} config: ${JSON.stringify(config)}`);
1331
+ }
1332
+ // Set the model.config.value or new item value
1333
+ if (isElementTemplate) {
1334
+ item.config.newEntryValue = config?.newEntryValue;
1335
+ }
1336
+ else if (!isElementTemplateDescendant) {
1337
+ // NOTE: It is useless to set the model.config.value on an elementTemplate or a descendant component.
1338
+ // The top-most repeatable must have either:
1339
+ // - no value, in which case the elementTemplate.model.config.newEntryValue will be used if one item is added by default; or
1340
+ // - a value, which will be used to populate the entire repeatable and so any value on nested components will be ignored.
1341
+ item.config.value = this.currentModelValue();
1342
+ // Remove the defaultValue property.
1343
+ if (item?.config && 'defaultValue' in item.config) {
1344
+ delete item.config.defaultValue;
1345
+ }
1346
+ }
1347
+ }
1348
+ /**
1349
+ * Get the value for the current data model path.
1350
+ * @param itemDefaultValue The default value if there is no existing value.
1351
+ * @protected
1352
+ */
1353
+ currentModelValue(itemDefaultValue) {
1354
+ // Use the collected default value if form config default values are being used, otherwise, use the record values.
1355
+ const useFormConfigDefaultValues = this.recordValues === null;
1356
+ const defaultValue = this.currentDefaultValue(itemDefaultValue);
1357
+ const recordValue = this.currentRecordValue();
1358
+ // For debugging:
1359
+ // this.logger.info(`currentModelValue itemDefaultValue ${JSON.stringify(itemDefaultValue)} defaultValue ${JSON.stringify(defaultValue)} recordValue ${JSON.stringify(recordValue)} formPath ${JSON.stringify(this.formPathHelper.formPath.dataModel)}`);
1360
+ return useFormConfigDefaultValues ? defaultValue : recordValue;
1361
+ }
1362
+ /**
1363
+ * Get the default value for the current data model path.
1364
+ * @param itemDefaultValue The default value if no default value was provided in the form config.
1365
+ * @protected
1366
+ */
1367
+ currentDefaultValue(itemDefaultValue) {
1368
+ const dataModelPath = this.formPathHelper.formPath.dataModel;
1369
+ return (0, lodash_1.cloneDeep)((0, lodash_1.get)(this.extractedDefaultValues, dataModelPath, itemDefaultValue));
1370
+ }
1371
+ /**
1372
+ * Get the record / existing value for the current data model path.
1373
+ * @protected
1374
+ */
1375
+ currentRecordValue() {
1376
+ const dataModelPath = this.formPathHelper.formPath.dataModel;
1377
+ return (0, lodash_1.cloneDeep)((0, lodash_1.get)(this.recordValues, dataModelPath, undefined));
1378
+ }
1379
+ /**
1380
+ * Check whether the current form config path matches the
1381
+ * most recent repeatable element template path.
1382
+ * @protected
1383
+ */
1384
+ isMostRecentRepeatableElementTemplate() {
1385
+ const mostRecent = this.mostRecentRepeatableElementTemplatePath ?? [];
1386
+ const formConfig = this.formPathHelper.formPath.formConfig;
1387
+ if (!mostRecent || mostRecent.length === 0 || !formConfig || formConfig.length === 0) {
1388
+ return false;
1389
+ }
1390
+ // Either array can have 'component', 'model', 'layout' at the end and
1391
+ // still match if the other array is one item shorter.
1392
+ const allowedExtras = ['component', 'model', 'layout'];
1393
+ if (mostRecent.length === formConfig.length) {
1394
+ return mostRecent.every((value, index) => value === formConfig[index]);
1395
+ }
1396
+ else if (mostRecent.length === formConfig.length - 1) {
1397
+ return (allowedExtras.includes(formConfig[formConfig.length - 1]) &&
1398
+ mostRecent.every((value, index) => value === formConfig[index]));
1399
+ }
1400
+ else if (mostRecent.length - 1 === formConfig.length) {
1401
+ return (allowedExtras.includes(mostRecent[mostRecent.length - 1]) &&
1402
+ formConfig.every((value, index) => value === mostRecent[index]));
1403
+ }
1404
+ return false;
1405
+ }
1406
+ /**
1407
+ * Check whether the current form config path is a descendant (and not a match)
1408
+ * of the most recent repeatable element template path.
1409
+ * @protected
1410
+ */
1411
+ isRepeatableElementTemplateDescendant() {
1412
+ const mostRecentPath = this.mostRecentRepeatableElementTemplatePath ?? [];
1413
+ const formConfigPath = this.formPathHelper.formPath.formConfig;
1414
+ if (!mostRecentPath || mostRecentPath.length === 0 || !formConfigPath || formConfigPath.length === 0) {
1415
+ return false;
1416
+ }
1417
+ // The formConfig path might have ["[component|model|layout]", "config"] at the end (2 additional items),
1418
+ // but only the path up to ["config", "elementTemplate"] is relevant for this check.
1419
+ if (formConfigPath.length + 2 <= mostRecentPath.length) {
1420
+ return false;
1421
+ }
1422
+ return mostRecentPath.every((value, index) => value === formConfigPath[index]);
1423
+ }
1424
+ /**
1425
+ * Merge the items' default value into the intermediate values.
1426
+ * @param itemName The item name.
1427
+ * @param itemDefaultValue The item's default value.
1428
+ * @protected
1429
+ */
1430
+ mergeDefaultValues(itemName, itemDefaultValue) {
1431
+ const isElementTemplate = this.isMostRecentRepeatableElementTemplate();
1432
+ const isElementTemplateDescendant = this.isRepeatableElementTemplateDescendant();
1433
+ if (isElementTemplate || isElementTemplateDescendant) {
1434
+ throw new Error(`${this.logName}: Cannot merge default values for a repeatable elementTemplate or descendants ` +
1435
+ `- itemName: ${JSON.stringify(itemName)} itemDefaultValue: ${JSON.stringify(itemDefaultValue)}`);
1436
+ }
1437
+ if (itemName && itemDefaultValue !== undefined) {
1438
+ // Set the default value at the current data model path.
1439
+ // This makes it easier to merge defaults.
1440
+ const dataModelPath = this.formPathHelper.formPath.dataModel;
1441
+ const dataModelWithDefaultValue = (0, lodash_1.set)({}, dataModelPath, itemDefaultValue);
1442
+ // Merging is only needed if there is a default value.
1443
+ if (dataModelWithDefaultValue !== undefined) {
1444
+ // Use lodash mergeWith because it will recurse into nested objects and arrays.
1445
+ // Object.assign and the spread operator do not recurse.
1446
+ // The lodash mergeWith also allows specifying how to handle arrays, which we need to handle in a special way.
1447
+ (0, lodash_1.mergeWith)(this.extractedDefaultValues, dataModelWithDefaultValue, (objValue, srcValue) => {
1448
+ // merge approach for arrays is to choose the source array,
1449
+ // or the one that is an array if the other isn't
1450
+ if (Array.isArray(objValue) && Array.isArray(srcValue)) {
1451
+ return srcValue;
1452
+ }
1453
+ else if (Array.isArray(objValue) && !Array.isArray(srcValue)) {
1454
+ return objValue;
1455
+ }
1456
+ else if (!Array.isArray(objValue) && Array.isArray(srcValue)) {
1457
+ return srcValue;
1458
+ }
1459
+ // undefined = use the default merge approach
1460
+ return undefined;
1461
+ });
1462
+ }
1463
+ }
1464
+ }
1465
+ sanitizeMapEnabledModes(rawModes, source) {
1466
+ const fallback = ['point', 'polygon', 'linestring', 'rectangle', 'select'];
1467
+ if (!Array.isArray(rawModes)) {
1468
+ return fallback;
1469
+ }
1470
+ const validModes = [];
1471
+ const invalidModes = [];
1472
+ for (const mode of rawModes) {
1473
+ if (mode === 'point' ||
1474
+ mode === 'polygon' ||
1475
+ mode === 'linestring' ||
1476
+ mode === 'rectangle' ||
1477
+ mode === 'select') {
1478
+ validModes.push(mode);
1479
+ }
1480
+ else {
1481
+ invalidModes.push(mode);
1482
+ }
1483
+ }
1484
+ if (invalidModes.length > 0) {
1485
+ this.logger.warn(`${this.logName}: Map ${source} dropped unsupported enabledModes values at ${JSON.stringify(this.formPathHelper.formPath.formConfig)}: ${JSON.stringify(invalidModes)}.`);
1486
+ }
1487
+ return validModes;
1488
+ }
1489
+ getData() {
1490
+ const formConfigData = this.data;
1491
+ const formConfigPath = this.formPathHelper.formPath.formConfig;
1492
+ if (!formConfigPath || formConfigPath.length < 1) {
1493
+ return formConfigData;
1494
+ }
1495
+ return (0, lodash_1.get)(formConfigData, formConfigPath.map(i => i.toString()));
1496
+ }
1497
+ }
1498
+ exports.ConstructFormConfigVisitor = ConstructFormConfigVisitor;
1499
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LnZpc2l0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzaXRvci9jb25zdHJ1Y3QudmlzaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0c7QUFDcEcsc0VBQStFO0FBRS9FLHNFQUFxRTtBQUVyRSxzRUFRMEM7QUFDMUMsc0VBVzBDO0FBQzFDLHNFQUkwQztBQUMxQyxzRUFBb0c7QUFDcEcsc0VBUTBDO0FBQzFDLHNFQUFnSDtBQUNoSCxzRUFJMEM7QUFDMUMsdUVBQTRFO0FBQzVFLHVFQUkwQztBQUMxQyx1RUFBOEU7QUFDOUUsdUVBSTBDO0FBQzFDLHVFQUEyRTtBQUMzRSx1RUFBeUU7QUFLekUsdUVBSzBDO0FBQzFDLHVFQVEwQztBQUMxQyx1RUFBaUc7QUFDakcsdUVBZ0IwQztBQUMxQyx1RUFNMEM7QUFDMUMsdUVBUzBDO0FBQzFDLHVFQUkwQztBQUMxQyx1RUFRMEM7QUFDMUMsdUVBQTBHO0FBQzFHLHVFQVEwQztBQUMxQyx1RUFBc0g7QUFDdEgsdUVBUzBDO0FBQzFDLHVFQUFnRztBQUNoRyx1RUFRMEM7QUFDMUMsdUVBQThHO0FBQzlHLHVFQVEwQztBQUMxQyx1RUFBd0c7QUFDeEcsdUVBSzBDO0FBQzFDLHVFQUErRjtBQUMvRix1RUFRMEM7QUFDMUMsdUVBQWtIO0FBQ2xILHVFQUswQztBQUMxQyx1RUFBa0c7QUFDbEcsdUVBUTBDO0FBQzFDLHVFQUcwQztBQUMxQyx1RUFBK0U7QUFDL0UsdUVBUTBDO0FBQzFDLHVFQUFvSDtBQUNwSCx1RUFRMEM7QUFDMUMsdUVBQXNIO0FBQ3RILHVFQVEwQztBQUMxQyx1RUFBb0g7QUFDcEgsdUVBUTBDO0FBQzFDLHVFQUFrSDtBQUNsSCx1RUFRMEM7QUFDMUMsdUVBQXNIO0FBQ3RILHVFQVEwQztBQUMxQyx1RUFBOEc7QUFDOUcsdUVBUTBDO0FBQzFDLHVFQUE0RztBQUM1Ryx1RUFRMEM7QUFDMUMsdUVBQWtIO0FBQ2xILHVF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