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,246 +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 { inject, onMounted, watch } from "vue"
|
38
|
-
|
39
|
-
|
40
|
-
// · import stores
|
41
|
-
import { useDashboard } from "Lesli/vue/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
|
-
// ·
|
60
|
-
const props = defineProps({
|
61
|
-
isEditable: {
|
62
|
-
type: Boolean,
|
63
|
-
require: false
|
64
|
-
}
|
65
|
-
})
|
66
|
-
|
67
|
-
|
68
|
-
// · translations
|
69
|
-
const translations = {
|
70
|
-
shared: {}, //i 18n.t("lesli.shared"),
|
71
|
-
dashboards: {}, //i 18n.t("lesli.dashboards"),
|
72
|
-
|
73
|
-
components: I18n.t('core.dashboard/components'),
|
74
|
-
core: I18n.t('core.shared'),
|
75
|
-
roles: I18n.t('core.roles'),
|
76
|
-
main: I18n.t(`${storeDashboard.engine}.dashboards`),
|
77
|
-
main_components: I18n.t(`${storeDashboard.engine}.dashboard/components`)
|
78
|
-
}
|
79
|
-
|
80
|
-
|
81
|
-
// ·
|
82
|
-
const default_options = {
|
83
|
-
yes: {
|
84
|
-
label: translations.core.view_text_yes,
|
85
|
-
value: true
|
86
|
-
},
|
87
|
-
no: {
|
88
|
-
label: translations.core.view_text_no,
|
89
|
-
value: false
|
90
|
-
}
|
91
|
-
}
|
92
|
-
|
93
|
-
|
94
|
-
// ·
|
95
|
-
const layout_options = [{
|
96
|
-
label: '25%',
|
97
|
-
value: 3
|
98
|
-
}, {
|
99
|
-
label: '33%',
|
100
|
-
value: 4
|
101
|
-
}, {
|
102
|
-
label: '50%',
|
103
|
-
value: 6
|
104
|
-
}, {
|
105
|
-
label: '66%',
|
106
|
-
value: 8
|
107
|
-
}, {
|
108
|
-
label: '75%',
|
109
|
-
value: 9
|
110
|
-
}, {
|
111
|
-
label: '100%',
|
112
|
-
value: 12
|
113
|
-
}]
|
114
|
-
|
115
|
-
|
116
|
-
// ·
|
117
|
-
const onUpdate = () => {
|
118
|
-
storeDashboard.updateDashboard()
|
119
|
-
}
|
120
|
-
|
121
|
-
|
122
|
-
// ·
|
123
|
-
const onCreate = () => {
|
124
|
-
storeDashboard.postDashboard().then(()=> {
|
125
|
-
router.push(url[storeDashboard.engine]('dashboards').s)
|
126
|
-
})
|
127
|
-
}
|
128
|
-
|
129
|
-
|
130
|
-
// ·
|
131
|
-
function addComponent(){
|
132
|
-
msg.warning(translations.dashboards.messages_warning_save_changes_reminder)
|
133
|
-
|
134
|
-
let new_component = {
|
135
|
-
//id: `${storeDashboard.new_component_id}-${storeDashboard.default_component_configuration.index}`,
|
136
|
-
name: '',
|
137
|
-
component_id: storeDashboard.new_component_id.replaceAll("_", "-"),
|
138
|
-
layout: storeDashboard.default_component_configuration.layout,
|
139
|
-
index: storeDashboard.default_component_configuration.index++,
|
140
|
-
query_configuration: {
|
141
|
-
filters: {},
|
142
|
-
pagination: {}
|
143
|
-
},
|
144
|
-
custom_configuration: {
|
145
|
-
arrangement: {}
|
146
|
-
}
|
147
|
-
}
|
148
|
-
storeDashboard.dashboard.components.push(new_component)
|
149
|
-
}
|
150
|
-
|
151
|
-
|
152
|
-
// ·
|
153
|
-
function selectDashboardComponent(selected_component){
|
154
|
-
if(storeDashboard.dashboard.components.find( component => component.id == selected_component.id)){
|
155
|
-
storeDashboard.selected_dashboard_component = selected_component
|
156
|
-
}
|
157
|
-
}
|
158
|
-
|
159
|
-
|
160
|
-
// ·
|
161
|
-
function removeComponent(deleted_component){
|
162
|
-
msg.warning(translations.dashboards.messages_warning_save_changes_reminder)
|
163
|
-
storeDashboard.dashboard.components = storeDashboard.dashboard.components.filter((component)=> {
|
164
|
-
return component.id != deleted_component.id
|
165
|
-
})
|
166
|
-
|
167
|
-
// We check if the component id is a real number. If it is, de stage it to delete it when saved
|
168
|
-
if(! isNaN(deleted_component.id)){
|
169
|
-
deleted_component._destroy = true
|
170
|
-
storeDashboard.deleted_components.push(deleted_component)
|
171
|
-
}
|
172
|
-
}
|
173
|
-
|
174
|
-
|
175
|
-
// ·
|
176
|
-
function onDeleteDashboard() {
|
177
|
-
storeDashboard.deleteDashboard().then(()=> {
|
178
|
-
router.push(url[props.engine]('dashboards').s)
|
179
|
-
})
|
180
|
-
}
|
181
|
-
|
182
|
-
|
183
|
-
// ·
|
184
|
-
onMounted(() => {
|
185
|
-
if (!props.isEditable){
|
186
|
-
storeDashboard.resetDashboard()
|
187
|
-
}
|
188
|
-
})
|
189
|
-
</script>
|
190
|
-
<template>
|
191
|
-
<lesli-form class="mb-6" @submit="isEditable ? onUpdate() : onCreate()">
|
192
|
-
<div class="columns">
|
193
|
-
|
194
|
-
<!-- Name -->
|
195
|
-
<div class="column is-4">
|
196
|
-
<div class="field">
|
197
|
-
<label class="label">
|
198
|
-
{{ translations.dashboards.column_name }}
|
199
|
-
</label>
|
200
|
-
<div class="control">
|
201
|
-
<input class="input" type="text" v-model="storeDashboard.dashboard.name" required>
|
202
|
-
</div>
|
203
|
-
</div>
|
204
|
-
</div>
|
205
|
-
|
206
|
-
<!-- Default -->
|
207
|
-
<div class="column is-4">
|
208
|
-
<div class="field">
|
209
|
-
<label class="label">{{ translations.dashboards.column_default }}</label>
|
210
|
-
<lesli-select
|
211
|
-
v-model="storeDashboard.dashboard.default"
|
212
|
-
:options="default_options">
|
213
|
-
</lesli-select>
|
214
|
-
</div>
|
215
|
-
</div>
|
216
|
-
|
217
|
-
<!-- Components -->
|
218
|
-
<div class="column is-4">
|
219
|
-
<div class="field">
|
220
|
-
<label class="label">
|
221
|
-
{{ translations.dashboards.view_add_component }}
|
222
|
-
</label>
|
223
|
-
<div class="control">
|
224
|
-
<lesli-select
|
225
|
-
v-model="storeDashboard.new_component_id"
|
226
|
-
:options="storeDashboard.options.component_ids"
|
227
|
-
@change="addComponent">
|
228
|
-
</lesli-select>
|
229
|
-
</div>
|
230
|
-
</div>
|
231
|
-
</div>
|
232
|
-
</div>
|
233
|
-
|
234
|
-
<!-- Save button -->
|
235
|
-
<div class="buttons">
|
236
|
-
<lesli-button icon="save" :loading="storeDashboard.loading">
|
237
|
-
{{ translations.shared.button_save }}
|
238
|
-
</lesli-button>
|
239
|
-
<!--
|
240
|
-
<lesli-button danger icon="delete" @click="onDeleteDashboard">
|
241
|
-
{{ translations.dashboards.view_btn_delete_dashboard }}
|
242
|
-
</lesli-button>
|
243
|
-
-->
|
244
|
-
</div>
|
245
|
-
</lesli-form>
|
246
|
-
</template>
|
@@ -1,163 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
|
3
|
-
Lesli
|
4
|
-
|
5
|
-
Copyright (c) 2023, Lesli Technologies, S. A.
|
6
|
-
|
7
|
-
This program is free software: you can redistribute it and/or modify
|
8
|
-
it under the terms of the GNU General Public License as published by
|
9
|
-
the Free Software Foundation, either version 3 of the License, or
|
10
|
-
(at your option) any later version.
|
11
|
-
|
12
|
-
This program is distributed in the hope that it will be useful,
|
13
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
GNU General Public License for more details.
|
16
|
-
|
17
|
-
You should have received a copy of the GNU General Public License
|
18
|
-
along with this program. If not, see http://www.gnu.org/licenses/.
|
19
|
-
|
20
|
-
Lesli · Your Smart Business Assistant.
|
21
|
-
|
22
|
-
Made with ♥ by https://www.lesli.tech
|
23
|
-
Building a better future, one line of code at a time.
|
24
|
-
|
25
|
-
@contact hello@lesli.tech
|
26
|
-
@website https://lesli.tech
|
27
|
-
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
28
|
-
|
29
|
-
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
30
|
-
// ·
|
31
|
-
|
32
|
-
*/
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
// · Import pinia tools
|
37
|
-
import { ref } from "vue"
|
38
|
-
import { defineStore } from "pinia"
|
39
|
-
|
40
|
-
|
41
|
-
// · Import firebase tools
|
42
|
-
import { getFirestore } from "firebase/firestore"
|
43
|
-
import { getApp, initializeApp, getApps } from "firebase/app"
|
44
|
-
import { getAuth, signInWithEmailAndPassword } from "firebase/auth"
|
45
|
-
import { collection, query, where, onSnapshot, documentId, doc } from "firebase/firestore"
|
46
|
-
import { getStorage } from "firebase/storage"
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
// ·
|
51
|
-
export const useFirebase = defineStore("core.firebase", {
|
52
|
-
|
53
|
-
state: () => {
|
54
|
-
|
55
|
-
// check if we have at least a valid structure of credentials for firebase
|
56
|
-
if (
|
57
|
-
!lesli.providers.firebase.config ||
|
58
|
-
!lesli.providers.firebase.user.email ||
|
59
|
-
!lesli.providers.firebase.user.password
|
60
|
-
) {
|
61
|
-
return debug.error("No valid provider credentials found for firebase")
|
62
|
-
}
|
63
|
-
|
64
|
-
var user = null
|
65
|
-
|
66
|
-
// · When the store is created, the firebase app is initialized
|
67
|
-
if (getApps().length === 0) {
|
68
|
-
initializeApp(lesli.providers.firebase.config)
|
69
|
-
}
|
70
|
-
|
71
|
-
|
72
|
-
// try to login if user is empty
|
73
|
-
if (!user) {
|
74
|
-
|
75
|
-
// if user is not logged, try to login
|
76
|
-
signInWithEmailAndPassword(
|
77
|
-
getAuth(),
|
78
|
-
lesli.providers.firebase.user.email,
|
79
|
-
lesli.providers.firebase.user.password
|
80
|
-
).then((result) => {
|
81
|
-
user = result
|
82
|
-
}).catch((error) => {
|
83
|
-
console.log(error)
|
84
|
-
user = null
|
85
|
-
})
|
86
|
-
|
87
|
-
}
|
88
|
-
|
89
|
-
// initialize the firestore client
|
90
|
-
const firestore = getFirestore()
|
91
|
-
|
92
|
-
// Create a root reference to firebase storage
|
93
|
-
const storage = getStorage()
|
94
|
-
|
95
|
-
// initialize the user with static information
|
96
|
-
const currentUser = ref({
|
97
|
-
id: lesli.current_user.id.toString(),
|
98
|
-
email: lesli.current_user.email,
|
99
|
-
roles: lesli.current_user.roles,
|
100
|
-
full_name: lesli.current_user.full_name,
|
101
|
-
locale: lesli.current_user.settings.find((setting) => setting.name === "locale")?.value || "en",
|
102
|
-
active: true,
|
103
|
-
implementation: lesli.implementation
|
104
|
-
})
|
105
|
-
|
106
|
-
|
107
|
-
// get the users docs and keep listening for any change
|
108
|
-
onSnapshot(query(
|
109
|
-
collection(firestore, "instances", lesli.implementation, "users"),
|
110
|
-
where(documentId(), "==", lesli.current_user.id.toString())
|
111
|
-
), querySnapshot => {
|
112
|
-
|
113
|
-
// here we expect to receive only one document due we want to work only with one user
|
114
|
-
let data = querySnapshot?.docs.at(0)?.data()
|
115
|
-
|
116
|
-
// if you need to add more information to the currentUser
|
117
|
-
// this is the place to add those custom properties
|
118
|
-
currentUser.value.locale = data?.locale || currentUser.locale
|
119
|
-
currentUser.value.full_name = data?.full_name || currentUser.full_name
|
120
|
-
|
121
|
-
})
|
122
|
-
|
123
|
-
|
124
|
-
// return the state of the app :)
|
125
|
-
return {
|
126
|
-
firebase: getApp(),
|
127
|
-
firestore: firestore,
|
128
|
-
storage: storage,
|
129
|
-
currentUser: currentUser,
|
130
|
-
implementation: lesli.implementation,
|
131
|
-
users: []
|
132
|
-
}
|
133
|
-
},
|
134
|
-
|
135
|
-
actions: {
|
136
|
-
|
137
|
-
/**
|
138
|
-
* Return a reference to a firestore collection
|
139
|
-
* @param {...any} collectionPath
|
140
|
-
* @returns firebase collection
|
141
|
-
* @example
|
142
|
-
* getCollection("users")
|
143
|
-
* getCollection("chatrooms")
|
144
|
-
* getCollection("chatrooms", chatroom.id, "message")
|
145
|
-
*/
|
146
|
-
getCollection(...collectionPath) {
|
147
|
-
return collection(this.firestore, "instances", this.implementation, ...collectionPath)
|
148
|
-
},
|
149
|
-
|
150
|
-
/**
|
151
|
-
* Return a reference to a firestore doc
|
152
|
-
* @param {...any} docPath
|
153
|
-
* @returns firebase doc
|
154
|
-
* @example
|
155
|
-
* getDoc("chatrooms", chatroom.id)
|
156
|
-
*/
|
157
|
-
getDoc(...docPath) {
|
158
|
-
return doc(this.firestore, "instances", this.implementation, ...docPath)
|
159
|
-
}
|
160
|
-
|
161
|
-
}
|
162
|
-
|
163
|
-
})
|
@@ -1,87 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
|
3
|
-
Lesli
|
4
|
-
|
5
|
-
Copyright (c) 2023, Lesli Technologies, S. A.
|
6
|
-
|
7
|
-
This program is free software: you can redistribute it and/or modify
|
8
|
-
it under the terms of the GNU General Public License as published by
|
9
|
-
the Free Software Foundation, either version 3 of the License, or
|
10
|
-
(at your option) any later version.
|
11
|
-
|
12
|
-
This program is distributed in the hope that it will be useful,
|
13
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
GNU General Public License for more details.
|
16
|
-
|
17
|
-
You should have received a copy of the GNU General Public License
|
18
|
-
along with this program. If not, see http://www.gnu.org/licenses/.
|
19
|
-
|
20
|
-
Lesli · Your Smart Business Assistant.
|
21
|
-
|
22
|
-
Made with ♥ by https://www.lesli.tech
|
23
|
-
Building a better future, one line of code at a time.
|
24
|
-
|
25
|
-
@contact hello@lesli.tech
|
26
|
-
@website https://lesli.tech
|
27
|
-
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
28
|
-
|
29
|
-
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
30
|
-
// ·
|
31
|
-
|
32
|
-
*/
|
33
|
-
|
34
|
-
|
35
|
-
// This store is used to manage the traslations
|
36
|
-
|
37
|
-
import { defineStore } from "pinia"
|
38
|
-
|
39
|
-
import { ref } from "vue"
|
40
|
-
|
41
|
-
|
42
|
-
import axios from "axios"
|
43
|
-
|
44
|
-
export const useServiceTranslator = defineStore("services.translator", () => {
|
45
|
-
|
46
|
-
const httpClient = axios.create({ baseURL: "https://www.googleapis.com" })
|
47
|
-
|
48
|
-
const loading = ref(false)
|
49
|
-
|
50
|
-
function getTranslation(message, source, target) {
|
51
|
-
|
52
|
-
if (!(message || source)) return
|
53
|
-
|
54
|
-
var translatedMessage = {
|
55
|
-
translatedText: message,
|
56
|
-
originalLang: target
|
57
|
-
}
|
58
|
-
|
59
|
-
if (source == target) {
|
60
|
-
return translatedMessage
|
61
|
-
}
|
62
|
-
|
63
|
-
return httpClient.get("/language/translate/v2", {
|
64
|
-
params: {
|
65
|
-
q: message,
|
66
|
-
target,
|
67
|
-
source,
|
68
|
-
key: lesli.providers.google_translate.api_key
|
69
|
-
},
|
70
|
-
headers: {
|
71
|
-
'Content-Type': 'application/json',
|
72
|
-
'Accept': 'application/json',
|
73
|
-
}
|
74
|
-
}).then((response) => {
|
75
|
-
translatedMessage.translatedText = response.data.data.translations[0].translatedText
|
76
|
-
return translatedMessage
|
77
|
-
}).catch((error) => {
|
78
|
-
console.error(error)
|
79
|
-
})
|
80
|
-
|
81
|
-
}
|
82
|
-
|
83
|
-
return {
|
84
|
-
loading,
|
85
|
-
getTranslation,
|
86
|
-
}
|
87
|
-
})
|
@@ -1,154 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
|
3
|
-
Lesli
|
4
|
-
|
5
|
-
Copyright (c) 2023, Lesli Technologies, S. A.
|
6
|
-
|
7
|
-
This program is free software: you can redistribute it and/or modify
|
8
|
-
it under the terms of the GNU General Public License as published by
|
9
|
-
the Free Software Foundation, either version 3 of the License, or
|
10
|
-
(at your option) any later version.
|
11
|
-
|
12
|
-
This program is distributed in the hope that it will be useful,
|
13
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
GNU General Public License for more details.
|
16
|
-
|
17
|
-
You should have received a copy of the GNU General Public License
|
18
|
-
along with this program. If not, see http://www.gnu.org/licenses/.
|
19
|
-
|
20
|
-
Lesli · Your Smart Business Assistant.
|
21
|
-
|
22
|
-
Made with ♥ by https://www.lesli.tech
|
23
|
-
Building a better future, one line of code at a time.
|
24
|
-
|
25
|
-
@contact hello@lesli.tech
|
26
|
-
@website https://lesli.tech
|
27
|
-
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
28
|
-
|
29
|
-
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
30
|
-
// ·
|
31
|
-
|
32
|
-
*/
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
// ·
|
37
|
-
import { defineStore } from "pinia"
|
38
|
-
import { reactive } from "vue"
|
39
|
-
|
40
|
-
|
41
|
-
// ·
|
42
|
-
export const useSearch = defineStore("search", {
|
43
|
-
state: () => {
|
44
|
-
return {
|
45
|
-
text: "",
|
46
|
-
timer: null,
|
47
|
-
loading: false,
|
48
|
-
showResults: false,
|
49
|
-
|
50
|
-
pagination: {},
|
51
|
-
columns: [],
|
52
|
-
records: []
|
53
|
-
}
|
54
|
-
},
|
55
|
-
actions: {
|
56
|
-
|
57
|
-
doSearch() {
|
58
|
-
|
59
|
-
if (this.text == "") {
|
60
|
-
this.showResults = false
|
61
|
-
return
|
62
|
-
}
|
63
|
-
|
64
|
-
this.loading = true
|
65
|
-
|
66
|
-
clearTimeout(this.timer)
|
67
|
-
|
68
|
-
this.timer = setTimeout(() => this.fetchSearch(), 800)
|
69
|
-
|
70
|
-
},
|
71
|
-
|
72
|
-
fetchSearch() {
|
73
|
-
this.loading = true
|
74
|
-
|
75
|
-
// filter german characteres and replace for strings
|
76
|
-
// that will be replaced in the highlight method
|
77
|
-
var wordsToHighlight = this.text.toLowerCase()
|
78
|
-
.split(/(\s+)/)
|
79
|
-
.filter( e => e.trim().length > 0)
|
80
|
-
.map(e => this.filterNonEnglishLetters(e))
|
81
|
-
|
82
|
-
// TODO: this url must be dynamically, according to the engine where we are searching
|
83
|
-
let url = this.url.dl("search").search(this.text)
|
84
|
-
|
85
|
-
// searching... :)
|
86
|
-
this.http.get(url).then(result => {
|
87
|
-
this.pagination = result.pagination
|
88
|
-
this.columns = result.columns
|
89
|
-
this.records = result.records.map(record => {
|
90
|
-
|
91
|
-
// iterate over every column in the search result
|
92
|
-
for(var key in record) {
|
93
|
-
|
94
|
-
// do not highlight the id column
|
95
|
-
if (key == 'id') continue;
|
96
|
-
|
97
|
-
// highlight the text in the search result if match with the text
|
98
|
-
// we want to search
|
99
|
-
record[key] = this.doHighlightText(record[key], wordsToHighlight)
|
100
|
-
}
|
101
|
-
|
102
|
-
return record
|
103
|
-
})
|
104
|
-
}).catch(error => {
|
105
|
-
console.log(error)
|
106
|
-
}).finally(() => {
|
107
|
-
this.loading = false
|
108
|
-
})
|
109
|
-
},
|
110
|
-
|
111
|
-
doHighlightText(textToHighlight, wordsToHighlight) {
|
112
|
-
|
113
|
-
if (!textToHighlight) return ;
|
114
|
-
|
115
|
-
// return same string if search tearm is not present
|
116
|
-
if (wordsToHighlight.length === 0) {
|
117
|
-
return text_to_highlight
|
118
|
-
}
|
119
|
-
|
120
|
-
// working with german characteres
|
121
|
-
let iQuery = new RegExp(`${wordsToHighlight.join('|')}`, 'ig');
|
122
|
-
|
123
|
-
textToHighlight = textToHighlight.toString()
|
124
|
-
// replace the matched strings in the results with the text search term
|
125
|
-
// with a tag, so we can highlight the matching results
|
126
|
-
.replace(iQuery, (matchedText, _a, _b)=>{
|
127
|
-
return `<span class="tag is-primary">${matchedText}</span>`
|
128
|
-
})
|
129
|
-
|
130
|
-
return textToHighlight
|
131
|
-
|
132
|
-
},
|
133
|
-
|
134
|
-
filterNonEnglishLetters(text) {
|
135
|
-
|
136
|
-
if (text.includes("ä")){
|
137
|
-
return text.replace("ä", "(ä|ae)")
|
138
|
-
} else if (text.includes("ae")){
|
139
|
-
return text.replace("ae", "(ä|ae)")
|
140
|
-
} else if (text.includes("ü")){
|
141
|
-
return text.replace("ü", "(ü|ue)")
|
142
|
-
}else if (text.includes("ue")){
|
143
|
-
return text.replace("ue", "(ü|ue)")
|
144
|
-
}else if (text.includes("ö")){
|
145
|
-
return text.replace("ö", "(ö|oe)")
|
146
|
-
}else if (text.includes("oe")){
|
147
|
-
return text.replace("oe", "(ö|oe)")
|
148
|
-
} else {
|
149
|
-
return text
|
150
|
-
}
|
151
|
-
|
152
|
-
}
|
153
|
-
}
|
154
|
-
})
|