lesli 5.0.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 (398) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +3 -0
  3. data/app/assets/config/lesli_manifest.js +53 -0
  4. data/app/assets/fonts/lesli/Domine/Domine-Bold.ttf +0 -0
  5. data/app/assets/fonts/lesli/Domine/Domine-Regular.ttf +0 -0
  6. data/app/assets/fonts/lesli/Domine/OFL.txt +95 -0
  7. data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
  8. data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
  9. data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
  10. data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
  11. data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +1 -0
  12. data/app/assets/fonts/lesli/Remix/remixicon.svg +7633 -0
  13. data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +11 -0
  14. data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
  15. data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
  16. data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
  17. data/app/assets/fonts/lesli/Roboto/LICENSE.txt +202 -0
  18. data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
  19. data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
  20. data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
  21. data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
  22. data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
  23. data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
  24. data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
  25. data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
  26. data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
  27. data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
  28. data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
  29. data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
  30. data/app/assets/icons/lesli/cloud-admin.svg +1 -0
  31. data/app/assets/icons/lesli/cloud-audit.svg +1 -0
  32. data/app/assets/icons/lesli/cloud-babel.svg +1 -0
  33. data/app/assets/icons/lesli/cloud-bell.svg +1 -0
  34. data/app/assets/icons/lesli/cloud-books.svg +1 -0
  35. data/app/assets/icons/lesli/cloud-development.svg +1 -0
  36. data/app/assets/icons/lesli/cloud-dispatcher.svg +1 -0
  37. data/app/assets/icons/lesli/cloud-driver.svg +1 -0
  38. data/app/assets/icons/lesli/cloud-focus.svg +1 -0
  39. data/app/assets/icons/lesli/cloud-help.svg +1 -0
  40. data/app/assets/icons/lesli/cloud-kb.svg +1 -0
  41. data/app/assets/icons/lesli/cloud-leaf.svg +1 -0
  42. data/app/assets/icons/lesli/cloud-lesli.svg +1 -0
  43. data/app/assets/icons/lesli/cloud-mailer.svg +1 -0
  44. data/app/assets/icons/lesli/cloud-one.svg +1 -0
  45. data/app/assets/icons/lesli/cloud-profile.svg +1 -0
  46. data/app/assets/icons/lesli/cloud-proposal.svg +1 -0
  47. data/app/assets/icons/lesli/cloud-scraper.svg +1 -0
  48. data/app/assets/icons/lesli/cloud-shared.svg +1 -0
  49. data/app/assets/icons/lesli/cloud-storage.svg +1 -0
  50. data/app/assets/icons/lesli/cloud-talk.svg +1 -0
  51. data/app/assets/icons/lesli/cloud-team.svg +1 -0
  52. data/app/assets/icons/lesli/cloud-time.svg +1 -0
  53. data/app/assets/icons/lesli/cloud-vault.svg +1 -0
  54. data/app/assets/icons/lesli/cloud-word.svg +1 -0
  55. data/app/assets/icons/lesli/icon-module.svg +1 -0
  56. data/app/assets/icons/lesli/logo-android.svg +1 -0
  57. data/app/assets/icons/lesli/logo-bulma.svg +1 -0
  58. data/app/assets/icons/lesli/logo-ios.svg +1 -0
  59. data/app/assets/icons/lesli/logo-linux.svg +1 -0
  60. data/app/assets/icons/lesli/logo-mac.svg +1 -0
  61. data/app/assets/icons/lesli/logo-module.svg +1 -0
  62. data/app/assets/icons/lesli/logo-postgresql.svg +1 -0
  63. data/app/assets/icons/lesli/logo-rails.svg +1 -0
  64. data/app/assets/icons/lesli/logo-ruby.svg +1 -0
  65. data/app/assets/icons/lesli/logo-sass.svg +1 -0
  66. data/app/assets/icons/lesli/logo-vue.svg +1 -0
  67. data/app/assets/icons/lesli/logo-web.svg +1 -0
  68. data/app/assets/icons/lesli/logo-windows.svg +1 -0
  69. data/app/assets/icons/readme.md +10 -0
  70. data/app/assets/images/lesli/brand/app-auth.svg +9 -0
  71. data/app/assets/images/lesli/brand/app-icon.svg +42 -0
  72. data/app/assets/images/lesli/brand/app-logo.svg +4 -0
  73. data/app/assets/images/lesli/brand/favicon.png +0 -0
  74. data/app/assets/images/lesli/brand/favicon.svg +61 -0
  75. data/app/assets/images/lesli/brand/login-background.jpg +0 -0
  76. data/app/assets/javascripts/lesli/users/sessions.js +786 -0
  77. data/app/assets/stylesheets/lesli/users/confirmations.scss +34 -0
  78. data/app/assets/stylesheets/lesli/users/devise.scss +32 -0
  79. data/app/assets/stylesheets/lesli/users/oauth.scss +34 -0
  80. data/app/assets/stylesheets/lesli/users/passwords.scss +34 -0
  81. data/app/assets/stylesheets/lesli/users/registrations.scss +34 -0
  82. data/app/assets/stylesheets/lesli/users/sessions.scss +38 -0
  83. data/app/controllers/lesli/application_controller.rb +108 -0
  84. data/app/controllers/lesli/application_devise_controller.rb +54 -0
  85. data/app/controllers/lesli/application_lesli_controller.rb +61 -0
  86. data/app/controllers/lesli/interfaces/application/authorization.rb +107 -0
  87. data/app/controllers/lesli/interfaces/application/customization.rb +46 -0
  88. data/app/controllers/lesli/interfaces/application/logger.rb +133 -0
  89. data/app/controllers/lesli/interfaces/application/requester.rb +84 -0
  90. data/app/controllers/lesli/interfaces/application/responder.rb +132 -0
  91. data/app/controllers/lesli/profiles_controller.rb +60 -0
  92. data/app/controllers/users/confirmations_controller.rb +30 -0
  93. data/app/controllers/users/omniauth_callbacks_controller.rb +30 -0
  94. data/app/controllers/users/passwords_controller.rb +34 -0
  95. data/app/controllers/users/registrations_controller.rb +62 -0
  96. data/app/controllers/users/sessions_controller.rb +142 -0
  97. data/app/controllers/users/unlocks_controller.rb +30 -0
  98. data/app/helpers/lesli/assets_helper.rb +92 -0
  99. data/app/helpers/lesli/customization_helper.rb +84 -0
  100. data/app/helpers/lesli/general_helper.rb +83 -0
  101. data/app/helpers/lesli/navigation_helper.rb +349 -0
  102. data/app/helpers/lesli/profiles_helper.rb +4 -0
  103. data/app/helpers/lesli/system_helper.rb +57 -0
  104. data/app/lib/date2.rb +192 -0
  105. data/app/lib/lesli/system.rb +80 -0
  106. data/app/models/concerns/account_engines.rb +249 -0
  107. data/app/models/concerns/user_activities.rb +163 -0
  108. data/app/models/concerns/user_extensions.rb +129 -0
  109. data/app/models/concerns/user_guard.rb +278 -0
  110. data/app/models/concerns/user_polyfill.rb +134 -0
  111. data/app/models/lesli/account/log.rb +57 -0
  112. data/app/models/lesli/account.rb +76 -0
  113. data/app/models/lesli/application_lesli_record.rb +37 -0
  114. data/app/models/lesli/profile.rb +4 -0
  115. data/app/models/lesli/system_controller/action.rb +37 -0
  116. data/app/models/lesli/system_controller.rb +37 -0
  117. data/app/models/lesli/user/agent.rb +37 -0
  118. data/app/models/lesli/user/log.rb +38 -0
  119. data/app/models/lesli/user/request.rb +37 -0
  120. data/app/models/lesli/user/session.rb +105 -0
  121. data/app/models/lesli/user.rb +162 -0
  122. data/app/services/lesli/application_lesli_service.rb +168 -0
  123. data/app/services/lesli/user/session_service.rb +62 -0
  124. data/app/validators/lesli/application_lesli_validator.rb +67 -0
  125. data/app/validators/lesli/users_validator.rb +217 -0
  126. data/app/views/devise/confirmations/new.html.erb +16 -0
  127. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  128. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  129. data/app/views/devise/mailer/password_change.html.erb +3 -0
  130. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  131. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  132. data/app/views/devise/passwords/edit.html.erb +25 -0
  133. data/app/views/devise/passwords/new.html.erb +16 -0
  134. data/app/views/devise/registrations/edit.html.erb +43 -0
  135. data/app/views/devise/registrations/new.html.erb +29 -0
  136. data/app/views/devise/sessions/new.html.erb +178 -0
  137. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  138. data/app/views/devise/shared/_links.html.erb +25 -0
  139. data/app/views/devise/unlocks/new.html.erb +16 -0
  140. data/app/views/lesli/devise/sessions/_form.html.erb +17 -0
  141. data/app/views/lesli/devise/sessions/_session.html.erb +2 -0
  142. data/app/views/lesli/devise/sessions/edit.html.erb +10 -0
  143. data/app/views/lesli/devise/sessions/index.html.erb +14 -0
  144. data/app/views/lesli/devise/sessions/new.html.erb +9 -0
  145. data/app/views/lesli/devise/sessions/show.html.erb +10 -0
  146. data/app/views/lesli/layouts/application-devise.html.erb +58 -0
  147. data/app/views/lesli/layouts/application-lesli.html.erb +57 -0
  148. data/app/views/lesli/layouts/application-public.html.erb +59 -0
  149. data/app/views/lesli/partials/_application-analytics.html.erb +71 -0
  150. data/app/views/lesli/partials/_application-data.html.erb +102 -0
  151. data/app/views/lesli/partials/_application-head.html.erb +56 -0
  152. data/app/views/lesli/partials/_application-lesli-chatbox.html.erb +35 -0
  153. data/app/views/lesli/partials/_application-lesli-content.html.erb +35 -0
  154. data/app/views/lesli/partials/_application-lesli-engines.html.erb +83 -0
  155. data/app/views/lesli/partials/_application-lesli-footer.html.erb +82 -0
  156. data/app/views/lesli/partials/_application-lesli-header.html.erb +79 -0
  157. data/app/views/lesli/partials/_application-lesli-icons.html.erb +1 -0
  158. data/app/views/lesli/partials/_application-lesli-javascript.html.erb +57 -0
  159. data/app/views/lesli/partials/_application-lesli-navigation.html.erb +52 -0
  160. data/app/views/lesli/partials/_application-lesli-notices.html.erb +43 -0
  161. data/app/views/lesli/partials/_application-lesli-panels.html.erb +58 -0
  162. data/app/views/lesli/partials/_application-lesli-scss.html.erb +60 -0
  163. data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +50 -0
  164. data/app/views/lesli/partials/_application-public-footer.html.erb +51 -0
  165. data/app/views/lesli/partials/_application-public-javascript.html.erb +51 -0
  166. data/app/views/lesli/partials/_application-public-scss.html.erb +35 -0
  167. data/app/views/lesli/profiles/_form.html.erb +17 -0
  168. data/app/views/lesli/profiles/_profile.html.erb +2 -0
  169. data/app/views/lesli/profiles/edit.html.erb +10 -0
  170. data/app/views/lesli/profiles/index.html.erb +14 -0
  171. data/app/views/lesli/profiles/new.html.erb +9 -0
  172. data/app/views/lesli/profiles/show.html.erb +10 -0
  173. data/app/views/lesli/wrappers/_application-auth.html.erb +65 -0
  174. data/config/initializers/devise.rb +334 -0
  175. data/config/initializers/lesli_defaults.rb +100 -0
  176. data/config/locales/devise.en.yml +65 -0
  177. data/config/routes.rb +52 -0
  178. data/db/migrate/v1.0/0010000110_create_lesli_accounts.rb +70 -0
  179. data/db/migrate/v1.0/0010000210_create_lesli_roles.rb +59 -0
  180. data/db/migrate/v1.0/0010000310_create_lesli_users.rb +97 -0
  181. data/db/migrate/v1.0/0010000610_create_lesli_system_controllers.rb +44 -0
  182. data/db/migrate/v1.0/0010000710_create_lesli_system_controller_actions.rb +43 -0
  183. data/db/migrate/v1.0/0010001210_create_lesli_account_activities.rb +50 -0
  184. data/db/migrate/v1.0/0010001310_create_lesli_account_logs.rb +45 -0
  185. data/db/migrate/v1.0/0010003210_create_lesli_user_sessions.rb +51 -0
  186. data/db/migrate/v1.0/0010003310_create_lesli_user_requests.rb +48 -0
  187. data/db/migrate/v1.0/0010003610_create_lesli_user_logs.rb +45 -0
  188. data/db/migrate/v1.0/0010004010_create_lesli_user_agents.rb +46 -0
  189. data/db/seed/development/accounts.rb +47 -0
  190. data/db/seed/development/users.rb +53 -0
  191. data/db/seed/development.rb +35 -0
  192. data/db/seed/production.rb +35 -0
  193. data/db/seed/test.rb +35 -0
  194. data/db/seed/tools.rb +60 -0
  195. data/db/seeds.rb +64 -0
  196. data/db/structure/00000000_locations.json +32 -0
  197. data/db/structure/00000000_people.json +34 -0
  198. data/db/structure/00000003_actions.json +14 -0
  199. data/db/structure/00000004_activities.json +20 -0
  200. data/db/structure/00000005_discussions.json +8 -0
  201. data/db/structure/00000006_files.json +32 -0
  202. data/db/structure/00000007_subscribers.json +11 -0
  203. data/db/structure/00000008_custom_fields.json +8 -0
  204. data/db/structure/00000201_workflows.json +17 -0
  205. data/db/structure/00000202_workflow_statuses.json +24 -0
  206. data/db/structure/00000203_workflow_associations.json +14 -0
  207. data/db/structure/00000204_workflow_actions.json +39 -0
  208. data/db/structure/00000205_workflow_checks.json +27 -0
  209. data/db/structure/00000301_custom_fields.json +38 -0
  210. data/db/structure/00000401_custom_validations.json +14 -0
  211. data/db/structure/00000402_custom_validation_rules.json +23 -0
  212. data/db/structure/00000403_custom_validation_fields.json +14 -0
  213. data/db/structure/00000501_dashboards.json +14 -0
  214. data/db/structure/00000502_dashboard_components.json +23 -0
  215. data/db/tables/0010001010_create_account_settings.rb +42 -0
  216. data/db/tables/0010001110_create_account_locations.rb +64 -0
  217. data/db/tables/0010001410_create_account_files.rb +52 -0
  218. data/db/tables/0010001510_create_account_currencies.rb +48 -0
  219. data/db/tables/0010001610_create_account_currency_exchange_rates.rb +54 -0
  220. data/db/tables/0010003010_create_user_details.rb +49 -0
  221. data/db/tables/0010003110_create_user_settings.rb +44 -0
  222. data/db/tables/0010003410_create_user_activities.rb +51 -0
  223. data/db/tables/0010003510_create_user_roles.rb +43 -0
  224. data/db/tables/0010003710_create_user_codes.rb +43 -0
  225. data/db/tables/0010003810_create_user_shortcuts.rb +46 -0
  226. data/db/tables/0010004110_create_user_tokens.rb +45 -0
  227. data/db/tables/0010005010_create_descriptors.rb +45 -0
  228. data/db/tables/0010005110_create_descriptor_privileges.rb +44 -0
  229. data/db/tables/0010005210_create_descriptor_activities.rb +51 -0
  230. data/db/tables/0010005510_create_role_descriptors.rb +44 -0
  231. data/db/tables/0010005610_create_role_activities.rb +50 -0
  232. data/db/tables/0010005710_create_role_privileges.rb +45 -0
  233. data/db/tables/0010009010_create_feedbacks.rb +56 -0
  234. data/lib/assets/javascripts/lesli/i18n.js +1095 -0
  235. data/lib/assets/javascripts/lesli/translations.js +15 -0
  236. data/lib/lesli/configuration.rb +45 -0
  237. data/lib/lesli/engine.rb +62 -0
  238. data/lib/lesli/version.rb +34 -0
  239. data/lib/lesli.rb +6 -0
  240. data/lib/sass/lesli/bulma/loader.scss +84 -0
  241. data/lib/sass/lesli/cloud-objects/discussion.scss +77 -0
  242. data/lib/sass/lesli/cloud-objects/file.scss +138 -0
  243. data/lib/sass/lesli/components/editor-richtext.scss +78 -0
  244. data/lib/sass/lesli/components/keypad.scss +109 -0
  245. data/lib/sass/lesli/devise/confirmations.scss.erb +75 -0
  246. data/lib/sass/lesli/devise/passwords.scss.erb +86 -0
  247. data/lib/sass/lesli/devise/registrations.scss.erb +50 -0
  248. data/lib/sass/lesli/devise/sessions.scss +36 -0
  249. data/lib/sass/lesli/elements/autocomplete.scss +72 -0
  250. data/lib/sass/lesli/elements/avatar.scss +48 -0
  251. data/lib/sass/lesli/elements/calendar.scss +47 -0
  252. data/lib/sass/lesli/elements/card.scss +37 -0
  253. data/lib/sass/lesli/elements/content.scss +37 -0
  254. data/lib/sass/lesli/elements/empty.scss +43 -0
  255. data/lib/sass/lesli/elements/file-uploader.scss +74 -0
  256. data/lib/sass/lesli/elements/form.scss +43 -0
  257. data/lib/sass/lesli/elements/gallery.scss +98 -0
  258. data/lib/sass/lesli/elements/header.scss +44 -0
  259. data/lib/sass/lesli/elements/input-tag.scss +73 -0
  260. data/lib/sass/lesli/elements/loading.scss +63 -0
  261. data/lib/sass/lesli/elements/map.scss +107 -0
  262. data/lib/sass/lesli/elements/msg.scss +77 -0
  263. data/lib/sass/lesli/elements/navbar.scss +115 -0
  264. data/lib/sass/lesli/elements/panel.scss +65 -0
  265. data/lib/sass/lesli/elements/tab.scss +48 -0
  266. data/lib/sass/lesli/elements/table.scss +118 -0
  267. data/lib/sass/lesli/elements/toggle.scss +102 -0
  268. data/lib/sass/lesli/elements/toolbar.scss +66 -0
  269. data/lib/sass/lesli/fonts/families.scss +47 -0
  270. data/lib/sass/lesli/fonts/mdicons.scss +84 -0
  271. data/lib/sass/lesli/fonts/remixicons.scss +2602 -0
  272. data/lib/sass/lesli/helpers/display.scss +44 -0
  273. data/lib/sass/lesli/helpers/tooltip.scss +91 -0
  274. data/lib/sass/lesli/layouts/application-announcements.scss +40 -0
  275. data/lib/sass/lesli/layouts/application-component.scss +50 -0
  276. data/lib/sass/lesli/layouts/application-engines.scss +155 -0
  277. data/lib/sass/lesli/layouts/application-footer.scss +102 -0
  278. data/lib/sass/lesli/layouts/application-header.scss +152 -0
  279. data/lib/sass/lesli/layouts/application-navbar.scss +61 -0
  280. data/lib/sass/lesli/layouts/application-search.scss +71 -0
  281. data/lib/sass/lesli/layouts/application-sidebar.scss +219 -0
  282. data/lib/sass/lesli/overrides/sweetalert.scss +106 -0
  283. data/lib/sass/lesli/pages/dashboards.scss +57 -0
  284. data/lib/sass/lesli/pages/invites.scss +81 -0
  285. data/lib/sass/lesli/pages/mfas.scss +36 -0
  286. data/lib/sass/lesli/pages/otps.scss +36 -0
  287. data/lib/sass/lesli/pages/passes.scss +35 -0
  288. data/lib/sass/lesli/panels/panel-announcements.scss +56 -0
  289. data/lib/sass/lesli/panels/panel-notification.scss +67 -0
  290. data/lib/sass/lesli/panels/panel-profile.scss +62 -0
  291. data/lib/sass/lesli/panels/panel-tasks.scss +41 -0
  292. data/lib/sass/lesli/panels/panel-ticket.scss +57 -0
  293. data/lib/sass/lesli/settings/variables.scss +148 -0
  294. data/lib/sass/lesli/shared/workflow-status-progress.scss +135 -0
  295. data/lib/sass/lesli/templates/application.scss +141 -0
  296. data/lib/sass/lesli/templates/dashboards.scss +32 -0
  297. data/lib/sass/lesli/templates/devise.scss +185 -0
  298. data/lib/sass/lesli/templates/empty.scss +42 -0
  299. data/lib/sass/lesli/templates/pdf.scss +45 -0
  300. data/lib/sass/lesli/templates/public.scss +71 -0
  301. data/lib/tasks/db.rb +75 -0
  302. data/lib/tasks/lesli/controllers.rake +103 -0
  303. data/lib/tasks/lesli_tasks.rake +23 -0
  304. data/lib/vue/application.js +269 -0
  305. data/lib/vue/apps/cloudobjects/action.vue +193 -0
  306. data/lib/vue/apps/cloudobjects/discussion/content.vue +60 -0
  307. data/lib/vue/apps/cloudobjects/discussion/element.vue +132 -0
  308. data/lib/vue/apps/cloudobjects/discussion/filters.vue +108 -0
  309. data/lib/vue/apps/cloudobjects/discussion/new.vue +130 -0
  310. data/lib/vue/apps/cloudobjects/discussion.vue +98 -0
  311. data/lib/vue/apps/cloudobjects/file/grid.vue +215 -0
  312. data/lib/vue/apps/cloudobjects/file/list.vue +106 -0
  313. data/lib/vue/apps/cloudobjects/file.vue +145 -0
  314. data/lib/vue/apps/dashboards/apps/edit.vue +105 -0
  315. data/lib/vue/apps/dashboards/apps/index.vue +114 -0
  316. data/lib/vue/apps/dashboards/apps/new.vue +89 -0
  317. data/lib/vue/apps/dashboards/apps/show.vue +76 -0
  318. data/lib/vue/apps/dashboards/components/form.vue +267 -0
  319. data/lib/vue/apps/dashboards/components/preview.vue +172 -0
  320. data/lib/vue/apps/workflows2/apps/actions/form.vue +232 -0
  321. data/lib/vue/apps/workflows2/apps/actions/forms/chatroom-form.vue +103 -0
  322. data/lib/vue/apps/workflows2/apps/actions/forms/cloud-object-clone-form.vue +125 -0
  323. data/lib/vue/apps/workflows2/apps/actions/forms/cloud-object-file-form.vue +102 -0
  324. data/lib/vue/apps/workflows2/apps/actions/forms/email-form.vue +190 -0
  325. data/lib/vue/apps/workflows2/apps/actions/forms/notification-form.vue +124 -0
  326. data/lib/vue/apps/workflows2/apps/actions/forms/send-cloud-object-file.vue +170 -0
  327. data/lib/vue/apps/workflows2/apps/actions/forms/task-form.vue +258 -0
  328. data/lib/vue/apps/workflows2/apps/actions/index.vue +146 -0
  329. data/lib/vue/apps/workflows2/apps/checks/form.vue +200 -0
  330. data/lib/vue/apps/workflows2/apps/checks/index.vue +160 -0
  331. data/lib/vue/apps/workflows2/apps/index.vue +177 -0
  332. data/lib/vue/apps/workflows2/apps/new.vue +97 -0
  333. data/lib/vue/apps/workflows2/apps/show.vue +146 -0
  334. data/lib/vue/apps/workflows2/components/associations.vue +215 -0
  335. data/lib/vue/apps/workflows2/components/chart.vue +91 -0
  336. data/lib/vue/apps/workflows2/components/workflow-form.vue +466 -0
  337. data/lib/vue/apps/workflows2/components/workflow-status-dropdown.vue +129 -0
  338. data/lib/vue/devise/confirmations.js +33 -0
  339. data/lib/vue/devise/passwords.js +137 -0
  340. data/lib/vue/devise/registrations.js +162 -0
  341. data/lib/vue/devise/sessions.js +143 -0
  342. data/lib/vue/layouts/application-announcements.vue +78 -0
  343. data/lib/vue/layouts/application-engines.vue +66 -0
  344. data/lib/vue/layouts/application-footer.vue +123 -0
  345. data/lib/vue/layouts/application-header.vue +213 -0
  346. data/lib/vue/layouts/application-navbar.vue +110 -0
  347. data/lib/vue/layouts/application-search.vue +86 -0
  348. data/lib/vue/layouts/application-sidebar.vue +63 -0
  349. data/lib/vue/layouts/dashboard-component.vue +62 -0
  350. data/lib/vue/pages/errors/app.js +32 -0
  351. data/lib/vue/pages/invites/app.js +76 -0
  352. data/lib/vue/pages/mfas/application.js +77 -0
  353. data/lib/vue/pages/onboarding/application.js +45 -0
  354. data/lib/vue/pages/onboarding/components/address.vue +120 -0
  355. data/lib/vue/pages/onboarding/components/buttons.vue +67 -0
  356. data/lib/vue/pages/onboarding/components/contact.vue +148 -0
  357. data/lib/vue/pages/onboarding/components/date-time.vue +265 -0
  358. data/lib/vue/pages/onboarding/components/finish.vue +62 -0
  359. data/lib/vue/pages/onboarding/components/general-info.vue +93 -0
  360. data/lib/vue/pages/onboarding/components/indicators.vue +78 -0
  361. data/lib/vue/pages/onboarding/components/welcome.vue +66 -0
  362. data/lib/vue/pages/onboarding/show.vue +67 -0
  363. data/lib/vue/pages/onboarding/store.js +165 -0
  364. data/lib/vue/pages/otps/application.js +90 -0
  365. data/lib/vue/pages/passes/application.js +80 -0
  366. data/lib/vue/pages/websites/application.js +34 -0
  367. data/lib/vue/panels/panel-announcements.vue +248 -0
  368. data/lib/vue/panels/panel-files.vue +281 -0
  369. data/lib/vue/panels/panel-notifications.vue +106 -0
  370. data/lib/vue/panels/panel-profile.vue +76 -0
  371. data/lib/vue/panels/panel-tasks.vue +124 -0
  372. data/lib/vue/panels/panel-tickets.vue +181 -0
  373. data/lib/vue/public.js +85 -0
  374. data/lib/vue/stores/announcements.js +75 -0
  375. data/lib/vue/stores/cloud-bell/notification.js +114 -0
  376. data/lib/vue/stores/cloudobjects/action.js +181 -0
  377. data/lib/vue/stores/cloudobjects/discussion.js +221 -0
  378. data/lib/vue/stores/cloudobjects/file.js +205 -0
  379. data/lib/vue/stores/dashboard.js +251 -0
  380. data/lib/vue/stores/firebase.js +163 -0
  381. data/lib/vue/stores/layout.js +60 -0
  382. data/lib/vue/stores/panels/announcements.js +153 -0
  383. data/lib/vue/stores/panels/task.js +66 -0
  384. data/lib/vue/stores/panels/tickets.js +129 -0
  385. data/lib/vue/stores/profile.js +90 -0
  386. data/lib/vue/stores/search.js +154 -0
  387. data/lib/vue/stores/services/translator.js +87 -0
  388. data/lib/vue/stores/workflow.js +185 -0
  389. data/lib/vue/stores/workflow2.js +345 -0
  390. data/lib/vue/stores/workflows/actions.js +327 -0
  391. data/lib/vue/stores/workflows/associations.js +130 -0
  392. data/lib/vue/stores/workflows/checks.js +210 -0
  393. data/lib/webpack/base.js +182 -0
  394. data/lib/webpack/core.js +80 -0
  395. data/lib/webpack/engines.js +162 -0
  396. data/license +674 -0
  397. data/readme.md +120 -0
  398. metadata +554 -0
@@ -0,0 +1,267 @@
1
+ <script setup>
2
+ /*
3
+
4
+ Lesli
5
+
6
+ Copyright (c) 2023, Lesli Technologies, S. A.
7
+
8
+ This program is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU General Public License as published by
10
+ the Free Software Foundation, either version 3 of the License, or
11
+ (at your option) any later version.
12
+
13
+ This program is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU General Public License for more details.
17
+
18
+ You should have received a copy of the GNU General Public License
19
+ along with this program. If not, see http://www.gnu.org/licenses/.
20
+
21
+ Lesli · Your Smart Business Assistant.
22
+
23
+ Made with ♥ by https://www.lesli.tech
24
+ Building a better future, one line of code at a time.
25
+
26
+ @contact hello@lesli.tech
27
+ @website https://lesli.tech
28
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
+
30
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
+ // ·
32
+
33
+ */
34
+
35
+
36
+ // · import vue tools
37
+ import { inject, onMounted, watch } from "vue"
38
+
39
+
40
+ // · import stores
41
+ import { useDashboard } from "Lesli/shared/stores/dashboard"
42
+
43
+
44
+ // · import vue router composable
45
+ import { useRouter, useRoute } from "vue-router"
46
+
47
+
48
+ // · implement stores
49
+ const storeDashboard = useDashboard()
50
+
51
+
52
+ // · initialize/inject plugins
53
+ const router = useRouter()
54
+ const url = inject("url")
55
+ const msg = inject("msg")
56
+ const route = useRoute()
57
+
58
+
59
+ // · defining props
60
+ const props = defineProps({
61
+ isEditable: {
62
+ type: Boolean,
63
+ required: false,
64
+ default: false,
65
+ },
66
+ engine: {
67
+ type: String,
68
+ required: true,
69
+ },
70
+ })
71
+
72
+
73
+ // · translations
74
+ const translations = {
75
+ dashboards: I18n.t('core.dashboards'),
76
+ components: I18n.t('core.dashboard/components'),
77
+ core: I18n.t('core.shared'),
78
+ roles: I18n.t('core.roles'),
79
+ main: I18n.t(`${storeDashboard.engine}.dashboards`),
80
+ main_components: I18n.t(`${storeDashboard.engine}.dashboard/components`)
81
+ }
82
+
83
+
84
+ const default_options = {
85
+ yes: {
86
+ label: translations.core.view_text_yes,
87
+ value: true
88
+ },
89
+ no: {
90
+ label: translations.core.view_text_no,
91
+ value: false
92
+ }
93
+ }
94
+
95
+
96
+ const layout_options = [{
97
+ label: '25%',
98
+ value: 3
99
+ }, {
100
+ label: '33%',
101
+ value: 4
102
+ }, {
103
+ label: '50%',
104
+ value: 6
105
+ }, {
106
+ label: '66%',
107
+ value: 8
108
+ }, {
109
+ label: '75%',
110
+ value: 9
111
+ }, {
112
+ label: '100%',
113
+ value: 12
114
+ }]
115
+
116
+
117
+ /**
118
+ * @description This function is used to update the workflow information
119
+ */
120
+ const onUpdate = () => {
121
+ storeDashboard.updateDashboard()
122
+ }
123
+
124
+
125
+ /**
126
+ * @description This function is used to create a new workflow
127
+ */
128
+ const onCreate = () => {
129
+ storeDashboard.postDashboard().then(()=> {
130
+ router.push(url[props.engine]('dashboards').s)
131
+ })
132
+ }
133
+
134
+
135
+ /**
136
+ * @description This function is used to add a new component to dashboard
137
+ */
138
+ function addComponent(){
139
+ msg.warning(translations.dashboards.messages_warning_save_changes_reminder)
140
+ let new_component = {
141
+ id: `${storeDashboard.new_component_id}-${storeDashboard.default_component_configuration.index}`,
142
+ name: '',
143
+ component_id: storeDashboard.new_component_id.replaceAll("_", "-"),
144
+ layout: storeDashboard.default_component_configuration.layout,
145
+ index: storeDashboard.default_component_configuration.index++,
146
+ query_configuration: {
147
+ filters: {},
148
+ pagination: {}
149
+ },
150
+ custom_configuration: {
151
+ arrangement: {}
152
+ }
153
+ }
154
+ storeDashboard.dashboard.components.push(new_component)
155
+ }
156
+
157
+
158
+ /**
159
+ * @description This function is used to select a component
160
+ */
161
+ function selectDashboardComponent(selected_component){
162
+ if(storeDashboard.dashboard.components.find( component => component.id == selected_component.id)){
163
+ storeDashboard.selected_dashboard_component = selected_component
164
+ }
165
+ }
166
+
167
+
168
+ /**
169
+ * @description This function is used to remove a component from the dashboard
170
+ */
171
+ function removeComponent(deleted_component){
172
+ msg.warning(translations.dashboards.messages_warning_save_changes_reminder)
173
+ storeDashboard.dashboard.components = storeDashboard.dashboard.components.filter((component)=> {
174
+ return component.id != deleted_component.id
175
+ })
176
+
177
+ // We check if the component id is a real number. If it is, de stage it to delete it when saved
178
+ if(! isNaN(deleted_component.id)){
179
+ deleted_component._destroy = true
180
+ storeDashboard.deleted_components.push(deleted_component)
181
+ }
182
+ }
183
+
184
+
185
+ onMounted(() => {
186
+ storeDashboard.engine = props.engine
187
+ if (!props.isEditable){
188
+ storeDashboard.resetDashboard()
189
+ } else {
190
+ storeDashboard.fetchDashboard(route.params?.id)
191
+ }
192
+ })
193
+
194
+ // This function is used to delete a dashboard
195
+ function onDeleteDashboard() {
196
+ storeDashboard.deleteDashboard().then(()=> {
197
+ router.push(url[props.engine]('dashboards').s)
198
+ })
199
+ }
200
+
201
+ </script>
202
+ <template>
203
+ <lesli-form class="mb-6" @submit="isEditable ? onUpdate() : onCreate()">
204
+ <div class="columns">
205
+ <div class="column is-4">
206
+ <!-- Name -->
207
+ <div class="field">
208
+ <label class="label">
209
+ {{translations.dashboards.column_name}}
210
+ <sup class="has-text-danger">*</sup>
211
+ </label>
212
+ <div class="control">
213
+ <input class="input" type="text" v-model="storeDashboard.dashboard.name" required>
214
+ </div>
215
+ </div>
216
+ </div>
217
+
218
+ <div class="column is-4">
219
+ <!-- Role -->
220
+ <div class="field">
221
+ <label class="label">{{ translations.dashboards.column_roles_id }}</label>
222
+ <div class="control">
223
+ <lesli-select
224
+ v-model="storeDashboard.dashboard.roles_id"
225
+ :options="storeDashboard.options.roles"
226
+ ></lesli-select>
227
+ </div>
228
+ </div>
229
+ </div>
230
+
231
+ <div class="column is-4">
232
+ <!-- Default -->
233
+ <div class="field">
234
+ <label class="label">{{ translations.dashboards.column_default }}</label>
235
+ <lesli-select
236
+ v-model="storeDashboard.dashboard.default"
237
+ :options="default_options">
238
+ </lesli-select>
239
+ </div>
240
+ </div>
241
+ </div>
242
+
243
+ <!-- Save button -->
244
+ <div class="is-flex is-justify-content-space-between">
245
+ <div class="field">
246
+ <label class="label">
247
+ {{ translations.dashboards.view_title_add_component }}
248
+ </label>
249
+ <div class="control">
250
+ <lesli-select
251
+ v-model="storeDashboard.new_component_id"
252
+ :options="storeDashboard.options.component_ids"
253
+ @change="addComponent">
254
+ </lesli-select>
255
+ </div>
256
+ </div>
257
+ <div class="buttons">
258
+ <lesli-button icon="save" :loading="storeDashboard.loading">
259
+ {{ translations.dashboards.view_btn_save_dashboard }}
260
+ </lesli-button>
261
+ <lesli-button danger icon="delete" @click="onDeleteDashboard">
262
+ {{ translations.dashboards.view_btn_delete_dashboard }}
263
+ </lesli-button>
264
+ </div>
265
+ </div>
266
+ </lesli-form>
267
+ </template>
@@ -0,0 +1,172 @@
1
+ <script setup>
2
+ /*
3
+
4
+ Lesli
5
+
6
+ Copyright (c) 2023, Lesli Technologies, S. A.
7
+
8
+ This program is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU General Public License as published by
10
+ the Free Software Foundation, either version 3 of the License, or
11
+ (at your option) any later version.
12
+
13
+ This program is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU General Public License for more details.
17
+
18
+ You should have received a copy of the GNU General Public License
19
+ along with this program. If not, see http://www.gnu.org/licenses/.
20
+
21
+ Lesli · Your Smart Business Assistant.
22
+
23
+ Made with ♥ by https://www.lesli.tech
24
+ Building a better future, one line of code at a time.
25
+
26
+ @contact hello@lesli.tech
27
+ @website https://lesli.tech
28
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
+
30
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
+ // ·
32
+
33
+ */
34
+
35
+
36
+
37
+ // · import vue tools
38
+ import { onMounted, computed } from "vue"
39
+
40
+
41
+ // · import lesli stores
42
+ import { useDashboard } from "Lesli/shared/stores/dashboard"
43
+
44
+
45
+ // · implement stores
46
+ const storeDashboard = useDashboard()
47
+
48
+
49
+ // ·
50
+ const props = defineProps({
51
+ engine: {
52
+ type: String,
53
+ require: true
54
+ },
55
+ components: {
56
+ type: Object,
57
+ require: true
58
+ }
59
+ })
60
+
61
+
62
+ // ·
63
+ function sizeIncrease(component) {
64
+ if (component.layout >= 12) {
65
+ return
66
+ }
67
+ component.layout++
68
+ }
69
+
70
+
71
+ // ·
72
+ function sizeDecrease(component) {
73
+ if (component.layout <= 3) {
74
+ return
75
+ }
76
+ component.layout--
77
+ }
78
+
79
+
80
+ // ·
81
+ function remove(component) {
82
+
83
+ component._destroy = true
84
+ }
85
+
86
+ </script>
87
+ <template>
88
+ <div class="columns is-multiline is-variable is-4 dashboard-components">
89
+ <template v-for="(component, index) in storeDashboard.dashboard.components" :key="index">
90
+ <div :class="['column', 'is-' + component?.layout]" v-if="!component._destroy">
91
+
92
+ <!-- Dashboard widget component when in edition mode -->
93
+ <div class="edit">
94
+
95
+
96
+ <!-- Dashboard widget preview -->
97
+ <component :component.sync="component" :is="props.components[component.component_id]">
98
+ </component>
99
+
100
+
101
+ <!-- Edition controls -->
102
+ <div class="mt-4 mb-2">
103
+ <div class="field has-addons is-justify-content-center">
104
+ <p class="control">
105
+ <button class="button is-small" @click="sizeDecrease(component)">
106
+ <span class="icon is-small">
107
+ <span class="material-icons">
108
+ remove
109
+ </span>
110
+ </span>
111
+ </button>
112
+ </p>
113
+ <p class="control control-label has-text-centered">
114
+ size
115
+ </p>
116
+ <p class="control">
117
+ <button class="button is-small" @click="sizeIncrease(component)">
118
+ <span class="icon is-small">
119
+ <span class="material-icons">
120
+ add
121
+ </span>
122
+ </span>
123
+ </button>
124
+ </p>
125
+ </div>
126
+
127
+ <div class="field has-addons is-justify-content-center">
128
+ <p class="control">
129
+ <button class="button is-small" @click="sizeDecrease(component)">
130
+ <span class="icon is-small">
131
+ <span class="material-icons">
132
+ chevron_left
133
+ </span>
134
+ </span>
135
+ </button>
136
+ </p>
137
+ <p class="control control-label has-text-centered px-4">
138
+ position
139
+ </p>
140
+ <p class="control">
141
+ <button class="button is-small" @click="sizeIncrease(component)">
142
+ <span class="icon is-small">
143
+ <span class="material-icons">
144
+ chevron_right
145
+ </span>
146
+ </span>
147
+ </button>
148
+ </p>
149
+ </div>
150
+
151
+ <div class="has-text-centered">
152
+ <lesli-button small danger icon="delete" @click="remove(component)">
153
+ remove
154
+ </lesli-button>
155
+ </div>
156
+ </div>
157
+ </div>
158
+ </div>
159
+ </template>
160
+ </div>
161
+ </template>
162
+ <style>
163
+ .dashboard-components .edit {
164
+ border-radius: 6px;
165
+ padding: 1.2rem 1.4rem;
166
+ border: 1px solid #CCC;
167
+ background-color: #FFF8F8;
168
+ }
169
+ .dashboard-components .edit .control-label {
170
+ width: 100px;
171
+ }
172
+ </style>
@@ -0,0 +1,232 @@
1
+ <script setup>
2
+ /*
3
+
4
+ Lesli
5
+
6
+ Copyright (c) 2023, Lesli Technologies, S. A.
7
+
8
+ This program is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU General Public License as published by
10
+ the Free Software Foundation, either version 3 of the License, or
11
+ (at your option) any later version.
12
+
13
+ This program is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU General Public License for more details.
17
+
18
+ You should have received a copy of the GNU General Public License
19
+ along with this program. If not, see http://www.gnu.org/licenses/.
20
+
21
+ Lesli · Your Smart Business Assistant.
22
+
23
+ Made with ♥ by https://www.lesli.tech
24
+ Building a better future, one line of code at a time.
25
+
26
+ @contact hello@lesli.tech
27
+ @website https://lesli.tech
28
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
+
30
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
+ // ·
32
+
33
+ */
34
+
35
+
36
+
37
+ // · import vue tools
38
+ import { inject, watch, onMounted, ref } from "vue"
39
+ import { useRouter, useRoute } from 'vue-router'
40
+
41
+
42
+ // · import store
43
+ import { useActions } from "Lesli/stores/shared/workflows/actions"
44
+ import notificationForm from "./forms/notification-form.vue"
45
+ import emailForm from "./forms/email-form.vue"
46
+ import taskForm from "./forms/task-form.vue"
47
+ import chatroomForm from "./forms/chatroom-form.vue"
48
+ import cloudObjectFileForm from "./forms/cloud-object-file-form.vue"
49
+ import cloudObjectCloneForm from "./forms/cloud-object-clone-form.vue"
50
+ import sendCloudObjectFileForm from "./forms/send-cloud-object-file.vue"
51
+
52
+
53
+
54
+ // · initialize/inject plugins
55
+ const router = useRouter()
56
+ const url = inject("url")
57
+
58
+
59
+ // · defining props
60
+ const props = defineProps({
61
+ isEditable: {
62
+ type: Boolean,
63
+ required: false,
64
+ default: false
65
+ }
66
+ })
67
+
68
+
69
+ // · implement stores
70
+ const storeActions = useActions()
71
+
72
+ // · defining translations
73
+ const translations = {
74
+ core: I18n.t('core.shared'),
75
+ actions: I18n.t('core.workflow/actions')
76
+ }
77
+
78
+ onMounted(() => {
79
+ // · get workflow actions options
80
+ storeActions.getOptions()
81
+ storeActions.getUsers()
82
+ storeActions.getCloudObjectFileOptions()
83
+ storeActions.getTasksOptions()
84
+
85
+ if(!props.isEditable){
86
+ storeActions.reset()
87
+ }
88
+
89
+ })
90
+
91
+ const activeOptions = {
92
+ yes: {
93
+ label: translations.core.view_text_yes,
94
+ value: true
95
+ },
96
+ no: {
97
+ label: translations.core.view_text_no,
98
+ value: false
99
+ }
100
+ }
101
+
102
+ /**
103
+ * @description This function is used to update the action information
104
+ */
105
+ const onUpdate = () => {
106
+ storeActions.updateAction()
107
+ }
108
+
109
+ /**
110
+ * @description This function is used to create a new action
111
+ */
112
+ const onCreate = () => {
113
+ storeActions.postAction()
114
+ }
115
+
116
+
117
+ </script>
118
+
119
+ <template>
120
+ <form
121
+ @submit.prevent="isEditable? onUpdate() : onCreate()"
122
+ v-if="!storeActions.loading">
123
+
124
+ <div class="columns is-marginless has-border-bottom">
125
+
126
+ <!-- Action name -->
127
+ <div class="column">
128
+ <label class="label">
129
+ {{translations.actions.column_name}}
130
+ <sup class="has-text-danger">*</sup>
131
+ </label>
132
+
133
+ <div class="control">
134
+ <input type="text" name="name" required class="input" v-model="storeActions.action.name" />
135
+ </div>
136
+ </div>
137
+
138
+ <!-- Active -->
139
+ <div class="column">
140
+ <label class="label">{{translations.actions.column_active}}</label>
141
+ <div class="control">
142
+ <label :for="option.label" class="radio" v-for="option in activeOptions" :key="option">
143
+ <input name="active" type="radio" :id="option.label" :value="option.value" v-model="storeActions.action.active"/>
144
+ {{option.label}}
145
+ </label>
146
+ </div>
147
+ </div>
148
+
149
+ <!-- Execute inmediately -->
150
+ <div class="column">
151
+ <label class="label">
152
+ {{ translations.actions.column_execute_immediately }}
153
+ </label>
154
+
155
+ <label class="checkbox">
156
+ <input type="checkbox" v-model="storeActions.action.execute_immediately">
157
+ <span v-if="storeActions.action.execute_immediately"> {{translations.core.view_text_yes}} </span>
158
+ <span v-else> {{translations.core.view_text_no}} </span>
159
+ </label>
160
+ </div>
161
+
162
+ </div>
163
+
164
+
165
+ <div class="columns is-marginless has-border-bottom">
166
+ <!-- Initial status -->
167
+ <div class="column">
168
+ <label class="label">{{ translations.actions.column_initial_status_id }}</label>
169
+ <div class="control">
170
+ <lesli-select
171
+ v-model="storeActions.action.initial_status_id"
172
+ :options="storeActions.options['statuses']">
173
+ </lesli-select>
174
+ </div>
175
+ </div>
176
+
177
+ <!-- Final status -->
178
+ <div class="column">
179
+ <label class="label">
180
+ {{ translations.actions.column_final_status_id }}
181
+ <sup class="has-text-danger">*</sup>
182
+ </label>
183
+
184
+ <div class="control">
185
+ <lesli-select
186
+ required
187
+ v-model="storeActions.action.final_status_id"
188
+ :options="storeActions.options['statuses']">
189
+ </lesli-select>
190
+ </div>
191
+ </div>
192
+
193
+ <!-- Action type -->
194
+ <div class="column">
195
+ <label class="label">
196
+ {{ translations.actions.column_action_type }}
197
+ <sup class="has-text-danger">*</sup>
198
+ </label>
199
+ <div class="control">
200
+ <lesli-select
201
+ required
202
+ v-model="storeActions.action.action_type"
203
+ :options="storeActions.options['action_types']"
204
+ :disabled="props.isEditable">
205
+ </lesli-select>
206
+ <span>{{ translations.actions.view_text_column_action_type_description }}</span>
207
+ </div>
208
+ </div>
209
+ </div>
210
+
211
+ <hr>
212
+
213
+ <notification-form v-if="storeActions.action.action_type == 'create_bell_notification'"></notification-form>
214
+ <email-form v-if="storeActions.action.action_type == 'send_core_email'"></email-form>
215
+ <task-form v-if="storeActions.action.action_type == 'create_focus_task'"></task-form>
216
+ <chatroom-form v-if="storeActions.action.action_type == 'send_talk_chatroom_message'"></chatroom-form>
217
+ <cloud-object-file-form v-if="storeActions.action.action_type == 'create_cloud_object_file'"></cloud-object-file-form>
218
+ <cloud-object-clone-form v-if="storeActions.action.action_type == 'cloud_object_clone'"></cloud-object-clone-form>
219
+ <send-cloud-object-file-form v-if="storeActions.action.action_type =='create_and_send_cloud_object_file'"></send-cloud-object-file-form>
220
+
221
+
222
+ <!-- Submit form button -->
223
+ <div class="columns is-marginless has-border-bottom">
224
+ <div class="column">
225
+ <lesli-button icon="save">
226
+ save
227
+ </lesli-button>
228
+ </div>
229
+ </div>
230
+ </form>
231
+
232
+ </template>