lesli 5.0.13 → 5.0.14
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.
- checksums.yaml +4 -4
- data/app/assets/config/lesli_manifest.js +3 -6
- data/app/assets/images/lesli/brand/app-icon.svg +45 -39
- data/app/assets/javascripts/lesli/application.js +1 -0
- data/app/controllers/lesli/abouts_controller.rb +16 -14
- data/app/controllers/lesli/application_controller.rb +13 -0
- data/app/controllers/lesli/application_devise_controller.rb +10 -12
- data/app/controllers/lesli/application_lesli_controller.rb +12 -11
- data/app/controllers/lesli/apps_controller.rb +6 -0
- data/app/controllers/lesli/roles_controller.rb +2 -2
- data/app/helpers/lesli/general_helper.rb +18 -5
- data/app/helpers/lesli/html_helper.rb +8 -0
- data/app/helpers/lesli/navigation_helper.rb +30 -11
- data/app/helpers/lesli/system_helper.rb +2 -2
- data/app/helpers/lesli/turbo_helper.rb +58 -0
- data/app/interfaces/lesli/customization_interface.rb +42 -0
- data/app/interfaces/lesli/requester_interface.rb +103 -0
- data/app/interfaces/lesli/responder_interface.rb +127 -0
- data/app/lib/date2.rb +1 -199
- data/app/lib/lesli/courier.rb +54 -0
- data/app/mailers/lesli/application_lesli_mailer.rb +32 -59
- data/app/mailers/lesli/devise_mailer.rb +16 -8
- data/app/models/concerns/account_initializer.rb +27 -68
- data/app/models/concerns/lesli/has_activities.rb +29 -0
- data/app/models/concerns/user_extensions.rb +34 -19
- data/app/models/concerns/user_security.rb +4 -4
- data/app/models/lesli/account.rb +13 -20
- data/{lib/scss/layouts/application-container.scss → app/models/lesli/item/activity.rb} +11 -8
- data/app/models/lesli/role/{power.rb → action.rb} +6 -4
- data/app/models/lesli/role.rb +7 -15
- data/app/models/lesli/shared/catalog.rb +20 -0
- data/app/models/lesli/shared/dashboard.rb +1 -1
- data/app/models/lesli/user/activity.rb +5 -0
- data/app/models/lesli/user/detail.rb +5 -5
- data/app/models/lesli/user/{log.rb → journal.rb} +3 -3
- data/app/models/lesli/user/{power.rb → role.rb} +2 -3
- data/app/models/lesli/user/session.rb +3 -4
- data/app/models/lesli/user.rb +50 -46
- data/app/operators/lesli/controller_operator.rb +3 -1
- data/app/operators/lesli/{role_descriptor_operator.rb → role_operator.rb} +51 -28
- data/app/operators/lesli/user_registration_operator.rb +3 -2
- data/app/services/lesli/application_lesli_service.rb +8 -4
- data/app/services/lesli/role/action_service.rb +58 -0
- data/app/services/lesli/role_service.rb +232 -0
- data/app/services/lesli/{user_session_service.rb → user/session_service.rb} +23 -14
- data/app/services/lesli/user_service.rb +85 -1
- data/app/views/lesli/apps/show.html.erb +52 -0
- data/app/views/lesli/layouts/application-devise.html.erb +5 -7
- data/app/views/lesli/layouts/application-lesli.html.erb +18 -24
- data/app/views/lesli/partials/_application-analytics.html.erb +2 -2
- data/app/views/lesli/partials/_application-data.html.erb +3 -77
- data/app/views/lesli/partials/_application-head.html.erb +7 -4
- data/app/views/lesli/partials/_application-lesli-annoouncements.html.erb +49 -0
- data/app/views/lesli/partials/_application-lesli-header.html.erb +73 -49
- data/app/views/lesli/partials/_application-lesli-javascript.html.erb +3 -16
- data/app/views/lesli/partials/_application-lesli-navigation.html.erb +12 -9
- data/app/views/lesli/partials/{_application-lesli-notices.html.erb → _application-lesli-notifications.html.erb} +10 -8
- data/app/views/lesli/partials/_application-lesli-scss.html.erb +1 -1
- data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +1 -1
- data/app/views/lesli/partials/_application-public-javascript.html.erb +1 -4
- data/app/views/lesli/shared/dashboards/_show.html.erb +63 -0
- data/app/views/lesli/wrappers/_application-devise.html.erb +4 -6
- data/config/importmap.rb +14 -0
- data/config/initializers/lesli.rb +20 -12
- data/config/initializers/lesli_migration_helpers.rb +61 -0
- data/config/locales/translations.en.yml +1 -26
- data/config/locales/translations.es.yml +1 -26
- data/config/locales/translations.fr.yml +1 -26
- data/config/locales/translations.it.yml +1 -26
- data/config/locales/translations.pt.yml +1 -26
- data/config/routes.rb +3 -1
- data/db/migrate/v1/{0010000110_create_lesli_accounts.rb → 0000000110_create_lesli_accounts.rb} +13 -12
- data/db/migrate/v1/0000000210_create_lesli_roles.rb +65 -0
- data/db/migrate/v1/0000000310_create_lesli_users.rb +99 -0
- data/db/migrate/v1/{0010000610_create_lesli_system_controllers.rb → 0000100110_create_lesli_system_controllers.rb} +3 -3
- data/db/migrate/v1/{0010000710_create_lesli_system_controller_actions.rb → 0000100210_create_lesli_system_controller_actions.rb} +3 -4
- data/{lib/scss/layouts/application-content.scss → db/migrate/v1/0000110310_create_lesli_account_settings.rb} +8 -6
- data/{app/models/lesli/user/agent.rb → db/migrate/v1/0000110410_create_lesli_account_activities.rb} +3 -3
- data/db/migrate/v1/0000120210_create_lesli_role_actions.rb +45 -0
- data/db/migrate/v1/{0010001410_create_lesli_account_logs.rb → 0000120310_create_lesli_role_privileges.rb} +8 -8
- data/db/{tables/0010003810_create_user_shortcuts.rb → migrate/v1/0000130210_create_lesli_user_roles.rb} +9 -12
- data/db/migrate/v1/0000130310_create_lesli_user_sessions.rb +56 -0
- data/db/{seed/production.rb → migrate/v1/0000130410_create_lesli_user_activities.rb} +7 -4
- data/db/{tables/0010001110_create_account_locations.rb → migrate2/0000100510_create_lesli_account_locations.rb} +6 -6
- data/db/{tables/0010001510_create_account_currencies.rb → migrate2/0000100610_create_lesli_account_currencies.rb} +4 -4
- data/db/seed/{development/accounts.rb → accounts.rb} +6 -2
- data/db/seed/{production/users.rb → users.rb} +4 -10
- data/db/seed/{tools.rb → xyz.rb} +2 -7
- data/db/seeds.rb +3 -2
- data/db/structure/00000020_catalogs.json +0 -0
- data/lib/generators/{application_lesli_generator.rb → application_lesli_generator_base.rb} +4 -4
- data/lib/generators/lesli/spec/spec_generator.rb +2 -2
- data/lib/generators/lesli/view/USAGE +8 -0
- data/lib/generators/lesli/view/templates/spec-factory.template +17 -0
- data/lib/generators/lesli/view/templates/spec-model.template +70 -0
- data/lib/generators/lesli/view/view_generator.rb +25 -0
- data/lib/lesli/configuration.rb +7 -10
- data/lib/lesli/engine.rb +22 -3
- data/lib/lesli/r_spec.rb +5 -2
- data/lib/lesli/routing.rb +42 -9
- data/lib/lesli/version.rb +2 -2
- data/lib/lesli.rb +11 -0
- data/lib/migrate/common.rb +94 -0
- data/lib/migrate/items/action_structure.rb +51 -0
- data/{db/migrate/v1/0010001210_create_lesli_account_activities.rb → lib/migrate/items/activity_structure.rb} +18 -16
- data/lib/migrate/items/attachment_structure.rb +62 -0
- data/{app/views/lesli/partials/_application-lesli-engines.html.erb → lib/migrate/items/discussion_structure.rb} +19 -27
- data/lib/migrate/items/subscriber_structure.rb +49 -0
- data/lib/migrate/items/version_structure.rb +53 -0
- data/lib/migrate/shared/account_structure.rb +21 -0
- data/lib/migrate/shared/catalog_structure.rb +30 -0
- data/lib/migrate/shared/dashboard_structure.rb +54 -0
- data/lib/migrate/shared/setting_structure.rb +20 -0
- data/lib/rspec/config/spec_coverage.rb +95 -0
- data/{db/migrate/v1/0010001110_create_lesli_account_settings.rb → lib/rspec/factories/lesli_account.rb} +10 -7
- data/{db/seed/development.rb → lib/rspec/factories/lesli_role.rb} +30 -3
- data/{db/seed/test.rb → lib/rspec/factories/lesli_user.rb} +32 -3
- data/lib/rspec/fixtures/files/lesli-icon.png +0 -0
- data/lib/rspec/fixtures/files/test_file_1.docx +0 -0
- data/{db/tables/0010001610_create_account_currency_exchange_rates.rb → lib/rspec/helpers/lesli_helper.rb} +21 -21
- data/lib/rspec/helpers/rails_helper.rb +134 -0
- data/lib/rspec/helpers/response_request_helper.rb +214 -0
- data/lib/rspec/helpers/response_service_helper.rb +66 -0
- data/lib/rspec/helpers/spec_helper.rb +99 -0
- data/lib/rspec/lesli_api_tester.rb +133 -0
- data/lib/rspec/lesli_service_tester.rb +46 -0
- data/{db/tables/0010001410_create_account_files.rb → lib/rspec/testers/controller.rb} +31 -20
- data/lib/rspec/testers/model.rb +36 -0
- data/lib/rspec/testers/request.rb +84 -0
- data/lib/tasks/lesli/db.rake +5 -3
- data/lib/tasks/lesli/git.rake +28 -32
- data/lib/tasks/lesli/github.rake +89 -0
- data/lib/tasks/lesli_tasks.rake +3 -3
- data/readme.md +28 -17
- metadata +134 -394
- data/app/assets/fonts/lesli/Domine/Domine-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/Domine/OFL.txt +0 -97
- data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
- data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +0 -1
- data/app/assets/fonts/lesli/Remix/remixicon.svg +0 -7633
- data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +0 -11
- data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
- data/app/assets/fonts/lesli/Roboto/LICENSE.txt +0 -202
- data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
- data/app/assets/icons/lesli/engine-admin.svg +0 -1
- data/app/assets/icons/lesli/engine-audit.svg +0 -1
- data/app/assets/icons/lesli/engine-babel.svg +0 -1
- data/app/assets/icons/lesli/engine-bell.svg +0 -1
- data/app/assets/icons/lesli/engine-books.svg +0 -1
- data/app/assets/icons/lesli/engine-calendar.svg +0 -1
- data/app/assets/icons/lesli/engine-dashboard.svg +0 -1
- data/app/assets/icons/lesli/engine-dispatcher.svg +0 -1
- data/app/assets/icons/lesli/engine-focus.svg +0 -1
- data/app/assets/icons/lesli/engine-kb.svg +0 -1
- data/app/assets/icons/lesli/engine-leaf.svg +0 -1
- data/app/assets/icons/lesli/engine-lesli.svg +0 -1
- data/app/assets/icons/lesli/engine-letter.svg +0 -1
- data/app/assets/icons/lesli/engine-mailer.svg +0 -1
- data/app/assets/icons/lesli/engine-one.svg +0 -1
- data/app/assets/icons/lesli/engine-profile.svg +0 -1
- data/app/assets/icons/lesli/engine-proposal.svg +0 -1
- data/app/assets/icons/lesli/engine-scraper.svg +0 -1
- data/app/assets/icons/lesli/engine-security.svg +0 -1
- data/app/assets/icons/lesli/engine-shared.svg +0 -1
- data/app/assets/icons/lesli/engine-shield.svg +0 -1
- data/app/assets/icons/lesli/engine-storage.svg +0 -1
- data/app/assets/icons/lesli/engine-support.svg +0 -1
- data/app/assets/icons/lesli/engine-talk.svg +0 -1
- data/app/assets/icons/lesli/engine-team.svg +0 -1
- data/app/assets/icons/lesli/engine-time.svg +0 -1
- data/app/assets/icons/lesli/locale-en.svg +0 -1
- data/app/assets/icons/lesli/locale-es.svg +0 -1
- data/app/assets/icons/lesli/locale-fr.svg +0 -1
- data/app/assets/icons/lesli/locale-it.svg +0 -1
- data/app/assets/icons/lesli/locale-pt.svg +0 -1
- data/app/assets/icons/readme.md +0 -10
- data/app/assets/javascripts/lesli/templates/application.js +0 -14
- data/app/assets/javascripts/lesli/templates/public.js +0 -14
- data/app/assets/stylesheets/lesli/templates/application.css +0 -2918
- data/app/assets/stylesheets/lesli/templates/public.css +0 -1
- data/app/controllers/lesli/interfaces/application/authorization.rb +0 -107
- data/app/controllers/lesli/interfaces/application/customization.rb +0 -46
- data/app/controllers/lesli/interfaces/application/logger.rb +0 -134
- data/app/controllers/lesli/interfaces/application/requester.rb +0 -84
- data/app/controllers/lesli/interfaces/application/responder.rb +0 -132
- data/app/controllers/lesli/interfaces/controllers/actions.rb +0 -250
- data/app/controllers/lesli/interfaces/controllers/activities.rb +0 -215
- data/app/controllers/lesli/interfaces/controllers/discussions.rb +0 -270
- data/app/controllers/lesli/interfaces/controllers/files.rb +0 -467
- data/app/controllers/lesli/interfaces/controllers/subscribers.rb +0 -234
- data/app/lib/lesli/system.rb +0 -110
- data/app/models/lesli/cloud_object/action.rb +0 -70
- data/app/models/lesli/cloud_object/activity.rb +0 -311
- data/app/models/lesli/cloud_object/custom_field.rb +0 -158
- data/app/models/lesli/cloud_object/discussion.rb +0 -219
- data/app/models/lesli/cloud_object/subscriber.rb +0 -186
- data/app/operators/lesli/descriptor_privilege_operator.rb +0 -75
- data/app/views/lesli/emails/devise_mailer/confirmation_instructions.html.erb +0 -23
- data/app/views/lesli/emails/devise_mailer/reset_password_instructions.html.erb +0 -23
- data/app/views/lesli/partials/_application-lesli-icons.html.erb +0 -1
- data/config/initializers/devise.rb +0 -336
- data/db/seed/development/users.rb +0 -52
- data/db/seed/production/accounts.rb +0 -50
- data/db/structure/00000000_people.json +0 -34
- data/db/structure/00000003_actions.json +0 -14
- data/db/structure/00000004_activities.json +0 -20
- data/db/structure/00000005_discussions.json +0 -8
- data/db/structure/00000006_files.json +0 -32
- data/db/structure/00000007_subscribers.json +0 -11
- data/db/structure/00000501_dashboards.json +0 -14
- data/db/structure/00000502_dashboard_components.json +0 -23
- data/db/tables/0010003410_create_user_activities.rb +0 -51
- data/db/tables/0010003710_create_user_codes.rb +0 -43
- data/db/tables/0010004110_create_user_tokens.rb +0 -45
- data/db/tables/0010005610_create_role_activities.rb +0 -50
- data/db/tables/0010009010_create_feedbacks.rb +0 -56
- data/lib/mailer_previews/devise_mailer_preview.rb +0 -49
- data/lib/scss/cloud-objects/discussion.scss +0 -80
- data/lib/scss/cloud-objects/file.scss +0 -138
- data/lib/scss/components/keypad.scss +0 -109
- data/lib/scss/elements/autocomplete.scss +0 -72
- data/lib/scss/elements/card.scss +0 -37
- data/lib/scss/elements/empty.scss +0 -43
- data/lib/scss/elements/file-uploader.scss +0 -74
- data/lib/scss/elements/gallery.scss +0 -98
- data/lib/scss/elements/input-tag.scss +0 -73
- data/lib/scss/elements/loading.scss +0 -63
- data/lib/scss/elements/map.scss +0 -107
- data/lib/scss/elements/navbar.scss +0 -115
- data/lib/scss/elements/table.scss +0 -118
- data/lib/scss/elements/toolbar.scss +0 -66
- data/lib/scss/fonts/families.scss +0 -47
- data/lib/scss/fonts/mdicons.scss +0 -82
- data/lib/scss/fonts/remixicons.scss +0 -2602
- data/lib/scss/helpers/display.scss +0 -44
- data/lib/scss/helpers/tooltip.scss +0 -91
- data/lib/scss/layouts/application-announcements.scss +0 -40
- data/lib/scss/layouts/application-component.scss +0 -39
- data/lib/scss/layouts/application-engines.scss +0 -125
- data/lib/scss/layouts/application-footer.scss +0 -102
- data/lib/scss/layouts/application-header.scss +0 -91
- data/lib/scss/layouts/application-navigation.scss +0 -79
- data/lib/scss/layouts/application-search.scss +0 -71
- data/lib/scss/layouts/application-sidebar.scss +0 -219
- data/lib/scss/overrides/notification.scss +0 -75
- data/lib/scss/overrides/sweetalert.scss +0 -106
- data/lib/scss/pages/devise-simple.scss +0 -89
- data/lib/scss/pages/devise.scss +0 -179
- data/lib/scss/pages/invites.scss +0 -81
- data/lib/scss/panels/panel-announcements.scss +0 -56
- data/lib/scss/panels/panel-notification.scss +0 -67
- data/lib/scss/panels/panel-profile.scss +0 -62
- data/lib/scss/panels/panel-support-ticket.scss +0 -56
- data/lib/scss/panels/panel-tasks.scss +0 -41
- data/lib/scss/settings/variables.scss +0 -148
- data/lib/scss/shared/workflow-status-progress.scss +0 -135
- data/lib/scss/templates/application.scss +0 -127
- data/lib/scss/templates/component.scss +0 -39
- data/lib/scss/templates/dashboards.scss +0 -53
- data/lib/scss/templates/empty.scss +0 -42
- data/lib/scss/templates/pdf.scss +0 -45
- data/lib/scss/templates/public.scss +0 -72
- data/lib/vue/application.js +0 -285
- data/lib/vue/cloudobjects/discussion/content.vue +0 -62
- data/lib/vue/cloudobjects/discussion/element.vue +0 -170
- data/lib/vue/cloudobjects/discussion/filters.vue +0 -108
- data/lib/vue/cloudobjects/discussion/new.vue +0 -134
- data/lib/vue/cloudobjects/discussion.vue +0 -99
- data/lib/vue/cloudobjects/stores/discussion.js +0 -212
- data/lib/vue/layouts/application-announcements.vue +0 -78
- data/lib/vue/layouts/application-component.vue +0 -38
- data/lib/vue/layouts/application-container.vue +0 -48
- data/lib/vue/layouts/application-engines.vue +0 -66
- data/lib/vue/layouts/application-footer.vue +0 -123
- data/lib/vue/layouts/application-header.vue +0 -252
- data/lib/vue/layouts/application-navbar.vue +0 -110
- data/lib/vue/layouts/application-search.vue +0 -86
- data/lib/vue/layouts/application-sidebar.vue +0 -63
- data/lib/vue/pages/errors/app.js +0 -32
- data/lib/vue/pages/invites/app.js +0 -76
- data/lib/vue/pages/mfas/application.js +0 -77
- data/lib/vue/pages/onboarding/application.js +0 -45
- data/lib/vue/pages/onboarding/components/address.vue +0 -120
- data/lib/vue/pages/onboarding/components/buttons.vue +0 -67
- data/lib/vue/pages/onboarding/components/contact.vue +0 -148
- data/lib/vue/pages/onboarding/components/date-time.vue +0 -265
- data/lib/vue/pages/onboarding/components/finish.vue +0 -62
- data/lib/vue/pages/onboarding/components/general-info.vue +0 -93
- data/lib/vue/pages/onboarding/components/indicators.vue +0 -78
- data/lib/vue/pages/onboarding/components/welcome.vue +0 -66
- data/lib/vue/pages/onboarding/show.vue +0 -67
- data/lib/vue/pages/onboarding/store.js +0 -165
- data/lib/vue/pages/otps/application.js +0 -90
- data/lib/vue/pages/passes/application.js +0 -80
- data/lib/vue/pages/websites/application.js +0 -34
- data/lib/vue/panels/panel-announcements.vue +0 -248
- data/lib/vue/panels/panel-bell-notifications.vue +0 -102
- data/lib/vue/panels/panel-files.vue +0 -281
- data/lib/vue/panels/panel-profile.vue +0 -76
- data/lib/vue/panels/panel-support-tickets.vue +0 -163
- data/lib/vue/panels/panel-tasks.vue +0 -124
- data/lib/vue/panels/stores/bell-notifications.js +0 -46
- data/lib/vue/panels/stores/support-tickets.js +0 -103
- data/lib/vue/public.js +0 -83
- data/lib/vue/refactor/shared/cloudobjects/action.vue +0 -193
- data/lib/vue/refactor/shared/cloudobjects/file/grid.vue +0 -215
- data/lib/vue/refactor/shared/cloudobjects/file/list.vue +0 -106
- data/lib/vue/refactor/shared/cloudobjects/file.vue +0 -145
- data/lib/vue/refactor/shared/workflows2/apps/actions/form.vue +0 -232
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/chatroom-form.vue +0 -103
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-clone-form.vue +0 -125
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-file-form.vue +0 -102
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/email-form.vue +0 -190
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/notification-form.vue +0 -124
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/send-cloud-object-file.vue +0 -170
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/task-form.vue +0 -258
- data/lib/vue/refactor/shared/workflows2/apps/actions/index.vue +0 -146
- data/lib/vue/refactor/shared/workflows2/apps/checks/form.vue +0 -200
- data/lib/vue/refactor/shared/workflows2/apps/checks/index.vue +0 -160
- data/lib/vue/refactor/shared/workflows2/apps/index.vue +0 -177
- data/lib/vue/refactor/shared/workflows2/apps/new.vue +0 -97
- data/lib/vue/refactor/shared/workflows2/apps/show.vue +0 -146
- data/lib/vue/refactor/shared/workflows2/components/associations.vue +0 -215
- data/lib/vue/refactor/shared/workflows2/components/chart.vue +0 -91
- data/lib/vue/refactor/shared/workflows2/components/workflow-form.vue +0 -466
- data/lib/vue/refactor/shared/workflows2/components/workflow-status-dropdown.vue +0 -129
- data/lib/vue/refactor/stores/cloudobjects/action.js +0 -181
- data/lib/vue/refactor/stores/cloudobjects/file.js +0 -205
- data/lib/vue/refactor/stores/entities/announcements.js +0 -75
- data/lib/vue/refactor/stores/entities/dashboard.js +0 -251
- data/lib/vue/refactor/stores/entities/workflow.js +0 -185
- data/lib/vue/refactor/stores/panels/announcements.js +0 -153
- data/lib/vue/refactor/stores/panels/notification.js +0 -114
- data/lib/vue/refactor/stores/panels/task.js +0 -66
- data/lib/vue/refactor/stores/panels/tickets.js +0 -129
- data/lib/vue/refactor/stores/role.js +0 -243
- data/lib/vue/refactor/stores/translations.json +0 -60
- data/lib/vue/refactor/stores/users.js +0 -98
- data/lib/vue/shared/dashboards/apps/edit.vue +0 -215
- data/lib/vue/shared/dashboards/apps/index.vue +0 -112
- data/lib/vue/shared/dashboards/apps/new.vue +0 -89
- data/lib/vue/shared/dashboards/apps/show.vue +0 -88
- data/lib/vue/shared/dashboards/components/form.vue +0 -246
- data/lib/vue/shared/services/firebase.js +0 -163
- data/lib/vue/shared/services/translator.js +0 -87
- data/lib/vue/shared/stores/command.js +0 -154
- data/lib/vue/shared/stores/dashboard.js +0 -253
- data/lib/vue/shared/stores/layout.js +0 -61
- data/lib/vue/shared/stores/systemController.js +0 -67
- data/lib/vue/shared/stores/users.js +0 -57
- data/lib/vue/stores/translations.json +0 -177
- data/lib/vue/translation.js +0 -45
- data/lib/webpack/base.js +0 -191
- data/lib/webpack/core.js +0 -93
- data/lib/webpack/engines.js +0 -167
- data/lib/webpack/root.js +0 -105
- data/lib/webpack/version.js +0 -78
- data/vendor/bulma/LICENSE +0 -21
- data/vendor/bulma/bulma.sass +0 -10
- data/vendor/bulma/css/bulma-rtl.css +0 -11851
- data/vendor/bulma/css/bulma-rtl.min.css +0 -1
- data/vendor/bulma/css/bulma.css +0 -11851
- data/vendor/bulma/css/bulma.min.css +0 -1
- data/vendor/bulma/sass/base/_all.sass +0 -6
- data/vendor/bulma/sass/base/animations.sass +0 -5
- data/vendor/bulma/sass/base/generic.sass +0 -145
- data/vendor/bulma/sass/base/helpers.sass +0 -1
- data/vendor/bulma/sass/base/minireset.sass +0 -79
- data/vendor/bulma/sass/components/_all.sass +0 -15
- data/vendor/bulma/sass/components/breadcrumb.sass +0 -77
- data/vendor/bulma/sass/components/card.sass +0 -103
- data/vendor/bulma/sass/components/dropdown.sass +0 -83
- data/vendor/bulma/sass/components/level.sass +0 -79
- data/vendor/bulma/sass/components/media.sass +0 -59
- data/vendor/bulma/sass/components/menu.sass +0 -59
- data/vendor/bulma/sass/components/message.sass +0 -101
- data/vendor/bulma/sass/components/modal.sass +0 -117
- data/vendor/bulma/sass/components/navbar.sass +0 -446
- data/vendor/bulma/sass/components/pagination.sass +0 -167
- data/vendor/bulma/sass/components/panel.sass +0 -121
- data/vendor/bulma/sass/components/tabs.sass +0 -176
- data/vendor/bulma/sass/elements/_all.sass +0 -16
- data/vendor/bulma/sass/elements/box.sass +0 -26
- data/vendor/bulma/sass/elements/button.sass +0 -357
- data/vendor/bulma/sass/elements/container.sass +0 -29
- data/vendor/bulma/sass/elements/content.sass +0 -162
- data/vendor/bulma/sass/elements/form.sass +0 -1
- data/vendor/bulma/sass/elements/icon.sass +0 -46
- data/vendor/bulma/sass/elements/image.sass +0 -73
- data/vendor/bulma/sass/elements/notification.sass +0 -52
- data/vendor/bulma/sass/elements/other.sass +0 -31
- data/vendor/bulma/sass/elements/progress.sass +0 -73
- data/vendor/bulma/sass/elements/table.sass +0 -134
- data/vendor/bulma/sass/elements/tag.sass +0 -140
- data/vendor/bulma/sass/elements/title.sass +0 -70
- data/vendor/bulma/sass/form/_all.sass +0 -9
- data/vendor/bulma/sass/form/checkbox-radio.sass +0 -22
- data/vendor/bulma/sass/form/file.sass +0 -184
- data/vendor/bulma/sass/form/input-textarea.sass +0 -66
- data/vendor/bulma/sass/form/select.sass +0 -88
- data/vendor/bulma/sass/form/shared.sass +0 -60
- data/vendor/bulma/sass/form/tools.sass +0 -215
- data/vendor/bulma/sass/grid/_all.sass +0 -5
- data/vendor/bulma/sass/grid/columns.sass +0 -513
- data/vendor/bulma/sass/grid/tiles.sass +0 -36
- data/vendor/bulma/sass/helpers/_all.sass +0 -12
- data/vendor/bulma/sass/helpers/color.sass +0 -39
- data/vendor/bulma/sass/helpers/flexbox.sass +0 -35
- data/vendor/bulma/sass/helpers/float.sass +0 -10
- data/vendor/bulma/sass/helpers/other.sass +0 -14
- data/vendor/bulma/sass/helpers/overflow.sass +0 -2
- data/vendor/bulma/sass/helpers/position.sass +0 -7
- data/vendor/bulma/sass/helpers/spacing.sass +0 -31
- data/vendor/bulma/sass/helpers/typography.sass +0 -103
- data/vendor/bulma/sass/helpers/visibility.sass +0 -122
- data/vendor/bulma/sass/layout/_all.sass +0 -6
- data/vendor/bulma/sass/layout/footer.sass +0 -11
- data/vendor/bulma/sass/layout/hero.sass +0 -153
- data/vendor/bulma/sass/layout/section.sass +0 -17
- data/vendor/bulma/sass/utilities/_all.sass +0 -9
- data/vendor/bulma/sass/utilities/animations.sass +0 -1
- data/vendor/bulma/sass/utilities/controls.sass +0 -49
- data/vendor/bulma/sass/utilities/derived-variables.sass +0 -114
- data/vendor/bulma/sass/utilities/extends.sass +0 -25
- data/vendor/bulma/sass/utilities/functions.sass +0 -135
- data/vendor/bulma/sass/utilities/initial-variables.sass +0 -79
- data/vendor/bulma/sass/utilities/mixins.sass +0 -303
- data/vendor/lesli-css/_index.scss +0 -34
- data/vendor/lesli-css/lesli.scss +0 -51
- data/vendor/lesli-css/license +0 -28
- data/vendor/lesli-css/src/base/fonts.scss +0 -50
- data/vendor/lesli-css/src/base/normalize.scss +0 -118
- data/vendor/lesli-css/src/components/blockquote.scss +0 -61
- data/vendor/lesli-css/src/components/columns.scss +0 -92
- data/vendor/lesli-css/src/components/container.scss +0 -47
- data/vendor/lesli-css/src/components/navigation.scss +0 -59
- data/vendor/lesli-css/src/functions/colors.scss +0 -184
- data/vendor/lesli-css/src/helpers/units.scss +0 -44
- data/vendor/lesli-css/src/mixins/breakpoint.scss +0 -184
- data/vendor/lesli-css/src/mixins/flex.scss +0 -80
- data/vendor/lesli-css/src/mixins/scrollbar.scss +0 -46
- data/vendor/lesli-css/src/settings/variables.scss +0 -26
- data/vendor/lesli-css/tests/base/normalize.spec.scss +0 -125
- data/vendor/lesli-css/tests/functions/colors.spec.scss +0 -117
- data/vendor/lesli-css/tests/mixins/breakpoint.spec.scss +0 -429
- data/vendor/lesli-css/tests/mixins/scrollbar.spec.scss +0 -82
- data/vendor/lesli-css/vendor/normalize.scss +0 -351
- data/vendor/remixicon/License +0 -201
- data/vendor/remixicon/fonts/remixicon.css +0 -2583
- /data/{vendor/lesli-css/src/components/grid.scss → app/assets/stylesheets/lesli/application.css} +0 -0
- /data/db/migrate/v1/{0010001010_create_lesli_account_details.rb → 0000110210_create_lesli_account_details.rb} +0 -0
- /data/db/structure/{00000008_custom_fields.json → 00000300_custom_fields.json} +0 -0
- /data/lib/assets/javascripts/lesli/{i18n.js → i18n_js} +0 -0
@@ -1,281 +0,0 @@
|
|
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 { ref, inject, watch } from "vue"
|
38
|
-
|
39
|
-
// · import store
|
40
|
-
import { useCloudObjectFileStore } from "Lesli/vue/stores/cloudobjects/file.js"
|
41
|
-
import { useLayout } from "Lesli/vue/stores/layout"
|
42
|
-
|
43
|
-
// · implement stores
|
44
|
-
const storeFiles = useCloudObjectFileStore()
|
45
|
-
const storeLayout = useLayout()
|
46
|
-
|
47
|
-
// · implement composable
|
48
|
-
const msg = inject("msg")
|
49
|
-
|
50
|
-
// · defining translations
|
51
|
-
const translations = {
|
52
|
-
core: {
|
53
|
-
shared: I18n.t("core.shared"),
|
54
|
-
}
|
55
|
-
}
|
56
|
-
|
57
|
-
// · file type to upload, this is the v-model of the select
|
58
|
-
const fileType = ref('')
|
59
|
-
|
60
|
-
// · this indicates if the file uploader needs to clear the files or not
|
61
|
-
const clearFileUploader = ref(false)
|
62
|
-
|
63
|
-
// · extensions that could be used to upload files
|
64
|
-
const acceptedFiles = {
|
65
|
-
images: {
|
66
|
-
extensions: ["jpg", "jpeg", "png", "gif", "svg"],
|
67
|
-
accept: ".jpg,.jpeg,.png,.gif,.svg",
|
68
|
-
},
|
69
|
-
plaintext: {
|
70
|
-
extensions: ["txt", "md", "log", "csv"],
|
71
|
-
accept: ".txt,.md,.log,.csv",
|
72
|
-
},
|
73
|
-
documents: {
|
74
|
-
extensions: ["pdf", "doc", "docx", "xls", "xlsx"],
|
75
|
-
accept: ".pdf,.doc,.docx,.xls,.xlsx",
|
76
|
-
},
|
77
|
-
}
|
78
|
-
|
79
|
-
|
80
|
-
/**
|
81
|
-
* @param {File[]} files this files will be validated
|
82
|
-
* @returns {boolean} true if the files are valid and false if not
|
83
|
-
* @description this function validate the files
|
84
|
-
*/
|
85
|
-
const validateFiles = (files = []) => {
|
86
|
-
|
87
|
-
// · validate the length of the files array
|
88
|
-
if (files.length === 0) {
|
89
|
-
msg.danger(translations.core.shared.messages_danger_files_empty)
|
90
|
-
return false
|
91
|
-
}
|
92
|
-
|
93
|
-
// · validate the number of files that are allowed
|
94
|
-
if (files.length > storeFiles.maxFiles) {
|
95
|
-
msg.danger(translations.core.shared.messages_danger_files_exceeded)
|
96
|
-
return false
|
97
|
-
}
|
98
|
-
|
99
|
-
// · this variable is used to check if some file is invalid
|
100
|
-
// · if this variable is true, the files aren't valid
|
101
|
-
const hasOutOfSizeFiles = files.some(file => {
|
102
|
-
return parseInt(file.size) > storeFiles.maxSizeFile
|
103
|
-
})
|
104
|
-
|
105
|
-
// · validate if some file is out of size
|
106
|
-
if (hasOutOfSizeFiles) {
|
107
|
-
msg.danger(translations.core.shared.messages_danger_files_out_of_size)
|
108
|
-
return false
|
109
|
-
}
|
110
|
-
|
111
|
-
// · if validations are ok, return true
|
112
|
-
return true
|
113
|
-
}
|
114
|
-
|
115
|
-
/**
|
116
|
-
*
|
117
|
-
* @param {File} file this is the file that will be converted to base64
|
118
|
-
* @description this function will convert a file to base64
|
119
|
-
* @returns {Promise<string>} this function will return a promise with the base64 string
|
120
|
-
*/
|
121
|
-
const convertToBase64 = (file) => {
|
122
|
-
return new Promise((resolve, reject) => {
|
123
|
-
// · create a new file reader object
|
124
|
-
const reader = new FileReader()
|
125
|
-
|
126
|
-
// · when the file is loaded, convert it to base64
|
127
|
-
reader.readAsDataURL(file)
|
128
|
-
|
129
|
-
// · when the file is loaded, resolve the promise
|
130
|
-
reader.onload = () => {
|
131
|
-
resolve(reader.result)
|
132
|
-
}
|
133
|
-
|
134
|
-
// · when the file is not loaded, reject the promise
|
135
|
-
reader.onerror = (error) => {
|
136
|
-
reject(error)
|
137
|
-
}
|
138
|
-
})
|
139
|
-
}
|
140
|
-
|
141
|
-
/**
|
142
|
-
*
|
143
|
-
* @param {*} name of the file
|
144
|
-
* @param {*} attachment this is the file that will be uploaded
|
145
|
-
* @param {*} type can be "formData" or "base64"
|
146
|
-
* @description this function returns an object with a correct format accepted by the backend
|
147
|
-
* @returns {object} this function returns an object with the correct format
|
148
|
-
*/
|
149
|
-
const formatFile = (name, attachment, type = 'formData') => {
|
150
|
-
// · this variable contains something like cloudObject_file, for example: project_file
|
151
|
-
// · is necessary to get the singular form of the word
|
152
|
-
|
153
|
-
let cloudObjectModel = `${storeFiles.utils.singularize(storeFiles.cloudObject)}_file`
|
154
|
-
|
155
|
-
if (type === 'base64') {
|
156
|
-
return {
|
157
|
-
[cloudObjectModel]: {
|
158
|
-
// · name of the file
|
159
|
-
name: name + '-' + new Date().getTime(),
|
160
|
-
|
161
|
-
// · file extension that user selected
|
162
|
-
file_type: fileType.value,
|
163
|
-
|
164
|
-
// · file in base64
|
165
|
-
attachment
|
166
|
-
}
|
167
|
-
}
|
168
|
-
}
|
169
|
-
|
170
|
-
// · if type is formData, return the file in formData format
|
171
|
-
const formData = new FormData()
|
172
|
-
formData.append(`${cloudObjectModel}[file_type]`, fileType.value)
|
173
|
-
formData.append(`${cloudObjectModel}[attachment]`, attachment)
|
174
|
-
formData.append(`${cloudObjectModel}[name]`, name + '-' + new Date().getTime())
|
175
|
-
return formData
|
176
|
-
}
|
177
|
-
|
178
|
-
/**
|
179
|
-
* @description this function compares the accepted files that were passed by props and form a string
|
180
|
-
* @returns {string} a string with the accepted files extensions
|
181
|
-
* @example
|
182
|
-
* if the accepted files are: images
|
183
|
-
* the function will return: ".jpg,.jpeg,.png,.gif,.svg"
|
184
|
-
*/
|
185
|
-
const getAcceptedFiles = () => {
|
186
|
-
const accepted = storeFiles.acceptedFiles.reduce((acc, fileType) => {
|
187
|
-
return acc + acceptedFiles[fileType].accept
|
188
|
-
}, '')
|
189
|
-
return accepted
|
190
|
-
}
|
191
|
-
|
192
|
-
/**
|
193
|
-
* @param {File[]} files this files are received from the file uploader
|
194
|
-
* @description this function is called when the user drops or select files in the file uploader
|
195
|
-
*/
|
196
|
-
const onDropFiles = (files) => {
|
197
|
-
// set files to upload to the store
|
198
|
-
storeFiles.filesToUpload = files
|
199
|
-
}
|
200
|
-
|
201
|
-
/**
|
202
|
-
* @description This function is called when the user click on the upload button.
|
203
|
-
*/
|
204
|
-
const onUploadFiles = async () => {
|
205
|
-
|
206
|
-
const arefilesValid = validateFiles(storeFiles.filesToUpload)
|
207
|
-
|
208
|
-
// · If files aren't valid, stop the function
|
209
|
-
if (!arefilesValid) {
|
210
|
-
// · set file type to empty
|
211
|
-
fileType.value = ''
|
212
|
-
return
|
213
|
-
}
|
214
|
-
|
215
|
-
// · If file type select isn't valid, stop the function
|
216
|
-
if (!fileType.value) {
|
217
|
-
msg.danger(translations.core.shared.messages_danger_file_type_required)
|
218
|
-
// · set file type to empty
|
219
|
-
fileType.value = ''
|
220
|
-
return
|
221
|
-
}
|
222
|
-
|
223
|
-
// · files that will be sent to the server
|
224
|
-
const filesToUpload = storeFiles.filesToUpload.map((file) => formatFile(file.name.split('.')[0], file))
|
225
|
-
|
226
|
-
// · send the files to the server
|
227
|
-
storeFiles.uploadFiles(filesToUpload)
|
228
|
-
|
229
|
-
// · change the reactive variable to true for clear the file uploader
|
230
|
-
clearFileUploader.value = true
|
231
|
-
|
232
|
-
// · set file type to empty
|
233
|
-
fileType.value = ''
|
234
|
-
|
235
|
-
// · Hide the file uploader panel
|
236
|
-
storeLayout.showFiles = false
|
237
|
-
}
|
238
|
-
|
239
|
-
watch(() => storeFiles.cloudModule, () => {
|
240
|
-
if (storeFiles.cloudModule) {
|
241
|
-
storeFiles.fetchFileTypes()
|
242
|
-
}
|
243
|
-
})
|
244
|
-
</script>
|
245
|
-
|
246
|
-
<template>
|
247
|
-
<lesli-panel v-model:open="storeLayout.showFiles">
|
248
|
-
<template #header>
|
249
|
-
{{ translations.core.shared.view_text_add_new_files }}
|
250
|
-
</template>
|
251
|
-
<template #default>
|
252
|
-
<div class="p-6">
|
253
|
-
<p class="mb-1">
|
254
|
-
{{ translations.core.shared.column_files_file_type }}
|
255
|
-
</p>
|
256
|
-
<lesli-select
|
257
|
-
v-model="fileType"
|
258
|
-
:placeholder="translations.core.shared.view_placeholder_select_option"
|
259
|
-
:options="storeFiles.fileTypes"
|
260
|
-
v-if="!storeFiles.loading"
|
261
|
-
/>
|
262
|
-
|
263
|
-
|
264
|
-
<p class="mt-6">
|
265
|
-
{{ translations.core.shared.column_files_attachment }}
|
266
|
-
</p>
|
267
|
-
<lesli-file-uploader
|
268
|
-
:file-type="fileType?.label"
|
269
|
-
@files-change="onDropFiles"
|
270
|
-
:clear-files="clearFileUploader"
|
271
|
-
@events-after-clear="clearFileUploader = false"
|
272
|
-
:accepted-files="getAcceptedFiles()"
|
273
|
-
/>
|
274
|
-
|
275
|
-
<button @click="onUploadFiles" class="button is-fullwidth has-text-centered is-primary mt-4">
|
276
|
-
{{ translations.core.shared.view_btn_save_changes }}
|
277
|
-
</button>
|
278
|
-
</div>
|
279
|
-
</template>
|
280
|
-
</lesli-panel>
|
281
|
-
</template>
|
@@ -1,76 +0,0 @@
|
|
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 { ref, reactive, onMounted, watch, computed, inject } from "vue"
|
39
|
-
|
40
|
-
|
41
|
-
// · import stores
|
42
|
-
import { useProfile } from "Lesli/vue/stores/profile"
|
43
|
-
import { useLayout } from "Lesli/vue/stores/layout"
|
44
|
-
|
45
|
-
|
46
|
-
// · implement stores
|
47
|
-
const storeLayout = useLayout()
|
48
|
-
const storeProfile = useProfile()
|
49
|
-
|
50
|
-
|
51
|
-
// · initializing
|
52
|
-
onMounted(() => {
|
53
|
-
storeProfile.fetch()
|
54
|
-
})
|
55
|
-
</script>
|
56
|
-
<template>
|
57
|
-
<lesli-panel class="lesli-panel-profile" v-model:open="storeLayout.showProfile">
|
58
|
-
<template #default>
|
59
|
-
<figure class="image is-128x128 m-auto">
|
60
|
-
<span class="alternative-avatar">
|
61
|
-
{{ storeProfile.profile.initials }}
|
62
|
-
</span>
|
63
|
-
</figure>
|
64
|
-
<div class="panel-profile-details has-text-centered py-4">
|
65
|
-
<h4 class="is-size-4">{{ storeProfile.profile.full_name }}</h4>
|
66
|
-
<h6 class="is-size-6">{{ storeProfile.profile.email }}</h6>
|
67
|
-
</div>
|
68
|
-
<div class="panel-profile-actions py-4">
|
69
|
-
<div class="buttons is-justify-content-center">
|
70
|
-
<lesli-button icon-only icon="logout">
|
71
|
-
</lesli-button>
|
72
|
-
</div>
|
73
|
-
</div>
|
74
|
-
</template>
|
75
|
-
</lesli-panel>
|
76
|
-
</template>
|
@@ -1,163 +0,0 @@
|
|
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 · Ruby on Rails SaaS Development Framework.
|
22
|
-
|
23
|
-
Made with ♥ by LesliTech
|
24
|
-
Building a better future, one line of code at a time.
|
25
|
-
|
26
|
-
@contact hello@lesli.tech
|
27
|
-
@website https://www.lesli.tech
|
28
|
-
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
29
|
-
|
30
|
-
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
31
|
-
// ·
|
32
|
-
*/
|
33
|
-
|
34
|
-
|
35
|
-
// TODO: Move this to own engine
|
36
|
-
|
37
|
-
|
38
|
-
// · import vue tools
|
39
|
-
import { inject, watch } from "vue"
|
40
|
-
import { useRouter } from "vue-router"
|
41
|
-
|
42
|
-
|
43
|
-
// · import store
|
44
|
-
import { useLayout } from "Lesli/vue/shared/stores/layout"
|
45
|
-
import { useTickets } from "Lesli/vue/panels/stores/support-tickets"
|
46
|
-
|
47
|
-
|
48
|
-
// ·
|
49
|
-
import { LesliTextEditor } from "lesli-vue/components"
|
50
|
-
|
51
|
-
|
52
|
-
// · initialize/inject plugins
|
53
|
-
const router = useRouter()
|
54
|
-
const url = inject("url")
|
55
|
-
|
56
|
-
|
57
|
-
// · implement stores
|
58
|
-
const storeLayout = useLayout()
|
59
|
-
const storeTicketsPanel = useTickets()
|
60
|
-
|
61
|
-
|
62
|
-
// · defining translations
|
63
|
-
const translations = {
|
64
|
-
tickets: {},
|
65
|
-
lesli: {
|
66
|
-
shared:{}
|
67
|
-
}
|
68
|
-
}
|
69
|
-
|
70
|
-
|
71
|
-
// ·
|
72
|
-
const columns = [{
|
73
|
-
field: "subject",
|
74
|
-
label: "subject"
|
75
|
-
}, {
|
76
|
-
field: "status_name",
|
77
|
-
label: "Status"
|
78
|
-
}]
|
79
|
-
|
80
|
-
|
81
|
-
// . Reset form on create
|
82
|
-
storeTicketsPanel.resetForm()
|
83
|
-
|
84
|
-
|
85
|
-
// .
|
86
|
-
watch(() => storeLayout.showSupportTickets, () => {
|
87
|
-
if (storeLayout.showSupportTickets) {
|
88
|
-
storeTicketsPanel.fetchTickets()
|
89
|
-
|
90
|
-
if (!storeTicketsPanel.loaded) {
|
91
|
-
//storeTicketsPanel.getTicketOptions()
|
92
|
-
}
|
93
|
-
}
|
94
|
-
})
|
95
|
-
|
96
|
-
</script>
|
97
|
-
|
98
|
-
<template>
|
99
|
-
<lesli-panel class="lesli-panel-support-tickets" v-model:open="storeLayout.showSupportTickets">
|
100
|
-
<template #header>
|
101
|
-
Support tickets
|
102
|
-
</template>
|
103
|
-
<template #default>
|
104
|
-
<div class="lastest-tickets" v-if="storeTicketsPanel.tickets.length > 0">
|
105
|
-
<h4>Latest tickets</h4>
|
106
|
-
<lesli-table
|
107
|
-
class="is-narrow"
|
108
|
-
:columns="columns"
|
109
|
-
:records="storeTicketsPanel.tickets"
|
110
|
-
:loading="storeTicketsPanel.loading"
|
111
|
-
:href="(ticket) => url.support('tickets/:id', ticket.id)">
|
112
|
-
</lesli-table>
|
113
|
-
</div>
|
114
|
-
<hr>
|
115
|
-
<div class="form">
|
116
|
-
<lesli-form flat @submit="storeTicketsPanel.postTicket">
|
117
|
-
<div class="field">
|
118
|
-
<label class="label">
|
119
|
-
{{ translations.tickets.column_subject }}
|
120
|
-
{{ translations.tickets.column_subject }}
|
121
|
-
<sup class="has-text-danger">*</sup>
|
122
|
-
</label>
|
123
|
-
<div class="control">
|
124
|
-
<input type="text" class="input" required v-model="storeTicketsPanel.ticket.subject">
|
125
|
-
</div>
|
126
|
-
</div>
|
127
|
-
|
128
|
-
<div class="field">
|
129
|
-
<label class="label">
|
130
|
-
{{ translations.tickets.column_type }}
|
131
|
-
<sup class="has-text-danger">*</sup>
|
132
|
-
</label>
|
133
|
-
<div class="control">
|
134
|
-
<lesli-select
|
135
|
-
:options="storeTicketsPanel.typesSelect"
|
136
|
-
v-model="storeTicketsPanel.ticket.cloud_help_catalog_ticket_types_id">
|
137
|
-
</lesli-select>
|
138
|
-
</div>
|
139
|
-
</div>
|
140
|
-
|
141
|
-
<div class="field">
|
142
|
-
<label class="label">
|
143
|
-
{{ translations.tickets.column_description }}
|
144
|
-
<sup class="has-text-danger">*</sup>
|
145
|
-
</label>
|
146
|
-
<div class="control">
|
147
|
-
<lesli-text-editor mode="small" v-model="storeTicketsPanel.ticket.description">
|
148
|
-
</lesli-text-editor>
|
149
|
-
</div>
|
150
|
-
</div>
|
151
|
-
|
152
|
-
<div class="field">
|
153
|
-
<div class="control">
|
154
|
-
<lesli-button icon="save">
|
155
|
-
{{ translations.lesli.shared.button_save }}
|
156
|
-
</lesli-button>
|
157
|
-
</div>
|
158
|
-
</div>
|
159
|
-
</lesli-form>
|
160
|
-
</div>
|
161
|
-
</template>
|
162
|
-
</lesli-panel>
|
163
|
-
</template>
|
@@ -1,124 +0,0 @@
|
|
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 { ref, reactive, onMounted, watch, computed, inject } from "vue"
|
38
|
-
|
39
|
-
|
40
|
-
// · initialize/inject plugins
|
41
|
-
const url = inject("url")
|
42
|
-
const date = inject("date")
|
43
|
-
|
44
|
-
|
45
|
-
// · import stores
|
46
|
-
import { useTask } from "Lesli/vue/stores/panels/task"
|
47
|
-
import { useLayout } from "Lesli/vue/stores/layout"
|
48
|
-
|
49
|
-
|
50
|
-
// · implement stores
|
51
|
-
const storeTask = useTask()
|
52
|
-
const storeLayout = useLayout()
|
53
|
-
|
54
|
-
|
55
|
-
const translations = {
|
56
|
-
focus: {
|
57
|
-
tasks: I18n.t('focus.tasks'),
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
// · defining props
|
62
|
-
const props = defineProps({
|
63
|
-
instanceEndpoint: {
|
64
|
-
type: String,
|
65
|
-
default: 'focus'
|
66
|
-
}
|
67
|
-
})
|
68
|
-
|
69
|
-
// ·
|
70
|
-
watch(() => storeLayout.showTasks, () => {
|
71
|
-
storeTask.fetch()
|
72
|
-
})
|
73
|
-
|
74
|
-
|
75
|
-
function classColor(notification){
|
76
|
-
switch (notification.importance) {
|
77
|
-
case 'urgent': {
|
78
|
-
return 'has-text-danger'
|
79
|
-
}
|
80
|
-
case 'important': {
|
81
|
-
return 'has-text-success'
|
82
|
-
}
|
83
|
-
default: {
|
84
|
-
return 'has-text-info'
|
85
|
-
}
|
86
|
-
}
|
87
|
-
}
|
88
|
-
|
89
|
-
</script>
|
90
|
-
<template>
|
91
|
-
<lesli-panel class="lesli-panel-tasks" v-model:open="storeLayout.showTasks">
|
92
|
-
<template #header>
|
93
|
-
{{ translations.focus.tasks.view_title_tasks_due_today }}
|
94
|
-
({{ storeTask.records.length }})
|
95
|
-
</template>
|
96
|
-
<template #default>
|
97
|
-
<ul class="menu-list p-2">
|
98
|
-
<li v-for="notification in storeTask.records" :key="notification.id" >
|
99
|
-
<a :href="`/${instanceEndpoint}/tasks/${notification.id}/edit`">
|
100
|
-
{{ notification.title }}
|
101
|
-
</a>
|
102
|
-
<p v-if="notification.model_global_identifier">
|
103
|
-
<small class="has-text-grey-light">
|
104
|
-
{{ `${notification.model_global_identifier}` }}
|
105
|
-
</small>
|
106
|
-
</p>
|
107
|
-
<p>
|
108
|
-
<small class="has-text-grey-light">
|
109
|
-
{{ `${translations.focus.tasks.column_deadline} : ${notification.deadline}` }}
|
110
|
-
</small>
|
111
|
-
</p>
|
112
|
-
<p>
|
113
|
-
<small class="has-text-grey-light">
|
114
|
-
{{ `${translations.focus.tasks.column_importance} :` }}
|
115
|
-
</small>
|
116
|
-
<small :class="classColor(notification)">
|
117
|
-
{{ notification.importance }}
|
118
|
-
</small>
|
119
|
-
</p>
|
120
|
-
</li>
|
121
|
-
</ul>
|
122
|
-
</template>
|
123
|
-
</lesli-panel>
|
124
|
-
</template>
|
@@ -1,46 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
Copyright (c) 2022, all rights reserved.
|
3
|
-
|
4
|
-
All the information provided by this platform is protected by international laws related to
|
5
|
-
industrial property, intellectual property, copyright and relative international laws.
|
6
|
-
All intellectual or industrial property rights of the code, texts, trade mark, design,
|
7
|
-
pictures and any other information belongs to the owner of this platform.
|
8
|
-
|
9
|
-
Without the written permission of the owner, any replication, modification,
|
10
|
-
transmission, publication is strictly forbidden.
|
11
|
-
|
12
|
-
For more information read the license file including with this software.
|
13
|
-
|
14
|
-
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
15
|
-
// ·
|
16
|
-
*/
|
17
|
-
|
18
|
-
|
19
|
-
// ·
|
20
|
-
import { defineStore } from "pinia"
|
21
|
-
|
22
|
-
|
23
|
-
// ·
|
24
|
-
export const useNotifications = defineStore("lesli.panelBellNotifications", {
|
25
|
-
state: () => {
|
26
|
-
return {
|
27
|
-
loading: false,
|
28
|
-
notifications: {
|
29
|
-
pagination: {},
|
30
|
-
records: []
|
31
|
-
}
|
32
|
-
}
|
33
|
-
},
|
34
|
-
actions: {
|
35
|
-
|
36
|
-
get() {
|
37
|
-
this.http.get(this.url.bell("notifications")).then(result => {
|
38
|
-
this.notifications.pagination = result.pagination
|
39
|
-
this.notifications.records = result.records
|
40
|
-
console.log(result)
|
41
|
-
}).catch(error => {
|
42
|
-
console.log(error)
|
43
|
-
})
|
44
|
-
}
|
45
|
-
}
|
46
|
-
})
|